diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile new file mode 100644 index 0000000000000..ed1755881278b --- /dev/null +++ b/.devcontainer/Dockerfile @@ -0,0 +1,41 @@ +FROM python:3.10-slim-bullseye as nsjail + +WORKDIR /nsjail + +RUN apt-get -y update \ + && apt-get install -y \ + bison \ + flex \ + g++ \ + gcc \ + git \ + libprotobuf-dev \ + libnl-route-3-dev \ + make \ + pkg-config \ + protobuf-compiler \ + && apt-get clean -y && rm -rf /var/lib/apt/lists/* + +RUN git clone -b master --single-branch https://github.com/google/nsjail.git . \ + && git checkout dccf911fd2659e7b08ce9507c25b2b38ec2c5800 +RUN make + +FROM mcr.microsoft.com/vscode/devcontainers/rust:bullseye as rust-deps + +RUN cargo install sqlx-cli --no-default-features --features native-tls,postgres +RUN cargo install deno --locked + +FROM mcr.microsoft.com/vscode/devcontainers/rust:bullseye + +RUN apt update \ + && apt-get install -y \ + python3 \ + libprotobuf-dev \ + libnl-route-3-dev \ + && apt-get clean -y && rm -rf /var/lib/apt/lists/* + +USER vscode + +COPY --from=rust-deps /usr/local/cargo/bin/sqlx /usr/local/cargo/bin/sqlx +COPY --from=rust-deps /usr/local/cargo/bin/deno /usr/local/cargo/bin/deno +COPY --from=nsjail /nsjail/nsjail /bin/nsjail diff --git a/.devcontainer/docker-compose.yml b/.devcontainer/docker-compose.yml new file mode 100644 index 0000000000000..4de33c741cefa --- /dev/null +++ b/.devcontainer/docker-compose.yml @@ -0,0 +1,25 @@ +version: '3.7' +services: + windmill: + build: + context: . + dockerfile: .devcontainer/Dockerfile + # image: mcr.microsoft.com/vscode/devcontainers/rust:bullseye + environment: + - DENO_PATH=/usr/local/cargo/bin/deno + - PYTHON_PATH=/usr/bin/python3 + - NSJAIL_PATH=/bin/nsjail + volumes: + - .:/workspace:cached + - ~/.ssh:/home/vscode/.ssh:ro + + command: /bin/sh -c "while sleep 1000; do :; done" + + + front: + image: mcr.microsoft.com/vscode/devcontainers/typescript-node:16 + volumes: + - .:/workspace:cached + - ~/.ssh:/home/node/.ssh:ro + + command: /bin/sh -c "while sleep 1000; do :; done" diff --git a/.env b/.env index b1eb8f52269a3..d4a48661cd927 100644 --- a/.env +++ b/.env @@ -1,3 +1,9 @@ -SITE_URL=localhost -DB_PASSWORD=changeme -POSTGRES_VERSION=13.3.0 +DATABASE_URL=postgres://postgres:changeme@db/windmill?sslmode=disable + +# For Enterprise Edition, use: +# WM_IMAGE=ghcr.io/windmill-labs/windmill-ee:main +WM_IMAGE=ghcr.io/windmill-labs/windmill:main + + +# To use another port than :80, setup the Caddyfile and the caddy section of the docker-compose to your needs: https://caddyserver.com/docs/getting-started +# To have caddy take care of automatic TLS diff --git a/.envrc b/.envrc new file mode 100644 index 0000000000000..1d953f4bd7359 --- /dev/null +++ b/.envrc @@ -0,0 +1 @@ +use nix diff --git a/.githooks/pre-commit b/.githooks/pre-commit new file mode 100755 index 0000000000000..eddad328dbdd5 --- /dev/null +++ b/.githooks/pre-commit @@ -0,0 +1,14 @@ +#!/bin/sh +# +# This file is symlinked to local .git/hooks/pre-commit by the setup-hooks.sh script +# It wil run before every commit, so it needs to be quick and efficient. If it returns +# a non-zero exit code, the commit will be aborted. + +echo "Running pre-commit hook" + +# This checks that there is no symlinks in the backend directory among the EE files +./backend/check_no_symlink.sh > /dev/null +if [ $? -ne 0 ]; then + echo "/!\ Symlinks detected in the backend directory. Please run './backend/substitute_ee_code.sh --revert' before committing." + exit 1 +fi diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS new file mode 100644 index 0000000000000..aba00bfed5fe1 --- /dev/null +++ b/.github/CODEOWNERS @@ -0,0 +1,4 @@ +* @rubenfiszel + +/community/ @fatonramadani @rubenfiszel +/frontend/ @fatonramadani @rubenfiszel diff --git a/.github/Dockerfile b/.github/Dockerfile index 951c5483cea2c..0ed3c73f433a5 100644 --- a/.github/Dockerfile +++ b/.github/Dockerfile @@ -1,7 +1,7 @@ FROM nikolaik/python-nodejs RUN npm install -g @apidevtools/swagger-cli -RUN pip install openapi-python-client +RUN pip install openapi-python-client==0.15.1 RUN pip install poetry diff --git a/.github/DockerfileBackendTests b/.github/DockerfileBackendTests new file mode 100644 index 0000000000000..9fa9d788ff628 --- /dev/null +++ b/.github/DockerfileBackendTests @@ -0,0 +1,67 @@ +ARG DEBIAN_IMAGE=debian:bookworm-slim +ARG RUST_IMAGE=rust:1.80-slim-bookworm +ARG PYTHON_IMAGE=python:3.11.4-slim-bookworm + +FROM ${DEBIAN_IMAGE} as downloader + +ARG TARGETPLATFORM + +SHELL ["/bin/bash", "-c"] + +RUN apt update -y +RUN apt install -y unzip curl + +RUN [ "$TARGETPLATFORM" == "linux/amd64" ] && curl -Lsf https://github.com/denoland/deno/releases/download/v1.46.3/deno-x86_64-unknown-linux-gnu.zip -o deno.zip || true +RUN [ "$TARGETPLATFORM" == "linux/arm64" ] && curl -Lsf https://github.com/denoland/deno/releases/download/v1.46.3/deno-aarch64-unknown-linux-gnu.zip -o deno.zip || true + + +RUN unzip deno.zip && rm deno.zip + + +FROM ${RUST_IMAGE} as builder + +RUN apt-get update && apt-get install -y git libssl-dev pkg-config + +RUN apt-get -y update \ + && apt-get install -y \ + curl + +ENV SQLX_OFFLINE=true + + +RUN mkdir -p /frontend/build +RUN apt-get update \ + && apt-get install -y ca-certificates tzdata libpq5 cmake\ + make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev \ + libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev libxml2-dev \ + libxmlsec1-dev libffi-dev liblzma-dev mecab-ipadic-utf8 libgdbm-dev libc6-dev git libprotobuf-dev libnl-route-3-dev \ + libv8-dev nodejs npm clang libclang-dev\ + && rm -rf /var/lib/apt/lists/* + + +RUN wget https://golang.org/dl/go1.21.5.linux-amd64.tar.gz && tar -C /usr/local -xzf go1.21.5.linux-amd64.tar.gz +ENV PATH="${PATH}:/usr/local/go/bin" +ENV GO_PATH=/usr/local/go/bin/go + +ENV TZ=Etc/UTC + +ENV PYTHON_VERSION 3.11.4 + +RUN wget https://www.python.org/ftp/python/${PYTHON_VERSION}/Python-${PYTHON_VERSION}.tgz \ + && tar -xf Python-${PYTHON_VERSION}.tgz && cd Python-${PYTHON_VERSION}/ && ./configure --enable-optimizations \ + && make -j 4 && make install + +RUN /usr/local/bin/python3 -m pip install pip-tools + +COPY --from=oven/bun:1.1.27 /usr/local/bin/bun /usr/bin/bun + + +RUN [ "$TARGETPLATFORM" == "linux/amd64" ] && curl -Lsf https://github.com/denoland/deno/releases/download/v1.41.0/deno-x86_64-unknown-linux-gnu.zip -o deno.zip || true +RUN [ "$TARGETPLATFORM" == "linux/arm64" ] && curl -Lsf https://github.com/denoland/deno/releases/download/v1.41.0/deno-aarch64-unknown-linux-gnu.zip -o deno.zip || true + +COPY --from=downloader --chmod=755 /deno /usr/bin/deno + +RUN apt-get update \ + && apt-get install -y postgresql-client --allow-unauthenticated + +RUN rustup component add rustfmt \ No newline at end of file diff --git a/.github/DockerfilePypiBuilder b/.github/DockerfilePypiBuilder new file mode 100644 index 0000000000000..11924f7d973fc --- /dev/null +++ b/.github/DockerfilePypiBuilder @@ -0,0 +1,7 @@ +FROM nikolaik/python-nodejs:python3.11-nodejs19 + +RUN python3 -m pip install pipx poetry +RUN python3 -m pipx ensurepath +ENV PATH="/root/.local/bin:${PATH}" +ENV PATH="/usr/local/bin:${PATH}" +RUN pipx install openapi-python-client==0.15.1 --include-deps \ No newline at end of file diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 0000000000000..99c606b44b3a7 --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1,3 @@ +# These are supported funding model platforms + +github: [rubenfiszel] diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md deleted file mode 100644 index dd84ea7824f11..0000000000000 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ /dev/null @@ -1,38 +0,0 @@ ---- -name: Bug report -about: Create a report to help us improve -title: '' -labels: '' -assignees: '' - ---- - -**Describe the bug** -A clear and concise description of what the bug is. - -**To Reproduce** -Steps to reproduce the behavior: -1. Go to '...' -2. Click on '....' -3. Scroll down to '....' -4. See error - -**Expected behavior** -A clear and concise description of what you expected to happen. - -**Screenshots** -If applicable, add screenshots to help explain your problem. - -**Desktop (please complete the following information):** - - OS: [e.g. iOS] - - Browser [e.g. chrome, safari] - - Version [e.g. 22] - -**Smartphone (please complete the following information):** - - Device: [e.g. iPhone6] - - OS: [e.g. iOS8.1] - - Browser [e.g. stock browser, safari] - - Version [e.g. 22] - -**Additional context** -Add any other context about the problem here. diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml new file mode 100644 index 0000000000000..160e6d4fbbae3 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -0,0 +1,62 @@ +name: Bug report +description: Create a report to help us improve. +title: 'bug:' +labels: 'bug' +assignees: 'rubenfiszel' +body: + - type: textarea + id: description + attributes: + label: Describe the bug + description: A clear and concise description of what the bug is. + validations: + required: true + - type: textarea + id: reproduction-steps + attributes: + label: To reproduce + description: Steps to reproduce the behavior + value: | + 1. Go to '...' + 2. Click on '....' + 3. Scroll down to '....' + 4. See error + validations: + required: true + - type: textarea + id: expected-behaviour + attributes: + label: Expected behavior + placeholder: A clear and concise description of what you expected to happen. + validations: + required: true + - type: textarea + id: screenshots + attributes: + label: Screenshots + placeholder: If applicable, add screenshots to help explain your problem. + validations: + required: false + - type: input + id: browser + attributes: + label: Browser information + description: Which browser are you using? Which version? + placeholder: e.g. Chromium Version 92.0.4515.131 + validations: + required: false + - type: input + id: version + attributes: + label: Application version + description: 'Go on the left menu -> -> User Settings and copy the printed version in "Running windmill version (backend): XXX".' + placeholder: e.g. windmill version (backend) v1.35.0-63-ga85302c + validations: + required: false + - type: textarea + id: additional-context + attributes: + label: Additional Context + description: Add any other context about the problem here. + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 0000000000000..d223df77d953e --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,8 @@ +--- +name: Feature Request +about: Create a feature request +title: 'feature: ' +labels: 'feature' +assignees: 'rubenfiszel' + +--- diff --git a/.github/change-versions-mac.sh b/.github/change-versions-mac.sh new file mode 100755 index 0000000000000..2257d348ae9f6 --- /dev/null +++ b/.github/change-versions-mac.sh @@ -0,0 +1,26 @@ +#!/bin/bash +set -euo pipefail +script_dirpath="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +root_dirpath="$(cd "${script_dirpath}/.." && pwd)" + +VERSION=$1 +echo "Updating versions to: $VERSION" + +sed -i '' -e "/^version =/s/= .*/= \"$VERSION\"/" ${root_dirpath}/backend/Cargo.toml +sed -i '' -e "/^export const VERSION =/s/= .*/= \"v$VERSION\";/" ${root_dirpath}/cli/main.ts +sed -i '' -e "/^export const VERSION =/s/= .*/= \"v$VERSION\";/" ${root_dirpath}/benchmarks/lib.ts +sed -i '' -e "/version: /s/: .*/: $VERSION/" ${root_dirpath}/backend/windmill-api/openapi.yaml +sed -i '' -e "/version: /s/: .*/: $VERSION/" ${root_dirpath}/openflow.openapi.yaml +sed -i '' -e "/\"version\": /s/: .*,/: \"$VERSION\",/" ${root_dirpath}/typescript-client/package.json +sed -i '' -e "/\"version\": /s/: .*,/: \"$VERSION\",/" ${root_dirpath}/frontend/package.json +sed -i '' -e "/^version =/s/= .*/= \"$VERSION\"/" ${root_dirpath}/python-client/wmill/pyproject.toml +sed -i '' -e "/^windmill-api =/s/= .*/= \"\\^$VERSION\"/" ${root_dirpath}/python-client/wmill/pyproject.toml +sed -i '' -e "/^version =/s/= .*/= \"$VERSION\"/" ${root_dirpath}/python-client/wmill_pg/pyproject.toml +sed -i '' -e "/^ModuleVersion =/s/= .*/= '$VERSION'/" ${root_dirpath}/powershell-client/WindmillClient/WindmillClient.psd1 +# sed -i '' -e "/^wmill =/s/= .*/= \"\\^$VERSION\"/" python-client/wmill_pg/pyproject.toml +sed -i '' -e "/^wmill =/s/= .*/= \">=$VERSION\"/" ${root_dirpath}/lsp/Pipfile +sed -i '' -e "/^wmill_pg =/s/= .*/= \">=$VERSION\"/" ${root_dirpath}/lsp/Pipfile + +sed -i '' -E "s/name = \"windmill\"\nversion = \"[^\"]*\"\\n(.*)/name = \"windmill\"\nversion = \"$VERSION\"\\n\\1/" ${root_dirpath}/backend/Cargo.lock + +cd ${root_dirpath}/frontend && npm i --package-lock-only diff --git a/.github/change-versions.sh b/.github/change-versions.sh index 1274107970d6c..77ecbc6985fc2 100755 --- a/.github/change-versions.sh +++ b/.github/change-versions.sh @@ -1,16 +1,27 @@ #!/bin/bash +set -euo pipefail +script_dirpath="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +root_dirpath="$(cd "${script_dirpath}/.." && pwd)" VERSION=$1 echo "Updating versions to: $VERSION" -sed -i -e "/^version =/s/= .*/= \"$VERSION\"/" backend/Cargo.toml -sed -i -e "/version: /s/: .*/: $VERSION/" backend/openapi.yaml -sed -i -e "/\"version\": /s/: .*,/: \"$VERSION\",/" frontend/package.json -sed -i -e "/^version =/s/= .*/= \"$VERSION\"/" python-client/wmill/pyproject.toml -sed -i -e "/^windmill-api =/s/= .*/= \"\\^$VERSION\"/" python-client/wmill/pyproject.toml -sed -i -e "/^version =/s/= .*/= \"$VERSION\"/" python-client/wmill_pg/pyproject.toml -sed -i -e "/^wmill =/s/= .*/= \"\\^$VERSION\"/" python-client/wmill_pg/pyproject.toml -sed -i -e "/^wmill =/s/= .*/= \">=$VERSION\"/" Pipfile -sed -i -e "/^wmill_pg =/s/= .*/= \">=$VERSION\"/" Pipfile +sed -i -e "/^version =/s/= .*/= \"$VERSION\"/" ${root_dirpath}/backend/Cargo.toml +sed -i -e "/^export const VERSION =/s/= .*/= \"$VERSION\";/" ${root_dirpath}/cli/main.ts +sed -i -e "/^export const VERSION =/s/= .*/= \"v$VERSION\";/" ${root_dirpath}/benchmarks/lib.ts +sed -i -e "/version: /s/: .*/: $VERSION/" ${root_dirpath}/backend/windmill-api/openapi.yaml +sed -i -e "/version: /s/: .*/: $VERSION/" ${root_dirpath}/openflow.openapi.yaml +sed -i -e "/\"version\": /s/: .*,/: \"$VERSION\",/" ${root_dirpath}/typescript-client/package.json +sed -i -e "/\"version\": /s/: .*,/: \"$VERSION\",/" ${root_dirpath}/typescript-client/jsr.json +sed -i -e "/\"version\": /s/: .*,/: \"$VERSION\",/" ${root_dirpath}/frontend/package.json +sed -i -e "/^version =/s/= .*/= \"$VERSION\"/" ${root_dirpath}/python-client/wmill/pyproject.toml +sed -i -e "/^windmill-api =/s/= .*/= \"\\^$VERSION\"/" ${root_dirpath}/python-client/wmill/pyproject.toml +sed -i -e "/^version =/s/= .*/= \"$VERSION\"/" ${root_dirpath}/python-client/wmill_pg/pyproject.toml +sed -i -e "/^ModuleVersion =/s/= .*/= '$VERSION'/" ${root_dirpath}/powershell-client/WindmillClient/WindmillClient.psd1 +# sed -i -e "/^wmill =/s/= .*/= \"\\^$VERSION\"/" ${root_dirpath}/python-client/wmill_pg/pyproject.toml +sed -i -e "/^wmill =/s/= .*/= \">=$VERSION\"/" ${root_dirpath}/lsp/Pipfile +sed -i -e "/^wmill_pg =/s/= .*/= \">=$VERSION\"/" ${root_dirpath}/lsp/Pipfile -sed -i -zE "s/name = \"windmill\"\nversion = \"[^\"]*\"\\n(.*)/name = \"windmill\"\nversion = \"$VERSION\"\\n\\1/" backend/Cargo.lock +sed -i -zE "s/name = \"windmill\"\nversion = \"[^\"]*\"\\n(.*)/name = \"windmill\"\nversion = \"$VERSION\"\\n\\1/" ${root_dirpath}/backend/Cargo.lock + +cd ${root_dirpath}/frontend && npm i --package-lock-only diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000000000..9559a252a4ddc --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,39 @@ +# Basic set up for three package managers + +version: 2 +updates: + # Maintain dependencies for GitHub Actions + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "weekly" + + # Maintain dependencies for npm + - package-ecosystem: "npm" + directory: "/frontend" + schedule: + interval: "weekly" + + # Maintain dependencies for cargo + - package-ecosystem: "cargo" + directory: "/backend" + schedule: + interval: "weekly" + + # Maintain dependencies for Docker + - package-ecosystem: "docker" + directory: "/" + schedule: + interval: "weekly" + + # Maintain dependencies for wmill python client + - package-ecosystem: "pip" + directory: "/python-client/wmill" + schedule: + interval: "weekly" + + # Maintain dependencies for wmill_pg python client + - package-ecosystem: "pip" + directory: "/python-client/wmill_pg" + schedule: + interval: "weekly" diff --git a/.github/pull_hub_items.sh b/.github/pull_hub_items.sh new file mode 100755 index 0000000000000..af77f4c794e2b --- /dev/null +++ b/.github/pull_hub_items.sh @@ -0,0 +1,14 @@ +#!/bin/bash + +RT=$(curl -s https://hub.windmill.dev/resource_types/list | jq -c -r '.[]') +for item in ${RT[@]}; do + name=$(jq -r '.name' <<< "$item") + id=$(jq -r '.id' <<< "$item") + echo $name $id + body=$(curl -s -H "accept: application/json" https://hub.windmill.dev/resource_types/${id}/${name}) + jq -r '.resource_type.schema' <<< "$body" > ./tmp + description=$(jq -r '.resource_type.description' <<< "$body") + description=$(echo -E $description) + echo "{\"workspace_id\": \"admins\", \"name\": \"$name\", \"schema\": $(cat ./tmp), \"description\": \"$description\"} " | jq . > community/resource_types/${name}.json + rm ./tmp +done diff --git a/.github/workflows/automerge-dependabot.yml.archived b/.github/workflows/automerge-dependabot.yml.archived new file mode 100644 index 0000000000000..605243d0046d4 --- /dev/null +++ b/.github/workflows/automerge-dependabot.yml.archived @@ -0,0 +1,26 @@ +# name: dependabot auto-merge + +# on: pull_request_target + +# permissions: +# contents: read +# pull-requests: read + +# jobs: +# dependabot: +# runs-on: ubuntu-latest +# if: ${{ github.actor == 'dependabot[bot]' }} +# steps: +# - name: Dependabot metadata +# id: metadata +# uses: dependabot/fetch-metadata@v1.6.0 +# with: +# github-token: "${{ secrets.GITHUB_TOKEN }}" +# - name: Enable auto-merge for Dependabot PRs +# if: steps.metadata.outputs.update-type == 'version-update:semver-patch' || steps.metadata.outputs.update-type == 'version-update:semver-minor' +# run: | +# echo ${{ secrets.RUBEN_PAT }} | gh auth login --with-token +# gh pr review --approve "$PR_URL" +# gh pr merge --auto --squash "$PR_URL" +# env: +# PR_URL: ${{github.event.pull_request.html_url}} diff --git a/.github/workflows/backend-test.yml b/.github/workflows/backend-test.yml new file mode 100644 index 0000000000000..9963ecd4d14b1 --- /dev/null +++ b/.github/workflows/backend-test.yml @@ -0,0 +1,48 @@ +name: Backend only integration tests + +on: + push: + branches: + - "main" + paths: + - "backend/**" + - ".github/workflows/backend-test.yml" + pull_request: + types: [opened, synchronize, reopened] + paths: + - "backend/**" + - ".github/workflows/backend-test.yml" + +jobs: + cargo_test: + runs-on: ubicloud-standard-8 + container: + image: ghcr.io/windmill-labs/backend-tests + services: + postgres: + image: postgres + env: + POSTGRES_DB: windmill + POSTGRES_PASSWORD: changeme + + options: >- + --health-cmd pg_isready --health-interval 10s --health-timeout 5s + --health-retries 5 + steps: + - uses: actions/checkout@v4 + - uses: actions-rust-lang/setup-rust-toolchain@v1 + with: + toolchain: 1.80.0 + # - uses: Swatinem/rust-cache@v2 + # with: + # workspaces: | + # backend + # backend -> target + - name: cargo test + timeout-minutes: 15 + run: + mkdir frontend/build && cd backend && touch + windmill-api/openapi-deref.yaml && + DATABASE_URL=postgres://postgres:changeme@postgres:5432/windmill + DISABLE_EMBEDDING=true RUST_LOG=info cargo test --features enterprise + --all -- --nocapture diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmark.yml new file mode 100644 index 0000000000000..efaaba1506df8 --- /dev/null +++ b/.github/workflows/benchmark.yml @@ -0,0 +1,315 @@ +name: Run benchmarks + +on: + schedule: + - cron: "0 0 */1 * *" + workflow_dispatch: + +jobs: + benchmark_single: + runs-on: ubicloud-standard-8 + services: + postgres: + image: postgres + env: + POSTGRES_DB: windmill + POSTGRES_PASSWORD: changeme + options: >- + --health-cmd pg_isready --health-interval 10s --health-timeout 5s + --health-retries 5 + windmill: + image: ghcr.io/windmill-labs/windmill-ee:main + env: + DATABASE_URL: postgres://postgres:changeme@postgres:5432/windmill + LICENSE_KEY: ${{ secrets.WM_LICENSE_KEY_CI }} + WORKER_GROUP: main + WORKER_TAGS: deno,bun,go,python3,bash,dependency,flow,nativets + options: >- + --pull always --health-interval 10s --health-timeout 5s + --health-retries 5 --health-cmd "curl + http://localhost:8000/api/version" + ports: + - 8000:8000 + steps: + - uses: denoland/setup-deno@v1 + with: + deno-version: v1.x + - name: benchmark + timeout-minutes: 20 + run: deno run --unstable -A -r + https://raw.githubusercontent.com/windmill-labs/windmill/${GITHUB_REF##ref/head/}/benchmarks/benchmark_suite.ts + -c + https://raw.githubusercontent.com/windmill-labs/windmill/${GITHUB_REF##ref/head/}/benchmarks/suite_config.json + - name: Save benchmark results + uses: actions/upload-artifact@v4 + with: + name: benchmark_single + path: | + *.json + + benchmark_dedicated: + runs-on: ubicloud-standard-8 + services: + postgres: + image: postgres + env: + POSTGRES_DB: windmill + POSTGRES_PASSWORD: changeme + options: >- + --health-cmd pg_isready --health-interval 10s --health-timeout 5s + --health-retries 5 + windmill: + image: ghcr.io/windmill-labs/windmill-ee:main + env: + DATABASE_URL: postgres://postgres:changeme@postgres:5432/windmill + LICENSE_KEY: ${{ secrets.WM_LICENSE_KEY_CI }} + WORKER_GROUP: dedicated + DEDICATED_WORKER: "admins:f/benchmarks/dedicated" + options: >- + --pull always --restart unless-stopped --health-interval 10s --health-timeout 5s + --health-retries 5 --health-cmd "curl + http://localhost:8000/api/version" + ports: + - 8000:8000 + steps: + - uses: denoland/setup-deno@v1 + with: + deno-version: v1.x + - name: benchmark + timeout-minutes: 20 + run: deno run --unstable -A -r + https://raw.githubusercontent.com/windmill-labs/windmill/${GITHUB_REF##ref/head/}/benchmarks/benchmark_suite.ts + --no-warm-up -c + https://raw.githubusercontent.com/windmill-labs/windmill/${GITHUB_REF##ref/head/}/benchmarks/suite_dedicated.json + - name: Save benchmark results + uses: actions/upload-artifact@v4 + with: + name: benchmark_dedicated + path: | + *.json + + benchmark_4workers: + runs-on: ubicloud-standard-8 + services: + postgres: + image: postgres + env: + POSTGRES_DB: windmill + POSTGRES_PASSWORD: changeme + options: >- + --health-cmd pg_isready --health-interval 10s --health-timeout 5s + --health-retries 5 + windmill: + image: ghcr.io/windmill-labs/windmill-ee:main + env: + DATABASE_URL: postgres://postgres:changeme@postgres:5432/windmill + LICENSE_KEY: ${{ secrets.WM_LICENSE_KEY_CI }} + WORKER_GROUP: main + WORKER_TAGS: deno,bun,go,python3,bash,dependency,flow,nativets + options: >- + --pull always --health-interval 10s --health-timeout 5s + --health-retries 5 --health-cmd "curl + http://localhost:8000/api/version" + ports: + - 8000:8000 + windmill_1: + image: ghcr.io/windmill-labs/windmill-ee:main + env: + DATABASE_URL: postgres://postgres:changeme@postgres:5432/windmill + LICENSE_KEY: ${{ secrets.WM_LICENSE_KEY_CI }} + MODE: worker + WORKER_GROUP: main + WORKER_TAGS: deno,bun,go,python3,bash,dependency,flow,nativets + options: >- + --pull always + + windmill_2: + image: ghcr.io/windmill-labs/windmill-ee:main + env: + DATABASE_URL: postgres://postgres:changeme@postgres:5432/windmill + LICENSE_KEY: ${{ secrets.WM_LICENSE_KEY_CI }} + MODE: worker + WORKER_GROUP: main + WORKER_TAGS: deno,bun,go,python3,bash,dependency,flow,nativets + options: >- + --pull always + + windmill_3: + image: ghcr.io/windmill-labs/windmill-ee:main + env: + DATABASE_URL: postgres://postgres:changeme@postgres:5432/windmill + LICENSE_KEY: ${{ secrets.WM_LICENSE_KEY_CI }} + MODE: worker + WORKER_GROUP: main + WORKER_TAGS: deno,bun,go,python3,bash,dependency,flow,nativets + options: >- + --pull always + + steps: + - uses: denoland/setup-deno@v1 + with: + deno-version: v1.x + - name: benchmark + timeout-minutes: 20 + run: deno run --unstable -A -r + https://raw.githubusercontent.com/windmill-labs/windmill/${GITHUB_REF##ref/head/}/benchmarks/benchmark_suite.ts + -c + https://raw.githubusercontent.com/windmill-labs/windmill/${GITHUB_REF##ref/head/}/benchmarks/suite_config.json + --workers 4 + - name: Save benchmark results + uses: actions/upload-artifact@v4 + with: + name: benchmark_4workers + path: | + *.json + + benchmark_8workers: + runs-on: ubicloud-standard-8 + services: + postgres: + image: postgres + env: + POSTGRES_DB: windmill + POSTGRES_PASSWORD: changeme + options: >- + --health-cmd pg_isready --health-interval 10s --health-timeout 5s + --health-retries 5 + windmill: + image: ghcr.io/windmill-labs/windmill-ee:main + env: + DATABASE_URL: postgres://postgres:changeme@postgres:5432/windmill + LICENSE_KEY: ${{ secrets.WM_LICENSE_KEY_CI }} + WORKER_GROUP: main + WORKER_TAGS: deno,bun,go,python3,bash,dependency,flow,nativets + options: >- + --pull always --health-interval 10s --health-timeout 5s + --health-retries 5 --health-cmd "curl + http://localhost:8000/api/version" + ports: + - 8000:8000 + windmill_1: + image: ghcr.io/windmill-labs/windmill-ee:main + env: + DATABASE_URL: postgres://postgres:changeme@postgres:5432/windmill + LICENSE_KEY: ${{ secrets.WM_LICENSE_KEY_CI }} + MODE: worker + WORKER_GROUP: main + WORKER_TAGS: deno,bun,go,python3,bash,dependency,flow,nativets + options: >- + --pull always + + windmill_2: + image: ghcr.io/windmill-labs/windmill-ee:main + env: + DATABASE_URL: postgres://postgres:changeme@postgres:5432/windmill + LICENSE_KEY: ${{ secrets.WM_LICENSE_KEY_CI }} + MODE: worker + WORKER_GROUP: main + WORKER_TAGS: deno,bun,go,python3,bash,dependency,flow,nativets + options: >- + --pull always + + windmill_3: + image: ghcr.io/windmill-labs/windmill-ee:main + env: + DATABASE_URL: postgres://postgres:changeme@postgres:5432/windmill + LICENSE_KEY: ${{ secrets.WM_LICENSE_KEY_CI }} + MODE: worker + WORKER_GROUP: main + WORKER_TAGS: deno,bun,go,python3,bash,dependency,flow,nativets + options: >- + --pull always + + windmill_4: + image: ghcr.io/windmill-labs/windmill-ee:main + env: + DATABASE_URL: postgres://postgres:changeme@postgres:5432/windmill + LICENSE_KEY: ${{ secrets.WM_LICENSE_KEY_CI }} + MODE: worker + WORKER_GROUP: main + WORKER_TAGS: deno,bun,go,python3,bash,dependency,flow,nativets + options: >- + --pull always + + windmill_5: + image: ghcr.io/windmill-labs/windmill-ee:main + env: + DATABASE_URL: postgres://postgres:changeme@postgres:5432/windmill + LICENSE_KEY: ${{ secrets.WM_LICENSE_KEY_CI }} + MODE: worker + WORKER_GROUP: main + WORKER_TAGS: deno,bun,go,python3,bash,dependency,flow,nativets + options: >- + --pull always + + windmill_6: + image: ghcr.io/windmill-labs/windmill-ee:main + env: + DATABASE_URL: postgres://postgres:changeme@postgres:5432/windmill + LICENSE_KEY: ${{ secrets.WM_LICENSE_KEY_CI }} + MODE: worker + WORKER_GROUP: main + WORKER_TAGS: deno,bun,go,python3,bash,dependency,flow,nativets + options: >- + --pull always + + windmill_7: + image: ghcr.io/windmill-labs/windmill-ee:main + env: + DATABASE_URL: postgres://postgres:changeme@postgres:5432/windmill + LICENSE_KEY: ${{ secrets.WM_LICENSE_KEY_CI }} + MODE: worker + WORKER_GROUP: main + WORKER_TAGS: deno,bun,go,python3,bash,dependency,flow,nativets + options: >- + --pull always + steps: + - uses: denoland/setup-deno@v1 + with: + deno-version: v1.x + - name: benchmark + timeout-minutes: 20 + run: deno run --unstable -A -r + https://raw.githubusercontent.com/windmill-labs/windmill/${GITHUB_REF##ref/head/}/benchmarks/benchmark_suite.ts + -c + https://raw.githubusercontent.com/windmill-labs/windmill/${GITHUB_REF##ref/head/}/benchmarks/suite_config.json + --workers 8 + - name: Save benchmark results + uses: actions/upload-artifact@v4 + with: + name: benchmark_8workers + path: | + *.json + + benchmark_graphs: + runs-on: ubicloud + needs: + - benchmark_single + - benchmark_dedicated + - benchmark_4workers + - benchmark_8workers + steps: + - uses: denoland/setup-deno@v1 + with: + deno-version: v1.x + - uses: actions/checkout@v4 + with: + ref: benchmarks + - name: Download benchmark results + uses: actions/download-artifact@v4 + with: + merge-multiple: true + - name: graphs + run: deno run --unstable -A -r + https://raw.githubusercontent.com/windmill-labs/windmill/${GITHUB_REF##ref/head/}/benchmarks/benchmark_graphs.ts + -c + https://raw.githubusercontent.com/windmill-labs/windmill/${GITHUB_REF##ref/head/}/benchmarks/graphs_config.json + - name: Push changes + run: | + ls -la + pwd + git add . + git config --local user.email "41898282+github-actions[bot]@users.noreply.github.com" + git config --local user.name "github-actions[bot]" + git commit -m "Update benchmarks" + git push diff --git a/.github/workflows/build-caddy-l4-image.yml b/.github/workflows/build-caddy-l4-image.yml new file mode 100644 index 0000000000000..cafa9f8e47220 --- /dev/null +++ b/.github/workflows/build-caddy-l4-image.yml @@ -0,0 +1,45 @@ +env: + REGISTRY: ghcr.io + IMAGE_NAME: ${{ github.repository_owner }}/caddy-l4 + +name: Build caddy-l4 +on: + workflow_dispatch: + +permissions: write-all + +jobs: + build_ee: + runs-on: ubicloud + steps: + - uses: actions/checkout@v4 + - uses: depot/setup-action@v1 + - name: Docker meta + id: meta-ee-public + uses: docker/metadata-action@v5 + with: + images: | + ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + tags: | + type=sha + type=ref,event=branch + type=raw,value=latest,enable={{is_default_branch}} + + - name: Login to registry + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Build and push publicly + uses: depot/build-push-action@v1 + with: + context: ./docker + file: ./docker/DockerfileCaddyL4 + platforms: linux/amd64,linux/arm64 + push: true + tags: | + ${{ steps.meta-ee-public.outputs.tags }} + labels: | + ${{ steps.meta-ee-public.outputs.labels }} diff --git a/.github/workflows/build-staging-image.yml b/.github/workflows/build-staging-image.yml new file mode 100644 index 0000000000000..744ae83aaebf2 --- /dev/null +++ b/.github/workflows/build-staging-image.yml @@ -0,0 +1,70 @@ +env: + REGISTRY: ghcr.io + IMAGE_NAME: ${{ github.repository }} + +name: Build windmill-staging +on: + workflow_dispatch: + +permissions: write-all + +jobs: + build_ee: + runs-on: ubicloud + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Read EE repo commit hash + run: | + echo "ee_repo_ref=$(cat ./backend/ee-repo-ref.txt)" >> "$GITHUB_ENV" + + - uses: actions/checkout@v4 + with: + repository: windmill-labs/windmill-ee-private + path: ./windmill-ee-private + ref: ${{ env.ee_repo_ref }} + token: ${{ secrets.WINDMILL_EE_PRIVATE_ACCESS }} + fetch-depth: 0 + + # - name: Set up Docker Buildx + # uses: docker/setup-buildx-action@v2 + - uses: depot/setup-action@v1 + + - name: Docker meta + id: meta-ee-public + uses: docker/metadata-action@v5 + with: + images: | + ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}-staging-ee + flavor: | + latest=false + tags: | + type=sha + type=ref,event=branch + + - name: Login to registry + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Substitute EE code + run: | + ./backend/substitute_ee_code.sh --copy --dir ./windmill-ee-private + + - name: Build and push publicly ee + uses: depot/build-push-action@v1 + with: + context: . + platforms: linux/amd64,linux/arm64 + push: true + build-args: | + features=enterprise,enterprise_saml,stripe,embedding,parquet,prometheus,openidconnect,cloud,jemalloc + tags: | + ${{ steps.meta-ee-public.outputs.tags }} + labels: | + ${{ steps.meta-ee-public.outputs.labels }} + org.opencontainers.image.licenses=Windmill-Enterprise-License diff --git a/.github/workflows/build_cli_image.yml b/.github/workflows/build_cli_image.yml new file mode 100644 index 0000000000000..5b71a786aa343 --- /dev/null +++ b/.github/workflows/build_cli_image.yml @@ -0,0 +1,55 @@ +env: + REGISTRY: ghcr.io + IMAGE_NAME: ${{ github.repository }}-cli + +name: Publish cli image +on: + push: + tags: + - "v*" + workflow_dispatch: + +permissions: + contents: read + id-token: write + packages: write + +jobs: + publish_cli: + runs-on: ubicloud + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + - uses: depot/setup-action@v1 + - name: Docker meta + id: meta + uses: docker/metadata-action@v5 + with: + images: | + ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + tags: | + type=ref,event=branch + type=ref,event=pr + type=semver,pattern={{version}} + type=semver,pattern={{major}}.{{minor}} + + - name: Login to registry + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Build and push publicly + uses: depot/build-push-action@v1 + with: + file: "./docker/DockerfileCli" + platforms: linux/amd64,linux/arm64 + push: true + tags: | + ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest + ${{ steps.meta.outputs.tags }} + labels: | + ${{ steps.meta.outputs.labels }} + org.opencontainers.image.licenses=AGPLv3 diff --git a/.github/workflows/build_ws.yml b/.github/workflows/build_ws.yml new file mode 100644 index 0000000000000..cccab8bea0460 --- /dev/null +++ b/.github/workflows/build_ws.yml @@ -0,0 +1,54 @@ +env: + REGISTRY: ghcr.io + ECR_REGISTRY: 976079455550.dkr.ecr.us-east-1.amazonaws.com + IMAGE_NAME: ${{ github.repository }}-multiplayer + +name: Publish websocket multiplayer server +on: + workflow_dispatch: + +permissions: + contents: read + id-token: write + packages: write + +jobs: + publish_multiplayer: + runs-on: ubicloud-standard-8 + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + - uses: depot/setup-action@v1 + - name: Docker meta + id: meta + uses: docker/metadata-action@v5 + with: + images: | + ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + tags: | + type=ref,event=branch + type=ref,event=pr + type=semver,pattern={{version}} + type=semver,pattern={{major}}.{{minor}} + + - name: Login to registry + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Build and push publicly + uses: depot/build-push-action@v1 + with: + context: . + file: ./docker/DockerfileMultiplayer + platforms: linux/amd64,linux/arm64 + push: true + tags: | + ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest + ${{ steps.meta.outputs.tags }} + labels: | + ${{ steps.meta.outputs.labels }} + org.opencontainers.image.licenses=AGPLv3 diff --git a/.github/workflows/change-versions.yml b/.github/workflows/change-versions.yml index c9754af84f899..846eaa9658112 100644 --- a/.github/workflows/change-versions.yml +++ b/.github/workflows/change-versions.yml @@ -6,9 +6,18 @@ on: - "version.txt" jobs: change_version: - runs-on: ubuntu-latest + runs-on: ubicloud + container: node:18 steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 + - run: git config --system --add safe.directory /__w/windmill/windmill - name: Change versions run: ./.github/change-versions.sh "$(cat version.txt)" + - uses: actions-rs/toolchain@v1 + with: + toolchain: stable + - name: update lockfile + run: | + cd backend + cargo generate-lockfile - uses: stefanzweifel/git-auto-commit-action@v4 diff --git a/.github/workflows/clean-docker.yml b/.github/workflows/clean-docker.yml deleted file mode 100644 index e1120b3aa1597..0000000000000 --- a/.github/workflows/clean-docker.yml +++ /dev/null @@ -1,13 +0,0 @@ -name: Clean docker -on: - schedule: - # * is a special character in YAML so you have to quote this string - - cron: "0 0 */2 * *" - -jobs: - build: - runs-on: [self-hosted, new] - steps: - - name: clean docker - run: | - sudo docker system prune -f diff --git a/.github/workflows/deno_on_release.yml b/.github/workflows/deno_on_release.yml new file mode 100644 index 0000000000000..61f3c3d7e6403 --- /dev/null +++ b/.github/workflows/deno_on_release.yml @@ -0,0 +1,48 @@ +name: Publish deno-client +on: + push: + tags: + - "v*" +env: + repo: windmill-deno-client + +jobs: + build_deno_and_push_to_repo: + runs-on: ubicloud + steps: + - uses: actions/checkout@v4 + - name: generate_deno + run: | + cd deno-client + rm .gitignore + ./build.sh + - name: Pushes to another repository + id: push_directory + uses: cpina/github-action-push-to-another-repository@devel + env: + API_TOKEN_GITHUB: ${{ secrets.DENO_PAT }} + with: + source-directory: deno-client/ + destination-github-username: ${{ github.repository_owner }} + destination-repository-name: ${{ env.repo }} + user-email: ruben@windmill.dev + commit-message: See ORIGIN_COMMIT from $GITHUB_REF + target-branch: main + + tag_repo: + needs: [build_deno_and_push_to_repo] + runs-on: ubicloud + steps: + - uses: actions/checkout@v4 + with: + repository: ${{ github.repository_owner }}/${{ env.repo }} + token: ${{ secrets.DENO_PAT }} + path: ./client + + - name: Push client + run: | + cd ./client + git config --global user.email "ruben@windmill.dev" + git config --global user.name "rubenfiszel[bot]" + git tag -a ${{ github.ref_name }} -m "${{ github.ref_name }}" + git push --tags diff --git a/.github/workflows/deploy_to_windmill.yml b/.github/workflows/deploy_to_windmill.yml deleted file mode 100644 index 215986d64ef96..0000000000000 --- a/.github/workflows/deploy_to_windmill.yml +++ /dev/null @@ -1,18 +0,0 @@ -name: Deploy to windmill.dev - -on: - push: - branches: [main] - -jobs: - deploy: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - name: Deploy to windmill.dev - uses: windmill-labs/windmill-gh-action-deploy@v1.0.0 - with: - dry_run: false - input_dir: community - windmill_workspace: starter - windmill_token: ${{ secrets.WINDMILL_API_TOKEN }} diff --git a/.github/workflows/docker-image-arm.yml.archived b/.github/workflows/docker-image-arm.yml.archived new file mode 100644 index 0000000000000..b65288079bdce --- /dev/null +++ b/.github/workflows/docker-image-arm.yml.archived @@ -0,0 +1,60 @@ +# env: +# REGISTRY: ghcr.io +# IMAGE_NAME: ${{ github.repository }} + +# name: Build and push arm docker image +# on: +# push: +# branches: [main] +# tags: ["*"] + +# concurrency: +# group: ${{ github.ref }}-arm +# cancel-in-progress: true + +# permissions: +# contents: read +# id-token: write +# packages: write + +# jobs: +# publish_arm: +# runs-on: ubuntu-22.04 +# steps: +# - uses: actions/checkout@v3 +# with: +# fetch-depth: 0 + +# - uses: depot/setup-action@v1 + +# - name: Docker meta +# id: meta-slim-public +# uses: docker/metadata-action@v4 +# with: +# images: | +# ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} +# tags: | +# type=ref,event=branch +# type=ref,event=pr +# type=semver,pattern={{version}} +# type=semver,pattern={{major}}.{{minor}} + +# - name: Login to registry +# uses: docker/login-action@v2 +# with: +# registry: ${{ env.REGISTRY }} +# username: ${{ github.actor }} +# password: ${{ secrets.GITHUB_TOKEN }} + +# - name: Build and push publicly +# uses: depot/build-push-action@v1 +# with: +# context: . +# push: true +# platforms: linux/amd64,linux/arm64 +# tags: | +# ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest +# ${{ steps.meta-slim-public.outputs.tags }} +# labels: | +# ${{ steps.meta-slim-public.outputs.labels }} +# org.opencontainers.image.licenses=AGPLv3 diff --git a/.github/workflows/docker-image-rpi4.yml b/.github/workflows/docker-image-rpi4.yml new file mode 100644 index 0000000000000..9fc20c3a87864 --- /dev/null +++ b/.github/workflows/docker-image-rpi4.yml @@ -0,0 +1,76 @@ +env: + REGISTRY: ghcr.io + IMAGE_NAME: ${{ github.repository }}-rpi + +name: Build windmill without jemalloc +on: + workflow_dispatch: + +concurrency: + group: windmill-without-jemalloc + cancel-in-progress: true + +permissions: write-all + +jobs: + build: + runs-on: ubicloud + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Read EE repo commit hash + run: | + echo "ee_repo_ref=$(cat ./backend/ee-repo-ref.txt)" >> "$GITHUB_ENV" + + - uses: actions/checkout@v4 + with: + repository: windmill-labs/windmill-ee-private + path: ./windmill-ee-private + ref: ${{ env.ee_repo_ref }} + token: ${{ secrets.WINDMILL_EE_PRIVATE_ACCESS }} + fetch-depth: 0 + + # - name: Set up Docker Buildx + # uses: docker/setup-buildx-action@v2 + - uses: depot/setup-action@v1 + + - name: Login to registry + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Substitute EE code (EE logic is behind feature flag) + run: | + ./backend/substitute_ee_code.sh --copy --dir ./windmill-ee-private + + - name: Docker meta + id: meta-public + uses: docker/metadata-action@v5 + with: + images: | + ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + flavor: | + latest=false + tags: | + type=ref,event=pr + type=semver,pattern={{version}} + type=semver,pattern={{major}}.{{minor}} + + - name: Build and push publicly + uses: depot/build-push-action@v1 + with: + context: . + platforms: linux/amd64,linux/arm64 + push: true + build-args: | + features=embedding,parquet,openidconnect + tags: | + ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:dev + ${{ steps.meta-public.outputs.tags }} + labels: | + ${{ steps.meta-public.outputs.labels }} + org.opencontainers.image.licenses=AGPLv3 diff --git a/.github/workflows/docker-image.yml b/.github/workflows/docker-image.yml index 3ce60d83a8f99..8cac56c35b21b 100644 --- a/.github/workflows/docker-image.yml +++ b/.github/workflows/docker-image.yml @@ -1,39 +1,796 @@ -name: Docker Image CI +env: + REGISTRY: ghcr.io + IMAGE_NAME: ${{ github.event_name != 'pull_request' && github.repository || + 'windmill-labs/windmill-test' }} + DEV_SHA: ${{ github.event_name != 'pull_request' && 'dev' || format('pr-{0}', + github.event.number) }} + +name: Build windmill:main on: push: branches: [main] + tags: ["*"] pull_request: types: [opened, synchronize, reopened] + paths: + - "Dockerfile" concurrency: group: ${{ github.ref }} cancel-in-progress: true +permissions: write-all + jobs: build: - runs-on: [self-hosted, new] + runs-on: ubicloud + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Read EE repo commit hash + run: | + echo "ee_repo_ref=$(cat ./backend/ee-repo-ref.txt)" >> "$GITHUB_ENV" + + - uses: actions/checkout@v4 + with: + repository: windmill-labs/windmill-ee-private + path: ./windmill-ee-private + ref: ${{ env.ee_repo_ref }} + token: ${{ secrets.WINDMILL_EE_PRIVATE_ACCESS }} + fetch-depth: 0 + + # - name: Set up Docker Buildx + # uses: docker/setup-buildx-action@v2 + - uses: depot/setup-action@v1 + + - name: Login to registry + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Substitute EE code (EE logic is behind feature flag) + run: | + ./backend/substitute_ee_code.sh --copy --dir ./windmill-ee-private + + - name: Docker meta + id: meta-public + uses: docker/metadata-action@v5 + with: + images: | + ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + flavor: | + latest=false + tags: | + type=semver,pattern={{version}} + type=semver,pattern={{major}}.{{minor}} + + - name: Build and push publicly + uses: depot/build-push-action@v1 + with: + context: . + platforms: linux/amd64,linux/arm64 + push: true + build-args: | + features=embedding,parquet,openidconnect,jemalloc + tags: | + ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ env.DEV_SHA }} + ${{ steps.meta-public.outputs.tags }} + labels: | + ${{ steps.meta-public.outputs.labels }} + org.opencontainers.image.licenses=AGPLv3 + + build_ee: + runs-on: ubicloud + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Read EE repo commit hash + run: | + echo "ee_repo_ref=$(cat ./backend/ee-repo-ref.txt)" >> "$GITHUB_ENV" + + - uses: actions/checkout@v4 + with: + repository: windmill-labs/windmill-ee-private + path: ./windmill-ee-private + ref: ${{ env.ee_repo_ref }} + token: ${{ secrets.WINDMILL_EE_PRIVATE_ACCESS }} + fetch-depth: 0 + + # - name: Set up Docker Buildx + # uses: docker/setup-buildx-action@v2 + - uses: depot/setup-action@v1 + + - name: Docker meta + id: meta-ee-public + uses: docker/metadata-action@v5 + with: + images: | + ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}-ee + flavor: | + latest=false + tags: | + type=semver,pattern={{version}} + type=semver,pattern={{major}}.{{minor}} + + - name: Login to registry + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Substitute EE code + run: | + ./backend/substitute_ee_code.sh --copy --dir ./windmill-ee-private + + - name: Build and push publicly ee + uses: depot/build-push-action@v1 + with: + context: . + platforms: linux/amd64,linux/arm64 + push: true + build-args: | + features=enterprise,enterprise_saml,stripe,embedding,parquet,prometheus,openidconnect,cloud,jemalloc,tantivy + tags: | + ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}-ee:${{ env.DEV_SHA }} + ${{ steps.meta-ee-public.outputs.tags }} + labels: | + ${{ steps.meta-ee-public.outputs.labels }} + org.opencontainers.image.licenses=Windmill-Enterprise-License + + build_ee_312: + runs-on: ubicloud + if: ${{ startsWith(github.ref, 'refs/tags/') }} + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Read EE repo commit hash + run: | + echo "ee_repo_ref=$(cat ./backend/ee-repo-ref.txt)" >> "$GITHUB_ENV" + + - uses: actions/checkout@v4 + with: + repository: windmill-labs/windmill-ee-private + path: ./windmill-ee-private + ref: ${{ env.ee_repo_ref }} + token: ${{ secrets.WINDMILL_EE_PRIVATE_ACCESS }} + fetch-depth: 0 + + # - name: Set up Docker Buildx + # uses: docker/setup-buildx-action@v2 + - uses: depot/setup-action@v1 + + - name: Docker meta + id: meta-ee-public-py312 + uses: docker/metadata-action@v5 + with: + images: | + ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}-ee-py312 + flavor: | + latest=false + tags: | + type=semver,pattern={{version}} + type=semver,pattern={{major}}.{{minor}} + + - name: Login to registry + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Substitute EE code + run: | + ./backend/substitute_ee_code.sh --copy --dir ./windmill-ee-private + + - name: Build and push publicly ee + uses: depot/build-push-action@v1 + with: + context: . + platforms: linux/amd64 + push: true + build-args: | + features=enterprise,enterprise_saml,stripe,embedding,parquet,prometheus,openidconnect,cloud,jemalloc,tantivy + PYTHON_IMAGE=python:3.12.2-slim-bookworm + tags: | + ${{ steps.meta-ee-public-py312.outputs.tags }} + labels: | + ${{ steps.meta-ee-public-py312.outputs.labels }} + org.opencontainers.image.licenses=Windmill-Enterprise-License + + # disabled until we make it 100% reliable and add more meaningful tests + # playwright: + # runs-on: [self-hosted, new] + # needs: [build] + # services: + # postgres: + # image: postgres + # env: + # POSTGRES_DB: windmill + # POSTGRES_USER: admin + # POSTGRES_PASSWORD: changeme + # ports: + # - 5432:5432 + # options: >- + # --health-cmd pg_isready + # --health-interval 10s + # --health-timeout 5s + # --health-retries 5 + # steps: + # - uses: actions/checkout@v4 + # - name: "Docker" + # run: echo "::set-output name=id::$(docker run --network=host --rm -d -p 8000:8000 --privileged -it -e DATABASE_URL=postgres://admin:changeme@localhost:5432/windmill -e BASE_INTERNAL_URL=http://localhost:8000 ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest)" + # id: docker-container + # - uses: actions/setup-node@v3 + # with: + # node-version: 16 + # - name: "Playwright run" + # timeout-minutes: 2 + # run: cd frontend && npm ci @playwright/test && npx playwright install && export BASE_URL=http://localhost:8000 && npm run test + # - name: "Clean up" + # run: docker kill ${{ steps.docker-container.outputs.id }} + # if: always() + + attach_amd64_binary_to_release: + needs: [build, build_ee] + runs-on: ubicloud + if: ${{ startsWith(github.ref, 'refs/tags/') }} env: - DOCKER_BUILDKIT: 1 + ARCH: amd64 steps: - - name: Wait for release to succeed - if: github.ref == 'refs/heads/main' - uses: lewagon/wait-on-check-action@v1.0.0 + - uses: actions/checkout@v4 + + - run: | + # pulling docker image with desired arch so that actions-docker-extract doesn't do it + docker pull --platform "linux/$ARCH" ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ env.DEV_SHA }} + docker pull --platform "linux/$ARCH" ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}-ee:${{ env.DEV_SHA }} + + - run: | + # Checks the image is in docker prior to running actions-docker-extract. It fails if not + # Also useful to visually check that the arch is the right opencontainers + docker image inspect ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ env.DEV_SHA }} + docker image inspect ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}-ee:${{ env.DEV_SHA }} + + - uses: shrink/actions-docker-extract@v3 + id: extract with: - ref: ${{ github.ref }} - check-name: "Release please" - repo-token: ${{ secrets.GITHUB_TOKEN }} - wait-interval: 10 - - uses: actions/checkout@v2 + image: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ env.DEV_SHA }} + path: "/usr/src/app/windmill" + + - uses: shrink/actions-docker-extract@v3 + id: extract-ee + with: + image: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}-ee:${{ env.DEV_SHA }} + path: "/usr/src/app/windmill" + + - name: Rename binary with corresponding architecture + run: | + mv "${{ steps.extract.outputs.destination }}/windmill" "${{ steps.extract.outputs.destination }}/windmill-${ARCH}" + mv "${{ steps.extract-ee.outputs.destination }}/windmill" "${{ steps.extract-ee.outputs.destination }}/windmill-ee-${ARCH}" + + - name: Attach binary to release + uses: softprops/action-gh-release@v2 + with: + files: | + ${{ steps.extract.outputs.destination }}/* + ${{ steps.extract-ee.outputs.destination }}/* + + # attach_arm64_binary_to_release: + # needs: [build, build_ee] + # runs-on: ubicoud + # if: ${{ startsWith(github.ref, 'refs/tags/') }} + # env: + # ARCH: arm64 + # steps: + # - uses: actions/checkout@v4 + + # - run: | + # # pulling docker image with desired arch so that actions-docker-extract doesn't do it + # docker pull --platform "linux/$ARCH" ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ env.DEV_SHA }} + # docker pull --platform "linux/$ARCH" ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}-ee:${{ env.DEV_SHA }} + + # - run: | + # # Checks the image is in docker prior to running actions-docker-extract. It fails if not + # # Also useful to visually check that the arch is the right opencontainers + # docker image inspect ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ env.DEV_SHA }} + # docker image inspect ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}-ee:${{ env.DEV_SHA }} + + # - uses: shrink/actions-docker-extract@v3 + # id: extract + # with: + # image: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ env.DEV_SHA }} + # path: "/usr/src/app/windmill" + + # - uses: shrink/actions-docker-extract@v3 + # id: extract-ee + # with: + # image: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}-ee:${{ env.DEV_SHA }} + # path: "/usr/src/app/windmill" + + # - name: Rename binary with corresponding architecture + # run: | + # mv "${{ steps.extract.outputs.destination }}/windmill" "${{ steps.extract.outputs.destination }}/windmill-${ARCH}" + # mv "${{ steps.extract-ee.outputs.destination }}/windmill" "${{ steps.extract-ee.outputs.destination }}/windmill-ee-${ARCH}" + + # - name: Attach binary to release + # uses: softprops/action-gh-release@v2 + # with: + # files: | + # ${{ steps.extract.outputs.destination }}/* + # ${{ steps.extract-ee.outputs.destination }}/* + + run_integration_test: + runs-on: ubicloud + needs: [build_ee] + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + - name: Prepare test run + if: ${{ ! startsWith(github.ref, 'refs/tags/') }} + run: cd integration_tests && ./build.sh + - name: Test run + if: ${{ ! startsWith(github.ref, 'refs/tags/') }} + timeout-minutes: 15 + env: + LICENSE_KEY: ${{ secrets.WM_LICENSE_KEY_CI }} + run: cd integration_tests && ./run.sh + - name: Archive logs + uses: actions/upload-artifact@v3 + if: always() + with: + name: Windmill Integration Tests Logs + path: | + integration_tests/logs + + tag_latest: + runs-on: ubicloud + needs: [run_integration_test, build] + if: github.event_name != 'pull_request' + steps: + - uses: actions/checkout@v4 with: fetch-depth: 0 - - name: deploy staging stack + - name: Login to registry + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + - name: Tag main and latest run: | - docker build . --cache-from "registry.wimill.xyz/windmill:staging" -t "registry.wimill.xyz/windmill:staging" --build-arg BUILDKIT_INLINE_CACHE=1 - docker push "registry.wimill.xyz/windmill:staging" - - name: deploy demo stack - if: github.ref == 'refs/heads/main' + docker buildx imagetools create ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ env.DEV_SHA }} --tag ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest + docker buildx imagetools create ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ env.DEV_SHA }} --tag ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:main + + tag_latest_ee: + runs-on: ubicloud + needs: [run_integration_test, build_ee] + if: github.event_name != 'pull_request' + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + - name: Login to registry + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + - name: Tag main and latest for ee run: | - docker tag registry.wimill.xyz/windmill:staging registry.wimill.xyz/windmill:main - docker push registry.wimill.xyz/windmill:main - # - name: pruning unused images - # run: sudo docker image prune -a + docker buildx imagetools create ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}-ee:${{ env.DEV_SHA }} --tag ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}-ee:latest + docker buildx imagetools create ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}-ee:${{ env.DEV_SHA }} --tag ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}-ee:main + + verify_ee_image_vulnerabilities: + runs-on: ubicloud + needs: [tag_latest_ee] + # if: ${{ startsWith(github.ref, 'refs/tags/') }} + steps: + - name: Checkout code + uses: actions/checkout@v4 + - name: Analyze for critical and high CVEs + id: docker-scout-cves + if: ${{ github.event_name != 'pull_request_target' }} + uses: docker/scout-action@v1 + with: + command: cves + only-severities: critical,high + image: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}-ee:main + sarif-file: sarif.output.json + summary: true + dockerhub-user: windmilllabs + dockerhub-password: ${{ secrets.DOCKER_PAT }} + + - name: Upload SARIF result + id: upload-sarif + if: ${{ github.event_name != 'pull_request_target' }} + uses: github/codeql-action/upload-sarif@v2 + with: + sarif_file: sarif.output.json + + # docker_scout_ee: + # runs-on: ubicloud + # needs: [tag_latest_ee] + # steps: + # - name: Docker Scout + # id: docker-scout + # uses: docker/scout-action@v1 + # with: + # dockerhub- + # command: cves,recommendations,compare + # to-latest: true + # ignore-base: true + # ignore-unchanged: true + # only-fixed: true + + build_ee_nsjail: + needs: [build_ee] + runs-on: ubicloud + if: github.event_name != 'pull_request' + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + # - name: Set up Docker Buildx + # uses: docker/setup-buildx-action@v2 + + - uses: depot/setup-action@v1 + + - name: Docker meta + id: meta-ee-public + uses: docker/metadata-action@v5 + with: + images: | + ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}-ee-nsjail + flavor: | + latest=false + tags: | + type=semver,pattern={{version}} + type=semver,pattern={{major}}.{{minor}} + type=sha,enable=true,priority=100,prefix=,suffix=,format=short + + - name: Login to registry + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Build and push publicly ee + uses: depot/build-push-action@v1 + with: + context: . + platforms: linux/amd64,linux/arm64 + push: true + file: "./docker/DockerfileNsjail" + tags: | + ${{ steps.meta-ee-public.outputs.tags }} + ghcr.io/windmill-labs/windmill-ee-nsjail:main + labels: | + ${{ steps.meta-ee-public.outputs.labels }} + org.opencontainers.image.licenses=Windmill-Enterprise-License + + build_ee_reports_privately: + needs: [build_ee_nsjail] + runs-on: ubicloud + if: github.event_name != 'pull_request' + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + # - name: Set up Docker Buildx + # uses: docker/setup-buildx-action@v2 + + - uses: depot/setup-action@v1 + + - name: Login to registry + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Docker meta + id: meta-ee-public + uses: docker/metadata-action@v5 + with: + images: | + ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}-ee-reports + tags: | + type=semver,pattern={{version}} + type=semver,pattern={{major}}.{{minor}} + type=sha,enable=true,priority=100,prefix=,suffix=,format=short + + - name: Build and push publicly ee reports + uses: depot/build-push-action@v1 + with: + context: . + platforms: linux/amd64,linux/arm64 + push: true + file: "./docker/DockerfileReports" + tags: | + ${{ steps.meta-ee-public.outputs.tags }} + labels: | + ${{ steps.meta-ee-public.outputs.labels }} + org.opencontainers.image.licenses=Windmill-Enterprise-License + + publish_ecr_s3: + needs: [build_ee_nsjail] + runs-on: ubicloud-standard-2-arm + if: github.event_name != 'pull_request' + env: + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + + - name: Login to registry + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: get git hash + if: github.event_name != 'pull_request' + id: git_hash + run: | + git_hash=$(git rev-parse --short "$GITHUB_SHA") + echo "GIT_HASH=${git_hash:0:7}" >> "$GITHUB_OUTPUT" + + - uses: shrink/actions-docker-extract@v3 + if: github.event_name != 'pull_request' + id: extract + with: + image: |- + ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}-ee-nsjail:${{ steps.git_hash.outputs.GIT_HASH }} + path: "/static_frontend/." + + - uses: reggionick/s3-deploy@v4 + if: github.event_name != 'pull_request' + with: + folder: ${{ steps.extract.outputs.destination }} + bucket: windmill-frontend + bucket-region: us-east-1 + + build_ee_cuda: + if: ${{ startsWith(github.ref, 'refs/tags/') }} + needs: [build_ee] + runs-on: ubicloud + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + # - name: Set up Docker Buildx + # uses: docker/setup-buildx-action@v2 + + - uses: depot/setup-action@v1 + + - name: Docker meta + id: meta-ee-public + uses: docker/metadata-action@v5 + with: + images: | + ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}-ee-cuda + flavor: | + latest=false + tags: | + type=semver,pattern={{version}} + type=semver,pattern={{major}}.{{minor}} + + - name: Login to registry + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Build and push publicly ee + uses: depot/build-push-action@v1 + with: + context: . + platforms: linux/amd64 + push: true + file: "./docker/DockerfileCuda" + tags: | + ${{ steps.meta-ee-public.outputs.tags }} + labels: | + ${{ steps.meta-ee-public.outputs.labels }} + org.opencontainers.image.licenses=Windmill-Enterprise-License + + build_slim: + if: ${{ startsWith(github.ref, 'refs/tags/') }} + needs: [build] + runs-on: ubicloud + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + # - name: Set up Docker Buildx + # uses: docker/setup-buildx-action@v2 + + - uses: depot/setup-action@v1 + + - name: Docker meta + id: meta-ee-public + uses: docker/metadata-action@v5 + with: + images: | + ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}-slim + flavor: | + latest=false + tags: | + type=semver,pattern={{version}} + type=semver,pattern={{major}}.{{minor}} + + - name: Login to registry + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Build and push publicly ee + uses: depot/build-push-action@v1 + with: + context: . + platforms: linux/amd64 + push: true + file: "./docker/DockerfileSlim" + tags: | + ${{ steps.meta-ee-public.outputs.tags }} + labels: | + ${{ steps.meta-ee-public.outputs.labels }} + + build_ee_slim: + if: ${{ startsWith(github.ref, 'refs/tags/') }} + needs: [build_ee] + runs-on: ubicloud + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + # - name: Set up Docker Buildx + # uses: docker/setup-buildx-action@v2 + + - uses: depot/setup-action@v1 + + - name: Docker meta + id: meta-ee-public + uses: docker/metadata-action@v5 + with: + images: | + ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}-ee-slim + flavor: | + latest=false + tags: | + type=semver,pattern={{version}} + type=semver,pattern={{major}}.{{minor}} + + - name: Login to registry + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Build and push publicly ee + uses: depot/build-push-action@v1 + with: + context: . + platforms: linux/amd64 + push: true + file: "./docker/DockerfileSlimEe" + tags: | + ${{ steps.meta-ee-public.outputs.tags }} + labels: | + ${{ steps.meta-ee-public.outputs.labels }} + org.opencontainers.image.licenses=Windmill-Enterprise-License + + build_full: + if: ${{ startsWith(github.ref, 'refs/tags/') }} + needs: [build] + runs-on: ubicloud + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + # - name: Set up Docker Buildx + # uses: docker/setup-buildx-action@v2 + + - uses: depot/setup-action@v1 + + - name: Docker meta + id: meta-public + uses: docker/metadata-action@v5 + with: + images: | + ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}-full + flavor: | + latest=false + tags: | + type=semver,pattern={{version}} + type=semver,pattern={{major}}.{{minor}} + + - name: Login to registry + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Build and push publicly + uses: depot/build-push-action@v1 + with: + context: . + platforms: linux/amd64,linux/arm64 + push: true + file: "./docker/DockerfileFull" + tags: | + ${{ steps.meta-public.outputs.tags }} + labels: | + ${{ steps.meta-public.outputs.labels }} + + build_ee_full: + if: ${{ startsWith(github.ref, 'refs/tags/') }} + needs: [build_ee] + runs-on: ubicloud + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + # - name: Set up Docker Buildx + # uses: docker/setup-buildx-action@v2 + + - uses: depot/setup-action@v1 + + - name: Docker meta + id: meta-ee-public + uses: docker/metadata-action@v5 + with: + images: | + ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}-ee-full + flavor: | + latest=false + tags: | + type=semver,pattern={{version}} + type=semver,pattern={{major}}.{{minor}} + + - name: Login to registry + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Build and push publicly ee + uses: depot/build-push-action@v1 + with: + context: . + platforms: linux/amd64,linux/arm64 + push: true + file: "./docker/DockerfileFullEe" + tags: | + ${{ steps.meta-ee-public.outputs.tags }} + labels: | + ${{ steps.meta-ee-public.outputs.labels }} + org.opencontainers.image.licenses=Windmill-Enterprise-License diff --git a/.github/workflows/frontend-check.yml b/.github/workflows/frontend-check.yml new file mode 100644 index 0000000000000..845d03146dd1a --- /dev/null +++ b/.github/workflows/frontend-check.yml @@ -0,0 +1,21 @@ +name: check frontend build +on: + pull_request: + types: [opened, synchronize, reopened, closed] + paths: + - "frontend/**" + merge_group: + +jobs: + npm_check: + runs-on: ubicloud-standard-8 + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v3 + with: + node-version: 18 + - name: "npm check" + timeout-minutes: 2 + run: + cd frontend && npm ci && npm run generate-backend-client && npm run + check diff --git a/.github/workflows/gallery_on_release.yml b/.github/workflows/gallery_on_release.yml new file mode 100644 index 0000000000000..c95903ccad382 --- /dev/null +++ b/.github/workflows/gallery_on_release.yml @@ -0,0 +1,16 @@ +name: Publish powershell-client +on: + push: + tags: + - "v*" + workflow_dispatch: + +jobs: + publish_gallery: + runs-on: ubicloud-standard-8 + steps: + - uses: actions/checkout@v4 + - run: . ./powershell-client/publish.ps1 + shell: pwsh + env: + NUGET_API_KEY: ${{ secrets.NUGET_API_KEY }} diff --git a/.github/workflows/go_on_release.yml b/.github/workflows/go_on_release.yml new file mode 100644 index 0000000000000..4d39d70178f07 --- /dev/null +++ b/.github/workflows/go_on_release.yml @@ -0,0 +1,57 @@ +name: Publish go-client +on: + push: + tags: + - "v*" + workflow_dispatch: + +env: + repo: windmill-go-client + +jobs: + build_go_and_push_to_repo: + runs-on: ubicloud-standard-8 + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-go@v4 + - name: install_jq + run: | + sudo apt-get update + sudo apt-get install jq + - name: generate_go + run: | + go install github.com/deepmap/oapi-codegen/cmd/oapi-codegen@v1.11.0 + cd go-client + rm .gitignore + ./build.sh + go build + - name: Pushes to another repository + id: push_directory + uses: cpina/github-action-push-to-another-repository@devel + env: + API_TOKEN_GITHUB: ${{ secrets.DENO_PAT }} + with: + source-directory: go-client/ + destination-github-username: ${{ github.repository_owner }} + destination-repository-name: ${{ env.repo }} + user-email: ruben@windmill.dev + commit-message: See ORIGIN_COMMIT from $GITHUB_REF + target-branch: main + + tag_repo: + needs: [build_go_and_push_to_repo] + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + repository: ${{ github.repository_owner }}/${{ env.repo }} + token: ${{ secrets.DENO_PAT }} + path: ./client + + - name: Push client + run: | + cd ./client + git config --global user.email "ruben@windmill.dev" + git config --global user.name "rubenfiszel[bot]" + git tag -a ${{ github.ref_name }} -m "${{ github.ref_name }}" + git push --tags diff --git a/.github/workflows/jsr_on_release.yml b/.github/workflows/jsr_on_release.yml new file mode 100644 index 0000000000000..4a9d443589c21 --- /dev/null +++ b/.github/workflows/jsr_on_release.yml @@ -0,0 +1,16 @@ +name: Publish typescript-client on JSR + +on: + push: + tags: + - "v*" + +jobs: + publish: + runs-on: ubuntu-latest + permissions: + contents: read + id-token: write + steps: + - uses: actions/checkout@v4 + - run: cd typescript-client && ./publish.jsr.sh diff --git a/.github/workflows/npm_on_release.yml b/.github/workflows/npm_on_release.yml new file mode 100644 index 0000000000000..bf4af33f80bd3 --- /dev/null +++ b/.github/workflows/npm_on_release.yml @@ -0,0 +1,33 @@ +name: Publish typescript-client & CLI to NPM on release +on: + push: + tags: + - "v*" + workflow_dispatch: + +jobs: + publish_typescript_client: + runs-on: ubicloud-standard-8 + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v3 + with: + node-version: "20.x" + registry-url: "https://registry.npmjs.org" + - run: cd typescript-client && ./publish.sh && cd .. + env: + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} + publish_cli: + runs-on: ubicloud-standard-8 + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v3 + with: + node-version: "20.x" + registry-url: "https://registry.npmjs.org" + - uses: denoland/setup-deno@v1 + with: + deno-version: v1.x + - run: cd cli && ./build.sh && cd npm && npm publish + env: + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} diff --git a/.github/workflows/on-release.yml b/.github/workflows/on-release.yml deleted file mode 100644 index 3ec799fc6c918..0000000000000 --- a/.github/workflows/on-release.yml +++ /dev/null @@ -1,38 +0,0 @@ -name: Build LSP Docker -on: - push: - branches: [main] - paths: - - "python-client/**" - - "Pipfile" - - ".github/workflows/on-release.yml" - -jobs: - build_lsp: - runs-on: [self-hosted, new] - steps: - - name: Wait for release to succeed - if: github.ref == 'refs/heads/main' - uses: lewagon/wait-on-check-action@v1.0.0 - with: - ref: ${{ github.ref }} - check-name: "Release please" - repo-token: ${{ secrets.GITHUB_TOKEN }} - wait-interval: 10 - - uses: actions/checkout@v2 - - name: Upload python client - env: - PYPI_PASSWORD: ${{ secrets.PYPI_PASSWORD }} - run: | - cd python-client - export PATH=$PATH:/usr/local/bin - export PATH=$PATH:/root/.local/bin - ./publish.sh - - name: Build the Docker image - run: | - cd lsp - sudo docker pull "registry.wimill.xyz/lsp:main" || true - sudo docker build . --cache-from "registry.wimill.xyz/lsp:main" -t "registry.wimill.xyz/lsp:main" --build-arg BUILDKIT_INLINE_CACHE=1 - - name: push to registry - run: | - sudo docker push "registry.wimill.xyz/lsp:main" diff --git a/.github/workflows/publish_lsp.yml b/.github/workflows/publish_lsp.yml new file mode 100644 index 0000000000000..84f1f836aa1a1 --- /dev/null +++ b/.github/workflows/publish_lsp.yml @@ -0,0 +1,64 @@ +env: + REGISTRY: ghcr.io + ECR_REGISTRY: 976079455550.dkr.ecr.us-east-1.amazonaws.com + IMAGE_NAME: ${{ github.repository }}-lsp + +name: Publish lsp +on: + push: + tags: + - "v*" + workflow_dispatch: + +permissions: + contents: read + id-token: write + packages: write + +jobs: + sleep: + runs-on: ubicloud + steps: + - name: Sleep for 900 seconds waiting for pypi to update index + if: startsWith(github.ref, 'refs/tags/v') + run: sleep 900 + shell: bash + publish_lsp: + needs: [sleep] + runs-on: ubicloud + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + - uses: depot/setup-action@v1 + - name: Docker meta + id: meta + uses: docker/metadata-action@v5 + with: + images: | + ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + tags: | + type=ref,event=branch + type=ref,event=pr + type=semver,pattern={{version}} + type=semver,pattern={{major}}.{{minor}} + + - name: Login to registry + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Build and push publicly + uses: depot/build-push-action@v1 + with: + context: "{{defaultContext}}:lsp" + platforms: linux/amd64,linux/arm64 + push: true + tags: | + ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest + ${{ steps.meta.outputs.tags }} + labels: | + ${{ steps.meta.outputs.labels }} + org.opencontainers.image.licenses=AGPLv3 diff --git a/.github/workflows/pypi_on_release.yml b/.github/workflows/pypi_on_release.yml new file mode 100644 index 0000000000000..39a3e11b2e078 --- /dev/null +++ b/.github/workflows/pypi_on_release.yml @@ -0,0 +1,21 @@ +name: Publish python-client +on: + push: + tags: + - "v*" + workflow_dispatch: + +jobs: + publish_pypi: + runs-on: ubicloud-standard-8 + if: startsWith(github.ref, 'refs/tags/v') + container: + image: ghcr.io/windmill-labs/python-client-builder + steps: + - uses: actions/checkout@v4 + - name: Upload python client + env: + PYPI_PASSWORD: ${{ secrets.PYPI_PASSWORD }} + run: | + cd python-client + ./publish.sh diff --git a/.github/workflows/release-please.yml b/.github/workflows/release-please.yml index 8b23cc11b86b6..110baacda37cf 100644 --- a/.github/workflows/release-please.yml +++ b/.github/workflows/release-please.yml @@ -1,14 +1,14 @@ on: push: - branches: - - main + branches: [main] + name: release-please jobs: release-please: name: "Release please" - runs-on: ubuntu-latest + runs-on: ubicloud steps: - - uses: GoogleCloudPlatform/release-please-action@v2 + - uses: GoogleCloudPlatform/release-please-action@v3 with: release-type: simple package-name: windmill diff --git a/.github/workflows/sign-cla.yml b/.github/workflows/sign-cla.yml new file mode 100644 index 0000000000000..7835febfbca6f --- /dev/null +++ b/.github/workflows/sign-cla.yml @@ -0,0 +1,37 @@ +name: "CLA Assistant" +on: + issue_comment: + types: [created] + pull_request_target: + types: [opened, closed, synchronize] + +jobs: + CLAssistant: + runs-on: ubicloud + steps: + - name: "CLA Assistant" + if: + (github.event.comment.body == 'recheck' || github.event.comment.body + == 'I have read the CLA Document and I hereby sign the CLA') || + github.event_name == 'pull_request_target' + # Beta Release + uses: cla-assistant/github-action@v2.3.1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + PERSONAL_ACCESS_TOKEN: ${{ secrets.CLA_PAT }} + with: + path-to-signatures: "signatures/cla.json" + path-to-document: "https://github.com/windmill-labs/windmill/blob/master/CLA.md" + branch: "signatures" + allowlist: rubenfiszel,bot* + + #below are the optional inputs - If the optional inputs are not given, then default values will be taken + #remote-organization-name: enter the remote organization name where the signatures should be stored (Default is storing the signatures in the same repository) + #remote-repository-name: enter the remote repository name where the signatures should be stored (Default is storing the signatures in the same repository) + #create-file-commit-message: 'For example: Creating file for storing CLA Signatures' + #signed-commit-message: 'For example: $contributorName has signed the CLA in #$pullRequestNo' + #custom-notsigned-prcomment: 'pull request comment with Introductory message to ask new contributors to sign' + #custom-pr-sign-comment: 'The signature to be committed in order to sign the CLA' + #custom-allsigned-prcomment: 'pull request comment when all contributors has signed, defaults to **CLA Assistant Lite bot** All Contributors have signed the CLA.' + #lock-pullrequest-aftermerge: false - if you don't want this bot to automatically lock the pull request after merging (default - true) + #use-dco-flag: true - If you are using DCO instead of CLA diff --git a/.gitignore b/.gitignore index a20c8949e8fdc..ffda06e6cb8be 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,9 @@ target/ .DS_Store +nohup.out local/ frontend/src/routes/test.svelte CaddyfileRemoteMalo +*.swp +**/.idea/ +.direnv diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000000000..dc3f727cadfc1 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "python.analysis.typeCheckingMode": "basic" +} diff --git a/CHANGELOG.md b/CHANGELOG.md index d4d4f17688726..8c9c8019a8771 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,11293 @@ # Changelog +## [1.402.1](https://github.com/windmill-labs/windmill/compare/v1.402.0...v1.402.1) (2024-09-28) + + +### Bug Fixes + +* allow preprocessor to write to args.json on nsjail ([#4455](https://github.com/windmill-labs/windmill/issues/4455)) ([0b9ec83](https://github.com/windmill-labs/windmill/commit/0b9ec83036e2a1d0773b4ec5856f907b383e9323)) +* **frontend:** Fix flow graph bg in dark mode on chrome ([#4454](https://github.com/windmill-labs/windmill/issues/4454)) ([6956a3a](https://github.com/windmill-labs/windmill/commit/6956a3a2ba6d189528cb34ab05f7137fdf4f840b)) +* improve suspend_first behavior and frequency ([b5e226b](https://github.com/windmill-labs/windmill/commit/b5e226b977e6d24ebd28bc1e7c867cb4888f77b2)) + +## [1.402.0](https://github.com/windmill-labs/windmill/compare/v1.401.0...v1.402.0) (2024-09-26) + + +### Features + +* **cli:** add queues, workers and worker-groups commands ([#4439](https://github.com/windmill-labs/windmill/issues/4439)) ([9f91b19](https://github.com/windmill-labs/windmill/commit/9f91b1995a98c9e096c6e599c4d5a8d5ea499ada)) + +## [1.401.0](https://github.com/windmill-labs/windmill/compare/v1.400.0...v1.401.0) (2024-09-25) + + +### Features + +* add return_last_result annotation to sql ([#4443](https://github.com/windmill-labs/windmill/issues/4443)) ([3ce5587](https://github.com/windmill-labs/windmill/commit/3ce5587faae3912ceedae4644732fa9704eb6d76)) + + +### Bug Fixes + +* fix flow rendering ([fd58e7e](https://github.com/windmill-labs/windmill/commit/fd58e7eb48c4fb66d199c33d0f8aaf2535485a2f)) + +## [1.400.0](https://github.com/windmill-labs/windmill/compare/v1.399.0...v1.400.0) (2024-09-25) + + +### Features + +* add static variable and resources support to ansible ([#4435](https://github.com/windmill-labs/windmill/issues/4435)) ([398a09b](https://github.com/windmill-labs/windmill/commit/398a09b7419c7adafa76e5f9f5a981bec6f0611d)) +* **frontend:** Catch flow errors in the UI ([#4429](https://github.com/windmill-labs/windmill/issues/4429)) ([84eefad](https://github.com/windmill-labs/windmill/commit/84eefadfcf06b4f38117b6c4c534f47fb2ef7cc7)) + + +### Bug Fixes + +* remove autocomplete for searchbar ([#4440](https://github.com/windmill-labs/windmill/issues/4440)) ([a1ac583](https://github.com/windmill-labs/windmill/commit/a1ac583f05c34a534c4ae78ca7d2a6850723ce85)) + +## [1.399.0](https://github.com/windmill-labs/windmill/compare/v1.398.1...v1.399.0) (2024-09-25) + + +### Features + +* add tag filtering to external JWT authentication ([#4425](https://github.com/windmill-labs/windmill/issues/4425)) ([590321f](https://github.com/windmill-labs/windmill/commit/590321fd3c88046a657e0a751b62a19424102060)) + + +### Bug Fixes + +* **cli:** version the whole client for deno compatibility ([81c2bb0](https://github.com/windmill-labs/windmill/commit/81c2bb069176a95b8fb9c52b31e5e03c1cc78afc)) +* correct AI generation for CRON and regex ([#4437](https://github.com/windmill-labs/windmill/issues/4437)) ([aeb5b5b](https://github.com/windmill-labs/windmill/commit/aeb5b5bcd163e2e7d1413d7e4aed8bd769996f24)) + +## [1.398.1](https://github.com/windmill-labs/windmill/compare/v1.398.0...v1.398.1) (2024-09-23) + + +### Bug Fixes + +* time handling in bun and deno ([#4423](https://github.com/windmill-labs/windmill/issues/4423)) ([61f27ac](https://github.com/windmill-labs/windmill/commit/61f27acbd5b477f0e2453d4b02d406a7aef76009)) + +## [1.398.0](https://github.com/windmill-labs/windmill/compare/v1.397.4...v1.398.0) (2024-09-23) + + +### Features + +* **frontend:** add http routing templates ([#4421](https://github.com/windmill-labs/windmill/issues/4421)) ([e99e7b2](https://github.com/windmill-labs/windmill/commit/e99e7b2b0bb1bc63d1253d147b80bac06eaff103)) +* http routing ([#4339](https://github.com/windmill-labs/windmill/issues/4339)) ([304dac3](https://github.com/windmill-labs/windmill/commit/304dac34475b8871621c54a768275fae1e9f845e)) + + +### Bug Fixes + +* allow no body in job requests ([#4413](https://github.com/windmill-labs/windmill/issues/4413)) ([70fa78c](https://github.com/windmill-labs/windmill/commit/70fa78c10d8afb3e06be84e3449fdfdeb2673765)) +* **frontend:** Fix delete branch one index ([#4418](https://github.com/windmill-labs/windmill/issues/4418)) ([30017cc](https://github.com/windmill-labs/windmill/commit/30017cc2b1401ea439e3fbec5d7764b206100a38)) +* migrate smtp instance settings to global settings ([#4416](https://github.com/windmill-labs/windmill/issues/4416)) ([50a6f78](https://github.com/windmill-labs/windmill/commit/50a6f789fa8a03d70407b0429da049cc0740b6fa)) +* no failed renewal alert if trial ([#4414](https://github.com/windmill-labs/windmill/issues/4414)) ([5be7be0](https://github.com/windmill-labs/windmill/commit/5be7be03a6df34a9fae96ed7f844d693f7cfce3e)) +* update pip to 24.2 and python 3.11.8->3.11.10 ([a17195d](https://github.com/windmill-labs/windmill/commit/a17195d88ff52b72f0c2cdd95c6218df8ef6d7cf)) +* various improvements for ansible ([#4419](https://github.com/windmill-labs/windmill/issues/4419)) ([a500994](https://github.com/windmill-labs/windmill/commit/a500994cc2cd9cc6cbad722059cebd0bf74a8850)) + +## [1.397.4](https://github.com/windmill-labs/windmill/compare/v1.397.3...v1.397.4) (2024-09-20) + + +### Bug Fixes + +* **cli:** make CLI not require latest version of windmill ([794f87a](https://github.com/windmill-labs/windmill/commit/794f87aa0d33a0b782fcb2726754fdc51bc1d73d)) + +## [1.397.3](https://github.com/windmill-labs/windmill/compare/v1.397.2...v1.397.3) (2024-09-20) + + +### Bug Fixes + +* **cli:** make CLI compatible with Node 18 ([8212532](https://github.com/windmill-labs/windmill/commit/8212532b29fbcf971cb320b8cfc84f3a8d8ad795)) + +## [1.397.2](https://github.com/windmill-labs/windmill/compare/v1.397.1...v1.397.2) (2024-09-20) + + +### Bug Fixes + +* **bun:** never pre-bundle BASE_URL env variable ([69b8754](https://github.com/windmill-labs/windmill/commit/69b8754aef32682bf812be783f79b81cd8526c7a)) + +## [1.397.1](https://github.com/windmill-labs/windmill/compare/v1.397.0...v1.397.1) (2024-09-20) + + +### Bug Fixes + +* **go:** put shared directory in job dir and not go parent ([623ece8](https://github.com/windmill-labs/windmill/commit/623ece8c6791b2c18648a68c562fcd5c8291be9b)) +* improve ability to paste from macos in vscode extension ([07372e7](https://github.com/windmill-labs/windmill/commit/07372e7e65d77df338718929f133e477a1daf993)) +* update git sync script ([30fe28c](https://github.com/windmill-labs/windmill/commit/30fe28ceecb9043eee6811dce8c3e2cd9224927b)) + +## [1.397.0](https://github.com/windmill-labs/windmill/compare/v1.396.1...v1.397.0) (2024-09-18) + + +### Features + +* ansible playbook support ([#4399](https://github.com/windmill-labs/windmill/issues/4399)) ([6855b8d](https://github.com/windmill-labs/windmill/commit/6855b8da9ad92aed514ee1ab214c9550d04e7a22)) + +## [1.396.1](https://github.com/windmill-labs/windmill/compare/v1.396.0...v1.396.1) (2024-09-18) + + +### Bug Fixes + +* postgres scripts that take longer than 20s do not timeout anymore ([37d152f](https://github.com/windmill-labs/windmill/commit/37d152feeb6abeb061daa5c93c24916e520b1fd0)) + +## [1.396.0](https://github.com/windmill-labs/windmill/compare/v1.395.0...v1.396.0) (2024-09-17) + + +### Features + +* Allow setProgress and getProgress from within the script ([#4400](https://github.com/windmill-labs/windmill/issues/4400)) ([d6d4756](https://github.com/windmill-labs/windmill/commit/d6d4756b7a40249dbc622c8a93633e8d8b8333da)) + +## [1.395.0](https://github.com/windmill-labs/windmill/compare/v1.394.6...v1.395.0) (2024-09-17) + + +### Features + +* failed key renewal alert + renew on start if no recent renewal ([#4387](https://github.com/windmill-labs/windmill/issues/4387)) ([de78f6c](https://github.com/windmill-labs/windmill/commit/de78f6c19266c67d43c7f80016a94b7988347e01)) + + +### Bug Fixes + +* cannot create duplicate apps and raw_apps ([d57b139](https://github.com/windmill-labs/windmill/commit/d57b139df2267d1650749b31a3cce5742a3654d9)) +* **cli:** update CLI schema parsers to latest ([6ba77d5](https://github.com/windmill-labs/windmill/commit/6ba77d533fc1c50cf4153730adaf1b14a466f10a)) +* **deno:** replace lock-write with frozen=false ([277d085](https://github.com/windmill-labs/windmill/commit/277d085dbed0b9b1424348cc580ba601d935759b)) +* **frontend:** add support for step id change for forloops and branch… ([#4395](https://github.com/windmill-labs/windmill/issues/4395)) ([97839a3](https://github.com/windmill-labs/windmill/commit/97839a3583ef398c11e2f51058aaceed8e7382fb)) +* **frontend:** new resource type name must be snake case ([#4396](https://github.com/windmill-labs/windmill/issues/4396)) ([9297ffc](https://github.com/windmill-labs/windmill/commit/9297ffcac4d2092022463cd68b4e8ce8f02dcb3c)) +* improve vscode extension handling of relative paths ([8ae6c32](https://github.com/windmill-labs/windmill/commit/8ae6c3262a75af378a261b49f0e3a08d668c74b3)) +* update bun to 1.1.27 ([39374d7](https://github.com/windmill-labs/windmill/commit/39374d7ee13ffa0fe1e4ded146c91869acad144c)) + +## [1.394.6](https://github.com/windmill-labs/windmill/compare/v1.394.5...v1.394.6) (2024-09-15) + + +### Bug Fixes + +* improve first time setup experience ([396258f](https://github.com/windmill-labs/windmill/commit/396258f637e65361a9d9e0285b0a42ca5189fad4)) + +## [1.394.5](https://github.com/windmill-labs/windmill/compare/v1.394.4...v1.394.5) (2024-09-13) + + +### Bug Fixes + +* add filename to s3 upload ([11ca14a](https://github.com/windmill-labs/windmill/commit/11ca14a2d32155e215c0d14d485e2c4048e5c66e)) +* parquet renderer display number of rows" ([#4389](https://github.com/windmill-labs/windmill/issues/4389)) ([51cf420](https://github.com/windmill-labs/windmill/commit/51cf420272cce1948dc4295b587f5037455c4eba)) +* queue metrics graph ([#4388](https://github.com/windmill-labs/windmill/issues/4388)) ([af85d49](https://github.com/windmill-labs/windmill/commit/af85d4936ddd01b390976c9989f3e4e72da3d01e)) +* update internal hub scritps to bun ([#4384](https://github.com/windmill-labs/windmill/issues/4384)) ([f140daf](https://github.com/windmill-labs/windmill/commit/f140daf4dc18db0a11bf478451aa57ae4698fd32)) + +## [1.394.4](https://github.com/windmill-labs/windmill/compare/v1.394.3...v1.394.4) (2024-09-13) + + +### Bug Fixes + +* **frontend:** prompt fix-AI not to rename existing variables ([#4382](https://github.com/windmill-labs/windmill/issues/4382)) ([03a2eae](https://github.com/windmill-labs/windmill/commit/03a2eae49ac5b7c858e642e9f264beebbb2e9b34)) +* **frontend:** table footer display on safari ([#4377](https://github.com/windmill-labs/windmill/issues/4377)) ([93e5ba1](https://github.com/windmill-labs/windmill/commit/93e5ba1d16fcf52dea54ae4b4d7e5b02a899d0bd)) +* **image:** correctly publish windmill-full image ([bde3339](https://github.com/windmill-labs/windmill/commit/bde3339de53ad8430df6d7add6cfb00b4eb895c6)) +* improve app select propagation to list inputs in apps ([fb4c8d2](https://github.com/windmill-labs/windmill/commit/fb4c8d266a359af1ada4541e21b68bac9cb268a8)) +* improve password input for resources editor ([5bef077](https://github.com/windmill-labs/windmill/commit/5bef077480f1d708c507d943abcb4d36de084175)) +* multiple secret picker candidates in resource adder ([f222645](https://github.com/windmill-labs/windmill/commit/f222645dcead8f6608b81be36c683df679a5ae1c)) +* tighten inputs for granular kinds ([#4379](https://github.com/windmill-labs/windmill/issues/4379)) ([ff08b5a](https://github.com/windmill-labs/windmill/commit/ff08b5a9b5606f02228d0b54b45d422704fed3cb)) +* tighten number input validity if min or max is set ([7c16f2c](https://github.com/windmill-labs/windmill/commit/7c16f2cef4943a5d02e2bc6163761d80618aeae4)) +* timeout in pg executor on postgresql connection after 20s ([4dc9ca7](https://github.com/windmill-labs/windmill/commit/4dc9ca7f4e1477c087fe4f9bf6ea03fbcc99099c)) + +## [1.394.3](https://github.com/windmill-labs/windmill/compare/v1.394.2...v1.394.3) (2024-09-11) + + +### Bug Fixes + +* improve runFlowAsync and run_flow_async default behavior + time formatting of scheduled for ([51e6f36](https://github.com/windmill-labs/windmill/commit/51e6f36e13b251f01ddb8514de0d6d1a2bcd2244)) + +## [1.394.2](https://github.com/windmill-labs/windmill/compare/v1.394.1...v1.394.2) (2024-09-11) + + +### Bug Fixes + +* add tag_override for script in flows ([0e64380](https://github.com/windmill-labs/windmill/commit/0e6438047369e0c074e93246d627ecf06c0c78d5)) +* graceful worker exits for same worker jobs ([#4371](https://github.com/windmill-labs/windmill/issues/4371)) ([042a2bf](https://github.com/windmill-labs/windmill/commit/042a2bf917173a540aab7251a559c72c9c687228)) + +## [1.394.1](https://github.com/windmill-labs/windmill/compare/v1.394.0...v1.394.1) (2024-09-11) + + +### Bug Fixes + +* default success handler key can be viewed by anyone in the workspace ([c44e0d3](https://github.com/windmill-labs/windmill/commit/c44e0d37426599186a890f11a079bf2c2030e32d)) +* handle better same_worker flow monitor ([4720237](https://github.com/windmill-labs/windmill/commit/4720237091d4f41d85d9a0f177428d7c3e6d917e)) +* same worker is transitive on nested flows ([decb487](https://github.com/windmill-labs/windmill/commit/decb4873f1d6080f90c1fb2a8dac70423ae2d11a)) + +## [1.394.0](https://github.com/windmill-labs/windmill/compare/v1.393.4...v1.394.0) (2024-09-10) + + +### Features + +* add ability to edit id in flows ([#4364](https://github.com/windmill-labs/windmill/issues/4364)) ([a19db9a](https://github.com/windmill-labs/windmill/commit/a19db9a8d36fd07ff123e09ee079128e353273ad)) + + +### Bug Fixes + +* **cli:** browser login works on npm ([cfb50ce](https://github.com/windmill-labs/windmill/commit/cfb50ce8b8cf5e0e45af4b0fc79e9741d8077c31)) +* **cli:** on node, prompt paste accept more than 8 chars ([e824d2a](https://github.com/windmill-labs/windmill/commit/e824d2a76c0bdcb8aedec190640b26e259ad1131)) +* migrate git sync to using bun based script ([6b43d7e](https://github.com/windmill-labs/windmill/commit/6b43d7e227f2af2d4838d5f816672798d1857e19)) + +## [1.393.4](https://github.com/windmill-labs/windmill/compare/v1.393.3...v1.393.4) (2024-09-09) + + +### Bug Fixes + +* bun scripts cached in docker image have their dependencies pre-loaded ([4a6c3c8](https://github.com/windmill-labs/windmill/commit/4a6c3c8cc51e9e9b15410b4894ae6065e19d6068)) +* **cli:** add --extra-includes to improve git sync capabilities ([9329006](https://github.com/windmill-labs/windmill/commit/9329006ad822e78c196d5ea6469b694d20c9a67f)) +* fix hub sync script ([4e09e7f](https://github.com/windmill-labs/windmill/commit/4e09e7f4517c26fa91820d5fe8202a36ed84ef1c)) + +## [1.393.3](https://github.com/windmill-labs/windmill/compare/v1.393.2...v1.393.3) (2024-09-07) + + +### Bug Fixes + +* **cli:** guide users to migrate to node version of the CLI ([3998ecb](https://github.com/windmill-labs/windmill/commit/3998ecbf7b5c1c1e4ed9f6fb8911e1e18317f815)) + +## [1.393.2](https://github.com/windmill-labs/windmill/compare/v1.393.1...v1.393.2) (2024-09-07) + + +### Bug Fixes + +* **cli:** add --base-url option to add possibility of setting every arg without needing to add a workspace first ([1e813b2](https://github.com/windmill-labs/windmill/commit/1e813b26103098c69ac7880876611954b0ff6996)) + +## [1.393.1](https://github.com/windmill-labs/windmill/compare/v1.393.0...v1.393.1) (2024-09-07) + + +### Bug Fixes + +* fix CLI publishing ([65cddaf](https://github.com/windmill-labs/windmill/commit/65cddaf9752722b1a9489d54e646e270ce742e1d)) + +## [1.393.0](https://github.com/windmill-labs/windmill/compare/v1.392.0...v1.393.0) (2024-09-07) + + +### Features + +* make CLI node compatible ([#4347](https://github.com/windmill-labs/windmill/issues/4347)) ([9b4c598](https://github.com/windmill-labs/windmill/commit/9b4c59809c2b30d419168e624b83379023c5cb5f)) + +## [1.392.0](https://github.com/windmill-labs/windmill/compare/v1.391.0...v1.392.0) (2024-09-06) + + +### Features + +* add load more to runs page if nb of jobs >= 1000 ([e30c344](https://github.com/windmill-labs/windmill/commit/e30c344d329e6dcfa6a560eabae00dd31e774e04)) +* schedule success handler ([#4346](https://github.com/windmill-labs/windmill/issues/4346)) ([dbd4292](https://github.com/windmill-labs/windmill/commit/dbd429226051c74acaf61807ffb13ee1c61e46b1)) + + +### Bug Fixes + +* fix error handler new script if no modules ([32f2d0f](https://github.com/windmill-labs/windmill/commit/32f2d0fc8011943524623917689ff0921ee6d906)) +* improve app reports puppeteer interactions ([df72026](https://github.com/windmill-labs/windmill/commit/df720260b8ebb2b9ccf16dd2ad89d2a13a112c60)) +* increase AI gen timeout + upgrade to 16k gpt4o ([#4340](https://github.com/windmill-labs/windmill/issues/4340)) ([067110e](https://github.com/windmill-labs/windmill/commit/067110e62f1b064268b2c2de07b7832874ace509)) +* make select not reset on user changes in app + app css fix ([8bea2e4](https://github.com/windmill-labs/windmill/commit/8bea2e473df9e59aa0b244f09bee0a84a432cb3d)) +* nativets correct transform resources in args ([50f32c4](https://github.com/windmill-labs/windmill/commit/50f32c4e12b0ece808b810bb7c67255d467a0ab2)) + +## [1.391.0](https://github.com/windmill-labs/windmill/compare/v1.390.1...v1.391.0) (2024-09-04) + + +### Features + +* add slack as a critical alert channel ([#4319](https://github.com/windmill-labs/windmill/issues/4319)) ([a7a08cf](https://github.com/windmill-labs/windmill/commit/a7a08cf9f3b40f6d90d1a1f72ad5ab6e6212b6b9)) + + +### Bug Fixes + +* improve wm_labels indices + UX nits ([ce70693](https://github.com/windmill-labs/windmill/commit/ce7069375481652f88e0417828a0a17a8f429957)) + +## [1.390.1](https://github.com/windmill-labs/windmill/compare/v1.390.0...v1.390.1) (2024-09-03) + + +### Bug Fixes + +* do not require hasNullParent only if scriptPathExact on runs search ([d172e45](https://github.com/windmill-labs/windmill/commit/d172e45766220c525e91f933f22a32738fa2709e)) +* prevent brute force attacks on tokens by slowing unauthorized response ([acfe778](https://github.com/windmill-labs/windmill/commit/acfe7786152f036f2476f93ab5536571514fa9e3)) + +## [1.390.0](https://github.com/windmill-labs/windmill/compare/v1.389.1...v1.390.0) (2024-09-02) + + +### Features + +* add yaml editor in flow builder ([71470d7](https://github.com/windmill-labs/windmill/commit/71470d7da9d3c7a52d7c5a206849f2e63ac4fa02)) + + +### Bug Fixes + +* improve dependency map to handle recusrive loops + handle better flow relative imports ([cdd7349](https://github.com/windmill-labs/windmill/commit/cdd7349f6769a0195f367a1ac27f802287a1f900)) + +## [1.389.1](https://github.com/windmill-labs/windmill/compare/v1.389.0...v1.389.1) (2024-09-02) + + +### Bug Fixes + +* fix erronous branchone status in flow viewer ([e311684](https://github.com/windmill-labs/windmill/commit/e311684a668c461538a3456c02c82a1ea6fecbc9)) +* +## [1.389.0](https://github.com/windmill-labs/windmill/compare/v1.388.0...v1.389.0) (2024-09-01) + + +### Features + +* service logs ([#4244](https://github.com/windmill-labs/windmill/issues/4244)) ([2fe48df](https://github.com/windmill-labs/windmill/commit/2fe48df720b102255832dc6438d5d64f3443207a)) + + +### Bug Fixes + +* prevent duplicate worker alerts ([#4309](https://github.com/windmill-labs/windmill/issues/4309)) ([8e30928](https://github.com/windmill-labs/windmill/commit/8e30928a78c20daef81bc4f98487ab601ecc9b58)) + +## [1.388.0](https://github.com/windmill-labs/windmill/compare/v1.387.1...v1.388.0) (2024-08-30) + + +### Features + +* add rust ([#4253](https://github.com/windmill-labs/windmill/issues/4253)) ([a2beed9](https://github.com/windmill-labs/windmill/commit/a2beed9d7335856bc956ff34343cdaf5a9b8d281)) +* min workers in worker group alert + zombie job critical alert ([#4307](https://github.com/windmill-labs/windmill/issues/4307)) ([aa6fd84](https://github.com/windmill-labs/windmill/commit/aa6fd84079b6015d82d7603218b2c8cb7a156c40)) + +## [1.387.1](https://github.com/windmill-labs/windmill/compare/v1.387.0...v1.387.1) (2024-08-30) + + +### Bug Fixes + +* fix resource list in args being pre-pended with $res ([2397588](https://github.com/windmill-labs/windmill/commit/239758835503ead5bbb1830c04b4fea5d13ad425)) +* improve history navigation on the runs page ([487e7ca](https://github.com/windmill-labs/windmill/commit/487e7ca715d37b4b59a3a03ba8ff2bb644118635)) + +## [1.387.0](https://github.com/windmill-labs/windmill/compare/v1.386.0...v1.387.0) (2024-08-29) + + +### Features + +* **frontend:** add a favorite button on detail pages ([#4297](https://github.com/windmill-labs/windmill/issues/4297)) ([8148518](https://github.com/windmill-labs/windmill/commit/8148518c5c7780d7999b884b0a9e0e540ece09fd)) +* **frontend:** add indicator when a component is locked ([#4296](https://github.com/windmill-labs/windmill/issues/4296)) ([d9b358b](https://github.com/windmill-labs/windmill/commit/d9b358bcc20d2603ef94ada765d395e370d58fc7)) + +## [1.386.0](https://github.com/windmill-labs/windmill/compare/v1.385.0...v1.386.0) (2024-08-28) + + +### Features + +* add vim support for monaco/webeditor ([1ec45e5](https://github.com/windmill-labs/windmill/commit/1ec45e5ad6436d36d3951a75663b4f310025d765)) +* **frontend:** add support to copy a cell value in the clipboard in aggrid tables ([#4286](https://github.com/windmill-labs/windmill/issues/4286)) ([d1ba9b1](https://github.com/windmill-labs/windmill/commit/d1ba9b14040f9c21612a46b36379cce95448fba6)) +* **frontend:** manage ag grid actions programmatically ([#4289](https://github.com/windmill-labs/windmill/issues/4289)) ([a411179](https://github.com/windmill-labs/windmill/commit/a4111798d54f5aa1539dd917eb59ec825c9a4a0b)) +* show last job instead of current job on workers page ([#4293](https://github.com/windmill-labs/windmill/issues/4293)) ([84ce3d8](https://github.com/windmill-labs/windmill/commit/84ce3d819d19254e89c0da9ddf0b9f3819fe6025)) + + +### Bug Fixes + +* cache hub scripts in more cases + pre-cache hub scripts deps in deno ([16465e4](https://github.com/windmill-labs/windmill/commit/16465e47c8acf6320694a821b375aa20ee51067c)) +* items with starred info ([#4298](https://github.com/windmill-labs/windmill/issues/4298)) ([e16bd4a](https://github.com/windmill-labs/windmill/commit/e16bd4a9d25d945b13696f8f7d9e39b10acdb444)) +* show vCPU, mem aggregate on top of worker group ([e083177](https://github.com/windmill-labs/windmill/commit/e0831777a1a8798ba4234f299035c6f471078553)) +* smtp server build without parquet feature ([#4292](https://github.com/windmill-labs/windmill/issues/4292)) ([906cf10](https://github.com/windmill-labs/windmill/commit/906cf1006e5447be075694d7d4903cea04b85737)) + +## [1.385.0](https://github.com/windmill-labs/windmill/compare/v1.384.0...v1.385.0) (2024-08-26) + + +### Features + +* s3 image preview ([#4262](https://github.com/windmill-labs/windmill/issues/4262)) ([35d665f](https://github.com/windmill-labs/windmill/commit/35d665f6179e0a52dd30512e378f270c44703f48)) + + +### Bug Fixes + +* **frontend:** fix inserting Ws scripts from the search menu ([#4290](https://github.com/windmill-labs/windmill/issues/4290)) ([4efc40f](https://github.com/windmill-labs/windmill/commit/4efc40fbb0214fba65f6ff95782e6ead3b20bc71)) + +## [1.384.0](https://github.com/windmill-labs/windmill/compare/v1.383.1...v1.384.0) (2024-08-26) + + +### Features + +* **frontend:** Add a toggle to disable breakpoints in the App editor ([#4274](https://github.com/windmill-labs/windmill/issues/4274)) ([5b2dd75](https://github.com/windmill-labs/windmill/commit/5b2dd7573d7ac2bd1b4ff06094a2dfd480ed24a4)) +* **frontend:** hide/show app editor panels ([#4266](https://github.com/windmill-labs/windmill/issues/4266)) ([fdfd385](https://github.com/windmill-labs/windmill/commit/fdfd385a68c8e05eff147a9471a9f3f44f39e13e)) +* put email triggers attachments on s3 ([#4272](https://github.com/windmill-labs/windmill/issues/4272)) ([5bd38f7](https://github.com/windmill-labs/windmill/commit/5bd38f78089a4beb4a28ba32bc99e649f8119a4c)) + + +### Bug Fixes + +* bun 1.1.21->1.1.25 ([7fa648f](https://github.com/windmill-labs/windmill/commit/7fa648f0876f5b5509fed39b314f40f08528b123)) +* **lsp:** use ruff server instead of ruff-lsp ([88648af](https://github.com/windmill-labs/windmill/commit/88648af1cd6f9e4436e2fd3100f3ece764da75f1)) +* update monaco-editor to latest monaco/language-client ([#4285](https://github.com/windmill-labs/windmill/issues/4285)) ([32c0b89](https://github.com/windmill-labs/windmill/commit/32c0b89729d98a25a5937af1ee41e8ea36334509)) + +## [1.383.1](https://github.com/windmill-labs/windmill/compare/v1.383.0...v1.383.1) (2024-08-22) + + +### Bug Fixes + +* fix app navbar query reactivity + hash in ctx handling is more consistent ([7882d4e](https://github.com/windmill-labs/windmill/commit/7882d4ecdd1007e73a51d2a408cf2e6dc1f83213)) + +## [1.383.0](https://github.com/windmill-labs/windmill/compare/v1.382.2...v1.383.0) (2024-08-22) + + +### Features + +* add native html select support + fix mobile scroll on app text component ([d604b6f](https://github.com/windmill-labs/windmill/commit/d604b6f2a0e5755c949f302c0490de47a8d662ca)) +* add wrap_body header to webhooks ([9226d6c](https://github.com/windmill-labs/windmill/commit/9226d6cbc119f6a1b16936ebb855ff4f50c0e122)) +* improve early stop ([#4257](https://github.com/windmill-labs/windmill/issues/4257)) ([bcde2e6](https://github.com/windmill-labs/windmill/commit/bcde2e62d7846822cfe7f8ef89a9484938829903)) + + +### Bug Fixes + +* **frontend:** fix large JSON viewer ([#4273](https://github.com/windmill-labs/windmill/issues/4273)) ([b3eabff](https://github.com/windmill-labs/windmill/commit/b3eabffb76e266269b2f5ff471a053fa065da4d0)) +* **python-client:** only require httpx to be >= 0.24 instead of ^0.24 ([fc12aeb](https://github.com/windmill-labs/windmill/commit/fc12aeb3961b8a1a42a8493e3774815c940b75af)) + +## [1.382.2](https://github.com/windmill-labs/windmill/compare/v1.382.1...v1.382.2) (2024-08-20) + + +### Bug Fixes + +* **app:** database studio/empty table count reset ([d6d3389](https://github.com/windmill-labs/windmill/commit/d6d33898a765f910f66cd0cfbd70a439ab107528)) +* **frontend:** Fix initial FlowGraph rendering on Chrome ([#4268](https://github.com/windmill-labs/windmill/issues/4268)) ([84d4e2c](https://github.com/windmill-labs/windmill/commit/84d4e2cb956ab4947b364d64c464fd5cf3c1d16f)) +* handle more gracefully worker without tags ([7e1f280](https://github.com/windmill-labs/windmill/commit/7e1f28071a7d6f3f34df417ea746fc9b5dca5157)) + +## [1.382.1](https://github.com/windmill-labs/windmill/compare/v1.382.0...v1.382.1) (2024-08-20) + + +### Bug Fixes + +* **frontend:** Fix flow graph step preview ([#4264](https://github.com/windmill-labs/windmill/issues/4264)) ([0a6832a](https://github.com/windmill-labs/windmill/commit/0a6832aa4561468fb0150f9eb435b7ad857fc841)) + +## [1.382.0](https://github.com/windmill-labs/windmill/compare/v1.381.0...v1.382.0) (2024-08-20) + + +### Features + +* **frontend:** improve versions history by adding a diff viewer with… ([#4261](https://github.com/windmill-labs/windmill/issues/4261)) ([c19df12](https://github.com/windmill-labs/windmill/commit/c19df12292241c20c12e3de5d880c04df9b74324)) + + +### Bug Fixes + +* add FORCE_WORKER_TAGS & fix workers page when default worker group is missing ([09c6af0](https://github.com/windmill-labs/windmill/commit/09c6af05cd6e0b3b30f771a125b1fa330a938101)) +* **bun:** disable large transpiling cache ([1a0e32b](https://github.com/windmill-labs/windmill/commit/1a0e32b40b5f1ac5dcfe3639e697affb6e79a558)) +* **cli:** improve error message of cli ([f3bcadb](https://github.com/windmill-labs/windmill/commit/f3bcadbfb1e42b56996e273800aa0dcb01a6868b)) +* frontend/package.json & frontend/package-lock.json to reduce vulnerabilities ([#4255](https://github.com/windmill-labs/windmill/issues/4255)) ([7fe0442](https://github.com/windmill-labs/windmill/commit/7fe0442a814ed42b1775386be5f4defdcb5c0a0f)) +* **frontend:** nit worker limits ([#4258](https://github.com/windmill-labs/windmill/issues/4258)) ([bb92824](https://github.com/windmill-labs/windmill/commit/bb9282427399f305c3e8874204e6478272c43ff8)) +* improve resource picker handling of objects ([2502377](https://github.com/windmill-labs/windmill/commit/250237793b3c2b1afd5ee122b147301bc487eeeb)) +* **typescript-client:** runFlowAsync by default assume job doesn't outlive flow ([010e0fd](https://github.com/windmill-labs/windmill/commit/010e0fdc2352d740a72de124cc26eea8fc1915af)) + +## [1.381.0](https://github.com/windmill-labs/windmill/compare/v1.380.0...v1.381.0) (2024-08-16) + + +### Features + +* add env to refresh cgroup readings ([#4250](https://github.com/windmill-labs/windmill/issues/4250)) ([e23c3fa](https://github.com/windmill-labs/windmill/commit/e23c3fad628cc718314472f3cb53c0f257c4c9e5)) +* cache common hub scripts in image ([#4249](https://github.com/windmill-labs/windmill/issues/4249)) ([99f7828](https://github.com/windmill-labs/windmill/commit/99f7828ebb5fddf799afb52af7214ba4119e57b9)) + + +### Bug Fixes + +* **cli:** add inject and define options ([dffd5f7](https://github.com/windmill-labs/windmill/commit/dffd5f7f7d5c84624953bf8c778b14586a14e2d4)) +* **frontend:** improve UI for email triggers ([#4243](https://github.com/windmill-labs/windmill/issues/4243)) ([6c9e32a](https://github.com/windmill-labs/windmill/commit/6c9e32af104a897e5c2a5b41867d2ffbbacc8acb)) +* improve password field lifetime incorrectly recycled too early ([5a8fa1d](https://github.com/windmill-labs/windmill/commit/5a8fa1d72487ac2a29dca8833b8c92b8cac3726e)) +* improve row update of aggrid table actions II ([3cf4f00](https://github.com/windmill-labs/windmill/commit/3cf4f00dca677fc592d5dde8a7b8fdcac5f08e0a)) +* **typescript-client:** add runFlow and runFlowAsync ([c9ef2c8](https://github.com/windmill-labs/windmill/commit/c9ef2c8e97bdecb16b9a54805f1c90523e3b406f)) +* workspace specific default tags do not override step level custom tags ([49835ca](https://github.com/windmill-labs/windmill/commit/49835ca6ca65e569ea2915b2ef4f7ce1c4988cae)) + +## [1.380.0](https://github.com/windmill-labs/windmill/compare/v1.379.4...v1.380.0) (2024-08-14) + + +### Features + +* opt-in job args in audit logs ([#4241](https://github.com/windmill-labs/windmill/issues/4241)) ([0cce276](https://github.com/windmill-labs/windmill/commit/0cce27636d128972730427a33b7be954d00210dc)) +* recoverable error handlers ([e0857c7](https://github.com/windmill-labs/windmill/commit/e0857c7178ac9657173e9ed597d072130e41fe47)) +* togglable continue on disapproval/timeout of approvals ([be90b3e](https://github.com/windmill-labs/windmill/commit/be90b3e2192cdae88e38fd7e269ad8abc8f7c054)) + +## [1.379.4](https://github.com/windmill-labs/windmill/compare/v1.379.3...v1.379.4) (2024-08-14) + + +### Bug Fixes + +* add missing change for better key renewal ([#4237](https://github.com/windmill-labs/windmill/issues/4237)) ([f88efc2](https://github.com/windmill-labs/windmill/commit/f88efc2380bf5b055b2633b24cb94fc46e6cdca5)) +* fix transformer issue after proxy change for apps ([ad69876](https://github.com/windmill-labs/windmill/commit/ad698768e8fdbcc4a90f138f74ceee20d2d68a9b)) +* handle time with tz col type in pg ([#4239](https://github.com/windmill-labs/windmill/issues/4239)) ([c09f078](https://github.com/windmill-labs/windmill/commit/c09f078928fb9f4b52df641580505d98bb728aa0)) +* use job timeout for snowflake timeout ([#4240](https://github.com/windmill-labs/windmill/issues/4240)) ([3bd461f](https://github.com/windmill-labs/windmill/commit/3bd461ffa1fcbe19c9007b1b15970be21cff08ef)) + +## [1.379.3](https://github.com/windmill-labs/windmill/compare/v1.379.2...v1.379.3) (2024-08-13) + + +### Bug Fixes + +* improve scrolling performance of the runs page ([0be8982](https://github.com/windmill-labs/windmill/commit/0be8982ddc263b76dab2c87cb6fa63e21effd58c)) + +## [1.379.2](https://github.com/windmill-labs/windmill/compare/v1.379.1...v1.379.2) (2024-08-13) + + +### Bug Fixes + +* add fetch connection limits to bun type fetcher ([b9924d0](https://github.com/windmill-labs/windmill/commit/b9924d01d54f6dfaf5d719c13a38bb3dccbfe3b9)) +* extend step_id being returned as part of the error of every languages ([bcc94ba](https://github.com/windmill-labs/windmill/commit/bcc94badbd848b6838dd0e353c3a30e7a1889ff8)) +* **frontend:** date input is more flexible and accept default html format as a fallback ([b424c61](https://github.com/windmill-labs/windmill/commit/b424c61e95e3cc9213d4d3efbe4173857d4e80fd)) +* improve logviewer behavior when job is loading ([7a68cc7](https://github.com/windmill-labs/windmill/commit/7a68cc76c2d5d7a66f080afdfcb6c5cd09fc25b5)) + +## [1.379.1](https://github.com/windmill-labs/windmill/compare/v1.379.0...v1.379.1) (2024-08-13) + + +### Bug Fixes + +* add an option to disable bundling globally ([f00545f](https://github.com/windmill-labs/windmill/commit/f00545f1691c5107d1103f89bf68fdc3915ddd82)) +* **apps:** improve tanstack table handling of objects ([1d0807f](https://github.com/windmill-labs/windmill/commit/1d0807f54238c8d8d242e3e5534c6d0868b3172b)) + +## [1.379.0](https://github.com/windmill-labs/windmill/compare/v1.378.0...v1.379.0) (2024-08-13) + + +### Features + +* embeddable apps using jwt ([#4229](https://github.com/windmill-labs/windmill/issues/4229)) ([fd1c456](https://github.com/windmill-labs/windmill/commit/fd1c456fad16229112d9329e7c7eb9d60561efc0)) +* **frontend:** group fields are mutable ([955a980](https://github.com/windmill-labs/windmill/commit/955a980703362b78bf24a47ec348878d7aac94e3)) +* **frontend:** improve display of waiting jobs + schedule filter + suspended jobs on runs page ([2b99789](https://github.com/windmill-labs/windmill/commit/2b99789077b66991902819b26b140e2681a51344)) + + +### Bug Fixes + +* **apps:** type hints for results are automatically widened ([1719c26](https://github.com/windmill-labs/windmill/commit/1719c2689e2cdcbf4e88a5133e0d6c5626c8d6d9)) +* support NODE_PATH ([3c4b837](https://github.com/windmill-labs/windmill/commit/3c4b8377ed4689704cb7baaee13e8acaa91e8611)) + +## [1.378.0](https://github.com/windmill-labs/windmill/compare/v1.377.1...v1.378.0) (2024-08-12) + + +### Features + +* **cli:** add customerBundler support ([70d1e6c](https://github.com/windmill-labs/windmill/commit/70d1e6c7208b59890ad4d15cad28b1f32d7970d2)) +* windmill embed ([d56a956](https://github.com/windmill-labs/windmill/commit/d56a956b9a471cca4042f43ba4e3922e42f121f1)) + + +### Bug Fixes + +* allow user resources in app to work within iframes ([6272c9f](https://github.com/windmill-labs/windmill/commit/6272c9ff41e5359f38ae13e879aa615da0fb0d09)) +* **frontend:** improve default id of the components of the topbar ([#4222](https://github.com/windmill-labs/windmill/issues/4222)) ([7115a35](https://github.com/windmill-labs/windmill/commit/7115a3577947c52aa72edcc134dcb8e739208df0)) +* **frontend:** support plus sign in emails format fields [#4223](https://github.com/windmill-labs/windmill/issues/4223) ([c0853ea](https://github.com/windmill-labs/windmill/commit/c0853eafc9f9bf6d454c6a70800c98c75c9d8ba3)) +* **frontend:** user resource picker for app use lightweight component ([c03c0f6](https://github.com/windmill-labs/windmill/commit/c03c0f61726e7b6196fe5222c44d4d635e907b20)) +* improve default value handling for date & date-time in apps ([e779f96](https://github.com/windmill-labs/windmill/commit/e779f963869fcb22d73f02b6a806e3fdac978959)) +* improve license key ui ([#4220](https://github.com/windmill-labs/windmill/issues/4220)) ([0655803](https://github.com/windmill-labs/windmill/commit/06558038601d6f78b234519d4b48f229a2bf9fc8)) + +## [1.377.1](https://github.com/windmill-labs/windmill/compare/v1.377.0...v1.377.1) (2024-08-08) + + +### Bug Fixes + +* **frontend:** fix timezone issues for Date only inputs ([#4215](https://github.com/windmill-labs/windmill/issues/4215)) ([2334802](https://github.com/windmill-labs/windmill/commit/2334802384e86c4269e1cbfd4f6f98a9a1e58f68)) + +## [1.377.0](https://github.com/windmill-labs/windmill/compare/v1.376.1...v1.377.0) (2024-08-08) + + +### Features + +* **app:** add user resource select component ([413ad2c](https://github.com/windmill-labs/windmill/commit/413ad2c9259fd30871b5184bc4f7c3fece60918d)) + + +### Bug Fixes + +* Additional tracing when pulling and uploading search index [#4207](https://github.com/windmill-labs/windmill/issues/4207) ([4f9193c](https://github.com/windmill-labs/windmill/commit/4f9193c03664c336095e9aa2ea6232a4815c7387)) +* azure git sync test connection ([#4209](https://github.com/windmill-labs/windmill/issues/4209)) ([2c3d492](https://github.com/windmill-labs/windmill/commit/2c3d4920e0b575019dd18d0a4a9609e6f66be60e)) +* case insensitive encoding for email triggers ([#4211](https://github.com/windmill-labs/windmill/issues/4211)) ([55926f9](https://github.com/windmill-labs/windmill/commit/55926f957f83cf87a52070577ed79bed15e38836)) +* **cli:** Add esbuild loader for .node files for codebase ([a77f74c](https://github.com/windmill-labs/windmill/commit/a77f74cb7ea5ed3633564075169a5aeedae06152)) +* **frontend:** fix decision tree debug menu ([#4212](https://github.com/windmill-labs/windmill/issues/4212)) ([c90fb8d](https://github.com/windmill-labs/windmill/commit/c90fb8d293ef3aaa8264c2a2984e4203e4851f5c)) +* **frontend:** fix flow warnings ([#4213](https://github.com/windmill-labs/windmill/issues/4213)) ([bf629f3](https://github.com/windmill-labs/windmill/commit/bf629f39ccc411b6ed98081f414a8c3238d52957)) +* handle >1 num workers stats ([#4177](https://github.com/windmill-labs/windmill/issues/4177)) ([0029dc1](https://github.com/windmill-labs/windmill/commit/0029dc11e9f0828c4a129586ac90a18b3f4dfe79)) +* handle snowflake partitions ([#4214](https://github.com/windmill-labs/windmill/issues/4214)) ([d1e119e](https://github.com/windmill-labs/windmill/commit/d1e119e0526933cf39320eecf7c4836cd45d0eb0)) + +## [1.376.1](https://github.com/windmill-labs/windmill/compare/v1.376.0...v1.376.1) (2024-08-07) + + +### Bug Fixes + +* email triggers sqlx CE and improve email parsing ([#4203](https://github.com/windmill-labs/windmill/issues/4203)) ([6e9c350](https://github.com/windmill-labs/windmill/commit/6e9c350b4aa27355d03cb409da36e8f44ff548dc)) +* mysql params starting with underscore ([#4201](https://github.com/windmill-labs/windmill/issues/4201)) ([e7148f6](https://github.com/windmill-labs/windmill/commit/e7148f672303ccf2b5c49bd9d75ee9764657490e)) + +## [1.376.0](https://github.com/windmill-labs/windmill/compare/v1.375.0...v1.376.0) (2024-08-06) + + +### Features + +* email triggers ([#4163](https://github.com/windmill-labs/windmill/issues/4163)) ([a87f34f](https://github.com/windmill-labs/windmill/commit/a87f34fb4a5e54da38e2dbabf2ac551d35b021ee)) +* secure ctx variables in runnable inputs ([#4142](https://github.com/windmill-labs/windmill/issues/4142)) ([b54edf1](https://github.com/windmill-labs/windmill/commit/b54edf153ec90b9bafad9ed7bc92c29345951fe6)) +* Tag filter on Runs page ([#4193](https://github.com/windmill-labs/windmill/issues/4193)) ([7b31281](https://github.com/windmill-labs/windmill/commit/7b3128171ea7193efea569297a099bb9ee6935e1)) + + +### Bug Fixes + +* fix native scripts access to reserved variables ([7886f8f](https://github.com/windmill-labs/windmill/commit/7886f8f471bcb33f7cc640eab64ffc0dd3cb1726)) +* **frontend:** disable email triggers by default ([#4199](https://github.com/windmill-labs/windmill/issues/4199)) ([5e3a3e2](https://github.com/windmill-labs/windmill/commit/5e3a3e2103ce6218a60c570546355ef6ca574df2)) +* **frontend:** fix the app created from a script or flow with the new topbar ([#4194](https://github.com/windmill-labs/windmill/issues/4194)) ([657f03b](https://github.com/windmill-labs/windmill/commit/657f03bc67f84a8593b28483684c2ad8ad432865)) +* **frontend:** Fr/improve suspend drawer ([#4189](https://github.com/windmill-labs/windmill/issues/4189)) ([5104dba](https://github.com/windmill-labs/windmill/commit/5104dba63140e2186dc1eed7f0bf4e14e357bf3d)) +* **frontend:** Hide AgChart background to make styling work ([#4197](https://github.com/windmill-labs/windmill/issues/4197)) ([b9b30e6](https://github.com/windmill-labs/windmill/commit/b9b30e66ec485cc019561b092fc27d08aa4666b3)) +* **frontend:** Remove full height for the event handlers of runnables ([#4196](https://github.com/windmill-labs/windmill/issues/4196)) ([6749f2c](https://github.com/windmill-labs/windmill/commit/6749f2c1367bdbecb12941baaa87b63c4b4c6f20)) +* mysql support for underscore in named param ([#4200](https://github.com/windmill-labs/windmill/issues/4200)) ([cfa20ae](https://github.com/windmill-labs/windmill/commit/cfa20ae0d740014baea2e534cea5f787acaeb028)) + +## [1.375.0](https://github.com/windmill-labs/windmill/compare/v1.374.0...v1.375.0) (2024-08-05) + + +### Features + +* deployment UI filter deployable items ([#4183](https://github.com/windmill-labs/windmill/issues/4183)) ([f2f8bbe](https://github.com/windmill-labs/windmill/commit/f2f8bbe1d4364540854fef3bf11df5bb4252c17d)) +* improve indices of completed_runs for faster load ([cc111ba](https://github.com/windmill-labs/windmill/commit/cc111ba7dcd7fe6c4280d394d4eb0e723e9d8b19)) + + +### Bug Fixes + +* **frontend:** add missing truncate for branch predicates ([#4180](https://github.com/windmill-labs/windmill/issues/4180)) ([947dd21](https://github.com/windmill-labs/windmill/commit/947dd219335244728213e95a46e577428ac65464)) +* **frontend:** fix style panel for compoentn without custom css ([#4182](https://github.com/windmill-labs/windmill/issues/4182)) ([43a89ee](https://github.com/windmill-labs/windmill/commit/43a89ee1ccbeeac11211277f8005d85541c71dc3)) +* **frontend:** fix tutorial for apps with the new topbar ([#4186](https://github.com/windmill-labs/windmill/issues/4186)) ([704e75e](https://github.com/windmill-labs/windmill/commit/704e75e893a94e71091c840aa5608837c0617526)) + +## [1.374.0](https://github.com/windmill-labs/windmill/compare/v1.373.1...v1.374.0) (2024-08-04) + + +### Features + +* add support for assets using tar for codebase deploy ([3508b6d](https://github.com/windmill-labs/windmill/commit/3508b6d793b0ce21c0c264a50bb000cd61c21920)) +* caddy with l4 image ([#4178](https://github.com/windmill-labs/windmill/issues/4178)) ([811de58](https://github.com/windmill-labs/windmill/commit/811de58712f619045a3653fe5b98ff0c7599f392)) + + +### Bug Fixes + +* fix delete job ([86e23f2](https://github.com/windmill-labs/windmill/commit/86e23f2aed234a64fce46e1b6253f788546876af)) + +## [1.373.1](https://github.com/windmill-labs/windmill/compare/v1.373.0...v1.373.1) (2024-08-02) + + +### Bug Fixes + +* fix run_flow_async from call ([63abd5b](https://github.com/windmill-labs/windmill/commit/63abd5b14606869eafbd25d8469638b85b96e199)) +* **frontend:** Add support for array of objects in th UI ([#4170](https://github.com/windmill-labs/windmill/issues/4170)) ([91e364b](https://github.com/windmill-labs/windmill/commit/91e364bde5459447945d7dae65c1cab2858c69ac)) + +## [1.373.0](https://github.com/windmill-labs/windmill/compare/v1.372.0...v1.373.0) (2024-08-01) + + +### Features + +* Indexing improvements ([#4167](https://github.com/windmill-labs/windmill/issues/4167)) ([edcee6d](https://github.com/windmill-labs/windmill/commit/edcee6d8611ff96bfbca7ba811e5e67beaa80f5a)) + + +### Bug Fixes + +* app forms default values changes gets propagated ([cd61fc1](https://github.com/windmill-labs/windmill/commit/cd61fc1e8c00cc3a57af0228cdf958b2fb3a2699)) + +## [1.372.0](https://github.com/windmill-labs/windmill/compare/v1.371.4...v1.372.0) (2024-08-01) + + +### Features + +* variables created by password fields expire after 7 days ([b5464e2](https://github.com/windmill-labs/windmill/commit/b5464e2906bdaedb4752e198e40b7e8c4dbb1338)) + + +### Bug Fixes + +* fix raw_deps handling ([efcf0e4](https://github.com/windmill-labs/windmill/commit/efcf0e40f68342f8330cf5d610979eb7fe92ce09)) +* improve cancel_selection job for running jobs ([42e3ae9](https://github.com/windmill-labs/windmill/commit/42e3ae92e3841579f8ac0821b58ebb72c4204c98)) + +## [1.371.4](https://github.com/windmill-labs/windmill/compare/v1.371.3...v1.371.4) (2024-07-31) + + +### Bug Fixes + +* **frontend:** fix recompute all ([#4161](https://github.com/windmill-labs/windmill/issues/4161)) ([10c6997](https://github.com/windmill-labs/windmill/commit/10c699759e1d06d009783b9f5cba2cbf3ba6a7da)) +* **frontend:** If multiple recompute all present, interval is now in sync ([#4162](https://github.com/windmill-labs/windmill/issues/4162)) ([efeb65b](https://github.com/windmill-labs/windmill/commit/efeb65be4c91491bb4fbedfbc160da7517ebe1d6)) +* improve index usage and runs page performance ([d69aa8d](https://github.com/windmill-labs/windmill/commit/d69aa8d484de016ae7e7bbd190ce6c254818c861)) + +## [1.371.3](https://github.com/windmill-labs/windmill/compare/v1.371.2...v1.371.3) (2024-07-30) + + +### Bug Fixes + +* for codebase bundle, use cjs exports instead ([be8cedf](https://github.com/windmill-labs/windmill/commit/be8cedfe7fe42105a375c92536ec7f5e5a1343bf)) + +## [1.371.2](https://github.com/windmill-labs/windmill/compare/v1.371.1...v1.371.2) (2024-07-30) + + +### Bug Fixes + +* improve codebase handling by ignoring creating lock and bundle ([716bb71](https://github.com/windmill-labs/windmill/commit/716bb7118b0d5b8dd86799d5514f37b068613256)) + +## [1.371.1](https://github.com/windmill-labs/windmill/compare/v1.371.0...v1.371.1) (2024-07-30) + + +### Bug Fixes + +* database connections now scale linearly with number of subworkers ([f59046a](https://github.com/windmill-labs/windmill/commit/f59046a9249962ba7e1739de579cd8d885ec63a8)) + +## [1.371.0](https://github.com/windmill-labs/windmill/compare/v1.370.0...v1.371.0) (2024-07-30) + + +### Features + +* **frontend:** support array of objects in schema ([#4106](https://github.com/windmill-labs/windmill/issues/4106)) ([5992b82](https://github.com/windmill-labs/windmill/commit/5992b821803d9cdc45fa0dee100f159dd3ed557f)) + + +### Bug Fixes + +* always consider electron as external for bundles ([06433a6](https://github.com/windmill-labs/windmill/commit/06433a6ec65534e1a11085cefd6a67699e4eb0a0)) +* fix bunnative lock creation ([6a33624](https://github.com/windmill-labs/windmill/commit/6a33624416cc48e2a1ab21afbd2ac4ab48be2559)) +* submit and form persistence on app on render change ([28277da](https://github.com/windmill-labs/windmill/commit/28277da35bae1c18f16e85d093989e0d419b3601)) +* support bunnative in the CLI ([e02e644](https://github.com/windmill-labs/windmill/commit/e02e644d4ca16773bae3cc2a6b52ac08417d3905)) + +## [1.370.0](https://github.com/windmill-labs/windmill/compare/v1.369.1...v1.370.0) (2024-07-29) + + +### Features + +* get completed flow node result by api/download + eval list result json path optim ([#4108](https://github.com/windmill-labs/windmill/issues/4108)) ([5031a8c](https://github.com/windmill-labs/windmill/commit/5031a8cb015e3ba8d668f5de769b8d67da82c116)) + + +### Bug Fixes + +* improve native runtime with axios support ([6e91005](https://github.com/windmill-labs/windmill/commit/6e91005daa4bbe2f0bd1f8b1c2cce1f68485f9ef)) + +## [1.369.1](https://github.com/windmill-labs/windmill/compare/v1.369.0...v1.369.1) (2024-07-29) + + +### Bug Fixes + +* fix lang picker artefact for script editor ([bc94acb](https://github.com/windmill-labs/windmill/commit/bc94acb378b1310271dd3dda80614e0e38b5285f)) + +## [1.369.0](https://github.com/windmill-labs/windmill/compare/v1.368.3...v1.369.0) (2024-07-29) + + +### Features + +* add support for text/plain webhook ([#4146](https://github.com/windmill-labs/windmill/issues/4146)) ([eb6557a](https://github.com/windmill-labs/windmill/commit/eb6557a6beb5d3b2324b30f2abc117b1a122c3f7)) +* **frontend:** App bar as components ([#4103](https://github.com/windmill-labs/windmill/issues/4103)) ([fb89eed](https://github.com/windmill-labs/windmill/commit/fb89eed8fa43568ffe3a22c5a6dd0b9f38890a37)) +* remove nativets in favor of bun with native pragma ([18f22be](https://github.com/windmill-labs/windmill/commit/18f22be2bae3136f1d9ff06c74f3751504bef60b)) +* remove nativets in favor of bun with native pragma ([b02baa2](https://github.com/windmill-labs/windmill/commit/b02baa2cfb242f7f6ed64e9861a8562272fb2974)) + +## [1.368.3](https://github.com/windmill-labs/windmill/compare/v1.368.2...v1.368.3) (2024-07-28) + + +### Bug Fixes + +* update bun to 1.1.21 ([e45a8a4](https://github.com/windmill-labs/windmill/commit/e45a8a4591649de240a4bff0a25301a2586618bf)) + +## [1.368.2](https://github.com/windmill-labs/windmill/compare/v1.368.1...v1.368.2) (2024-07-28) + + +### Bug Fixes + +* add the nobundling option for bun ([c3848e2](https://github.com/windmill-labs/windmill/commit/c3848e2e3011c7e74d5ae6eb85605476ef2998f4)) +* disable prebundling for nodejs mode scripts ([1e2e907](https://github.com/windmill-labs/windmill/commit/1e2e907982eab2ea7e713d9cfbec046527616fa2)) + +## [1.368.1](https://github.com/windmill-labs/windmill/compare/v1.368.0...v1.368.1) (2024-07-27) + + +### Bug Fixes + +* improve runs page performance through pg indices ([99623f3](https://github.com/windmill-labs/windmill/commit/99623f31af109463b065688058d0cab8ea9910de)) + +## [1.368.0](https://github.com/windmill-labs/windmill/compare/v1.367.2...v1.368.0) (2024-07-26) + + +### Features + +* add FORCE_<env> to allow to override db settings ([f1d5be8](https://github.com/windmill-labs/windmill/commit/f1d5be8a2a76d5c0d37c55ba762f2cd7a6f6982f)) +* job view audit logging based on env variable ([#4131](https://github.com/windmill-labs/windmill/issues/4131)) ([12f9e56](https://github.com/windmill-labs/windmill/commit/12f9e56154b32d839f49dd967ada4952ca4c395d)) +* multi sql statement with pg fix ([#4134](https://github.com/windmill-labs/windmill/issues/4134)) ([6df9eca](https://github.com/windmill-labs/windmill/commit/6df9eca2cffef754ee27b3219f18d0ad69615c83)) +* multi statement sql ([#4104](https://github.com/windmill-labs/windmill/issues/4104)) ([23108b4](https://github.com/windmill-labs/windmill/commit/23108b4688ec9c9683371ee70a50658f6baae42f)) +* pre-bundle bun scripts ([#4132](https://github.com/windmill-labs/windmill/issues/4132)) ([78fd99c](https://github.com/windmill-labs/windmill/commit/78fd99cb6843c7f8045acd6a6a8df851ec6b35d1)) + + +### Bug Fixes + +* allow colors for bun and log error directly ([545a57f](https://github.com/windmill-labs/windmill/commit/545a57fd2c425f02d867f4183aac37131e17210f)) +* search modal improvements ([#4128](https://github.com/windmill-labs/windmill/issues/4128)) ([c270ab1](https://github.com/windmill-labs/windmill/commit/c270ab11718f8d41fe764d5d2116bb3b9aa20cb2)) +* support npmjs mode for raw deps of package.json from CLI ([8e615c9](https://github.com/windmill-labs/windmill/commit/8e615c900de46632c52d78a1ec4b6ccc2cec79ff)) + +## [1.367.2](https://github.com/windmill-labs/windmill/compare/v1.367.1...v1.367.2) (2024-07-24) + + +### Bug Fixes + +* move bun cache to non mounted volume to benefit from cache optimization ([92dac02](https://github.com/windmill-labs/windmill/commit/92dac027f26dfa880e22b1896b48605ae2ef2794)) +* use symlink and straight copy as fallback methods for buntar ([80d4fb0](https://github.com/windmill-labs/windmill/commit/80d4fb0352606948b01f4918e11f80a0bef544f4)) + +## [1.367.1](https://github.com/windmill-labs/windmill/compare/v1.367.0...v1.367.1) (2024-07-24) + + +### Bug Fixes + +* delete buntar if any issue while creating it ([204e2fa](https://github.com/windmill-labs/windmill/commit/204e2fafda681347813ab91f96cee4194db2e156)) +* generate lockfile with npm when npm mode is used ([7fbd002](https://github.com/windmill-labs/windmill/commit/7fbd0028c1f2dfbd6a5cde12e6a0e314ed31552a)) + +## [1.367.0](https://github.com/windmill-labs/windmill/compare/v1.366.6...v1.367.0) (2024-07-24) + + +### Features + +* apply workspace specific tags only to some workspaces ([#4107](https://github.com/windmill-labs/windmill/issues/4107)) ([14a4f12](https://github.com/windmill-labs/windmill/commit/14a4f1282671d1c6a2481123cd5a4297fbd89607)) +* job search index backed up and loaded from s3 ([#4100](https://github.com/windmill-labs/windmill/issues/4100)) ([cac39a1](https://github.com/windmill-labs/windmill/commit/cac39a105187bd005dee442c4968ebbd9ba163d7)) +* use hardlinks instead of tar to improve bun cache performances ([48e9f08](https://github.com/windmill-labs/windmill/commit/48e9f089beff10828eef7a35fb341894eb50d25d)) +* use jwks for external jwt auth ([#4089](https://github.com/windmill-labs/windmill/issues/4089)) ([d096704](https://github.com/windmill-labs/windmill/commit/d096704b27f169672d8949f8570b2b5cba25e78c)) + + +### Bug Fixes + +* cgroupv1 mem limit + granular memory reporting ([#4119](https://github.com/windmill-labs/windmill/issues/4119)) ([13e9e8d](https://github.com/windmill-labs/windmill/commit/13e9e8de9e49f9513ad0cd8ac5a3b8b356de02a9)) +* filter audit logs end user by username + complete resource filter ([#4105](https://github.com/windmill-labs/windmill/issues/4105)) ([73decb2](https://github.com/windmill-labs/windmill/commit/73decb24b23e1a998957455cf4f4148be5990cce)) +* fix webhooks urls after BASE_URL change ([d49b2d0](https://github.com/windmill-labs/windmill/commit/d49b2d0f06842e70180f931ac7b4ac683c1c65b6)) +* make result_json path stable for python executors ([97f6b2e](https://github.com/windmill-labs/windmill/commit/97f6b2e7ad9962c99e566238bde40cdba0ffc3a8)) +* preserve force json across code preview ([9ab5b2e](https://github.com/windmill-labs/windmill/commit/9ab5b2e32d78056752f654769154b90872a9ab85)) +* respect sorting when downloading csv f rom auto table ([20390c5](https://github.com/windmill-labs/windmill/commit/20390c53e82686ac6a8b7a9bc1bf9fb8e014e3c5)) +* sqlx build ([#4120](https://github.com/windmill-labs/windmill/issues/4120)) ([c6dc06b](https://github.com/windmill-labs/windmill/commit/c6dc06bf702b501225a51813a2489ce9ea3c4636)) + +## [1.366.6](https://github.com/windmill-labs/windmill/compare/v1.366.5...v1.366.6) (2024-07-23) + + +### Bug Fixes + +* fix copilot completion after base_url change ([ae4cbb0](https://github.com/windmill-labs/windmill/commit/ae4cbb0401b01e1e378b2a982d7a610648c96239)) + +## [1.366.5](https://github.com/windmill-labs/windmill/compare/v1.366.4...v1.366.5) (2024-07-22) + + +### Bug Fixes + +* fix BASE_URL build conf ([bb861cf](https://github.com/windmill-labs/windmill/commit/bb861cfedef1e5531f31b62dd73907b89ddd473a)) + +## [1.366.4](https://github.com/windmill-labs/windmill/compare/v1.366.3...v1.366.4) (2024-07-22) + + +### Bug Fixes + +* fix BASE_URL build conf ([6e33e4e](https://github.com/windmill-labs/windmill/commit/6e33e4e0b9fce86407cc7cfc9a4a57e03ec5199b)) + +## [1.366.3](https://github.com/windmill-labs/windmill/compare/v1.366.2...v1.366.3) (2024-07-22) + + +### Bug Fixes + +* fix BASE_URL build conf ([f6a948b](https://github.com/windmill-labs/windmill/commit/f6a948ba7705b5b59af87bff7d17252ec1c8e739)) + +## [1.366.2](https://github.com/windmill-labs/windmill/compare/v1.366.1...v1.366.2) (2024-07-22) + + +### Bug Fixes + +* fix BASE_URL build conf ([c26457c](https://github.com/windmill-labs/windmill/commit/c26457c967c07f05110ca31c987247869e267c51)) + +## [1.366.1](https://github.com/windmill-labs/windmill/compare/v1.366.0...v1.366.1) (2024-07-22) + + +### Bug Fixes + +* fix BASE_URL build conf ([9cb4586](https://github.com/windmill-labs/windmill/commit/9cb4586211af8159037e402dc03b85f37db8aa5f)) + +## [1.366.0](https://github.com/windmill-labs/windmill/compare/v1.365.0...v1.366.0) (2024-07-22) + + +### Features + +* dynamic select ([#4110](https://github.com/windmill-labs/windmill/issues/4110)) ([19d523d](https://github.com/windmill-labs/windmill/commit/19d523dd64327cc8c590737f6a14a5d10fe19aa6)) +* make components resizable directly on side ([26c30c4](https://github.com/windmill-labs/windmill/commit/26c30c4f8df6eac7c1d99770c99b8159bd3afe49)) + + +### Bug Fixes + +* add WM_SCHEDULED_FOR to contextual variables and early stop of flows ([e91a06f](https://github.com/windmill-labs/windmill/commit/e91a06fa41a1bdcc781126b936e20a83e540c9f9)) +* Allow deploying frontend in a sub directory ([#3867](https://github.com/windmill-labs/windmill/issues/3867)) ([dd75dd4](https://github.com/windmill-labs/windmill/commit/dd75dd446b5d155ac0c9a007e694732a81dc6b35)) +* improve cgroup readings ([#4030](https://github.com/windmill-labs/windmill/issues/4030)) ([ea53a12](https://github.com/windmill-labs/windmill/commit/ea53a129afc520ee804f473f63847df57e7287a2)) +* update parsers for CLI ([f65ccc0](https://github.com/windmill-labs/windmill/commit/f65ccc07de8e1367ce5acc45d4f3674593351b75)) + +## [1.365.0](https://github.com/windmill-labs/windmill/compare/v1.364.3...v1.365.0) (2024-07-17) + + +### Features + +* **frontend:** array of resources ([#4095](https://github.com/windmill-labs/windmill/issues/4095)) ([5542b7d](https://github.com/windmill-labs/windmill/commit/5542b7d04d0aabff29636b6e0e2e7ff6b5098206)) + + +### Bug Fixes + +* **frontend:** close the content search modal when clicking on an item ([#4098](https://github.com/windmill-labs/windmill/issues/4098)) ([c8c5c27](https://github.com/windmill-labs/windmill/commit/c8c5c2785b2c88d35f5bfe8ed65935dd658afd98)) +* **frontend:** Display 'parallel'and 'skip failure' even when a summary is set ([#4099](https://github.com/windmill-labs/windmill/issues/4099)) ([319454e](https://github.com/windmill-labs/windmill/commit/319454ecf2143703dd7aca9147a9c7d95f83c6a6)) +* **frontend:** fix flow graph when anode has multiple steps to the flow inputs ([#4097](https://github.com/windmill-labs/windmill/issues/4097)) ([fc749c6](https://github.com/windmill-labs/windmill/commit/fc749c687c3919ad57f8bdd7e0b2313c57f0d737)) +* **frontend:** fix use inputs flow preview ([#4094](https://github.com/windmill-labs/windmill/issues/4094)) ([7aa2189](https://github.com/windmill-labs/windmill/commit/7aa2189feca1b502674c5c1957f207b3dd1e7264)) +* **frontend:** improve search modal ([#4088](https://github.com/windmill-labs/windmill/issues/4088)) ([cdc7190](https://github.com/windmill-labs/windmill/commit/cdc7190d8962ca98e78d04e3a7f4da7aa3391ec3)) + +## [1.364.3](https://github.com/windmill-labs/windmill/compare/v1.364.2...v1.364.3) (2024-07-16) + + +### Bug Fixes + +* fix erronous not connected error message ([9a5dc97](https://github.com/windmill-labs/windmill/commit/9a5dc97b184a6b4a027baaa244c117885fb86fbb)) +* fix missing workspaceId on display result of apps ([bfbbeab](https://github.com/windmill-labs/windmill/commit/bfbbeabe4f57ed65a0190715028ed6df9a201e06)) + +## [1.364.2](https://github.com/windmill-labs/windmill/compare/v1.364.1...v1.364.2) (2024-07-16) + + +### Bug Fixes + +* **frontend:** Handle three significant digits for jobs that ran in less than 1 min ([#4084](https://github.com/windmill-labs/windmill/issues/4084)) ([2859d78](https://github.com/windmill-labs/windmill/commit/2859d78f3fe8c261ce4ca1af6a4a5ee53b6aeb29)) + +## [1.364.1](https://github.com/windmill-labs/windmill/compare/v1.364.0...v1.364.1) (2024-07-15) + + +### Bug Fixes + +* fix cli build ([1deccc4](https://github.com/windmill-labs/windmill/commit/1deccc476d4db07e1530ac5b642e619b9d7b618f)) + +## [1.364.0](https://github.com/windmill-labs/windmill/compare/v1.363.0...v1.364.0) (2024-07-15) + + +### Features + +* rehydrate instance settings/configs/users from CLI ([#4035](https://github.com/windmill-labs/windmill/issues/4035)) ([0f7f7c3](https://github.com/windmill-labs/windmill/commit/0f7f7c37a97efda3fa41f1856aec658425349abd)) + + +### Bug Fixes + +* improve generate flow locks ([304b90f](https://github.com/windmill-labs/windmill/commit/304b90fa2751a024f294efe8bbe587d9524f3418)) + +## [1.363.0](https://github.com/windmill-labs/windmill/compare/v1.362.0...v1.363.0) (2024-07-15) + + +### Features + +* **frontend:** Rich result by id component ([#4069](https://github.com/windmill-labs/windmill/issues/4069)) ([546c343](https://github.com/windmill-labs/windmill/commit/546c343811a6eb66a49670c915e984cb68f5aab1)) + + +### Bug Fixes + +* **frontend:** flow editor improvements ([#4008](https://github.com/windmill-labs/windmill/issues/4008)) ([e6dfa39](https://github.com/windmill-labs/windmill/commit/e6dfa390bbf27ed8d4d13128c33b7fd5b2ef69ab)) +* improve schema editor ([2ec8ce5](https://github.com/windmill-labs/windmill/commit/2ec8ce5b7da76d7b5429120b749c66ffb833ff68)) +* make indexer opt-in when in standalone mode ([#4076](https://github.com/windmill-labs/windmill/issues/4076)) ([3e31977](https://github.com/windmill-labs/windmill/commit/3e31977ba1de984d256dbd888b769ddd9f566b04)) + +## [1.362.0](https://github.com/windmill-labs/windmill/compare/v1.361.1...v1.362.0) (2024-07-14) + + +### Features + +* **frontend:** date select component ([#4064](https://github.com/windmill-labs/windmill/issues/4064)) ([3b4a376](https://github.com/windmill-labs/windmill/commit/3b4a3762087cc3f75f7ac297b236bfd98f858076)) +* Full-text search on runs using tantivy and command palette for quick actions ([#4046](https://github.com/windmill-labs/windmill/issues/4046)) ([7ea554a](https://github.com/windmill-labs/windmill/commit/7ea554a7fd315dd6f91b9cbdc12c36fdf50ede9e)) +* improve cancel all for non started jobs ([#4065](https://github.com/windmill-labs/windmill/issues/4065)) ([2747e1b](https://github.com/windmill-labs/windmill/commit/2747e1b0879a734077df363594363ea552f96f9c)) +* improve flow status viewer (show branch chosen + all iterations in for loop) ([#4074](https://github.com/windmill-labs/windmill/issues/4074)) ([b498664](https://github.com/windmill-labs/windmill/commit/b498664c76246931d77cdf6740b15160bd8379a5)) + + +### Bug Fixes + +* **frontend:** app editor improvements ([#4052](https://github.com/windmill-labs/windmill/issues/4052)) ([fd4fe15](https://github.com/windmill-labs/windmill/commit/fd4fe15f49be5cd68c4af8fdba8dbaf61cbc68cc)) + +## [1.361.1](https://github.com/windmill-labs/windmill/compare/v1.361.0...v1.361.1) (2024-07-11) + + +### Bug Fixes + +* improve filter jobs query ([583190f](https://github.com/windmill-labs/windmill/commit/583190f883e2a82fb6d0ab0d882283d5da5436c5)) + +## [1.361.0](https://github.com/windmill-labs/windmill/compare/v1.360.1...v1.361.0) (2024-07-11) + + +### Features + +* **frontend:** add support for GFM and fix max-width issue ([#4057](https://github.com/windmill-labs/windmill/issues/4057)) ([133a278](https://github.com/windmill-labs/windmill/commit/133a2789120c50f2733af4bce5290bd7365b566d)) +* **frontend:** improve table action UX ([#4056](https://github.com/windmill-labs/windmill/issues/4056)) ([a6eeb68](https://github.com/windmill-labs/windmill/commit/a6eeb68b77c49e2fa41e2bb62e72ce4446841fbc)) + + +### Bug Fixes + +* fix migration for instances starting from scratch ([b4f0b32](https://github.com/windmill-labs/windmill/commit/b4f0b32c40bc63b4063816f51c5a30679edf03f4)) +* **frontend:** fix run page ms readability ([#4059](https://github.com/windmill-labs/windmill/issues/4059)) ([0b932ca](https://github.com/windmill-labs/windmill/commit/0b932cac6f8cd959a10d057e53985d876fe158f2)) +* **frontend:** fix style panel title ([#4058](https://github.com/windmill-labs/windmill/issues/4058)) ([c853db4](https://github.com/windmill-labs/windmill/commit/c853db4e0570346b35dcb2249723e42b1af86547)) +* improve completed_job index ([e450300](https://github.com/windmill-labs/windmill/commit/e450300c225a965cde3472013b5ae7fb83200a31)) +* improve performance of cancel_all ([1d1dde0](https://github.com/windmill-labs/windmill/commit/1d1dde0d91644c8b973a4104a93d4c7cd123ac56)) + +## [1.360.1](https://github.com/windmill-labs/windmill/compare/v1.360.0...v1.360.1) (2024-07-09) + + +### Bug Fixes + +* fix previous_result not always working for failure steps ([23a00c5](https://github.com/windmill-labs/windmill/commit/23a00c55e95054ecebbcbb829499f5a1d622efd5)) +* **frontend:** Reload the flowStateStore when a node is restored (undo) ([#4049](https://github.com/windmill-labs/windmill/issues/4049)) ([6e52632](https://github.com/windmill-labs/windmill/commit/6e526327dd0259eb096fdaf387dfc9206936c19b)) +* improve flow version fix migration ([#4050](https://github.com/windmill-labs/windmill/issues/4050)) ([eda6629](https://github.com/windmill-labs/windmill/commit/eda6629bb381469ba27e5a479bb39f7428920aec)) +* make dedicated workers work with dates in bun ([7f49798](https://github.com/windmill-labs/windmill/commit/7f49798e3fb7a2aa528388a1718fd459de19deb8)) +* update flow path ([#4053](https://github.com/windmill-labs/windmill/issues/4053)) ([82c88ad](https://github.com/windmill-labs/windmill/commit/82c88ad3b893e3222391ade65a10dfb2ef1c0fc7)) + +## [1.360.0](https://github.com/windmill-labs/windmill/compare/v1.359.0...v1.360.0) (2024-07-08) + + +### Features + +* **frontend:** add custom actions header ([#4044](https://github.com/windmill-labs/windmill/issues/4044)) ([9e5a3f9](https://github.com/windmill-labs/windmill/commit/9e5a3f98bdc3b66736b099f5828a4c7060b653cd)) + + +### Bug Fixes + +* always run flow versioning edge case fix migration ([#4047](https://github.com/windmill-labs/windmill/issues/4047)) ([9b2919b](https://github.com/windmill-labs/windmill/commit/9b2919be329f687740e1169aae61073437d328a5)) +* **frontend:** fix min rows for LightWeightArgInput ([#4045](https://github.com/windmill-labs/windmill/issues/4045)) ([0d35741](https://github.com/windmill-labs/windmill/commit/0d3574158dbe963c940e06b98896f5d4ab3c3edb)) +* improve failure id assignment for parallel forloop ([5657ccd](https://github.com/windmill-labs/windmill/commit/5657ccdbe4b19756f6365579d8ef4760450d08d7)) +* persist enums change for string type ([a264a38](https://github.com/windmill-labs/windmill/commit/a264a383de5e57c25b4d3b9250f260f3ed64fc2d)) + +## [1.359.0](https://github.com/windmill-labs/windmill/compare/v1.358.1...v1.359.0) (2024-07-08) + + +### Features + +* **frontend:** improve table actions ([#4040](https://github.com/windmill-labs/windmill/issues/4040)) ([0ffac69](https://github.com/windmill-labs/windmill/commit/0ffac69406e1cd068a172b528037bb396fe9e092)) + + +### Bug Fixes + +* **backend:** make value of flow_version not null ([#4039](https://github.com/windmill-labs/windmill/issues/4039)) ([11b05b3](https://github.com/windmill-labs/windmill/commit/11b05b3d17897d45cda032353eecbd24ad7f2ec5)) +* flow versioning edge case ([#4037](https://github.com/windmill-labs/windmill/issues/4037)) ([729f911](https://github.com/windmill-labs/windmill/commit/729f911b436613991c351c6c48db9429d6a8e8cb)) +* **frontend:** fix navbar item overflow ([#4041](https://github.com/windmill-labs/windmill/issues/4041)) ([95c2e1b](https://github.com/windmill-labs/windmill/commit/95c2e1b21c1e0ca169513bf1fa773fe9e8dd8e81)) +* improve handling of schedules with retries and concurrency limits ([e100622](https://github.com/windmill-labs/windmill/commit/e10062234efa2b87364468a089b6a888123f73b6)) +* improve input history ([db19c86](https://github.com/windmill-labs/windmill/commit/db19c86a2d5da734fb3485056447b5bf879bd68e)) +* improve performance of content search for large repos ([299e7cf](https://github.com/windmill-labs/windmill/commit/299e7cf5cf87aedf53b97d002545031de49fc9b9)) + +## [1.358.1](https://github.com/windmill-labs/windmill/compare/v1.358.0...v1.358.1) (2024-07-05) + + +### Bug Fixes + +* fix vscode extension dev mode with flows ([b30bde9](https://github.com/windmill-labs/windmill/commit/b30bde9a9bf7fa912cd34b5fa956df4b58a6bf5c)) + +## [1.358.0](https://github.com/windmill-labs/windmill/compare/v1.357.0...v1.358.0) (2024-07-05) + + +### Features + +* **backend:** better filtering for audit logs API ([#4023](https://github.com/windmill-labs/windmill/issues/4023)) ([fde9d2a](https://github.com/windmill-labs/windmill/commit/fde9d2a3f3e673df121e87bc7c5cf567e0641e29)) +* **frontend:** add vertical navbars ([#4027](https://github.com/windmill-labs/windmill/issues/4027)) ([aa4967e](https://github.com/windmill-labs/windmill/commit/aa4967ef1e7edf0a794f4202a31f7233f09e2fd8)) +* **frontend:** app navbar ([#3992](https://github.com/windmill-labs/windmill/issues/3992)) ([7434edd](https://github.com/windmill-labs/windmill/commit/7434edda065701e0cf41b9c72e96cead37b30b32)) +* restore flow version as fork ([#4032](https://github.com/windmill-labs/windmill/issues/4032)) ([d724761](https://github.com/windmill-labs/windmill/commit/d724761ecc02bf8a515e4562f4330258a4ef52d2)) + + +### Bug Fixes + +* **frontend:** fix navbar navigation for not deployed apps ([#4033](https://github.com/windmill-labs/windmill/issues/4033)) ([a9c4555](https://github.com/windmill-labs/windmill/commit/a9c455567b386d92e13a7d9c51dc05ca3e51e0db)) +* **frontend:** fix theme leak ([#4029](https://github.com/windmill-labs/windmill/issues/4029)) ([c4673f8](https://github.com/windmill-labs/windmill/commit/c4673f8dc5a664773800bfa24b901e36d63e8b70)) +* **frontend:** improve component list ([#4028](https://github.com/windmill-labs/windmill/issues/4028)) ([448d5ad](https://github.com/windmill-labs/windmill/commit/448d5ad2283bc82d9ac90fdde45a76879f3758ff)) + +## [1.357.0](https://github.com/windmill-labs/windmill/compare/v1.356.1...v1.357.0) (2024-07-04) + + +### Features + +* flow versioning ([#4009](https://github.com/windmill-labs/windmill/issues/4009)) ([e50f175](https://github.com/windmill-labs/windmill/commit/e50f1752da472d2b8e8b3793f1b3bc91697a5802)) + + +### Bug Fixes + +* **backend:** correct version join of list search flows ([#4022](https://github.com/windmill-labs/windmill/issues/4022)) ([e361acc](https://github.com/windmill-labs/windmill/commit/e361accf47285c37aed9b242a8cc7b0765c4f17d)) +* **backend:** switch job run to user db ([#4017](https://github.com/windmill-labs/windmill/issues/4017)) ([26fd427](https://github.com/windmill-labs/windmill/commit/26fd4271803107f739dad782be87a4037af40350)) +* fix wrong interaction between suspended steps and forloop parallelism ([4399730](https://github.com/windmill-labs/windmill/commit/4399730ab493112676d7f7d79fb42a638cab9d83)) +* **frontend:** improve flow input completion prompt when not in a loop ([#4021](https://github.com/windmill-labs/windmill/issues/4021)) ([55eac8f](https://github.com/windmill-labs/windmill/commit/55eac8ffec54a59b3b7a387b92691766f4c1fa73)) +* **frontend:** only load flow/app versions on drawer opening ([#4020](https://github.com/windmill-labs/windmill/issues/4020)) ([3e783e3](https://github.com/windmill-labs/windmill/commit/3e783e30e6ffea606b4c974b315d5ea400d07355)) +* improve dedicated workers for flows ([17d12b5](https://github.com/windmill-labs/windmill/commit/17d12b512bb3bdfa3617d608f725f444853ed868)) +* improve dedicated workers for flows ([f58d82f](https://github.com/windmill-labs/windmill/commit/f58d82fedff0f406e1d5ab255695ac34d9962e1d)) +* improve flow cancellation ([#4013](https://github.com/windmill-labs/windmill/issues/4013)) ([1a403f8](https://github.com/windmill-labs/windmill/commit/1a403f8f39a100a68ca0346e3439ed29e26b8d4f)) +* memory optimization for flow with big args ([#4019](https://github.com/windmill-labs/windmill/issues/4019)) ([708b270](https://github.com/windmill-labs/windmill/commit/708b2702cada2713304a13b00846b789586b393f)) +* update bun 1.1.18 ([c2cd18d](https://github.com/windmill-labs/windmill/commit/c2cd18d4dad8c575fd4c82056224c19667012b5f)) + +## [1.356.1](https://github.com/windmill-labs/windmill/compare/v1.356.0...v1.356.1) (2024-07-03) + + +### Bug Fixes + +* 50MB limitation only on non-enterprise ([0753072](https://github.com/windmill-labs/windmill/commit/07530725e6785cef151d2460a3f5043935475065)) +* add s3 object support to lightweight arg input ([45cd01c](https://github.com/windmill-labs/windmill/commit/45cd01c6ed083ca67f61ab00cbbbcac5d2964b2c)) + +## [1.356.0](https://github.com/windmill-labs/windmill/compare/v1.355.4...v1.356.0) (2024-07-02) + + +### Features + +* allow downloading args over the size limit ([d13a357](https://github.com/windmill-labs/windmill/commit/d13a357b2609a8ee4f3fac43f248eede3f8ad38d)) +* include token label as end user ([#3988](https://github.com/windmill-labs/windmill/issues/3988)) ([991031b](https://github.com/windmill-labs/windmill/commit/991031b96d3abb8d3c0f40a53f95e3c32e4434cd)) +* runs page have sharable args in hash of links ([792bbb3](https://github.com/windmill-labs/windmill/commit/792bbb3ff99818ccc39c1b0d2e3ec08698d26d47)) + + +### Bug Fixes + +* add support for result.json for powershell ([155ca5f](https://github.com/windmill-labs/windmill/commit/155ca5fe26eeb988282040557e4068307bf81def)) +* improve browser history navigation (back, forward) ([7248b0a](https://github.com/windmill-labs/windmill/commit/7248b0a5a96b6b1aed661d80f4e479d867751ad1)) +* lookback selector to manually look for older jobs and prevent inaccurate concurrency graphs ([#4007](https://github.com/windmill-labs/windmill/issues/4007)) ([ca22a87](https://github.com/windmill-labs/windmill/commit/ca22a879dc121a96e50e18ed14f9f9dabca451a5)) +* make gql params optional by default + use default value if undefined ([#4003](https://github.com/windmill-labs/windmill/issues/4003)) ([d736b86](https://github.com/windmill-labs/windmill/commit/d736b8692f232be6d9764cb5ee5e4bca26a998b1)) + +## [1.355.4](https://github.com/windmill-labs/windmill/compare/v1.355.3...v1.355.4) (2024-06-30) + + +### Bug Fixes + +* **frontend:** fix Decision Tree + fix Infinite list default ts code … ([#3993](https://github.com/windmill-labs/windmill/issues/3993)) ([49b6cf1](https://github.com/windmill-labs/windmill/commit/49b6cf1f37aa276cc70e5619d87b68c729f12a73)) +* improve runs page performance when minTs is defined ([2e184c9](https://github.com/windmill-labs/windmill/commit/2e184c9894ee6f900368908f4176cbeb6783e15f)) +* improve runs page performance when minTs is defined ([e662439](https://github.com/windmill-labs/windmill/commit/e66243969e2578e3bb50e0e88ecd84088437767c)) + +## [1.355.3](https://github.com/windmill-labs/windmill/compare/v1.355.2...v1.355.3) (2024-06-27) + + +### Bug Fixes + +* fix OIDC ([81c7edf](https://github.com/windmill-labs/windmill/commit/81c7edffeabbfc0fd628a0e5b1d60d2c52e12249)) +* snowflake datetime display format ([#3995](https://github.com/windmill-labs/windmill/issues/3995)) ([963d0a4](https://github.com/windmill-labs/windmill/commit/963d0a4dfe94c43d6ca94dcacda43cb0e563a857)) + +## [1.355.2](https://github.com/windmill-labs/windmill/compare/v1.355.1...v1.355.2) (2024-06-26) + + +### Bug Fixes + +* non-ASCII support in parsers ([#3986](https://github.com/windmill-labs/windmill/issues/3986)) ([94b6e9e](https://github.com/windmill-labs/windmill/commit/94b6e9efa77c410444d4b4e78148dbb8e44a727e)) + +## [1.355.1](https://github.com/windmill-labs/windmill/compare/v1.355.0...v1.355.1) (2024-06-26) + + +### Bug Fixes + +* fix build ([17c586e](https://github.com/windmill-labs/windmill/commit/17c586ed8f7bbad4e5e5db26a909e8a06521696d)) + +## [1.355.0](https://github.com/windmill-labs/windmill/compare/v1.354.0...v1.355.0) (2024-06-26) + + +### Features + +* add wmill cli image ([fa2f732](https://github.com/windmill-labs/windmill/commit/fa2f732182c8ac103c3fdcb0cfe5eecba2474382)) +* **frontend:** Add context for inner components of list, groups and … ([#3974](https://github.com/windmill-labs/windmill/issues/3974)) ([73175ac](https://github.com/windmill-labs/windmill/commit/73175acc018651eb0d3c161c6176e96576178813)) + + +### Bug Fixes + +* **frontend:** add tooltip to schedule pausing ([#3984](https://github.com/windmill-labs/windmill/issues/3984)) ([08476a3](https://github.com/windmill-labs/windmill/commit/08476a379456039cc8569125ca3535008d6f7bea)) +* hide draft only items in pickers and from ops ([#3977](https://github.com/windmill-labs/windmill/issues/3977)) ([dd80483](https://github.com/windmill-labs/windmill/commit/dd804839f07aa56f6707fa122fa8e8bbcef81f6e)) +* parallel branchall disordered skip failure retrieval ([#3975](https://github.com/windmill-labs/windmill/issues/3975)) ([e9b310e](https://github.com/windmill-labs/windmill/commit/e9b310eee0d73f3518c85b572e05473c449959a0)) +* remove useless metrics ([#3962](https://github.com/windmill-labs/windmill/issues/3962)) ([f29c46a](https://github.com/windmill-labs/windmill/commit/f29c46a282e7cb1a9f093a3089e4eefd24a7bc1e)) + +## [1.354.0](https://github.com/windmill-labs/windmill/compare/v1.353.0...v1.354.0) (2024-06-25) + + +### Features + +* **frontend:** app editor help box ([#3970](https://github.com/windmill-labs/windmill/issues/3970)) ([cab248c](https://github.com/windmill-labs/windmill/commit/cab248cefff73bab818c477b4e40220b3d81eac9)) +* schedule pausing ([#3976](https://github.com/windmill-labs/windmill/issues/3976)) ([f8dc215](https://github.com/windmill-labs/windmill/commit/f8dc21542fd3a57e4272d874a034a3af1cdd8348)) + +## [1.353.0](https://github.com/windmill-labs/windmill/compare/v1.352.0...v1.353.0) (2024-06-24) + + +### Features + +* **frontend:** add an indicator when a for loop has no iterator expression ([#3961](https://github.com/windmill-labs/windmill/issues/3961)) ([ee7db8c](https://github.com/windmill-labs/windmill/commit/ee7db8c8e33eb990279d5badc95dc54b0c6124dd)) + + +### Bug Fixes + +* **frontend:** Add missing on change event when connecting an input ([#3964](https://github.com/windmill-labs/windmill/issues/3964)) ([a804e01](https://github.com/windmill-labs/windmill/commit/a804e013c2672478469edd5e512d7ce63ba92bcd)) +* **frontend:** improve disable style of the select component ([#3938](https://github.com/windmill-labs/windmill/issues/3938)) ([183361d](https://github.com/windmill-labs/windmill/commit/183361df85e5efbcea4a53bddc3e641cbf73acd2)) +* Improve cancel selected jobs action ([#3960](https://github.com/windmill-labs/windmill/issues/3960)) ([4ef3823](https://github.com/windmill-labs/windmill/commit/4ef38233c1a21b143456fe79d5675b2ad8f3606e)) + +## [1.352.0](https://github.com/windmill-labs/windmill/compare/v1.351.0...v1.352.0) (2024-06-22) + + +### Features + +* add extra metadata to folders/resources/types + path prefix filtering for all + improve groups UI ([#3936](https://github.com/windmill-labs/windmill/issues/3936)) ([b57afc8](https://github.com/windmill-labs/windmill/commit/b57afc8f68f691ad5ef7fb16aafe6fae7d1138e9)) +* fallback to default hub if official script not found on private hub ([#3951](https://github.com/windmill-labs/windmill/issues/3951)) ([0c66122](https://github.com/windmill-labs/windmill/commit/0c661220cf1fb7eb37ad7f39b1fa6d29570edda2)) + + +### Bug Fixes + +* cache wasm ([53eeef0](https://github.com/windmill-labs/windmill/commit/53eeef05032f04637249c2557d6d864f9446a9a1)) +* improve perf of forloop with parallelism massively ([e0479e0](https://github.com/windmill-labs/windmill/commit/e0479e05f7b1a212906afd8c5e268f3d48266311)) + +## [1.351.0](https://github.com/windmill-labs/windmill/compare/v1.350.3...v1.351.0) (2024-06-21) + + +### Features + +* **frontend:** improve approval form edition + add a delete button t… ([#3946](https://github.com/windmill-labs/windmill/issues/3946)) ([25a460b](https://github.com/windmill-labs/windmill/commit/25a460be858ce020c40cd120e5aef2a79ba362d6)) + + +### Bug Fixes + +* improve support of relative paths in subflows and apps ([ba76d87](https://github.com/windmill-labs/windmill/commit/ba76d8749a9524ed356611c09f874da60f3b954a)) + +## [1.350.3](https://github.com/windmill-labs/windmill/compare/v1.350.2...v1.350.3) (2024-06-21) + + +### Bug Fixes + +* **cli:** fix push flow support for windows ([1042a06](https://github.com/windmill-labs/windmill/commit/1042a06a12ae31d31facd1dfab10cbd2b10c86f5)) + +## [1.350.2](https://github.com/windmill-labs/windmill/compare/v1.350.1...v1.350.2) (2024-06-21) + + +### Bug Fixes + +* **cli:** support windows more thoroughly + fix generate flow locks ([#3944](https://github.com/windmill-labs/windmill/issues/3944)) ([3f0cd63](https://github.com/windmill-labs/windmill/commit/3f0cd6349de37358f3942772254e2509383305b4)) + +## [1.350.1](https://github.com/windmill-labs/windmill/compare/v1.350.0...v1.350.1) (2024-06-20) + + +### Bug Fixes + +* **cli:** fix inital sync pull generating wrong flow lockfile ([a43923b](https://github.com/windmill-labs/windmill/commit/a43923b3266b7b5781b0a5dc672c401377ae6e20)) + +## [1.350.0](https://github.com/windmill-labs/windmill/compare/v1.349.1...v1.350.0) (2024-06-20) + + +### Features + +* **frontend:** add indicator when required field are missing ([#3935](https://github.com/windmill-labs/windmill/issues/3935)) ([7007f14](https://github.com/windmill-labs/windmill/commit/7007f14a1073f8f43b2500fae9c75d4222928802)) + +## [1.349.1](https://github.com/windmill-labs/windmill/compare/v1.349.0...v1.349.1) (2024-06-19) + + +### Bug Fixes + +* show workers without worker groups ([5c5b98e](https://github.com/windmill-labs/windmill/commit/5c5b98e0b8f0926d5f81c1894de8d367201da2d8)) + +## [1.349.0](https://github.com/windmill-labs/windmill/compare/v1.348.2...v1.349.0) (2024-06-19) + + +### Features + +* **frontend:** improve range ([#3924](https://github.com/windmill-labs/windmill/issues/3924)) ([a1dc0fd](https://github.com/windmill-labs/windmill/commit/a1dc0fd7c22244d97429dbb65ded23e27badec6a)) + +## [1.348.2](https://github.com/windmill-labs/windmill/compare/v1.348.1...v1.348.2) (2024-06-19) + + +### Bug Fixes + +* add jobid to background runnables and fix zindex issue of inline script editor ([a2b88c0](https://github.com/windmill-labs/windmill/commit/a2b88c0080b8cfa747bf221bde9d22781e8034a9)) +* **frontend:** fix full screen mode of the EvalInputEditor ([#3928](https://github.com/windmill-labs/windmill/issues/3928)) ([c9c017e](https://github.com/windmill-labs/windmill/commit/c9c017e27a71bfe618974fb0906283a6c1a82aa4)) +* handle past inputs with oneOf ([#3932](https://github.com/windmill-labs/windmill/issues/3932)) ([f5e8d71](https://github.com/windmill-labs/windmill/commit/f5e8d71f0b9e527d3658547f3cb193b6dbe4bcb0)) + +## [1.348.1](https://github.com/windmill-labs/windmill/compare/v1.348.0...v1.348.1) (2024-06-19) + + +### Bug Fixes + +* handle better single step parallel flows ([6d4b8a2](https://github.com/windmill-labs/windmill/commit/6d4b8a2e4f1ef5b067c2e04600ac5defa489141c)) + +## [1.348.0](https://github.com/windmill-labs/windmill/compare/v1.347.1...v1.348.0) (2024-06-18) + + +### Features + +* add support for bytea in pg ([#3926](https://github.com/windmill-labs/windmill/issues/3926)) ([b753e4d](https://github.com/windmill-labs/windmill/commit/b753e4d06c431035084ba325be7573354cd3b621)) +* **frontend:** Enable changing kind for string properties ([#3925](https://github.com/windmill-labs/windmill/issues/3925)) ([cfab185](https://github.com/windmill-labs/windmill/commit/cfab1853abb3557a0efc14e4d5ca05872ba27f76)) +* **frontend:** worker page improvements ([#3921](https://github.com/windmill-labs/windmill/issues/3921)) ([b904a36](https://github.com/windmill-labs/windmill/commit/b904a36356849f854aaf6e91b9767653d7c6802b)) + + +### Bug Fixes + +* **frontend:** fix InlineScriptEditor zIndex ([#3922](https://github.com/windmill-labs/windmill/issues/3922)) ([b56f77b](https://github.com/windmill-labs/windmill/commit/b56f77b1da10085b9f4436a2aac5ba13cf14bdaf)) + +## [1.347.1](https://github.com/windmill-labs/windmill/compare/v1.347.0...v1.347.1) (2024-06-18) + + +### Bug Fixes + +* add more debug logs around http client errors ([a64b099](https://github.com/windmill-labs/windmill/commit/a64b0990846c41988b4d1717123672e2a59289bd)) +* add more debug logs around http client errors ([631b981](https://github.com/windmill-labs/windmill/commit/631b981b8e75165d4dc2ef706b415af4a1384a48)) + +## [1.347.0](https://github.com/windmill-labs/windmill/compare/v1.346.2...v1.347.0) (2024-06-17) + + +### Features + +* **frontend:** UI customisation improvements + add support for object enums ([#3910](https://github.com/windmill-labs/windmill/issues/3910)) ([25024a9](https://github.com/windmill-labs/windmill/commit/25024a920db2956055a4eec6691f761c3048f6ee)) +* oneOf inputs ([#3893](https://github.com/windmill-labs/windmill/issues/3893)) ([2df9c69](https://github.com/windmill-labs/windmill/commit/2df9c6902369c0f9e9dde98ddcf9d06d38646a3e)) + + +### Bug Fixes + +* fix permission for scoped tokens on jobs_u paths ([05d2197](https://github.com/windmill-labs/windmill/commit/05d219761892508db8ef9a46ffaf23bac26207f3)) + +## [1.346.2](https://github.com/windmill-labs/windmill/compare/v1.346.1...v1.346.2) (2024-06-17) + + +### Bug Fixes + +* **frontend:** revert range ([#3916](https://github.com/windmill-labs/windmill/issues/3916)) ([c94c76f](https://github.com/windmill-labs/windmill/commit/c94c76f59bfbd852cfc486edf4a51ee6ab8d4501)) + +## [1.346.1](https://github.com/windmill-labs/windmill/compare/v1.346.0...v1.346.1) (2024-06-17) + + +### Bug Fixes + +* job perms and job logs grants ([#3914](https://github.com/windmill-labs/windmill/issues/3914)) ([96dfacb](https://github.com/windmill-labs/windmill/commit/96dfacbfc8a2e418a39a7dc2ebc1082f00ef510f)) + +## [1.346.0](https://github.com/windmill-labs/windmill/compare/v1.345.2...v1.346.0) (2024-06-17) + + +### Features + +* accelerate bun through caches ([#3909](https://github.com/windmill-labs/windmill/issues/3909)) ([28afe59](https://github.com/windmill-labs/windmill/commit/28afe59a4ab4e97a18e4ca7a893d83c329ee4078)) +* **frontend:** event handlers ([#3902](https://github.com/windmill-labs/windmill/issues/3902)) ([4f0e111](https://github.com/windmill-labs/windmill/commit/4f0e111563f5f5ab7b280aa98a89f48cb3637e59)) +* replace ephemeral tokens by jwt ([#3908](https://github.com/windmill-labs/windmill/issues/3908)) ([21b9acc](https://github.com/windmill-labs/windmill/commit/21b9accca1a8ab5c728fce15b3a7890375f11274)) + + +### Bug Fixes + +* fix workflow as code ([d518e23](https://github.com/windmill-labs/windmill/commit/d518e2359d522df3c8cf23baaf444eabfb11246f)) +* job perms for agent mode ([#3911](https://github.com/windmill-labs/windmill/issues/3911)) ([e0ac22b](https://github.com/windmill-labs/windmill/commit/e0ac22ba4a59da4ca6c548de1ce0b5f394a49c66)) + +## [1.345.2](https://github.com/windmill-labs/windmill/compare/v1.345.1...v1.345.2) (2024-06-13) + + +### Bug Fixes + +* add database grants to oustanding_wait_time table ([96767ec](https://github.com/windmill-labs/windmill/commit/96767ec042b12af6c1dfb5fa1263847934975cb9)) + +## [1.345.1](https://github.com/windmill-labs/windmill/compare/v1.345.0...v1.345.1) (2024-06-13) + + +### Bug Fixes + +* correct exception handling in PHP wrapper ([#3901](https://github.com/windmill-labs/windmill/issues/3901)) ([320ba75](https://github.com/windmill-labs/windmill/commit/320ba754a4dcfb096807cfedbab8264be11dfb32)) +* enums derivable from code ([6c2420f](https://github.com/windmill-labs/windmill/commit/6c2420f118d5665eca9ccc7a4f0b2ccd018738aa)) + +## [1.345.0](https://github.com/windmill-labs/windmill/compare/v1.344.3...v1.345.0) (2024-06-12) + + +### Features + +* **frontend:** Generated UI editor + Schema Form complete refactor ([#3835](https://github.com/windmill-labs/windmill/issues/3835)) ([2344077](https://github.com/windmill-labs/windmill/commit/2344077b340ba22e40eb5ddb85c70f21c0c9e801)) + +## [1.344.3](https://github.com/windmill-labs/windmill/compare/v1.344.2...v1.344.3) (2024-06-11) + + +### Bug Fixes + +* fix dependency tracking for single scripts ([c966979](https://github.com/windmill-labs/windmill/commit/c96697928fa0ef3cd4507f377a73f3b51560fbf7)) + +## [1.344.2](https://github.com/windmill-labs/windmill/compare/v1.344.1...v1.344.2) (2024-06-11) + + +### Bug Fixes + +* fix dependency tracking for single scripts ([28d7510](https://github.com/windmill-labs/windmill/commit/28d7510584a47f98f87b7d0e87a663121b2bb5ef)) + +## [1.344.1](https://github.com/windmill-labs/windmill/compare/v1.344.0...v1.344.1) (2024-06-11) + + +### Bug Fixes + +* cancel jobs button missing chevron ([#3896](https://github.com/windmill-labs/windmill/issues/3896)) ([b9092e5](https://github.com/windmill-labs/windmill/commit/b9092e591ec08fed65e2f1e1e0449461fcc9ec41)) +* fix dependency tracking for single scripts ([5f119de](https://github.com/windmill-labs/windmill/commit/5f119de6cb915f234c868da1aa02050481cbc4b0)) +* upgrade deno to 1.44.1 ([f8f6d8b](https://github.com/windmill-labs/windmill/commit/f8f6d8beaae2cdd754808074886d793add6144b6)) + +## [1.344.0](https://github.com/windmill-labs/windmill/compare/v1.343.3...v1.344.0) (2024-06-11) + + +### Features + +* cancel jobs based on filters ([#3874](https://github.com/windmill-labs/windmill/issues/3874)) ([7474145](https://github.com/windmill-labs/windmill/commit/7474145f0edf2cb17b9ee90e35f605b367eae60d)) + + +### Bug Fixes + +* **backend:** wrong previous result used in flow for-loop ([dcff6e9](https://github.com/windmill-labs/windmill/commit/dcff6e9ff3eb2f9d75d39a8ec20d0a9d1edf14a1)) +* **frontend:** Fix Timeline/Node Status tab zIndex ([#3894](https://github.com/windmill-labs/windmill/issues/3894)) ([609f332](https://github.com/windmill-labs/windmill/commit/609f332116f4fc3ab934d2d51fc34754fa30b6db)) + +## [1.343.3](https://github.com/windmill-labs/windmill/compare/v1.343.2...v1.343.3) (2024-06-11) + + +### Bug Fixes + +* flow args should always render in test flow ([1be0bfa](https://github.com/windmill-labs/windmill/commit/1be0bfaf7b676cd9381ceee12dd2923620c8e90e)) +* improve init script handling of windows newlines ([eb068fd](https://github.com/windmill-labs/windmill/commit/eb068fd086b9023c073c9e4adbff3b79da74c374)) + +## [1.343.2](https://github.com/windmill-labs/windmill/compare/v1.343.1...v1.343.2) (2024-06-10) + + +### Bug Fixes + +* fix nativets scripts ([36d0c4e](https://github.com/windmill-labs/windmill/commit/36d0c4e992551c80c13312c255b0b6c816a0cb32)) + +## [1.343.1](https://github.com/windmill-labs/windmill/compare/v1.343.0...v1.343.1) (2024-06-10) + + +### Bug Fixes + +* fix reorder of args in schema form ([61bb069](https://github.com/windmill-labs/windmill/commit/61bb069da3d24a547403234c29dd243eb147a529)) +* update deno_core to latest to work better with rust 1.78 ([#3890](https://github.com/windmill-labs/windmill/issues/3890)) ([ec248dd](https://github.com/windmill-labs/windmill/commit/ec248ddaecb5adba5584d39c90cf76bcf5a8e9f2)) + +## [1.343.0](https://github.com/windmill-labs/windmill/compare/v1.342.0...v1.343.0) (2024-06-10) + + +### Features + +* **cli:** add wmill flow generate-locks ([1957ca0](https://github.com/windmill-labs/windmill/commit/1957ca03b337788575dadd67d9cf83208c886933)) +* support selecting by columns in table ([b1f9272](https://github.com/windmill-labs/windmill/commit/b1f9272d9f1e6ff5e73686621d24e43e46988233)) +* towards cloud events webhook compliance ([#3883](https://github.com/windmill-labs/windmill/issues/3883)) ([d2d87f4](https://github.com/windmill-labs/windmill/commit/d2d87f4c9751767198be34b6adcb26385f29f05d)) +* track dependency map for bun + inline script of flows ([5ae8592](https://github.com/windmill-labs/windmill/commit/5ae859279285bd63f28d2313bfd0b346131f832c)) + + +### Bug Fixes + +* `deprecated` Node.js usage in `checkout@v3` ([#3872](https://github.com/windmill-labs/windmill/issues/3872)) ([11fba4f](https://github.com/windmill-labs/windmill/commit/11fba4fbca9504a38cfcca488e336b070a40f3b5)) +* **frontend:** Add missing InitializeComponent for components Flow Status by id and Log by Job id ([#3882](https://github.com/windmill-labs/windmill/issues/3882)) ([6c4e7d0](https://github.com/windmill-labs/windmill/commit/6c4e7d0e93cb50bd29c0d6d57368b7fe84bb0879)) +* **frontend:** encrypt openai key on workspace creation ([#3879](https://github.com/windmill-labs/windmill/issues/3879)) ([387ea44](https://github.com/windmill-labs/windmill/commit/387ea4469f9903914f0c32802fac06d151154f9a)) +* **frontend:** Fix AgChart when the component is hidden ([#3876](https://github.com/windmill-labs/windmill/issues/3876)) ([be092d2](https://github.com/windmill-labs/windmill/commit/be092d2527a685b83f4398133e67cf19eb91d9b4)) +* **frontend:** job detail horizontal padding small screens ([#3881](https://github.com/windmill-labs/windmill/issues/3881)) ([66e6fe3](https://github.com/windmill-labs/windmill/commit/66e6fe374c33ee8a027c5ea37a13e83bf7ca8b30)) +* **frontend:** Remove useless RunnableWrapper on Log and Flow status … ([#3877](https://github.com/windmill-labs/windmill/issues/3877)) ([ef2329b](https://github.com/windmill-labs/windmill/commit/ef2329bb87bc6439ddeb63deab5f1fa4c7a75066)) +* paginate listTokens page ([0975fb6](https://github.com/windmill-labs/windmill/commit/0975fb6950020b7afbf561565a2635d2173ae2f6)) +* remove main decorator after split from end of file during py imports parsing ([#3887](https://github.com/windmill-labs/windmill/issues/3887)) ([f29f71b](https://github.com/windmill-labs/windmill/commit/f29f71bfdecf1d804819023a630c3588ebd9af0a)) +* retrigger bun dependencies jobs for importers when using common deps ([da1ea04](https://github.com/windmill-labs/windmill/commit/da1ea04c794e0eae7bde03898dd5c68bff9de9bd)) +* use full hostname as worker ping hostname and add it in other contexts ([ebf37eb](https://github.com/windmill-labs/windmill/commit/ebf37eb16b0eecca37bece95c6fa347c9f976622)) + +## [1.342.0](https://github.com/windmill-labs/windmill/compare/v1.341.1...v1.342.0) (2024-06-04) + + +### Features + +* customer portal link ([#3868](https://github.com/windmill-labs/windmill/issues/3868)) ([14bd5fe](https://github.com/windmill-labs/windmill/commit/14bd5fe0515bb2e746656cf3d6ee5bbd5c727510)) + + +### Bug Fixes + +* handle csv with different separators in csv preview ([b756a3b](https://github.com/windmill-labs/windmill/commit/b756a3b31ef62cbfacd20bcffb0da8482dd57565)) + +## [1.341.1](https://github.com/windmill-labs/windmill/compare/v1.341.0...v1.341.1) (2024-06-04) + + +### Bug Fixes + +* Filter on path not working ([#3863](https://github.com/windmill-labs/windmill/issues/3863)) ([98869ef](https://github.com/windmill-labs/windmill/commit/98869efdabfd5e275c76fd811b8337c00c9574a5)) +* fix writing binary file from global cache in go ([ef9ad1a](https://github.com/windmill-labs/windmill/commit/ef9ad1af49d9d22a790cba4edb21dbbfa6df0b31)) +* flow status viewer takes all the width on the runs page ([b6016ab](https://github.com/windmill-labs/windmill/commit/b6016abb222481a16dfb684a782c763cf3966856)) +* improve flow status viewer to display the step details on third tab ([f54cfd3](https://github.com/windmill-labs/windmill/commit/f54cfd3640a2be0bb25eacea979d9ea056e190ad)) +* lock steps inside whileloops for flows ([439ab8a](https://github.com/windmill-labs/windmill/commit/439ab8ab14547991bb4e60e0b377d61e81d4b1b9)) +* make typescript client compatible with cf workers ([#3807](https://github.com/windmill-labs/windmill/issues/3807)) ([a9bf5a4](https://github.com/windmill-labs/windmill/commit/a9bf5a46831cf3b3e262167af99af1ebb9336f36)) + +## [1.341.0](https://github.com/windmill-labs/windmill/compare/v1.340.2...v1.341.0) (2024-06-03) + + +### Features + +* **frontend:** Fix how runnable tied to a table actions are triggered + Display the sync columnDef error only in the editor ([#3862](https://github.com/windmill-labs/windmill/issues/3862)) ([76b6577](https://github.com/windmill-labs/windmill/commit/76b65771a03e35b6d489731f210e24640efda54b)) +* warn when jobs spent a long time waiting in queue ([#3856](https://github.com/windmill-labs/windmill/issues/3856)) ([203264b](https://github.com/windmill-labs/windmill/commit/203264b87174b9774819bcf008bc4c41b866ccd9)) + + +### Bug Fixes + +* fix python client for S3Object ([44c36cd](https://github.com/windmill-labs/windmill/commit/44c36cdeb53eeb577dc7af6c2d64b75824492e1d)) +* further restrict job api to logged in workspace users or anonymous jobs only" ([#3860](https://github.com/windmill-labs/windmill/issues/3860)) ([181cb7d](https://github.com/windmill-labs/windmill/commit/181cb7dec99d92b6e7450e4a0f5af75994c82ec3)) + +## [1.340.2](https://github.com/windmill-labs/windmill/compare/v1.340.1...v1.340.2) (2024-05-31) + + +### Bug Fixes + +* add audit log exception to schedules ([2359cdc](https://github.com/windmill-labs/windmill/commit/2359cdc128ebfdd3fc2eff97877ae9957def9270)) +* fix csv preview for storage renderer ([326446e](https://github.com/windmill-labs/windmill/commit/326446e5cefb8e99142d13ea030d51c5d317eaf9)) + +## [1.340.1](https://github.com/windmill-labs/windmill/compare/v1.340.0...v1.340.1) (2024-05-31) + + +### Bug Fixes + +* typescript file upload supports arbitrary storage ([9e822d4](https://github.com/windmill-labs/windmill/commit/9e822d4c75152e7a651f31c74ee0d2c9783cd993)) + +## [1.340.0](https://github.com/windmill-labs/windmill/compare/v1.339.2...v1.340.0) (2024-05-31) + + +### Features + +* chart interactivity: click points on the graph to select the corresponding jobs ([#3851](https://github.com/windmill-labs/windmill/issues/3851)) ([5156e29](https://github.com/windmill-labs/windmill/commit/5156e291fa818388bcf5734cb05a3095f6bf1b11)) +* replace polars with datafusion for data preview ([e07c262](https://github.com/windmill-labs/windmill/commit/e07c2621e91a44fa6de7244469aa80e20b562b01)) +* support multiple object storage + parquet_csv + polars -> datafusion" ([#3853](https://github.com/windmill-labs/windmill/issues/3853)) ([a22dc98](https://github.com/windmill-labs/windmill/commit/a22dc985fa6f1b49e56fa0f3d4f5152a50e16a04)) + + +### Bug Fixes + +* simple subflow approval step triggering timeouts ([be160f6](https://github.com/windmill-labs/windmill/commit/be160f6e46d766bbdc0dd2f60b5fb5e6222809d7)) +* wait for api to be read to load explorer table ([96246cd](https://github.com/windmill-labs/windmill/commit/96246cd697bfa82d0890f37a3708c7a376a5de28)) + +## [1.339.2](https://github.com/windmill-labs/windmill/compare/v1.339.1...v1.339.2) (2024-05-29) + + +### Bug Fixes + +* worker memory usage ([#3845](https://github.com/windmill-labs/windmill/issues/3845)) ([e052dd5](https://github.com/windmill-labs/windmill/commit/e052dd5f6e7d8f1f7799204dab2f98e023efaec1)) + +## [1.339.1](https://github.com/windmill-labs/windmill/compare/v1.339.0...v1.339.1) (2024-05-29) + + +### Bug Fixes + +* allow_user_resoruces default deserialization ([7238274](https://github.com/windmill-labs/windmill/commit/7238274d1c7b80e831aa91eac3a6577d9ab462d4)) + +## [1.339.0](https://github.com/windmill-labs/windmill/compare/v1.338.3...v1.339.0) (2024-05-29) + + +### Features + +* display last key renewal attempt ([#3839](https://github.com/windmill-labs/windmill/issues/3839)) ([dc2d7e1](https://github.com/windmill-labs/windmill/commit/dc2d7e1c8f5f7c50be04cfea6986ce03a3e33c7b)) + +## [1.338.3](https://github.com/windmill-labs/windmill/compare/v1.338.2...v1.338.3) (2024-05-29) + + +### Bug Fixes + +* fix resource type search ([b01e335](https://github.com/windmill-labs/windmill/commit/b01e33523da72050bc08b47bd84e0d8fc88f6dda)) + +## [1.338.2](https://github.com/windmill-labs/windmill/compare/v1.338.1...v1.338.2) (2024-05-28) + + +### Bug Fixes + +* worker metrics ([#3837](https://github.com/windmill-labs/windmill/issues/3837)) ([5d2b244](https://github.com/windmill-labs/windmill/commit/5d2b244869fb9a6a7d006cfc95b22d9e83d3b9bb)) + +## [1.338.1](https://github.com/windmill-labs/windmill/compare/v1.338.0...v1.338.1) (2024-05-28) + + +### Bug Fixes + +* fix retry not working on single step flow due to opt ([6166c4d](https://github.com/windmill-labs/windmill/commit/6166c4d7aae9eddcee92f950959b9d2290bc917a)) +* remove quotes around interpolated arg values of tags ([8b66636](https://github.com/windmill-labs/windmill/commit/8b66636a8908c0043d2be63c6462ce28acc43fd9)) + +## [1.338.0](https://github.com/windmill-labs/windmill/compare/v1.337.0...v1.338.0) (2024-05-27) + + +### Features + +* allow user resources in apps with a toggle ([#3821](https://github.com/windmill-labs/windmill/issues/3821)) ([5877727](https://github.com/windmill-labs/windmill/commit/5877727c167bf9b62bedaa7eeafad3c913b1089d)) +* **frontend:** add open/close state of the modal in the outputs ([#3822](https://github.com/windmill-labs/windmill/issues/3822)) ([c246bb0](https://github.com/windmill-labs/windmill/commit/c246bb07052e65e9b336529ad638bcb9cc9686cd)) +* **frontend:** upgrade to gpt-4o + add AI support for php ([#3820](https://github.com/windmill-labs/windmill/issues/3820)) ([2561853](https://github.com/windmill-labs/windmill/commit/256185308e2c0f1b5395a76bc7de5d3857f867d4)) +* public apps can require login ([#3825](https://github.com/windmill-labs/windmill/issues/3825)) ([e2a1219](https://github.com/windmill-labs/windmill/commit/e2a1219373cace1bf4130004c27b9bf3595f7dd9)) +* worker vcpus/memory limits + mem usage ([#3828](https://github.com/windmill-labs/windmill/issues/3828)) ([621464b](https://github.com/windmill-labs/windmill/commit/621464b55025d601f747f611cbb3485d363a480a)) + + +### Bug Fixes + +* filtering not always working with concurrency keys ([#3823](https://github.com/windmill-labs/windmill/issues/3823)) ([47df9f3](https://github.com/windmill-labs/windmill/commit/47df9f33cce5a20231b6b38d4eb1ff370699fc38)) +* improve concurrency re-scheduling at scale ([f2d9c3c](https://github.com/windmill-labs/windmill/commit/f2d9c3c77729fe32366a1c0628d5c0af4d603dff)) +* improve concurrency re-scheduling at scale ([e187fa6](https://github.com/windmill-labs/windmill/commit/e187fa6263100cb26a24726123bcc3bbe641a6e8)) +* make all error strings more verbose ([7a36f30](https://github.com/windmill-labs/windmill/commit/7a36f30fe3138089df5c3a4ce87744c4a459044d)) + +## [1.337.0](https://github.com/windmill-labs/windmill/compare/v1.336.1...v1.337.0) (2024-05-25) + + +### Features + +* add GetResumeUrls to go client ([#3810](https://github.com/windmill-labs/windmill/issues/3810)) ([59f980f](https://github.com/windmill-labs/windmill/commit/59f980f75a9a507f22349f822579a5542f69b988)) +* automatic key renewal ([#3815](https://github.com/windmill-labs/windmill/issues/3815)) ([831cf89](https://github.com/windmill-labs/windmill/commit/831cf89b6367009d0d861975cb8f78b616b0868e)) + + +### Bug Fixes + +* rename email_from_username to username_to_email ([#3813](https://github.com/windmill-labs/windmill/issues/3813)) ([7584c2b](https://github.com/windmill-labs/windmill/commit/7584c2b0bbc216896daa6a366028cfc3ab5af00c)) +* use hub script language as tag instead of 'hub' ([#3816](https://github.com/windmill-labs/windmill/issues/3816)) ([47bb5d2](https://github.com/windmill-labs/windmill/commit/47bb5d2492856c5cecd77d386c802958f0aa7211)) + +## [1.336.1](https://github.com/windmill-labs/windmill/compare/v1.336.0...v1.336.1) (2024-05-24) + + +### Bug Fixes + +* revert bun to 1.1.8 ([ba9cdb1](https://github.com/windmill-labs/windmill/commit/ba9cdb1ae2aca13fd06876b48e0acdb65f2a1b00)) + +## [1.336.0](https://github.com/windmill-labs/windmill/compare/v1.335.0...v1.336.0) (2024-05-23) + + +### Features + +* **frontend:** improve graph edges + fix depedencies detection ([#3802](https://github.com/windmill-labs/windmill/issues/3802)) ([d11e350](https://github.com/windmill-labs/windmill/commit/d11e350de395811daad8a49c0eef7b3b19460ead)) +* improve parsers when no main func ([#3805](https://github.com/windmill-labs/windmill/issues/3805)) ([001278c](https://github.com/windmill-labs/windmill/commit/001278cddd6e91f767f090e358db4299611f0451)) +* improve permissioned audit logs ([#3799](https://github.com/windmill-labs/windmill/issues/3799)) ([62f3180](https://github.com/windmill-labs/windmill/commit/62f318077cd77d8332bbe02ac279a5bca7351e51)) +* improve premissioned audit logs ([#3793](https://github.com/windmill-labs/windmill/issues/3793)) ([21a077e](https://github.com/windmill-labs/windmill/commit/21a077ecfaa2dfabe6a46e425214182845b5259e)) +* store failed_retries per module state and display failed retries in flow status viewer ([62e8816](https://github.com/windmill-labs/windmill/commit/62e88169ea47e6357931bafd564ab45df40a62ff)) +* store failed_retries per module state and display failed retries in flow status viewer ([7e0be89](https://github.com/windmill-labs/windmill/commit/7e0be8914bcb33caf680358f083e80edfb83d00f)) + + +### Bug Fixes + +* **frontend:** Add missing loading state for non-runnable components … ([#3797](https://github.com/windmill-labs/windmill/issues/3797)) ([a0acdc1](https://github.com/windmill-labs/windmill/commit/a0acdc1217967562bb349a2b718c82af74b8bc45)) +* show code option in tree view ([#3803](https://github.com/windmill-labs/windmill/issues/3803)) ([1745a9d](https://github.com/windmill-labs/windmill/commit/1745a9dd1617de4686480e0cfc9ba2ef2da0c625)) +* update bun to 1.1.9 ([bfd2d27](https://github.com/windmill-labs/windmill/commit/bfd2d27415a906f9133777b69653ddacf659de41)) + +## [1.335.0](https://github.com/windmill-labs/windmill/compare/v1.334.0...v1.335.0) (2024-05-22) + + +### Features + +* improve user audit logs and stats ([#3786](https://github.com/windmill-labs/windmill/issues/3786)) ([2f370de](https://github.com/windmill-labs/windmill/commit/2f370de62805e1291901cf19368ae4270d70a916)) + + +### Bug Fixes + +* **cli:** add concurrency key to script ([4d28a38](https://github.com/windmill-labs/windmill/commit/4d28a38750c94dc4362778ace6a227472bd4cd9b)) +* **frontend:** Fix aggrid infinite refresh ([#3789](https://github.com/windmill-labs/windmill/issues/3789)) ([85cd8b4](https://github.com/windmill-labs/windmill/commit/85cd8b4c0ef7aa0b8325db2f99b31ed31a051804)) + +## [1.334.0](https://github.com/windmill-labs/windmill/compare/v1.333.5...v1.334.0) (2024-05-21) + + +### Features + +* **frontend:** Added support for title and placeholder for ArgInputs ([#3779](https://github.com/windmill-labs/windmill/issues/3779)) ([59c0aba](https://github.com/windmill-labs/windmill/commit/59c0abae3df7397f32b65360b6740ca71a91444b)) +* **frontend:** Improve multiselect perf ([#3770](https://github.com/windmill-labs/windmill/issues/3770)) ([36df838](https://github.com/windmill-labs/windmill/commit/36df8389cd5d75c4332e0f0a1da61433dac88195)) + + +### Bug Fixes + +* add allow http toggle to object store settings ([4631c3f](https://github.com/windmill-labs/windmill/commit/4631c3fd08341858b97a1a9673664e7220bbef63)) +* **frontend:** Fix path overflow on the Runs page ([#3781](https://github.com/windmill-labs/windmill/issues/3781)) ([518d8b9](https://github.com/windmill-labs/windmill/commit/518d8b916b41ba35d623deeb27c6f6f82e171060)) + +## [1.333.5](https://github.com/windmill-labs/windmill/compare/v1.333.4...v1.333.5) (2024-05-21) + + +### Bug Fixes + +* drop the linux file cache regularly to avoid triggering OOM killer ([0268dd1](https://github.com/windmill-labs/windmill/commit/0268dd1206ac3e84eec571a6ff53f921f05ed6c4)) +* **frontend:** Fix full height component for public apps ([#3777](https://github.com/windmill-labs/windmill/issues/3777)) ([edf3015](https://github.com/windmill-labs/windmill/commit/edf3015cc4944340e52b5d65a2c72f421b97b548)) +* **frontend:** Fix selected value when the default value of a select component is null ([#3778](https://github.com/windmill-labs/windmill/issues/3778)) ([31c4777](https://github.com/windmill-labs/windmill/commit/31c47774cd64279100a5d23a076af0519cf6ee89)) +* improve concurrency key migration ([b56fbdf](https://github.com/windmill-labs/windmill/commit/b56fbdf898792c68c535ca491b79c501993173a4)) +* lighten watermark on public apps for ee ([da3b043](https://github.com/windmill-labs/windmill/commit/da3b0434e92f1ce95e3e7ede07d4bce0460de9af)) + +## [1.333.4](https://github.com/windmill-labs/windmill/compare/v1.333.3...v1.333.4) (2024-05-20) + + +### Bug Fixes + +* **cli:** make bun the default language in absence of wmill defaultTs 2 ([b2958be](https://github.com/windmill-labs/windmill/commit/b2958be7c10d932ae4076e0cde49fff37d5e9f41)) + +## [1.333.3](https://github.com/windmill-labs/windmill/compare/v1.333.2...v1.333.3) (2024-05-20) + + +### Bug Fixes + +* **cli:** make bun the default language in absence of wmill defaultTs ([8399086](https://github.com/windmill-labs/windmill/commit/83990869bc5edb98f633944410242de19dbe5d01)) + +## [1.333.2](https://github.com/windmill-labs/windmill/compare/v1.333.1...v1.333.2) (2024-05-20) + + +### Bug Fixes + +* **frontend:** fix AgGrid pagination refresh ([#3773](https://github.com/windmill-labs/windmill/issues/3773)) ([ccc2699](https://github.com/windmill-labs/windmill/commit/ccc2699d4ef18a765c3f9e968b4cd5ea1f600fa1)) + +## [1.333.1](https://github.com/windmill-labs/windmill/compare/v1.333.0...v1.333.1) (2024-05-20) + + +### Bug Fixes + +* **backend:** improve memory usage by making schema RawValue instead of serde_json::Value ([f1bb7cf](https://github.com/windmill-labs/windmill/commit/f1bb7cfcbdbfee7488f59256522be18f8d2eb0a3)) + +## [1.333.0](https://github.com/windmill-labs/windmill/compare/v1.332.1...v1.333.0) (2024-05-19) + + +### Features + +* reduce memory usage ([#3768](https://github.com/windmill-labs/windmill/issues/3768)) ([7a1808e](https://github.com/windmill-labs/windmill/commit/7a1808e951a2f359902138d1bb964cf52986665d)) + +## [1.332.1](https://github.com/windmill-labs/windmill/compare/v1.332.0...v1.332.1) (2024-05-18) + + +### Bug Fixes + +* **cli:** improve handling of schema for script bundles ([32bf061](https://github.com/windmill-labs/windmill/commit/32bf061627f087e1ec4e88a3e03be0ca1b7fa9f7)) +* **frontend:** improve json display for large table objects ([#3765](https://github.com/windmill-labs/windmill/issues/3765)) ([f0b3527](https://github.com/windmill-labs/windmill/commit/f0b3527e53e077f9c9ab4c9c6373f35cee77e566)) + +## [1.332.0](https://github.com/windmill-labs/windmill/compare/v1.331.2...v1.332.0) (2024-05-16) + + +### Features + +* **frontend:** Fix App Select component initial value ([#3752](https://github.com/windmill-labs/windmill/issues/3752)) ([e11a375](https://github.com/windmill-labs/windmill/commit/e11a3751c3d188522360010a03e1fbc92311f554)) + + +### Bug Fixes + +* fix args interpolation for tag and concurrency key for non string values ([2b06d9a](https://github.com/windmill-labs/windmill/commit/2b06d9ae793f9e5fddee4ca0889634429ff53416)) + +## [1.331.2](https://github.com/windmill-labs/windmill/compare/v1.331.1...v1.331.2) (2024-05-16) + + +### Bug Fixes + +* improve support for non existing key in concurrency_key table ([9e86177](https://github.com/windmill-labs/windmill/commit/9e8617714250db74965de2842f3abd4b9260b072)) + +## [1.331.1](https://github.com/windmill-labs/windmill/compare/v1.331.0...v1.331.1) (2024-05-16) + + +### Bug Fixes + +* **backend:** prevent immediate cancellation of the error handler when a job is forcibly cancelled ([#3751](https://github.com/windmill-labs/windmill/issues/3751)) ([f3b8e01](https://github.com/windmill-labs/windmill/commit/f3b8e01981653bf97044ceadc18a4c7ce346317e)) +* **frontend:** improve queue metrics graphs performance ([#3749](https://github.com/windmill-labs/windmill/issues/3749)) ([2da00f1](https://github.com/windmill-labs/windmill/commit/2da00f19afe93e55190767219467ae942a2cc7ff)) + +## [1.331.0](https://github.com/windmill-labs/windmill/compare/v1.330.1...v1.331.0) (2024-05-15) + + +### Features + +* add concurrency limit observability [#3586](https://github.com/windmill-labs/windmill/pull/3586) +* **frontend:** Add context section ([#3745](https://github.com/windmill-labs/windmill/issues/3745)) ([0191dca](https://github.com/windmill-labs/windmill/commit/0191dca347800a1f95ce7184db0b21e4ebb6c796)) +* **frontend:** add nullable arg ([#3729](https://github.com/windmill-labs/windmill/issues/3729)) ([cadc758](https://github.com/windmill-labs/windmill/commit/cadc758fc7b8d77f6906cd71b819443fdcc8a514)) +* **frontend:** full height component ([#3676](https://github.com/windmill-labs/windmill/issues/3676)) ([6ff6a60](https://github.com/windmill-labs/windmill/commit/6ff6a603f71fdf472a1290edd72a660697cea7cb)) + + +### Bug Fixes + +* **backend:** remove email constraints from DB ([#3739](https://github.com/windmill-labs/windmill/issues/3739)) ([fa6c531](https://github.com/windmill-labs/windmill/commit/fa6c531fda9d7ec5811c7d95ee7ee4828b3bea5c)) +* **cli:** add php support for the cli ([#3735](https://github.com/windmill-labs/windmill/issues/3735)) ([4286977](https://github.com/windmill-labs/windmill/commit/428697782e7d9fd649a239a8750faba13368860c)) +* **frontend:** improve auto data table headers when array of arrays ([#3738](https://github.com/windmill-labs/windmill/issues/3738)) ([bcefc20](https://github.com/windmill-labs/windmill/commit/bcefc20d34f1d0bb3c593ee7e400880502333fda)) +* **frontend:** rename correctly delete workspace button ([#3736](https://github.com/windmill-labs/windmill/issues/3736)) ([db143c3](https://github.com/windmill-labs/windmill/commit/db143c38b1bd5072c8aa0c5f13b0c591a0b78c8a)) +* resolve typo in bun_executor.rs error message ([#3744](https://github.com/windmill-labs/windmill/issues/3744)) ([9d0f643](https://github.com/windmill-labs/windmill/commit/9d0f643dfdd53ec4710967075e9e98ebea82c488)) + +## [1.330.1](https://github.com/windmill-labs/windmill/compare/v1.330.0...v1.330.1) (2024-05-15) + + +### Bug Fixes + +* php worker tag migration ([#3732](https://github.com/windmill-labs/windmill/issues/3732)) ([14e9c22](https://github.com/windmill-labs/windmill/commit/14e9c22c0753ef01a442b331edaf978d0ab3d39b)) + +## [1.330.0](https://github.com/windmill-labs/windmill/compare/v1.329.0...v1.330.0) (2024-05-15) + + +### Features + +* add php ([#3725](https://github.com/windmill-labs/windmill/issues/3725)) ([6e805d8](https://github.com/windmill-labs/windmill/commit/6e805d82524a4deea554cf63b8411c2cfe798489)) + + +### Bug Fixes + +* **bun:** improve relative path type assistant in monaco for bun ([1cf0bda](https://github.com/windmill-labs/windmill/commit/1cf0bda6d2fbaaffa9c3de8c6b5a191db93fc17a)) +* remove schemas from typescript client ([4c70c6a](https://github.com/windmill-labs/windmill/commit/4c70c6a4e654a6a8dd4fb06b4caf7cbee540ccce)) + +## [1.329.0](https://github.com/windmill-labs/windmill/compare/v1.328.0...v1.329.0) (2024-05-15) + + +### Features + +* **frontend:** Add date format ([#3675](https://github.com/windmill-labs/windmill/issues/3675)) ([86d958e](https://github.com/windmill-labs/windmill/commit/86d958e7edd5c2437112980db102765ee3e37090)) +* improve log storage + expand all logs in a flow ([6fe050b](https://github.com/windmill-labs/windmill/commit/6fe050b8c5a9a2982bcd487815bc96baa94d4648)) + + +### Bug Fixes + +* bun loader with nsjail ([b1a13be](https://github.com/windmill-labs/windmill/commit/b1a13bea206b9d8ff34bf0b551c19d3611cf01e4)) +* fix agchart rendering ([1fdbc64](https://github.com/windmill-labs/windmill/commit/1fdbc64fe53fd914933a7a63513828f07dc0c936)) +* **frontend:** Fix FileInput state when hidden ([#3730](https://github.com/windmill-labs/windmill/issues/3730)) ([da5eabd](https://github.com/windmill-labs/windmill/commit/da5eabdfbfbdfdb97b56f00884de7c830b9cde16)) +* improve display result output limit ([28cc563](https://github.com/windmill-labs/windmill/commit/28cc563df878458d49299ea4b15971cde8f85203)) + +## [1.328.0](https://github.com/windmill-labs/windmill/compare/v1.327.0...v1.328.0) (2024-05-13) + + +### Features + +* **frontend:** allows to specify column order for rich display ([#3709](https://github.com/windmill-labs/windmill/issues/3709)) ([c883db3](https://github.com/windmill-labs/windmill/commit/c883db310195a37c61937c4e2808c45dd7798afd)) + + +### Bug Fixes + +* fix edit button on script row ([e21ac60](https://github.com/windmill-labs/windmill/commit/e21ac60547f09e892b6c02ba322b41be6a67755d)) +* **frontend:** fix slider component styling ([#3720](https://github.com/windmill-labs/windmill/issues/3720)) ([ef0eba7](https://github.com/windmill-labs/windmill/commit/ef0eba7c335e57da9eb72fca6016f1efbf3c36c3)) + +## [1.327.0](https://github.com/windmill-labs/windmill/compare/v1.326.1...v1.327.0) (2024-05-13) + + +### Features + +* nativets can use the wmill library + setClient not required anymore ([#3714](https://github.com/windmill-labs/windmill/issues/3714)) ([8b21f08](https://github.com/windmill-labs/windmill/commit/8b21f0812c939542ed84863de029b60f94526417)) + +## [1.326.1](https://github.com/windmill-labs/windmill/compare/v1.326.0...v1.326.1) (2024-05-12) + + +### Bug Fixes + +* un-inline monaco editor workers for faster initial load ([e2991ef](https://github.com/windmill-labs/windmill/commit/e2991ef9237d17de5e6ef8074387998a96785396)) + +## [1.326.0](https://github.com/windmill-labs/windmill/compare/v1.325.2...v1.326.0) (2024-05-12) + + +### Features + +* logs can be downloaded directly from server/frontend if using shared volume ([a3a66d0](https://github.com/windmill-labs/windmill/commit/a3a66d0577f57cae6e0de5a942a35d45cc8e9472)) + +## [1.325.2](https://github.com/windmill-labs/windmill/compare/v1.325.1...v1.325.2) (2024-05-11) + + +### Bug Fixes + +* improve status exit dedicated workers ([12e302a](https://github.com/windmill-labs/windmill/commit/12e302a309ee8148d2a9d4a168807b97f5fd1709)) + +## [1.325.1](https://github.com/windmill-labs/windmill/compare/v1.325.0...v1.325.1) (2024-05-11) + + +### Bug Fixes + +* **cli:** support whileloop in flow cli sync ([d0a6dda](https://github.com/windmill-labs/windmill/commit/d0a6ddab94dfae4d6fab40c4d41acb85dab18183)) +* improve nodejs mode after esm update ([87add79](https://github.com/windmill-labs/windmill/commit/87add79de2e4df38e59d2e334bba0487c8ff4ecc)) +* selectedRow for a table is set on table actions ([447e2d7](https://github.com/windmill-labs/windmill/commit/447e2d7742edcd0af7184f6e8e5e67cf99f8103b)) + +## [1.325.0](https://github.com/windmill-labs/windmill/compare/v1.324.2...v1.325.0) (2024-05-10) + + +### Features + +* worker metrics ([#3697](https://github.com/windmill-labs/windmill/issues/3697)) ([696a561](https://github.com/windmill-labs/windmill/commit/696a5612f8551066b7b833ba555bd006914faff6)) + + +### Bug Fixes + +* **backend:** return flow result if flow fails or stops before early return ([#3704](https://github.com/windmill-labs/windmill/issues/3704)) ([67f4a4a](https://github.com/windmill-labs/windmill/commit/67f4a4afeec79daa81930124594ecf3131c18133)) + +## [1.324.2](https://github.com/windmill-labs/windmill/compare/v1.324.1...v1.324.2) (2024-05-09) + + +### Bug Fixes + +* fix build ([20dfbda](https://github.com/windmill-labs/windmill/commit/20dfbda69e643753b1ff17137ce18ed23ff45dd1)) + +## [1.324.1](https://github.com/windmill-labs/windmill/compare/v1.324.0...v1.324.1) (2024-05-09) + + +### Bug Fixes + +* **cli:** narrow codebases to bun ([252ac18](https://github.com/windmill-labs/windmill/commit/252ac18d477742d93a2004a0976a809d10bff3d1)) + +## [1.324.0](https://github.com/windmill-labs/windmill/compare/v1.323.6...v1.324.0) (2024-05-09) + + +### Features + +* critical error side channel ([#3625](https://github.com/windmill-labs/windmill/issues/3625)) ([29b1e6f](https://github.com/windmill-labs/windmill/commit/29b1e6f6a28ac9d9c014e4da2e23c9f2e45e1628)) +* disable response logs based on env var ([#3685](https://github.com/windmill-labs/windmill/issues/3685)) ([cd1711c](https://github.com/windmill-labs/windmill/commit/cd1711cf03894e65e81ee74631b0e04d7dae76d2)) +* **frontend:** Add a button tocopy the path of a subflow ([#3691](https://github.com/windmill-labs/windmill/issues/3691)) ([630ae7e](https://github.com/windmill-labs/windmill/commit/630ae7ec4b243e41d841bdae41c1c87b0fda5a82)) +* **frontend:** add missing date in the previous run panel ([#3693](https://github.com/windmill-labs/windmill/issues/3693)) ([49867c0](https://github.com/windmill-labs/windmill/commit/49867c06e63b5fc7b73031d946effb88c1ad1d1e)) +* **frontend:** Improve app components ([#3672](https://github.com/windmill-labs/windmill/issues/3672)) ([ee2a193](https://github.com/windmill-labs/windmill/commit/ee2a193958b87a7557eadfd7ea8231d109b9d41c)) +* import export all worker groups config ([#3667](https://github.com/windmill-labs/windmill/issues/3667)) ([c1a4a82](https://github.com/windmill-labs/windmill/commit/c1a4a8284387f381a5882b1fb6ebd73c9ec6b1ba)) +* local typescript codebase as bundle ([#3694](https://github.com/windmill-labs/windmill/issues/3694)) ([11b3ea3](https://github.com/windmill-labs/windmill/commit/11b3ea3ac86a34ab1beaab98ea43f6a64879f0fb)) + + +### Bug Fixes + +* can cancel only if can disable schedule + stop worker on force cancel + soft cancel job parent on job cancel ([#3670](https://github.com/windmill-labs/windmill/issues/3670)) ([010662d](https://github.com/windmill-labs/windmill/commit/010662d3d0d05a7f6167ceeb592c97cec4c9e804)) +* **frontend:** Fix subflow viewer ([#3674](https://github.com/windmill-labs/windmill/issues/3674)) ([47ee6c9](https://github.com/windmill-labs/windmill/commit/47ee6c90998840889c44df28a25967cef6c8bd59)) +* improve conditional wrapper for app editor ([ea4165d](https://github.com/windmill-labs/windmill/commit/ea4165d58bb11fb4409242bb597f4b7514d1bd60)) +* load large args of previous runs dynamically ([#3688](https://github.com/windmill-labs/windmill/issues/3688)) ([d1f58f1](https://github.com/windmill-labs/windmill/commit/d1f58f10371dfce5e037f03b43aad9f530d7ae6a)) + +## [1.323.6](https://github.com/windmill-labs/windmill/compare/v1.323.5...v1.323.6) (2024-05-02) + + +### Bug Fixes + +* **frontend:** Handle empty error message in toast + hide GridEditorM… ([#3664](https://github.com/windmill-labs/windmill/issues/3664)) ([5bae66a](https://github.com/windmill-labs/windmill/commit/5bae66aec3f00e2096ba06220ca2705488e4dfec)) + +## [1.323.5](https://github.com/windmill-labs/windmill/compare/v1.323.4...v1.323.5) (2024-05-01) + + +### Bug Fixes + +* re-release nit ([caa11c6](https://github.com/windmill-labs/windmill/commit/caa11c6506656e451352a4d437813ddfd2893225)) + +## [1.323.4](https://github.com/windmill-labs/windmill/compare/v1.323.3...v1.323.4) (2024-05-01) + + +### Bug Fixes + +* handle list of errors for schedule error handler ([96760b2](https://github.com/windmill-labs/windmill/commit/96760b296462855c2819d559687fa8b12c6336b0)) +* improve schedule editor UX ([774a35f](https://github.com/windmill-labs/windmill/commit/774a35f223b86444877f04b1a18b2f138ed75420)) + +## [1.323.3](https://github.com/windmill-labs/windmill/compare/v1.323.2...v1.323.3) (2024-05-01) + + +### Bug Fixes + +* add WM_WORKER_GROUP to get worker group from script ([0855cdd](https://github.com/windmill-labs/windmill/commit/0855cdd946e55b8f394a7721ed424bc66702691c)) + +## [1.323.2](https://github.com/windmill-labs/windmill/compare/v1.323.1...v1.323.2) (2024-05-01) + + +### Bug Fixes + +* **frontend:** Disable the insert button when required fields are empty strings ([#3659](https://github.com/windmill-labs/windmill/issues/3659)) ([7df4f02](https://github.com/windmill-labs/windmill/commit/7df4f02529de6e0d37135c9bef3da528be3e21a2)) +* **frontend:** use normal password mask for the sensitive fields of the resource editor ([c8b439d](https://github.com/windmill-labs/windmill/commit/c8b439df5b6f1e48cced5f9cc2fd7882fc88d407)) + +## [1.323.1](https://github.com/windmill-labs/windmill/compare/v1.323.0...v1.323.1) (2024-05-01) + + +### Bug Fixes + +* **cli:** improve generate metadata lock for new scripts ([54acc22](https://github.com/windmill-labs/windmill/commit/54acc22a271c26ea5e47f0adcf0bcc083064f434)) +* **frontend:** improve default select styling for apps ([#3656](https://github.com/windmill-labs/windmill/issues/3656)) ([2b34730](https://github.com/windmill-labs/windmill/commit/2b3473093aaeb7f78a8eaaf8d50021937acb6a50)) +* **frontend:** Restore AgGrid borders and remove the outer border pro… ([#3658](https://github.com/windmill-labs/windmill/issues/3658)) ([92492ab](https://github.com/windmill-labs/windmill/commit/92492ab6b7c579bf01043e422b5c768099ff3120)) + +## [1.323.0](https://github.com/windmill-labs/windmill/compare/v1.322.0...v1.323.0) (2024-05-01) + + +### Features + +* **frontend:** Improve inputs ([#3651](https://github.com/windmill-labs/windmill/issues/3651)) ([790f263](https://github.com/windmill-labs/windmill/commit/790f263e561917ccb8b68d26a2b1bae8f5a17fea)) + + +### Bug Fixes + +* **frontend:** improve result, flow status and log components ([#3653](https://github.com/windmill-labs/windmill/issues/3653)) ([aa6204f](https://github.com/windmill-labs/windmill/commit/aa6204ff99f78c8f5936701649d2829bd7e0afff)) +* **frontend:** remove red from autodatable badges ([#3652](https://github.com/windmill-labs/windmill/issues/3652)) ([d7d2f03](https://github.com/windmill-labs/windmill/commit/d7d2f03e2328e63bc460048570c26389a7d0d5e0)) +* **frontend:** sync columnDefs + improve columnDefs management ([#3632](https://github.com/windmill-labs/windmill/issues/3632)) ([ca209e9](https://github.com/windmill-labs/windmill/commit/ca209e9c48990dfd0c4c8085d74c5d7ba14b466b)) + +## [1.322.0](https://github.com/windmill-labs/windmill/compare/v1.321.6...v1.322.0) (2024-04-30) + + +### Features + +* import export worker group config ([#3649](https://github.com/windmill-labs/windmill/issues/3649)) ([df586fc](https://github.com/windmill-labs/windmill/commit/df586fc68e6d39ce84dce6c65354ab7cbcf2cdb0)) + + +### Bug Fixes + +* improve password ui ([0b23d90](https://github.com/windmill-labs/windmill/commit/0b23d90f6015e27203be64ccf3801938ce745648)) + +## [1.321.6](https://github.com/windmill-labs/windmill/compare/v1.321.5...v1.321.6) (2024-04-30) + + +### Bug Fixes + +* fix aggrid table actions ([c1f582f](https://github.com/windmill-labs/windmill/commit/c1f582f6e4a32bd7a3ee5be3824678d72fe71881)) + +## [1.321.5](https://github.com/windmill-labs/windmill/compare/v1.321.4...v1.321.5) (2024-04-30) + + +### Bug Fixes + +* fix console logs in REST scripts ([1f983c2](https://github.com/windmill-labs/windmill/commit/1f983c241404715e71ddc05cae5630a7696d590e)) +* make sure folder updater keep write permissions if not admin ([ae165b9](https://github.com/windmill-labs/windmill/commit/ae165b9f878a6960901026412e9dc815ebd2c472)) +* prevent overflowing for long description and default in schema ([450201d](https://github.com/windmill-labs/windmill/commit/450201deb8f4cd1ef426d0ff6987615f6fbbf5df)) +* **python:** supports folders starting with numbers for execution ([cf6ffef](https://github.com/windmill-labs/windmill/commit/cf6ffef48af5508a219048f0885001ed59c1bf06)) + +## [1.321.4](https://github.com/windmill-labs/windmill/compare/v1.321.3...v1.321.4) (2024-04-29) + + +### Bug Fixes + +* **cli:** handle better missing lockfile for generating metadata ([5315726](https://github.com/windmill-labs/windmill/commit/53157262bdb38d7b83d94ff9df02322bb0ab06c7)) + +## [1.321.3](https://github.com/windmill-labs/windmill/compare/v1.321.2...v1.321.3) (2024-04-29) + + +### Bug Fixes + +* **cli:** skip deleting script when lockfile delete ([959ae8d](https://github.com/windmill-labs/windmill/commit/959ae8d2526d631a14b91a8657ef6957355467b3)) + +## [1.321.2](https://github.com/windmill-labs/windmill/compare/v1.321.1...v1.321.2) (2024-04-29) + + +### Bug Fixes + +* **cli:** improve lockfile support on cli ([b7f9ecb](https://github.com/windmill-labs/windmill/commit/b7f9ecbda1e481191aac90497c850da533a55732)) +* **cli:** improve lockfile support on cli ([35b2423](https://github.com/windmill-labs/windmill/commit/35b2423fe193a5425f2fa9d940d9ca15b8a5b33c)) +* **cli:** improve lockfile support on cli ([05e70a8](https://github.com/windmill-labs/windmill/commit/05e70a849ea1ade6a2652d73ea1dcaaad3e2f6ce)) + +## [1.321.1](https://github.com/windmill-labs/windmill/compare/v1.321.0...v1.321.1) (2024-04-29) + + +### Bug Fixes + +* pg types conversion dbstudio ([#3636](https://github.com/windmill-labs/windmill/issues/3636)) ([f6e8f45](https://github.com/windmill-labs/windmill/commit/f6e8f45af1df9009a6086ee76b7a7cfa9845ff17)) + +## [1.321.0](https://github.com/windmill-labs/windmill/compare/v1.320.3...v1.321.0) (2024-04-29) + + +### Features + +* add resource and variable picker for rest scripts ([#3628](https://github.com/windmill-labs/windmill/issues/3628)) ([3956d01](https://github.com/windmill-labs/windmill/commit/3956d012ad08e37062f24823dbc0d7ca1bb564ef)) + + +### Bug Fixes + +* **python-client:** improve error message for wait_job ([0e022c9](https://github.com/windmill-labs/windmill/commit/0e022c9e4edc0d03abe2325c87546a8244434a5f)) +* toggle comment shortcut on some EU keyboards ([#3630](https://github.com/windmill-labs/windmill/issues/3630)) ([b529784](https://github.com/windmill-labs/windmill/commit/b5297846fea880c18f4895010aad3c39e5f582b1)) + +## [1.320.3](https://github.com/windmill-labs/windmill/compare/v1.320.2...v1.320.3) (2024-04-28) + + +### Bug Fixes + +* **cli:** improve support for frontend scripts cli sync ([82e628a](https://github.com/windmill-labs/windmill/commit/82e628a11185b2af27d2cd53aa4619b413ee0e6a)) + +## [1.320.2](https://github.com/windmill-labs/windmill/compare/v1.320.1...v1.320.2) (2024-04-28) + + +### Bug Fixes + +* bump git sync script version ([e8dcd5b](https://github.com/windmill-labs/windmill/commit/e8dcd5b4956ce06047b74486eabccd5d5d4380fc)) + +## [1.320.1](https://github.com/windmill-labs/windmill/compare/v1.320.0...v1.320.1) (2024-04-28) + + +### Bug Fixes + +* add button to easily bump git sync version ([0fcd54b](https://github.com/windmill-labs/windmill/commit/0fcd54bc070483dafdbbc0f592e090d0b71361c3)) + +## [1.320.0](https://github.com/windmill-labs/windmill/compare/v1.319.1...v1.320.0) (2024-04-28) + + +### Features + +* **cli:** split inline sscripts for apps like for flows ([22226e8](https://github.com/windmill-labs/windmill/commit/22226e883e89199a1d1c5095e87fc8c6f90b252d)) +* **cli:** split lockfiles from script metadata ([c39f3a8](https://github.com/windmill-labs/windmill/commit/c39f3a84d645caee345c3274b37d6b81f653fede)) +* **cli:** use separate lockfiles for rawscipt of flows ([6c69889](https://github.com/windmill-labs/windmill/commit/6c698898741982d8f01fa8d5a47a2da46ad361e0)) + +## [1.319.1](https://github.com/windmill-labs/windmill/compare/v1.319.0...v1.319.1) (2024-04-26) + + +### Bug Fixes + +* improve dnd on app editor for large screens ([3875eec](https://github.com/windmill-labs/windmill/commit/3875eec46fde26f108f3ba0ad17d9e5005208cea)) + +## [1.319.0](https://github.com/windmill-labs/windmill/compare/v1.318.0...v1.319.0) (2024-04-26) + + +### Features + +* add distributed global cache for go ([c73e7db](https://github.com/windmill-labs/windmill/commit/c73e7dbd8c3aa2f749176b6478a2bb351b39d210)) +* add distributed global cache for go ([4188383](https://github.com/windmill-labs/windmill/commit/4188383d3ede69fd3d320f187ef18072aa888f01)) +* pg add json support ([#3620](https://github.com/windmill-labs/windmill/issues/3620)) ([fee22fc](https://github.com/windmill-labs/windmill/commit/fee22fc060b3cfc2e6a30badb907ae828fc6272f)) + + +### Bug Fixes + +* make configurable footer for aggrid in apps ([41f6bcd](https://github.com/windmill-labs/windmill/commit/41f6bcdaa154bd2d21a65b26455802cdbafe5dc1)) + +## [1.318.0](https://github.com/windmill-labs/windmill/compare/v1.317.1...v1.318.0) (2024-04-25) + + +### Features + +* app select policy ([#3610](https://github.com/windmill-labs/windmill/issues/3610)) ([c09ae3e](https://github.com/windmill-labs/windmill/commit/c09ae3ebc6eab23434e74aadae887536e8f97c4d)) + + +### Bug Fixes + +* **frontend:** Improve AgGrid Infinite table default codes + deprecat… ([#3609](https://github.com/windmill-labs/windmill/issues/3609)) ([f26d3e6](https://github.com/windmill-labs/windmill/commit/f26d3e62f6d9b8d80c4e4d555c94b9b213e7c362)) +* support all pg types from db studio ([#3613](https://github.com/windmill-labs/windmill/issues/3613)) ([5def8cb](https://github.com/windmill-labs/windmill/commit/5def8cb52c24b5bf877275964aec35c05c91d7b6)) + +## [1.317.1](https://github.com/windmill-labs/windmill/compare/v1.317.0...v1.317.1) (2024-04-24) + + +### Bug Fixes + +* improve list markdown rendering ([8bdebcf](https://github.com/windmill-labs/windmill/commit/8bdebcf2124e79f2044d87c1d0ee8fc7d74a696b)) + +## [1.317.0](https://github.com/windmill-labs/windmill/compare/v1.316.2...v1.317.0) (2024-04-24) + + +### Features + +* add planned later toggle on runs ([cec27a8](https://github.com/windmill-labs/windmill/commit/cec27a87b8abc2b6d3c8d68ca1951d627aa120b2)) +* **frontend:** Aggrid infinite default code ([#3604](https://github.com/windmill-labs/windmill/issues/3604)) ([200a321](https://github.com/windmill-labs/windmill/commit/200a3219751b95464dea21ef110c105d6c61ecdd)) + + +### Bug Fixes + +* **frontend:** Fix AgGrid infinit clear ([#3607](https://github.com/windmill-labs/windmill/issues/3607)) ([5d48603](https://github.com/windmill-labs/windmill/commit/5d486034db4aee0a3412b231b09fba9d3760d184)) +* improve autodata table ([613bc26](https://github.com/windmill-labs/windmill/commit/613bc267494aef10c2409b784e86895886a0ba50)) + +## [1.316.2](https://github.com/windmill-labs/windmill/compare/v1.316.0...v1.316.1) (2024-04-24) + + +### Bug Fixes + +* fix get_completed_job with labels ([963fc3d](https://github.com/windmill-labs/windmill/commit/963fc3deccd89a277e6363283f66d1903a35a031)) + +## [1.316.0](https://github.com/windmill-labs/windmill/compare/v1.315.1...v1.316.0) (2024-04-24) + + +### Features + +* **frontend:** add search to AgGrid Infinite ([#3600](https://github.com/windmill-labs/windmill/issues/3600)) ([aece019](https://github.com/windmill-labs/windmill/commit/aece01908ba58b5f2a86f9a1f261ba8c5608e7b5)) +* support multiple labels for jobs (wm_label -> wm_labels) ([0be55ae](https://github.com/windmill-labs/windmill/commit/0be55ae98cd0ef48bb3243c470a53e3305420662)) + + +### Bug Fixes + +* solve invite add conflict + deprecate invites ([#3594](https://github.com/windmill-labs/windmill/issues/3594)) ([1d3e826](https://github.com/windmill-labs/windmill/commit/1d3e82607a06edaeafa9c27d9675a86a51fe9a8e)) + +## [1.315.1](https://github.com/windmill-labs/windmill/compare/v1.315.0...v1.315.1) (2024-04-24) + + +### Bug Fixes + +* fix label from completed_job ([534f877](https://github.com/windmill-labs/windmill/commit/534f877a7a9983b1808ce10b7f8fcac1547d7634)) + +## [1.315.0](https://github.com/windmill-labs/windmill/compare/v1.314.0...v1.315.0) (2024-04-24) + + +### Features + +* **frontend:** Aggrid infinite ([#3592](https://github.com/windmill-labs/windmill/issues/3592)) ([7a8ffbe](https://github.com/windmill-labs/windmill/commit/7a8ffbea46e81bfd031e4e064bb96ce41b3a77b3)) + +## [1.314.0](https://github.com/windmill-labs/windmill/compare/v1.313.0...v1.314.0) (2024-04-23) + + +### Features + +* add label and schedule filters to runs page ([fcff457](https://github.com/windmill-labs/windmill/commit/fcff4574623a8a11932cc343940410ef8c505e0d)) +* ui helper for workspaced worker tags ([#3595](https://github.com/windmill-labs/windmill/issues/3595)) ([0ab3d1b](https://github.com/windmill-labs/windmill/commit/0ab3d1bb8e151db55d3fa3d8f6274ed09528bef6)) + +## [1.313.0](https://github.com/windmill-labs/windmill/compare/v1.312.0...v1.313.0) (2024-04-23) + + +### Features + +* add support for readonly application intent in mssql ([#3591](https://github.com/windmill-labs/windmill/issues/3591)) ([ae7f978](https://github.com/windmill-labs/windmill/commit/ae7f9781806609842b2412751220c888827307bb)) +* update git sync for azure devops service principal ([#3588](https://github.com/windmill-labs/windmill/issues/3588)) ([ff361d9](https://github.com/windmill-labs/windmill/commit/ff361d9026752fab848596dbb684a2f9e12a5823)) + +## [1.312.0](https://github.com/windmill-labs/windmill/compare/v1.311.0...v1.312.0) (2024-04-22) + + +### Features + +* **frontend:** Fix style panel zIndex ([#3581](https://github.com/windmill-labs/windmill/issues/3581)) ([464a2c4](https://github.com/windmill-labs/windmill/commit/464a2c4f66f761bb83bdb281b67c91fccb7ed5eb)) +* hide scripts with on function main from operators + badge/filter for devs ([#3584](https://github.com/windmill-labs/windmill/issues/3584)) ([8ae16d9](https://github.com/windmill-labs/windmill/commit/8ae16d90edbd65ff02929977262647d3e18bf036)) + + +### Bug Fixes + +* **frontend:** Fix the table selection + improve the ComponentInputTypeEditor ([#3585](https://github.com/windmill-labs/windmill/issues/3585)) ([f3d0bb3](https://github.com/windmill-labs/windmill/commit/f3d0bb3814865ad715e9fe024d7e9f921425af09)) + +## [1.311.0](https://github.com/windmill-labs/windmill/compare/v1.310.0...v1.311.0) (2024-04-21) + + +### Features + +* **frontend:** Improve tables ([#3577](https://github.com/windmill-labs/windmill/issues/3577)) ([587c777](https://github.com/windmill-labs/windmill/commit/587c777d57213f308c0c56effecdf40f34f942dc)) + + +### Bug Fixes + +* improve re-scheduled for estimation in concurrency limits ([48ba709](https://github.com/windmill-labs/windmill/commit/48ba709627b3a2ec48081d7774b759115e675b99)) + +## [1.310.0](https://github.com/windmill-labs/windmill/compare/v1.309.2...v1.310.0) (2024-04-19) + + +### Features + +* **frontend:** Deeply nested Modals and Drawers ([#3565](https://github.com/windmill-labs/windmill/issues/3565)) ([62fcf08](https://github.com/windmill-labs/windmill/commit/62fcf086ccacdaaf5649dd4d0c6cfdff4eba15e8)) + + +### Bug Fixes + +* fix password field ([f9b5da5](https://github.com/windmill-labs/windmill/commit/f9b5da53e8bce1ea1c150de1c605f34c9f068940)) + +## [1.309.2](https://github.com/windmill-labs/windmill/compare/v1.309.1...v1.309.2) (2024-04-18) + +### Bug Fixes + +- update go and typesript client ([f3666ea](https://github.com/windmill-labs/windmill/commit/f3666ea140f0e373973e6470694d72491f03496f)) + +## [1.309.1](https://github.com/windmill-labs/windmill/compare/v1.309.0...v1.309.1) (2024-04-18) + +### Bug Fixes + +- improve log viewer loading from object store ([024ffde](https://github.com/windmill-labs/windmill/commit/024ffdeb6e8b517f91fd80c5eeea33c769197a69)) + +## [1.309.0](https://github.com/windmill-labs/windmill/compare/v1.308.1...v1.309.0) (2024-04-17) + +### Features + +- show more for logs on s3 directly possible from browser log viewer ([071a0ae](https://github.com/windmill-labs/windmill/commit/071a0ae92728c1a13a61ad3283cf0a680bdfd079)) + +### Bug Fixes + +- **backend:** prevent push fail of schedule error handling from reverting job completion ([#3568](https://github.com/windmill-labs/windmill/issues/3568)) ([fdaa49a](https://github.com/windmill-labs/windmill/commit/fdaa49a7e964640be2857a5b677fae7cdefdc5b1)) +- fix autosize when not rendered at initialization ([cdb01b0](https://github.com/windmill-labs/windmill/commit/cdb01b0d01865dc0910ee42464869d3f69e12c1b)) +- improve cancel_all to never deadlock ([2eea00a](https://github.com/windmill-labs/windmill/commit/2eea00a2cdc15b3ba2159c909cc5e092328ffd61)) +- measure memory usage on postgres scripts ([f84a902](https://github.com/windmill-labs/windmill/commit/f84a90244571902f5d876c260f3309cae07806bb)) + +## [1.308.1](https://github.com/windmill-labs/windmill/compare/v1.308.0...v1.308.1) (2024-04-16) + +### Bug Fixes + +- fix delete perms user folders ([456b903](https://github.com/windmill-labs/windmill/commit/456b9037666d2986be7a0663a5dab19f2067580f)) + +## [1.308.0](https://github.com/windmill-labs/windmill/compare/v1.307.0...v1.308.0) (2024-04-16) + +### Features + +- add visma oauth ([#3564](https://github.com/windmill-labs/windmill/issues/3564)) ([a8cf3ef](https://github.com/windmill-labs/windmill/commit/a8cf3ef4243b76894b30764647091e48a0f1b60b)) +- **frontend:** ImproveApp Editor UI ([#3514](https://github.com/windmill-labs/windmill/issues/3514)) ([44c9fda](https://github.com/windmill-labs/windmill/commit/44c9fda49aadda97bef395953fa36e3b27e7d2e4)) + +### Bug Fixes + +- db update cell issue when some col values are null ([#3558](https://github.com/windmill-labs/windmill/issues/3558)) ([c17bcd3](https://github.com/windmill-labs/windmill/commit/c17bcd395e1c0726f3ee61d82f008c6077c44168)) +- **frontend:** fix text alignement, email input before icon and fix m… ([#3561](https://github.com/windmill-labs/windmill/issues/3561)) ([1658740](https://github.com/windmill-labs/windmill/commit/1658740ec6e7e566e541ca9cb735c6577d25169e)) +- tighten delete permissions ([158d26f](https://github.com/windmill-labs/windmill/commit/158d26fe38cbd4c0a8518b90a1996c2db35e0702)) + +## [1.307.0](https://github.com/windmill-labs/windmill/compare/v1.306.4...v1.307.0) (2024-04-15) + +### Features + +- **frontend:** Add actions to Database Studio ([#3556](https://github.com/windmill-labs/windmill/issues/3556)) ([863550a](https://github.com/windmill-labs/windmill/commit/863550a91d8380cd18cc750dc63dfa75bdf504bb)) + +### Bug Fixes + +- add mysql decimal support ([#3557](https://github.com/windmill-labs/windmill/issues/3557)) ([7c85cd8](https://github.com/windmill-labs/windmill/commit/7c85cd808d4d5e79adf7d0b0a93ea15008ce1d87)) +- **frontend:** fix the initial dimension of the markdown component ([#3554](https://github.com/windmill-labs/windmill/issues/3554)) ([0b48742](https://github.com/windmill-labs/windmill/commit/0b487426c806fca991f9fe8ce1e33dc2d44f7cfd)) +- tighten delete folder permissions ([8b4dc22](https://github.com/windmill-labs/windmill/commit/8b4dc227d389c0fa98b762e76464cbffc02bb75f)) + +## [1.306.4](https://github.com/windmill-labs/windmill/compare/v1.306.3...v1.306.4) (2024-04-14) + +### Bug Fixes + +- improve unsaved confirmation modal on flow draft ([fb00e3b](https://github.com/windmill-labs/windmill/commit/fb00e3b0afbb728f428c918da5d44385549a1a0f)) + +## [1.306.3](https://github.com/windmill-labs/windmill/compare/v1.306.2...v1.306.3) (2024-04-12) + +### Bug Fixes + +- fix actions buttons error ([7163564](https://github.com/windmill-labs/windmill/commit/71635646e8c0e2c5b9f61e14de1f61dbbbe9d243)) + +## [1.306.2](https://github.com/windmill-labs/windmill/compare/v1.306.1...v1.306.2) (2024-04-12) + +### Bug Fixes + +- fix actions buttons error ([6ea5965](https://github.com/windmill-labs/windmill/commit/6ea59658196339600e39776c690d6924e355f471)) + +## [1.306.1](https://github.com/windmill-labs/windmill/compare/v1.306.0...v1.306.1) (2024-04-12) + +### Bug Fixes + +- **frontend:** Correctly handle undefined actions ([#3546](https://github.com/windmill-labs/windmill/issues/3546)) ([a687d56](https://github.com/windmill-labs/windmill/commit/a687d56d45b637b615ea1b6727a34086bd545eb4)) + +## [1.306.0](https://github.com/windmill-labs/windmill/compare/v1.305.3...v1.306.0) (2024-04-12) + +### Features + +- **frontend:** add maplock + properly display marker title ([#3544](https://github.com/windmill-labs/windmill/issues/3544)) ([e9e6614](https://github.com/windmill-labs/windmill/commit/e9e66144860f2a390b58db1f5c0e2d09b46a777f)) +- **frontend:** Ag grid actions ([#3535](https://github.com/windmill-labs/windmill/issues/3535)) ([48ad095](https://github.com/windmill-labs/windmill/commit/48ad095633f3e83f16eccc15b1de534c4804d807)) + +### Bug Fixes + +- **frontend:** Correctly handle undefined actions ([#3545](https://github.com/windmill-labs/windmill/issues/3545)) ([7eca53f](https://github.com/windmill-labs/windmill/commit/7eca53f9e7f0640bd43fc37abbe6eb624d77430d)) +- **frontend:** Fix AgGrid action selection ([#3543](https://github.com/windmill-labs/windmill/issues/3543)) ([0672362](https://github.com/windmill-labs/windmill/commit/06723629caed3e152a9161ec3f1fee10710b4971)) +- **frontend:** Fix s3 uploader ([#3539](https://github.com/windmill-labs/windmill/issues/3539)) ([0afd68d](https://github.com/windmill-labs/windmill/commit/0afd68d474b65ce1d1026bdabb081d775e0dcaa3)) + +## [1.305.3](https://github.com/windmill-labs/windmill/compare/v1.305.2...v1.305.3) (2024-04-12) + +### Bug Fixes + +- improve app icon renderer and app html renderer ([ee56821](https://github.com/windmill-labs/windmill/commit/ee56821a4734fa56097ae1ec7e032b6d14c0ee80)) + +## [1.305.2](https://github.com/windmill-labs/windmill/compare/v1.305.1...v1.305.2) (2024-04-11) + +### Bug Fixes + +- unsaved changes on deploy of flow ([d1650db](https://github.com/windmill-labs/windmill/commit/d1650dbed935b206a8de8a59835933d559ff3a20)) + +## [1.305.1](https://github.com/windmill-labs/windmill/compare/v1.305.0...v1.305.1) (2024-04-11) + +### Bug Fixes + +- fix plug connection for apps with array items ([c88e6a8](https://github.com/windmill-labs/windmill/commit/c88e6a86359cbdad038db09d54979cec1f12c8f3)) +- **frontend:** add missing darkModeObserver in CronInput ([#3531](https://github.com/windmill-labs/windmill/issues/3531)) ([8525494](https://github.com/windmill-labs/windmill/commit/8525494a68314e342b7393f6b6df15565ffb4082)) +- **frontend:** fix text alignement ([#3533](https://github.com/windmill-labs/windmill/issues/3533)) ([0c9a95c](https://github.com/windmill-labs/windmill/commit/0c9a95c964a16c3194d4887b7a3882a626faf6e4)) +- improve goto behavior ([6c33f17](https://github.com/windmill-labs/windmill/commit/6c33f17829a3a43cd1794abfc0c0807caa01bcfd)) +- load lazily the app icons ([cd5b023](https://github.com/windmill-labs/windmill/commit/cd5b0230338f3f20d7306b8a3feef509f6c8fe30)) +- remove requirement on full wasm parser for row insert of db studio ([cd07020](https://github.com/windmill-labs/windmill/commit/cd07020edb8ff652d086023771caa07755b5b2a2)) +- remove requirement on full wasm parser for row insert of db studio ([f17bed9](https://github.com/windmill-labs/windmill/commit/f17bed9741762f5241206a1bc257bcc4c4cb96fb)) +- update monaco configurations ([62e4ec2](https://github.com/windmill-labs/windmill/commit/62e4ec2e1443b47c273631d2b8efa7f3a9ba804c)) + +## [1.305.0](https://github.com/windmill-labs/windmill/compare/v1.304.4...v1.305.0) (2024-04-09) + +### Features + +- flow concurrency limits support custom concurrency key ([a55aad3](https://github.com/windmill-labs/windmill/commit/a55aad30039d8bc44f4cbc9aa2fa3e220966ca80)) + +### Bug Fixes + +- add ability to cancel flows directly from operator modal ([5272956](https://github.com/windmill-labs/windmill/commit/5272956153419f3eac7203a9b043ca63c2cf869b)) + +## [1.304.4](https://github.com/windmill-labs/windmill/compare/v1.304.3...v1.304.4) (2024-04-09) + +### Bug Fixes + +- allow for longer approver names in flows ([f117539](https://github.com/windmill-labs/windmill/commit/f117539a54e5947832c1d435a4991274d103cef0)) +- **frontend:** Fix bypass confirmation shortcut ([#3527](https://github.com/windmill-labs/windmill/issues/3527)) ([db5abd3](https://github.com/windmill-labs/windmill/commit/db5abd37cda548e642fa825cd279a730a7af5c00)) +- **frontend:** Improve theme editor ([#3525](https://github.com/windmill-labs/windmill/issues/3525)) ([975055b](https://github.com/windmill-labs/windmill/commit/975055b90ff3e7bd0b8202920ca78fb9178663a7)) +- improve deadlocks for parallel branches with parallelism constraints ([0c824de](https://github.com/windmill-labs/windmill/commit/0c824de4cdfb3b6b609cce0e1678a58743ea24f4)) +- improve deadlocks for parallel branches with parallelism constraints ([8dd1175](https://github.com/windmill-labs/windmill/commit/8dd117528c793b828631d5f320bb28ce9c5e3a3f)) +- improve handling of very large iterator on frontend ([7e4b6c3](https://github.com/windmill-labs/windmill/commit/7e4b6c374415862954f4876b693a199aabcab45e)) +- improve order dragndrop for json editor in app ([1ab1fb7](https://github.com/windmill-labs/windmill/commit/1ab1fb7e4de9984c6408d1fe5ef332d8f242362b)) +- improve performance of for-loops with parralelism ([a4442d4](https://github.com/windmill-labs/windmill/commit/a4442d4d3d919383ac09df66f20d6c4f98c04a92)) +- improve performance of for-loops with parralelism ([29422f1](https://github.com/windmill-labs/windmill/commit/29422f156d8ca3e0ac03288bd11b31f505a492c1)) + +## [1.304.3](https://github.com/windmill-labs/windmill/compare/v1.304.2...v1.304.3) (2024-04-08) + +### Bug Fixes + +- add resource types to list of ignored path filters for git sync ([fc0056f](https://github.com/windmill-labs/windmill/commit/fc0056f991d985e3a014ac50a7fe2ef73bb6b97a)) +- add resource types to list of ignored path filters for git sync ([acf80dc](https://github.com/windmill-labs/windmill/commit/acf80dc6a005ccd048ffc193841b3c599e93c50d)) +- improve CLI with visible_to_runner_only and priority ([c7f0f3f](https://github.com/windmill-labs/windmill/commit/c7f0f3f359ff57ea1f816dc5598a61d50c3ae263)) + +## [1.304.2](https://github.com/windmill-labs/windmill/compare/v1.304.1...v1.304.2) (2024-04-06) + +### Bug Fixes + +- **frontend:** Fix selectFirstRowByDefault on AgGrids ([#3450](https://github.com/windmill-labs/windmill/issues/3450)) ([a52d6b3](https://github.com/windmill-labs/windmill/commit/a52d6b30b21bbf8d42cef1cb760b082181163fa2)) + +## [1.304.1](https://github.com/windmill-labs/windmill/compare/v1.304.0...v1.304.1) (2024-04-06) + +### Bug Fixes + +- remove reqwest_11 ([8cdae1a](https://github.com/windmill-labs/windmill/commit/8cdae1ac965f8bbb03fff1fb68b2d2ee3c1f744f)) + +## [1.304.0](https://github.com/windmill-labs/windmill/compare/v1.303.4...v1.304.0) (2024-04-06) + +### Features + +- add overridable cache_ttl in api of job triggers ([21a7ee4](https://github.com/windmill-labs/windmill/commit/21a7ee4c33c483d39cc6d7020623ee11fc9f1cbd)) +- git sync group changes by folder ([#3517](https://github.com/windmill-labs/windmill/issues/3517)) ([08231c0](https://github.com/windmill-labs/windmill/commit/08231c02d282410a7939e358a49cad2f4696dacd)) + +### Bug Fixes + +- add args filter to schedule list ([f9d8dde](https://github.com/windmill-labs/windmill/commit/f9d8dde61cc527d5f9553f3981485a8c345dc1aa)) +- fix lightweight arg input min size ([78b8c3e](https://github.com/windmill-labs/windmill/commit/78b8c3edc9e28a07d8557c0d34208f773539fa72)) +- **frontend:** Fix simple flow tutorial ([#3518](https://github.com/windmill-labs/windmill/issues/3518)) ([139bc38](https://github.com/windmill-labs/windmill/commit/139bc38ddcc0988a1485f9d53535631626cab7fa)) +- improve list static input ([d61d6f5](https://github.com/windmill-labs/windmill/commit/d61d6f520bd52df23f020cd12cbaf666cfe0097b)) +- make autodatatable more resilient ([fba1ea7](https://github.com/windmill-labs/windmill/commit/fba1ea7d547791cfa6dfd62b51db9ba567cfa243)) +- make autodatatable more resilient ([632c9fb](https://github.com/windmill-labs/windmill/commit/632c9fb2aab2fc073e5526b2c9f7d363bae063b4)) +- make date time input more resilient ([2ec1add](https://github.com/windmill-labs/windmill/commit/2ec1add494afa1a56c62ae430429912a095dd85c)) +- parallel flow with parallelism constraint could deadlock ([9131d5c](https://github.com/windmill-labs/windmill/commit/9131d5cc4088ca66383ca9e4e10fedae0e9e661f)) +- remove information in approval page of a flow ([3175456](https://github.com/windmill-labs/windmill/commit/31754569bae3355d58d20eea2749ad203a92a6dd)) +- show flow user states in flow state preview ([7c4eece](https://github.com/windmill-labs/windmill/commit/7c4eece009717e4188eeb8b1dedd094589dc2bdf)) + +## [1.303.4](https://github.com/windmill-labs/windmill/compare/v1.303.3...v1.303.4) (2024-04-05) + +### Bug Fixes + +- prevent operators from loading secrets through toggle ([72f4247](https://github.com/windmill-labs/windmill/commit/72f424798386ab011e2d618a1010ef77a06435a1)) + +## [1.303.3](https://github.com/windmill-labs/windmill/compare/v1.303.2...v1.303.3) (2024-04-04) + +### Bug Fixes + +- improve multiselect for approval steps ([18e7e94](https://github.com/windmill-labs/windmill/commit/18e7e9449e82582ddffc325ce8aeab88635cf7bc)) + +## [1.303.2](https://github.com/windmill-labs/windmill/compare/v1.303.1...v1.303.2) (2024-04-04) + +### Bug Fixes + +- improve global cache deps ([0b3e6b9](https://github.com/windmill-labs/windmill/commit/0b3e6b9f1cb08265dec5573741f5911e09f79884)) + +## [1.303.1](https://github.com/windmill-labs/windmill/compare/v1.303.0...v1.303.1) (2024-04-04) + +### Bug Fixes + +- improve chars splitting for logs with utf-8 chars ([2e3b6f6](https://github.com/windmill-labs/windmill/commit/2e3b6f66e3f22ea8e68531abb36fe0ca6424c766)) + +## [1.303.0](https://github.com/windmill-labs/windmill/compare/v1.302.0...v1.303.0) (2024-04-04) + +### Features + +- private hub ([#3491](https://github.com/windmill-labs/windmill/issues/3491)) ([1d7bab0](https://github.com/windmill-labs/windmill/commit/1d7bab075bf4cfe614694575c3aba8c784f5f148)) + +### Bug Fixes + +- update awscli & nodejs ([74e0f21](https://github.com/windmill-labs/windmill/commit/74e0f21903d858edcf8396930d51b7d29668cc02)) + +## [1.302.0](https://github.com/windmill-labs/windmill/compare/v1.301.0...v1.302.0) (2024-04-04) + +### Features + +- slack team connected to multiple workspaces ([#3500](https://github.com/windmill-labs/windmill/issues/3500)) ([a8bf075](https://github.com/windmill-labs/windmill/commit/a8bf0750a475f16e7efd47e9a7fd120a19d52189)) + +### Bug Fixes + +- build ([#3504](https://github.com/windmill-labs/windmill/issues/3504)) ([285aec4](https://github.com/windmill-labs/windmill/commit/285aec4ffdf00d6616e75749df7d080705bee54c)) +- fix char excess size module for logs truncation ([826757b](https://github.com/windmill-labs/windmill/commit/826757b33ab9ded921e98f06f0921bf3c9916e8b)) +- improve locking ([281cd7b](https://github.com/windmill-labs/windmill/commit/281cd7bc8b903b8809b840b8e55df0b962eef787)) + +## [1.301.0](https://github.com/windmill-labs/windmill/compare/v1.300.0...v1.301.0) (2024-04-02) + +### Features + +- while loop as new flow primitive ([ff26c8e](https://github.com/windmill-labs/windmill/commit/ff26c8e42dbd212e75bb094cd34b8848d5e39fb6)) + +### Bug Fixes + +- add access to the schedules page to operators ([648accd](https://github.com/windmill-labs/windmill/commit/648accd268b7ccbc27e3d6f1051540138ae5525e)) +- date-fns tooltip info again ([#3498](https://github.com/windmill-labs/windmill/issues/3498)) ([71d98b9](https://github.com/windmill-labs/windmill/commit/71d98b9025b622eddb894fd77d90f99f805a8bdc)) + +## [1.300.0](https://github.com/windmill-labs/windmill/compare/v1.299.1...v1.300.0) (2024-04-02) + +### Features + +- **frontend:** Add an onRecompute callback to handle recompute side … ([#3493](https://github.com/windmill-labs/windmill/issues/3493)) ([3afa975](https://github.com/windmill-labs/windmill/commit/3afa97527090a82e1754db4d92322c940a532d35)) + +### Bug Fixes + +- date-fns tooltip format info ([#3496](https://github.com/windmill-labs/windmill/issues/3496)) ([e4bca00](https://github.com/windmill-labs/windmill/commit/e4bca0021047db00c05a68a5238215ca66ba5a25)) +- **frontend:** Fix updateCellValue ([#3497](https://github.com/windmill-labs/windmill/issues/3497)) ([e4d8de8](https://github.com/windmill-labs/windmill/commit/e4d8de80ef9569bdfe06f8fbc93c8c6fa93e472c)) +- **typescript-client:** improve setFlowUserState undefined value ([ba679c6](https://github.com/windmill-labs/windmill/commit/ba679c64b7f15e42b8bede0d1b5cf03554049d6e)) + +## [1.299.1](https://github.com/windmill-labs/windmill/compare/v1.299.0...v1.299.1) (2024-03-31) + +### Bug Fixes + +- fix audit issue with webhook triggered scripts ([4ba1f6c](https://github.com/windmill-labs/windmill/commit/4ba1f6ccdf62c3e778e1e1cbad1bdc3072bb8c17)) + +## [1.299.0](https://github.com/windmill-labs/windmill/compare/v1.298.0...v1.299.0) (2024-03-30) + +### Features + +- add workspace free-tier usage ([#3489](https://github.com/windmill-labs/windmill/issues/3489)) ([b4ffb50](https://github.com/windmill-labs/windmill/commit/b4ffb500ba5c58932d9fe508186f8fbced3f3b71)) +- **frontend:** add a refresh component control to the DB Studio ([#3490](https://github.com/windmill-labs/windmill/issues/3490)) ([d713566](https://github.com/windmill-labs/windmill/commit/d71356695f981c5861ad9cb20223e1b096d1a34d)) +- **frontend:** Add support for clearFiles in the file input component ([#3483](https://github.com/windmill-labs/windmill/issues/3483)) ([f9a5bce](https://github.com/windmill-labs/windmill/commit/f9a5bcee4c0bf75b07ac7e15a19c420db81eb738)) +- support gh markdown for script, flows, resource descriptions ([6cb2d20](https://github.com/windmill-labs/windmill/commit/6cb2d20b423cfd9a4af072a561bf8583a54d153b)) + +### Bug Fixes + +- benchmark action single push ([#3480](https://github.com/windmill-labs/windmill/issues/3480)) ([b3ed678](https://github.com/windmill-labs/windmill/commit/b3ed6782f612091af881dc5b49ca9bba814e5a26)) +- db studio multiple schemas support ([#3479](https://github.com/windmill-labs/windmill/issues/3479)) ([6489697](https://github.com/windmill-labs/windmill/commit/64896971bb17186b68a0f98e1a40eb1e585d3352)) +- **frontend:** Fix the pane delete button ([#3482](https://github.com/windmill-labs/windmill/issues/3482)) ([7b3b96e](https://github.com/windmill-labs/windmill/commit/7b3b96ea088720af96db0aa0da3395f44725181e)) +- make submit form order static ([951758f](https://github.com/windmill-labs/windmill/commit/951758ffb631b313d0f033bb40dbe4f16383dfb7)) +- show script path when schedule summary is empty ([#3487](https://github.com/windmill-labs/windmill/issues/3487)) ([3c38491](https://github.com/windmill-labs/windmill/commit/3c384910c16a7bfa3c8c9aade8ca8f602ac093b8)) +- show start to finish time for flows instead of cumulative ([#3486](https://github.com/windmill-labs/windmill/issues/3486)) ([e3a636a](https://github.com/windmill-labs/windmill/commit/e3a636ab178ea6d1d6a49040325081ebb23fa3e7)) +- tree view show more ([a61b14c](https://github.com/windmill-labs/windmill/commit/a61b14cfd40544b2934f8472bdd82c4242bda1bc)) + +## [1.298.0](https://github.com/windmill-labs/windmill/compare/v1.297.1...v1.298.0) (2024-03-27) + +### Features + +- add map support in renderer ([240ae93](https://github.com/windmill-labs/windmill/commit/240ae9374885fbc9a679d6c3d18a58f08c344756)) +- approval steps description ([810136a](https://github.com/windmill-labs/windmill/commit/810136a4a405855801c94de66ec8916979701c67)) + +### Bug Fixes + +- display approval step at top level regardless of depth ([57a0530](https://github.com/windmill-labs/windmill/commit/57a0530434b06c38a7862537b36ab61f46cdf183)) +- fix clean cache deleting config ([1edf493](https://github.com/windmill-labs/windmill/commit/1edf493e6d76cc4abe9d2e5c8846946a3da6d730)) + +## [1.297.1](https://github.com/windmill-labs/windmill/compare/v1.297.0...v1.297.1) (2024-03-26) + +### Bug Fixes + +- fix approval steps handling of default args ([3388ab4](https://github.com/windmill-labs/windmill/commit/3388ab41ddaaf1a30b27292db11e650257990aa1)) + +## [1.297.0](https://github.com/windmill-labs/windmill/compare/v1.296.1...v1.297.0) (2024-03-26) + +### Features + +- add visible to runner only default value ([#3472](https://github.com/windmill-labs/windmill/issues/3472)) ([14a86bf](https://github.com/windmill-labs/windmill/commit/14a86bf59c93d7e54d175a6e1e2b77804681fa3d)) + +## [1.296.1](https://github.com/windmill-labs/windmill/compare/v1.296.0...v1.296.1) (2024-03-26) + +### Bug Fixes + +- **backend:** update chrono dependency ([703c118](https://github.com/windmill-labs/windmill/commit/703c11891a18ced5a8da4365426cf80614fc230c)) + +## [1.296.0](https://github.com/windmill-labs/windmill/compare/v1.295.4...v1.296.0) (2024-03-26) + +### Features + +- add set_flow_user_states and get_flow_user_states api and sdk support ([ef1ce83](https://github.com/windmill-labs/windmill/commit/ef1ce8327923120a851adce920f2f029e7e64f48)) +- differentiate benchmark graphs by nb of workers ([#3463](https://github.com/windmill-labs/windmill/issues/3463)) ([f8fa220](https://github.com/windmill-labs/windmill/commit/f8fa220dc7c2d0242c24a57a7873f7cb21966ff6)) +- gforms oauth ([#3466](https://github.com/windmill-labs/windmill/issues/3466)) ([195b378](https://github.com/windmill-labs/windmill/commit/195b378396275cb77138d829274505cd0ba41181)) + +### Bug Fixes + +- improve git sync for script renames ([5fdfa28](https://github.com/windmill-labs/windmill/commit/5fdfa28cb979211fb44519ae223255062881c3a1)) +- replace token in webhook panel after creation ([339d17f](https://github.com/windmill-labs/windmill/commit/339d17ff48dba1441a701bfc53c1d22701deba13)) + +## [1.295.4](https://github.com/windmill-labs/windmill/compare/v1.295.3...v1.295.4) (2024-03-26) + +### Bug Fixes + +- use webhook id as username ([d0edc75](https://github.com/windmill-labs/windmill/commit/d0edc75da9e159da6d4cf672ba0a32b141142761)) + +## [1.295.3](https://github.com/windmill-labs/windmill/compare/v1.295.2...v1.295.3) (2024-03-25) + +### Bug Fixes + +- custom contextual variabels when superadmin ([#3458](https://github.com/windmill-labs/windmill/issues/3458)) ([abc3a7d](https://github.com/windmill-labs/windmill/commit/abc3a7d74a668855c08aabe5774251aaba62b797)) +- extension of full logs download ([#3464](https://github.com/windmill-labs/windmill/issues/3464)) ([a92ae18](https://github.com/windmill-labs/windmill/commit/a92ae18cb6570a73ebcc67da1574677aac0b4639)) +- previous runs date ([#3461](https://github.com/windmill-labs/windmill/issues/3461)) ([728a6b1](https://github.com/windmill-labs/windmill/commit/728a6b1665f8284c89dc0fd68aad3dd459872ff5)) + +## [1.295.2](https://github.com/windmill-labs/windmill/compare/v1.295.1...v1.295.2) (2024-03-25) + +### Bug Fixes + +- **typescript-client:** improve runScript ([aaa766b](https://github.com/windmill-labs/windmill/commit/aaa766bcd6b31ccedaa685ee7fa55c153c5e26f7)) + +## [1.295.1](https://github.com/windmill-labs/windmill/compare/v1.295.0...v1.295.1) (2024-03-23) + +### Bug Fixes + +- add support for azure storage on distributed cache/logs ([d2afc05](https://github.com/windmill-labs/windmill/commit/d2afc0570325c2cd3d8ae770c3b3858db6ace6a7)) + +## [1.295.0](https://github.com/windmill-labs/windmill/compare/v1.294.0...v1.295.0) (2024-03-23) + +### Features + +- add workspace environment vars (custom contextual vars) ([#3455](https://github.com/windmill-labs/windmill/issues/3455)) ([283d550](https://github.com/windmill-labs/windmill/commit/283d55008cdcd6c4286e702e93541f662516a643)) +- **frontend:** fetch logs just-in-time only when necessary ([6bf2083](https://github.com/windmill-labs/windmill/commit/6bf20838aeb3718d770b425380ecbb699c9e7425)) +- large log disk and distributed storage compaction ([75e9e67](https://github.com/windmill-labs/windmill/commit/75e9e67d7a8fa07d1dee6c1194261cbeacb69c8d)) + +## [1.294.0](https://github.com/windmill-labs/windmill/compare/v1.293.1...v1.294.0) (2024-03-22) + +### Features + +- workspace renaming ([#3452](https://github.com/windmill-labs/windmill/issues/3452)) ([fdc98b7](https://github.com/windmill-labs/windmill/commit/fdc98b73ae06fb65c86bd542991d84219cb3eaea)) + +### Bug Fixes + +- small table fixes ([089aab8](https://github.com/windmill-labs/windmill/commit/089aab880d83bf24e079f501f9415bc321836a23)) +- update git sync cli ([868020f](https://github.com/windmill-labs/windmill/commit/868020fbf74fbfb5410c41e2250401e5ec9d0f2b)) + +## [1.293.1](https://github.com/windmill-labs/windmill/compare/v1.293.0...v1.293.1) (2024-03-21) + +### Bug Fixes + +- update axum to 0.7 and object_store to 0.9 ([f13aea2](https://github.com/windmill-labs/windmill/commit/f13aea299824e49be5aee56fb39dd4c220fa70a8)) + +## [1.293.0](https://github.com/windmill-labs/windmill/compare/v1.292.4...v1.293.0) (2024-03-21) + +### Features + +- s3 cache config added to instance settings + parallelized tar pulling ([174ead0](https://github.com/windmill-labs/windmill/commit/174ead04739359fa250d43397fe3e3548dde71d4)) + +### Bug Fixes + +- **frontend:** datetime input date timezone ([#3445](https://github.com/windmill-labs/windmill/issues/3445)) ([458c476](https://github.com/windmill-labs/windmill/commit/458c476f0812e7514430fa56268a6958d1dc419a)) + +## [1.292.4](https://github.com/windmill-labs/windmill/compare/v1.292.3...v1.292.4) (2024-03-19) + +### Bug Fixes + +- ai prevent python async + max db schema length ([#3440](https://github.com/windmill-labs/windmill/issues/3440)) ([4557e7b](https://github.com/windmill-labs/windmill/commit/4557e7beb40de12b3d26708968f855ecbf49e7b5)) +- **frontend:** Fix csv generation ([#3439](https://github.com/windmill-labs/windmill/issues/3439)) ([21b4719](https://github.com/windmill-labs/windmill/commit/21b4719949f4c044b4fc29e92e17c9527beb07b0)) +- **frontend:** handle the case when the observer is not defined onDestroy ([#3431](https://github.com/windmill-labs/windmill/issues/3431)) ([734da17](https://github.com/windmill-labs/windmill/commit/734da1717ecc351b3b10b2e49bce54f3796a2f9e)) +- **frontend:** Improve autodatatable ([#3434](https://github.com/windmill-labs/windmill/issues/3434)) ([87b0112](https://github.com/windmill-labs/windmill/commit/87b0112db733591dbb197e150c991a8948e3adff)) + +## [1.292.3](https://github.com/windmill-labs/windmill/compare/v1.292.2...v1.292.3) (2024-03-17) + +### Bug Fixes + +- trigger re-release ([1a8ccc3](https://github.com/windmill-labs/windmill/commit/1a8ccc322bbf4b1d3d831ea449e2f19e06462358)) + +## [1.292.2](https://github.com/windmill-labs/windmill/compare/v1.292.1...v1.292.2) (2024-03-17) + +### Bug Fixes + +- allow multiple PIP_SECRETS ([ca88047](https://github.com/windmill-labs/windmill/commit/ca88047312352a9e594697c234ca0bea53029d97)) +- **cli:** fix summary clash ([fcb6f17](https://github.com/windmill-labs/windmill/commit/fcb6f174e63e9e42cc4afc35db659da47af08a7e)) + +## [1.292.1](https://github.com/windmill-labs/windmill/compare/v1.292.0...v1.292.1) (2024-03-17) + +### Bug Fixes + +- disapproval does not trigger flow error handler anymore ([e0235d9](https://github.com/windmill-labs/windmill/commit/e0235d9e9eb79fcdea37426368364db7958dce0c)) +- improve default value for approval flows ([5fca9e8](https://github.com/windmill-labs/windmill/commit/5fca9e8188179bb06aed4da60b8cac42a2f15eb3)) + +## [1.292.0](https://github.com/windmill-labs/windmill/compare/v1.291.4...v1.292.0) (2024-03-16) + +### Features + +- db schema explorer collapsed by default ([#3427](https://github.com/windmill-labs/windmill/issues/3427)) ([695e2c5](https://github.com/windmill-labs/windmill/commit/695e2c54cf945e52a8afdd4ee2b169a6c17d0dbd)) +- refactor logging to improve performance by order of magnitude for longer jobs ([e5366b8](https://github.com/windmill-labs/windmill/commit/e5366b84bb5cfcd57f8aaecc4fec7c8e55564313)) +- wmill sync workspace settings ([#3425](https://github.com/windmill-labs/windmill/issues/3425)) ([bab67fe](https://github.com/windmill-labs/windmill/commit/bab67fe3ae6669efb56dcc489d7ae080923c2160)) + +### Bug Fixes + +- allow longer worker names ([a2f4c26](https://github.com/windmill-labs/windmill/commit/a2f4c2669021f4ca2714683e15a979175747cd96)) +- s3 cache is an instance settings ([#3421](https://github.com/windmill-labs/windmill/issues/3421)) ([ae66136](https://github.com/windmill-labs/windmill/commit/ae661365e4bc8db3015222c1843e961bbe56ddfe)) + +## [1.291.4](https://github.com/windmill-labs/windmill/compare/v1.291.3...v1.291.4) (2024-03-15) + +### Bug Fixes + +- avoid unecessary re-schedule for retyied flows ([89516b9](https://github.com/windmill-labs/windmill/commit/89516b922f06a2c584a4b39be70d0d736d97906c)) +- db studio include tables of all schemas ([#3418](https://github.com/windmill-labs/windmill/issues/3418)) ([c2098e5](https://github.com/windmill-labs/windmill/commit/c2098e56ae436b3e4204e1aadb7dee9fb16471da)) +- **frontend:** correctly change the currentPage when perPage changes ([#3420](https://github.com/windmill-labs/windmill/issues/3420)) ([50b4c71](https://github.com/windmill-labs/windmill/commit/50b4c711988b8e9aaca4a18e990bb93c02a6fac2)) +- improve bun assistant for relative paths ([a278f28](https://github.com/windmill-labs/windmill/commit/a278f28d6ffb5048e93da61392262737b103a0eb)) +- improve pip_secret interpolation ([71f7299](https://github.com/windmill-labs/windmill/commit/71f7299b6c7a04dd71d2b32d1e96913305d73935)) + +## [1.291.3](https://github.com/windmill-labs/windmill/compare/v1.291.2...v1.291.3) (2024-03-14) + +### Bug Fixes + +- fix sqlx ([c96c527](https://github.com/windmill-labs/windmill/commit/c96c52781488e77608d1e66d6d7d27907a3ae26a)) + +## [1.291.2](https://github.com/windmill-labs/windmill/compare/v1.291.1...v1.291.2) (2024-03-14) + +### Bug Fixes + +- be less agressive with log streaming for long jobs ([df910d7](https://github.com/windmill-labs/windmill/commit/df910d7441499f6b58f35bacfa987cce9379c7fa)) + +## [1.291.1](https://github.com/windmill-labs/windmill/compare/v1.291.0...v1.291.1) (2024-03-14) + +### Bug Fixes + +- **frontend:** fix oneOf configuration ([#3414](https://github.com/windmill-labs/windmill/issues/3414)) ([d569296](https://github.com/windmill-labs/windmill/commit/d569296301a1e29ce6dc392b5890dfe298c76bf2)) + +## [1.291.0](https://github.com/windmill-labs/windmill/compare/v1.290.1...v1.291.0) (2024-03-14) + +### Features + +- add bit support in pg ([#3407](https://github.com/windmill-labs/windmill/issues/3407)) ([3730566](https://github.com/windmill-labs/windmill/commit/37305668444391088f531d96c172eb81df2e4092)) +- better locking ([#3412](https://github.com/windmill-labs/windmill/issues/3412)) ([97d4f1c](https://github.com/windmill-labs/windmill/commit/97d4f1cc2643503ffa13db7cda85cf8e148af9d5)) +- enable automatic billing by default ([#3403](https://github.com/windmill-labs/windmill/issues/3403)) ([92db3d9](https://github.com/windmill-labs/windmill/commit/92db3d92d9d1901792a032761627cb2bf124b6ef)) +- **frontend:** use the DisplayResult component in the Expanded resul… ([#3410](https://github.com/windmill-labs/windmill/issues/3410)) ([5f28e93](https://github.com/windmill-labs/windmill/commit/5f28e938df75ccd2b7a2d48eda0c3a6f0aa765dd)) + +### Bug Fixes + +- **frontend:** Fix color picker layout ([#3411](https://github.com/windmill-labs/windmill/issues/3411)) ([c6587b9](https://github.com/windmill-labs/windmill/commit/c6587b93ed3a05975d2f7f252a569cb5ea12806c)) +- **frontend:** Flow step input description ([#3409](https://github.com/windmill-labs/windmill/issues/3409)) ([f01aefd](https://github.com/windmill-labs/windmill/commit/f01aefdd055078cafc7f0b63093407a446e821a5)) +- improve error handler settings ([ac1eeb1](https://github.com/windmill-labs/windmill/commit/ac1eeb187a7b1a657edbca5a5b6d753025ae55ca)) +- remove dependency on semver intersect for bun ([1cf6d8b](https://github.com/windmill-labs/windmill/commit/1cf6d8b46279f410588a46cda71ee13afc3ac8d4)) +- show current pid before acquiring lock ([55ea67d](https://github.com/windmill-labs/windmill/commit/55ea67d3438e646235b456ba3ebfc76cebde7a23)) +- tabs can now be moved within apps ([ef7d733](https://github.com/windmill-labs/windmill/commit/ef7d73354b0bfc2d3dc03c879cf0e3b633923696)) +- use try_lock instead of lock to wait for global pg lock ([b382bf3](https://github.com/windmill-labs/windmill/commit/b382bf3c89f16d7a097ebcf93a6ac16122afc889)) + +## [1.290.1](https://github.com/windmill-labs/windmill/compare/v1.290.0...v1.290.1) (2024-03-13) + +### Bug Fixes + +- fix static inputs in apps ([d5f7583](https://github.com/windmill-labs/windmill/commit/d5f75831858a3c7e4212b858c6b24cfb5c254305)) + +## [1.290.0](https://github.com/windmill-labs/windmill/compare/v1.289.0...v1.290.0) (2024-03-13) + +### Features + +- configurable languages and orders ([a2807e6](https://github.com/windmill-labs/windmill/commit/a2807e6047bd794b61120bbb1905e26f3eb95583)) +- **frontend:** DB Studio improvements ([#3389](https://github.com/windmill-labs/windmill/issues/3389)) ([212c9d7](https://github.com/windmill-labs/windmill/commit/212c9d76e5608bc7d99c4231d7aad70d960fe2e1)) +- git sync users groups ([#3391](https://github.com/windmill-labs/windmill/issues/3391)) ([104aa75](https://github.com/windmill-labs/windmill/commit/104aa7563471023599fc487ea359f10a1bf05af1)) +- instance usernames ([#3382](https://github.com/windmill-labs/windmill/issues/3382)) ([4f65b23](https://github.com/windmill-labs/windmill/commit/4f65b23cddecca4939db9fdae687bb0fe7da85d5)) + +### Bug Fixes + +- add include_query to all endpoints ([797c551](https://github.com/windmill-labs/windmill/commit/797c5515e192b79c8a24b12b6a5c9aca96aad73b)) +- add more metadata for insert completed_job log ([ad2f213](https://github.com/windmill-labs/windmill/commit/ad2f21326d94d990fbf0826c5373833e1e39b85f)) +- **frontend:** add script history in the script menu on the homepage … ([#3388](https://github.com/windmill-labs/windmill/issues/3388)) ([16b1c33](https://github.com/windmill-labs/windmill/commit/16b1c33de5099b7cf128f7b2747cd06e4a54f321)) +- **frontend:** Disabled delete node + correctly update debug menu when nodes are deleted ([#3387](https://github.com/windmill-labs/windmill/issues/3387)) ([cc8e73c](https://github.com/windmill-labs/windmill/commit/cc8e73c77fa875485880d78d240bf26f48f5b419)) +- improve bun type assistant ([#3402](https://github.com/windmill-labs/windmill/issues/3402)) ([90b8cb3](https://github.com/windmill-labs/windmill/commit/90b8cb3153d83705f0fc00cd1e4a26f551865af9)) +- initial path when changing path of draft only scripts and flows ([#3400](https://github.com/windmill-labs/windmill/issues/3400)) ([f82af22](https://github.com/windmill-labs/windmill/commit/f82af22eaa9f43d343b3417eedb325895cd9d0f0)) +- make oauth settings more resilient to being ill-defined ([7d5b507](https://github.com/windmill-labs/windmill/commit/7d5b50775c002cd425a55033bed7f5d0baae5c32)) +- only set admin instance username when setting enabled ([#3396](https://github.com/windmill-labs/windmill/issues/3396)) ([f974d45](https://github.com/windmill-labs/windmill/commit/f974d4570ade23996633cdb68af38749ef926441)) +- prevent auto add duplicate user ([#3395](https://github.com/windmill-labs/windmill/issues/3395)) ([9a1d10f](https://github.com/windmill-labs/windmill/commit/9a1d10fed65f6c2502f01295cf9b846981e38643)) +- remove admin instance username if setting disabled ([#3398](https://github.com/windmill-labs/windmill/issues/3398)) ([cda5e05](https://github.com/windmill-labs/windmill/commit/cda5e056f5393f26d7d8d787a4935540b9f8e248)) +- reset to default tag ([41a27d1](https://github.com/windmill-labs/windmill/commit/41a27d1c1372b1a241a39f321e0bd0a96e6d86b0)) + +## [1.289.0](https://github.com/windmill-labs/windmill/compare/v1.288.0...v1.289.0) (2024-03-09) + +### Features + +- bun is now the default typescript language ([357f74a](https://github.com/windmill-labs/windmill/commit/357f74ad1ad5611f5df12cbb400417fe1f1184e6)) + +### Bug Fixes + +- **cli:** warn to switch to bun in the CLI ([8a8fab8](https://github.com/windmill-labs/windmill/commit/8a8fab8b41e8d48ec81f27d65a73fefdb9d62a62)) +- **cli:** warn to switch to bun in the CLI ([017190b](https://github.com/windmill-labs/windmill/commit/017190be27d1b03b1236fd8d41e67e32ddc1ffc8)) + +## [1.288.0](https://github.com/windmill-labs/windmill/compare/v1.287.1...v1.288.0) (2024-03-08) + +### Features + +- implement s3 oidc support + azure workload identity support ([4578ed3](https://github.com/windmill-labs/windmill/commit/4578ed32da42b154833c6307cc6f82b526b05ab4)) + +## [1.287.1](https://github.com/windmill-labs/windmill/compare/v1.287.0...v1.287.1) (2024-03-08) + +### Bug Fixes + +- **frontend:** fix theme fork ([#3380](https://github.com/windmill-labs/windmill/issues/3380)) ([3713ad0](https://github.com/windmill-labs/windmill/commit/3713ad0b8d9e9e1089697a5b21f80bd7a8125683)) + +## [1.287.0](https://github.com/windmill-labs/windmill/compare/v1.286.2...v1.287.0) (2024-03-08) + +### Features + +- add quickbooks oauth ([#3359](https://github.com/windmill-labs/windmill/issues/3359)) ([8b88f64](https://github.com/windmill-labs/windmill/commit/8b88f64ede99f62972ce961e26720e5e6a6b4b10)) + +### Bug Fixes + +- **frontend:** fix snowflake columnsDefs ([#3377](https://github.com/windmill-labs/windmill/issues/3377)) ([2e90531](https://github.com/windmill-labs/windmill/commit/2e905313b8444c2b99d8e44c9c58527c7e481177)) +- **frontend:** improve table selection ([#3347](https://github.com/windmill-labs/windmill/issues/3347)) ([ed9379a](https://github.com/windmill-labs/windmill/commit/ed9379aab4bd09fa63453845c8eae414e5516440)) +- improve custom concurrency key handling ([2a85a87](https://github.com/windmill-labs/windmill/commit/2a85a874d7fa8f5593affa6a3579dd9d5e085ad9)) +- pg timstamptz param ([#3364](https://github.com/windmill-labs/windmill/issues/3364)) ([c04adcc](https://github.com/windmill-labs/windmill/commit/c04adcca86f454fa01b03dd5341c8bf2c691201c)) + +## [1.286.2](https://github.com/windmill-labs/windmill/compare/v1.286.1...v1.286.2) (2024-03-06) + +### Bug Fixes + +- add more functions to typescript client ([465dfc1](https://github.com/windmill-labs/windmill/commit/465dfc186b72d617e5f7ce27c7fed8f10c7693af)) + +## [1.286.1](https://github.com/windmill-labs/windmill/compare/v1.286.0...v1.286.1) (2024-03-05) + +### Bug Fixes + +- add more functions to typescript client ([b17ae78](https://github.com/windmill-labs/windmill/commit/b17ae785e6103f44757a0b98d1b7712a356bed28)) + +## [1.286.0](https://github.com/windmill-labs/windmill/compare/v1.285.4...v1.286.0) (2024-03-05) + +### Features + +- workflow as code for typescript ([e3e86e5](https://github.com/windmill-labs/windmill/commit/e3e86e5c34dff66aebfc1d2e223d81f5a62195b8)) + +### Bug Fixes + +- workers to load custom tags for running sync scripts locally ([7575e12](https://github.com/windmill-labs/windmill/commit/7575e12dc8245448c778a21c3829b38cbf030d04)) + +## [1.285.4](https://github.com/windmill-labs/windmill/compare/v1.285.3...v1.285.4) (2024-03-05) + +### Bug Fixes + +- improve workflow as code python client ([d30cd3a](https://github.com/windmill-labs/windmill/commit/d30cd3a4ba751b22679fa1cb32a555bbc8ae5ef9)) + +## [1.285.3](https://github.com/windmill-labs/windmill/compare/v1.285.2...v1.285.3) (2024-03-05) + +### Bug Fixes + +- improve workflow as code python client ([6a5fb87](https://github.com/windmill-labs/windmill/commit/6a5fb874911d9d4acf2cf70940d6ec8ced04830c)) + +## [1.285.2](https://github.com/windmill-labs/windmill/compare/v1.285.1...v1.285.2) (2024-03-05) + +### Bug Fixes + +- retrigger release ([32fc3e2](https://github.com/windmill-labs/windmill/commit/32fc3e25d10b20139ecfb51ddb32f8b60df30141)) + +## [1.285.1](https://github.com/windmill-labs/windmill/compare/v1.285.0...v1.285.1) (2024-03-05) + +### Bug Fixes + +- fix sqlx ([73c93f3](https://github.com/windmill-labs/windmill/commit/73c93f37e0aff587b194a7cb051ffa3690004de4)) + +## [1.285.0](https://github.com/windmill-labs/windmill/compare/v1.284.1...v1.285.0) (2024-03-05) + +### Features + +- **frontend:** Added support for mysql, mssql and snowflake in the Database Studio ([#3250](https://github.com/windmill-labs/windmill/issues/3250)) ([ca6311d](https://github.com/windmill-labs/windmill/commit/ca6311d8cd0ca48bf9a469176bb50c9701f3e0c5)) + +### Bug Fixes + +- **frontend:** Fix PSQL select ([#3343](https://github.com/windmill-labs/windmill/issues/3343)) ([4c6a751](https://github.com/windmill-labs/windmill/commit/4c6a7516f79fcafac614192332525b9e26274e82)) +- workflow as code python sdk improvement ([5407265](https://github.com/windmill-labs/windmill/commit/54072654190dab8a203c59fa800aee5dd73f0572)) + +## [1.284.1](https://github.com/windmill-labs/windmill/compare/v1.284.0...v1.284.1) (2024-03-04) + +### Bug Fixes + +- workflow as code api improvement ([0795353](https://github.com/windmill-labs/windmill/commit/0795353ec2cb8c3da61bc085f1eafbb4d4d3a2ad)) + +## [1.284.0](https://github.com/windmill-labs/windmill/compare/v1.283.0...v1.284.0) (2024-03-04) + +### Features + +- add schedule page to script settings ([67cf82f](https://github.com/windmill-labs/windmill/commit/67cf82f130e1d9d09a7501abc50d4b976b5250ee)) +- workflow as code v0 ([619e278](https://github.com/windmill-labs/windmill/commit/619e2784f06ad38a115fd292dc39fdd8d581dbd3)) + +### Bug Fixes + +- allow multiselect in dynamic forms ([7f24ecd](https://github.com/windmill-labs/windmill/commit/7f24ecd6bcf09738702b0128407ab876f30b3510)) + +## [1.283.0](https://github.com/windmill-labs/windmill/compare/v1.282.2...v1.283.0) (2024-03-01) + +### Features + +- sync users and groups ([#3328](https://github.com/windmill-labs/windmill/issues/3328)) ([8812dfd](https://github.com/windmill-labs/windmill/commit/8812dfd42801e7b05462931a6267dce94e8716d3)) + +## [1.282.2](https://github.com/windmill-labs/windmill/compare/v1.282.1...v1.282.2) (2024-03-01) + +### Bug Fixes + +- redo release ([195ce11](https://github.com/windmill-labs/windmill/commit/195ce113fd680f74ce2b3e2b5ee2c175fd4cc6f9)) + +## [1.282.1](https://github.com/windmill-labs/windmill/compare/v1.282.0...v1.282.1) (2024-03-01) + +### Bug Fixes + +- description of fields accept new lines ([07cea28](https://github.com/windmill-labs/windmill/commit/07cea28712b6b7e09f3415b0d69fe4f132f81e51)) +- fix flow progress monitor when using parallel branches and continuing long after ([07fb375](https://github.com/windmill-labs/windmill/commit/07fb3754afb86adab00e0ef88f55ec7dc4b43dbd)) +- maintain order in flow inputs when never reordering ([410ec2c](https://github.com/windmill-labs/windmill/commit/410ec2cd78e10cfb5282ca4e0b6e40722762240c)) + +## [1.282.0](https://github.com/windmill-labs/windmill/compare/v1.281.3...v1.282.0) (2024-03-01) + +### Features + +- Use ACCEPT_INVALID_CERTS for SMTP ([#3318](https://github.com/windmill-labs/windmill/issues/3318)) ([cb4ac89](https://github.com/windmill-labs/windmill/commit/cb4ac89e08a86ad66c52d8b1aa443475d9a349f4)) + +### Bug Fixes + +- AI copilot available in the vscode flow editor ([#3314](https://github.com/windmill-labs/windmill/issues/3314)) ([530d1a9](https://github.com/windmill-labs/windmill/commit/530d1a97ff8eab1249d404fd74b3c5c63ff879a3)) +- app forms change value on default value changes ([493d201](https://github.com/windmill-labs/windmill/commit/493d2012a81e2d79ed1b3561a07cb5f8fd9fb9dd)) +- improve dev mode for flows ([ec38f92](https://github.com/windmill-labs/windmill/commit/ec38f92aa604e9ace32c7d287cd7aa336ec0e7ba)) + +## [1.281.3](https://github.com/windmill-labs/windmill/compare/v1.281.2...v1.281.3) (2024-02-28) + +### Bug Fixes + +- table-col/row switch issue in display result ([#3311](https://github.com/windmill-labs/windmill/issues/3311)) ([0e6b164](https://github.com/windmill-labs/windmill/commit/0e6b164e166ba1abe2dfcf6b219146c25b1191f2)) + +## [1.281.2](https://github.com/windmill-labs/windmill/compare/v1.281.1...v1.281.2) (2024-02-28) + +### Bug Fixes + +- fix app expr break ([07e166f](https://github.com/windmill-labs/windmill/commit/07e166fc02cb546425a0a15754b15e4c71fc82d1)) + +## [1.281.1](https://github.com/windmill-labs/windmill/compare/v1.281.0...v1.281.1) (2024-02-28) + +### Bug Fixes + +- fix app expr break ([d1bb6a6](https://github.com/windmill-labs/windmill/commit/d1bb6a6924eded9a333e0314df362f480b14e0ef)) + +## [1.281.0](https://github.com/windmill-labs/windmill/compare/v1.280.0...v1.281.0) (2024-02-28) + +### Features + +- implement progress monitor for parallel branches last transition ([fc34594](https://github.com/windmill-labs/windmill/commit/fc34594aeb95f7a4a7f936032447b3289a12642b)) +- improve performance of exprs in apps using memoized expr functors ([afa3c54](https://github.com/windmill-labs/windmill/commit/afa3c54140537fffdbab4193adf6af4a737cc2e7)) + +### Bug Fixes + +- add limits to bun auto-type fetching ([ad3c551](https://github.com/windmill-labs/windmill/commit/ad3c551d664816ff4ef12d237e48a079d91af037)) +- allow eval with return in last line ([260468c](https://github.com/windmill-labs/windmill/commit/260468cf737e9836cf9ac6b7bc274b98e55fdc93)) + +## [1.280.0](https://github.com/windmill-labs/windmill/compare/v1.279.0...v1.280.0) (2024-02-27) + +### Features + +- allow to pin database in sql scripts ([#3304](https://github.com/windmill-labs/windmill/issues/3304)) ([1c6e767](https://github.com/windmill-labs/windmill/commit/1c6e767617d0c7ac9bd2975c070c64128ce2ed02)) + +### Bug Fixes + +- solve deadlock issues for parallel branches with new progress monitor ([be7c03b](https://github.com/windmill-labs/windmill/commit/be7c03bda2a0ab61fd0f10924446b234b642f2a0)) + +## [1.279.0](https://github.com/windmill-labs/windmill/compare/v1.278.5...v1.279.0) (2024-02-27) + +### Features + +- add ee flag to common ([#3300](https://github.com/windmill-labs/windmill/issues/3300)) ([ec10b3f](https://github.com/windmill-labs/windmill/commit/ec10b3ff8135e66a91209bcd4f2321e5272421e7)) + +### Bug Fixes + +- handle very large ints as floats in snowflake ([#3302](https://github.com/windmill-labs/windmill/issues/3302)) ([66e4699](https://github.com/windmill-labs/windmill/commit/66e46990b23fbae94910501120bc2c0d501e49d9)) +- improve handling of parallel flow branches of more than 30s ([4285f1e](https://github.com/windmill-labs/windmill/commit/4285f1e47dd3d77f8916cda174f96468b808105e)) + +## [1.278.5](https://github.com/windmill-labs/windmill/compare/v1.278.4...v1.278.5) (2024-02-26) + +### Bug Fixes + +- fix scheduling of overlapping flows ([49be282](https://github.com/windmill-labs/windmill/commit/49be282d215bf9802a073c390c778c531f782c4b)) + +## [1.278.4](https://github.com/windmill-labs/windmill/compare/v1.278.3...v1.278.4) (2024-02-26) + +### Bug Fixes + +- clarify pg migration logs ([2ba5bc6](https://github.com/windmill-labs/windmill/commit/2ba5bc673faf11e419e0c8600acd7dbcdb2d7601)) + +## [1.278.3](https://github.com/windmill-labs/windmill/compare/v1.278.2...v1.278.3) (2024-02-26) + +### Bug Fixes + +- add bigint support to mysql ([#3294](https://github.com/windmill-labs/windmill/issues/3294)) ([6a0ed19](https://github.com/windmill-labs/windmill/commit/6a0ed19c807f618b2eb7c50a56412452af890b75)) +- crash on init script failure ([c7f6e6f](https://github.com/windmill-labs/windmill/commit/c7f6e6f9d5ab4f1f5ca93d054804b2053c3afce6)) + +## [1.278.2](https://github.com/windmill-labs/windmill/compare/v1.278.1...v1.278.2) (2024-02-26) + +### Bug Fixes + +- add HOME to pip install ([b242251](https://github.com/windmill-labs/windmill/commit/b24225124a9591f719e7b2219682f2e143c405c1)) + +## [1.278.1](https://github.com/windmill-labs/windmill/compare/v1.278.0...v1.278.1) (2024-02-26) + +### Bug Fixes + +- add HOME to pip install ([ee0f8b6](https://github.com/windmill-labs/windmill/commit/ee0f8b691409cdb96d1d358f9822406c123fd429)) + +## [1.278.0](https://github.com/windmill-labs/windmill/compare/v1.277.1...v1.278.0) (2024-02-26) + +### Features + +- **frontend:** Update shortcuts design ([#3285](https://github.com/windmill-labs/windmill/issues/3285)) ([000a481](https://github.com/windmill-labs/windmill/commit/000a4814e8aedd3d9b5a7b240bcc2be5372e9d72)) + +### Bug Fixes + +- **frontend:** fix layout ([#3289](https://github.com/windmill-labs/windmill/issues/3289)) ([cec19c8](https://github.com/windmill-labs/windmill/commit/cec19c87b59d7c337b3fb11a792f32d67827de06)) +- handle better flow hanging monitor ([024f80a](https://github.com/windmill-labs/windmill/commit/024f80aee4c10918e011fd74f9762110bbcb1f8e)) +- improve conditional wrapper and prevent more app errors ([074a2f4](https://github.com/windmill-labs/windmill/commit/074a2f440d28d2023b04dc54f2165469dc37f048)) + +## [1.277.1](https://github.com/windmill-labs/windmill/compare/v1.277.0...v1.277.1) (2024-02-25) + +### Bug Fixes + +- do not handle zombie jobs on initial_load of monitor db ([86ca005](https://github.com/windmill-labs/windmill/commit/86ca005c546382407a47adbf431af0f7657ae48b)) + +## [1.277.0](https://github.com/windmill-labs/windmill/compare/v1.276.1...v1.277.0) (2024-02-25) + +### Features + +- more resilient flows in case of crash during transitions ([32a45b5](https://github.com/windmill-labs/windmill/commit/32a45b544dff5e31e4875c8ccfda68c77aa3a03c)) + +### Bug Fixes + +- improve performance of list users ([88799b9](https://github.com/windmill-labs/windmill/commit/88799b935ef3c306a5bc81788bfda4df3502d827)) +- improve relative bun loader ([136c04e](https://github.com/windmill-labs/windmill/commit/136c04eed4ed6aa484b72b000f7821d2ec2a5406)) + +## [1.276.1](https://github.com/windmill-labs/windmill/compare/v1.276.0...v1.276.1) (2024-02-24) + +### Bug Fixes + +- parse wmill.S3Object as S3Object ([8171eb3](https://github.com/windmill-labs/windmill/commit/8171eb30ff2d75e52a1a593a49ec14e497441f57)) + +## [1.276.0](https://github.com/windmill-labs/windmill/compare/v1.275.6...v1.276.0) (2024-02-24) + +### Features + +- add filters for schedules ([#3276](https://github.com/windmill-labs/windmill/issues/3276)) ([044ea75](https://github.com/windmill-labs/windmill/commit/044ea75403f7b0752b09df244c98d1de7f567ec8)) + +### Bug Fixes + +- improve completed_job index ([9286487](https://github.com/windmill-labs/windmill/commit/9286487c391dc39dc45efabdd8227f89905c1ce6)) +- improve erorr handling when error on app component run request ([#3273](https://github.com/windmill-labs/windmill/issues/3273)) ([b0f9299](https://github.com/windmill-labs/windmill/commit/b0f9299a2cd23583d3e82afc24cda3903860b364)) +- improve s3file browser tester ([4854f18](https://github.com/windmill-labs/windmill/commit/4854f181b11cafc54a8312a00a2cfc5059d35e3b)) +- improve support for singlescriptflow ([0df4322](https://github.com/windmill-labs/windmill/commit/0df43221ec0e0cd2e9349015d3250b6c630d7216)) +- make setting owner for folders a transaction ([37987bf](https://github.com/windmill-labs/windmill/commit/37987bf9adf10da533470971bf82111d94a50aa8)) +- replace no res/var error in app input with warning ([#3274](https://github.com/windmill-labs/windmill/issues/3274)) ([ec65b52](https://github.com/windmill-labs/windmill/commit/ec65b521ce8027c16799f7bd71f1d1956a125925)) + +## [1.275.6](https://github.com/windmill-labs/windmill/compare/v1.275.5...v1.275.6) (2024-02-22) + +### Bug Fixes + +- fix argenum breaking frontend bug ([1697f4b](https://github.com/windmill-labs/windmill/commit/1697f4b25424b4db5abc7a28640e8465210cc612)) + +## [1.275.5](https://github.com/windmill-labs/windmill/compare/v1.275.4...v1.275.5) (2024-02-22) + +### Bug Fixes + +- fix sqlx build ([08264e9](https://github.com/windmill-labs/windmill/commit/08264e9c1a1c0e0183ab718f8b3907b750a1605d)) + +## [1.275.4](https://github.com/windmill-labs/windmill/compare/v1.275.3...v1.275.4) (2024-02-22) + +### Bug Fixes + +- improve scim handling of renames on azure ([bc8e481](https://github.com/windmill-labs/windmill/commit/bc8e481fbb073db48cd3738e46c67195a423feeb)) + +## [1.275.3](https://github.com/windmill-labs/windmill/compare/v1.275.2...v1.275.3) (2024-02-22) + +### Bug Fixes + +- fix sqlx build ([e15e206](https://github.com/windmill-labs/windmill/commit/e15e2060262edaeb648adc30245521c721cdb9c2)) +- fix sqlx build ([c6eb0b5](https://github.com/windmill-labs/windmill/commit/c6eb0b5840e860d15361301cf7cd8bf948e62050)) + +## [1.275.2](https://github.com/windmill-labs/windmill/compare/v1.275.1...v1.275.2) (2024-02-22) + +### Bug Fixes + +- fix app policy quote escaping ([18a7c48](https://github.com/windmill-labs/windmill/commit/18a7c48f9167e739aab185602f8c5fe607a5f1d4)) +- fix app policy quote escaping ([6059a82](https://github.com/windmill-labs/windmill/commit/6059a820a97d3ab6ddd39799fc8735d2760dc108)) +- **frontend:** Fix the selection of the first row ([#3263](https://github.com/windmill-labs/windmill/issues/3263)) ([d696f85](https://github.com/windmill-labs/windmill/commit/d696f854e13a1874ad0cad2937508ca39524fba7)) +- improve aggrid behavior edit when filtered ([1dea611](https://github.com/windmill-labs/windmill/commit/1dea611a4cbb46b0d01db181afca0afdec4ace51)) +- improve display result header ([#3265](https://github.com/windmill-labs/windmill/issues/3265)) ([5ba0bf5](https://github.com/windmill-labs/windmill/commit/5ba0bf5294a1bc5cb6cffcd6d580ee8db5a5e102)) +- support arbitrary azure resource path for blob storage ([d3f60b9](https://github.com/windmill-labs/windmill/commit/d3f60b9f9cd1b7b7891ee92273b0e824f9282e1d)) + +## [1.275.1](https://github.com/windmill-labs/windmill/compare/v1.275.0...v1.275.1) (2024-02-21) + +### Bug Fixes + +- **frontend:** Select the row when clicking on a checkbox ([#3260](https://github.com/windmill-labs/windmill/issues/3260)) ([c6865f8](https://github.com/windmill-labs/windmill/commit/c6865f8a6ce880ef951b0fff70c29feaec31f9e6)) + +## [1.275.0](https://github.com/windmill-labs/windmill/compare/v1.274.1...v1.275.0) (2024-02-21) + +### Features + +- **frontend:** add support for datetime and time ([#3256](https://github.com/windmill-labs/windmill/issues/3256)) ([464604d](https://github.com/windmill-labs/windmill/commit/464604d939b419b3a2ac9f1a9d6b3e09f3bf803f)) + +### Bug Fixes + +- add default time to datetime picker ([a09a487](https://github.com/windmill-labs/windmill/commit/a09a487b8442e69d32198aeddc9974e1d503d3a3)) +- **frontend:** improve handling of optional enums ([77d66ef](https://github.com/windmill-labs/windmill/commit/77d66efa45b1d40d5f2ede38e17d121676896bad)) + +## [1.274.1](https://github.com/windmill-labs/windmill/compare/v1.274.0...v1.274.1) (2024-02-20) + +### Bug Fixes + +- **python:** ignore stdlib imports with \_ ([806d111](https://github.com/windmill-labs/windmill/commit/806d1110085d68f1fa1f5611d2d0edbbfdcf9f51)) + +## [1.274.0](https://github.com/windmill-labs/windmill/compare/v1.273.0...v1.274.0) (2024-02-20) + +### Features + +- **app:** fields inputs can be picked to not trigger recompute individually ([33b02b1](https://github.com/windmill-labs/windmill/commit/33b02b1aef9b937ac2ace0e46a2d2c600cc7716a)) +- **frontend:** App debug mode ([#3252](https://github.com/windmill-labs/windmill/issues/3252)) ([247396d](https://github.com/windmill-labs/windmill/commit/247396d04d10aa5fcff04a35615335649e09672f)) +- **frontend:** Button rework ([#3216](https://github.com/windmill-labs/windmill/issues/3216)) ([2138016](https://github.com/windmill-labs/windmill/commit/2138016242e33de1861ea4841ec38aced956d43a)) +- **frontend:** Fix tailwind classes on the Select component ([#3249](https://github.com/windmill-labs/windmill/issues/3249)) ([62824e4](https://github.com/windmill-labs/windmill/commit/62824e4af8a2acd43e38a555200e5726a12d0e8c)) + +### Bug Fixes + +- accept multiple dependency map importer for python ([65e09a7](https://github.com/windmill-labs/windmill/commit/65e09a705f0059ae7eb819c955bb2222b5adfa76)) +- ai fill deep copy before slicing modules + minor improvements ([#3255](https://github.com/windmill-labs/windmill/issues/3255)) ([409f338](https://github.com/windmill-labs/windmill/commit/409f3382db1d2e7c4b6dd6ecdeacfc093b6bd878)) +- improve database studio ([30105af](https://github.com/windmill-labs/windmill/commit/30105af0dde06b1d6d176980afc9c1f9f7644d34)) +- **python:** handle recursive python imports with loop ([bf3e417](https://github.com/windmill-labs/windmill/commit/bf3e417acc167583aaef365e92eed6c216e007ec)) + +## [1.273.0](https://github.com/windmill-labs/windmill/compare/v1.272.0...v1.273.0) (2024-02-20) + +### Features + +- add support for mem peak to nativets scripts ([18bb982](https://github.com/windmill-labs/windmill/commit/18bb982852ad8e653a02acfd21108a236a478d6f)) +- allow arbitrary timeout on graphql ([66fc78f](https://github.com/windmill-labs/windmill/commit/66fc78f23346cafa6ad9498a1614b505901aa95b)) +- no logos for whitelabel licenses ([66578d1](https://github.com/windmill-labs/windmill/commit/66578d1093e608f7c3c1452328a816f3777bcbf3)) +- no logos for whitelabel licenses ([628dccf](https://github.com/windmill-labs/windmill/commit/628dccf16a17624ca97773cd22bbff6934d29b59)) +- usage-based billing ([#3247](https://github.com/windmill-labs/windmill/issues/3247)) ([4b153e7](https://github.com/windmill-labs/windmill/commit/4b153e7626fc952a4e5a2d820431c355f9368cdd)) + +### Bug Fixes + +- add support for onSelect to app select ([4a224f6](https://github.com/windmill-labs/windmill/commit/4a224f60ab936690c4f16246700992869d5d8bb3)) +- add support for onToggle for app checkboxes ([5a47f50](https://github.com/windmill-labs/windmill/commit/5a47f5062bc554bfcabb689eae8427e8eb2774d0)) +- **app:** make custom components available in public apps ([8979f01](https://github.com/windmill-labs/windmill/commit/8979f01730b1a3f658f89dc5487b8f3f33c5be95)) +- backend build on macos ([#3243](https://github.com/windmill-labs/windmill/issues/3243)) ([458550f](https://github.com/windmill-labs/windmill/commit/458550f31480fef889a70a826f6c1f43a5baf9bd)) +- bigquery timeout ([#3244](https://github.com/windmill-labs/windmill/issues/3244)) ([be3f912](https://github.com/windmill-labs/windmill/commit/be3f9125afa8ff4114117a9e6b6bd56e1f9d8234)) +- improve date picker across app ([4c5d613](https://github.com/windmill-labs/windmill/commit/4c5d6139ce590eac0a94bb9c8bf9dbceb0dac385)) +- improve runs page drag ([f17e8bc](https://github.com/windmill-labs/windmill/commit/f17e8bc15d4c35e68634e2ff61bb99111b81abc2)) +- prevent bigquery/snowflake against abuse timeout ([3761de8](https://github.com/windmill-labs/windmill/commit/3761de874e03e7ade952925ebd57b75b92a4aa0e)) +- prevent native http against timeout abuse ([e28fbc9](https://github.com/windmill-labs/windmill/commit/e28fbc9c9763254422d3fda9b181640ebfce19d9)) +- prevent postgres timeout abuse ([d35c67c](https://github.com/windmill-labs/windmill/commit/d35c67c9b992a6c3c65f18737d4d91a22cb9f457)) +- **psql:** add mem peak to postgresql ([f129e75](https://github.com/windmill-labs/windmill/commit/f129e7562835cfa1dd61addc1a480cdde9e2f72f)) +- remove oom prio macos ([#3245](https://github.com/windmill-labs/windmill/issues/3245)) ([6ccca62](https://github.com/windmill-labs/windmill/commit/6ccca62876a8153ae9a4a34250895d2a1b63eeea)) + +## [1.272.0](https://github.com/windmill-labs/windmill/compare/v1.271.0...v1.272.0) (2024-02-18) + +### Features + +- scim token and saml metadata setting in UI directly + ([639c802](https://github.com/windmill-labs/windmill/commit/639c80220f630d34e161fc095986f5983d16378d)) + +### Bug Fixes + +- improve instance settings save button UX + ([2c4a3a0](https://github.com/windmill-labs/windmill/commit/2c4a3a02a3838b6214f7edd2f88a0473f2075d1c)) +- **mysql:** support integer with float type + ([041b777](https://github.com/windmill-labs/windmill/commit/041b777fd65692d3549ba7ec64258882e108f5bf)) +- pre-select resource if there is only one + ([801eda1](https://github.com/windmill-labs/windmill/commit/801eda1e22298f9f55d1ea87d0a19a03e6de6a64)) +- update internal deno runtime to 0.262.0 + ([#3240](https://github.com/windmill-labs/windmill/issues/3240)) + ([a61936f](https://github.com/windmill-labs/windmill/commit/a61936f66fd3c60ecb4fbb8f3fbb39ff0fe8257f)) + +## [1.271.0](https://github.com/windmill-labs/windmill/compare/v1.270.3...v1.271.0) (2024-02-17) + +### Features + +- scim token and saml metadata setting in UI directly + ([71e915a](https://github.com/windmill-labs/windmill/commit/71e915a86c4f0661bad7a0f977b015045f739d8a)) + +### Bug Fixes + +- **mysql:** support integer with float type + ([041b777](https://github.com/windmill-labs/windmill/commit/041b777fd65692d3549ba7ec64258882e108f5bf)) +- pre-select resource if there is only one + ([801eda1](https://github.com/windmill-labs/windmill/commit/801eda1e22298f9f55d1ea87d0a19a03e6de6a64)) + +## [1.270.3](https://github.com/windmill-labs/windmill/compare/v1.270.2...v1.270.3) (2024-02-16) + +### Bug Fixes + +- server cache only cache tokens for 120s + ([b0155ff](https://github.com/windmill-labs/windmill/commit/b0155ffb7ec12c1e441b71c351ae085b274be603)) + +## [1.270.2](https://github.com/windmill-labs/windmill/compare/v1.270.1...v1.270.2) (2024-02-16) + +### Bug Fixes + +- **frontend:** wrap values with special characters in double quotes when + downloading a CSV + ([#3232](https://github.com/windmill-labs/windmill/issues/3232)) + ([b1638fc](https://github.com/windmill-labs/windmill/commit/b1638fcbe286d305b3314caa4bfedac2b6183fa8)) + +## [1.270.1](https://github.com/windmill-labs/windmill/compare/v1.270.0...v1.270.1) (2024-02-16) + +### Bug Fixes + +- **deno:** add allow-net + ([dc58372](https://github.com/windmill-labs/windmill/commit/dc583723a75ec1a04406dca32b17bca2b723912a)) + +## [1.270.0](https://github.com/windmill-labs/windmill/compare/v1.269.0...v1.270.0) (2024-02-15) + +### Features + +- add raw option for urlencoded webhook call + ([#3215](https://github.com/windmill-labs/windmill/issues/3215)) + ([b81b095](https://github.com/windmill-labs/windmill/commit/b81b095b61f009fdf479b05cae113804c3975e1a)) +- Git sync exclude certain type per repository + ([#3210](https://github.com/windmill-labs/windmill/issues/3210)) + ([86326c1](https://github.com/windmill-labs/windmill/commit/86326c16524586f2737f1c5e3e98d0d5a2f1df96)) +- set branch summary on predicate gen + ([#3212](https://github.com/windmill-labs/windmill/issues/3212)) + ([156d10d](https://github.com/windmill-labs/windmill/commit/156d10d4162031bca50d413bc4e8a2bf24711420)) +- Workspace encryption key can be manually updated + ([#3223](https://github.com/windmill-labs/windmill/issues/3223)) + ([e8ed478](https://github.com/windmill-labs/windmill/commit/e8ed4783b2ff692951ec16be35d6b5553728b86f)) + +### Bug Fixes + +- add back resource type btn for bun/fetch + ([#3217](https://github.com/windmill-labs/windmill/issues/3217)) + ([d3a74e8](https://github.com/windmill-labs/windmill/commit/d3a74e881fdb7ac999508229f1f6677609d7e831)) +- add timestamp array support in pg + ([#3229](https://github.com/windmill-labs/windmill/issues/3229)) + ([7f98a96](https://github.com/windmill-labs/windmill/commit/7f98a96e24103d92011f6896b0b332034b4e78f1)) +- **frontend:** add header when downloading a CSV + ([#3228](https://github.com/windmill-labs/windmill/issues/3228)) + ([f399f49](https://github.com/windmill-labs/windmill/commit/f399f4921edb7735369e9d8abba95eefb53cfb4b)) +- **frontend:** fix supabase connect + ([#3218](https://github.com/windmill-labs/windmill/issues/3218)) + ([69da45d](https://github.com/windmill-labs/windmill/commit/69da45ddf2c8969577eede4188d988ea88d16cbc)) +- **frontend:** Fix table action recompute + ([#3221](https://github.com/windmill-labs/windmill/issues/3221)) + ([455aaed](https://github.com/windmill-labs/windmill/commit/455aaedd929d2bd4b637889fadc0411d7eeba5de)) +- **frontend:** update a few svelte packages + ([#3222](https://github.com/windmill-labs/windmill/issues/3222)) + ([28192ec](https://github.com/windmill-labs/windmill/commit/28192ec014fe1c1bb93ea563a4976fae1bff9fec)) +- improve transformer script gen + ([#3211](https://github.com/windmill-labs/windmill/issues/3211)) + ([d352b68](https://github.com/windmill-labs/windmill/commit/d352b68a26f3c58caccb67cc15ac5885496f80b4)) +- oauth settings for github and gitlab + ([#3219](https://github.com/windmill-labs/windmill/issues/3219)) + ([d1f929b](https://github.com/windmill-labs/windmill/commit/d1f929b2bb73e4727089df2936dde723486ba458)) +- prevent AI fill inputs freezing + ([#3226](https://github.com/windmill-labs/windmill/issues/3226)) + ([4492279](https://github.com/windmill-labs/windmill/commit/4492279c507d7ab8b705defba400dc53c853cd88)) +- run recompute on success for toggles on click and set default value + ([b75f79d](https://github.com/windmill-labs/windmill/commit/b75f79d3274de0c7620800afacedf9b5f980fda0)) +- **sso:** improve handling of filters for get groups for sso + ([44bfbad](https://github.com/windmill-labs/windmill/commit/44bfbadf689e11e9285de9503f738971fc9c34a6)) + +## [1.269.0](https://github.com/windmill-labs/windmill/compare/v1.268.0...v1.269.0) (2024-02-13) + +### Features + +- add ai for predicates and iterator expressions + ([#3203](https://github.com/windmill-labs/windmill/issues/3203)) + ([43e0ceb](https://github.com/windmill-labs/windmill/commit/43e0ceb342cd27ee94e7c1ac830ee642294e2f2f)) +- **frontend:** add confirmation modal to the app button + ([#3199](https://github.com/windmill-labs/windmill/issues/3199)) + ([6200932](https://github.com/windmill-labs/windmill/commit/620093271a44e90ea9b081583b4f1d93b04794dd)) +- Git sync can handle resource types, resources, variables and schedules + ([#3202](https://github.com/windmill-labs/windmill/issues/3202)) + ([0e7de63](https://github.com/windmill-labs/windmill/commit/0e7de63c4b698a449464a177b8da37ab9d0315ff)) +- improve runs page + add all workspaces to admins runs page + ([90c7c0e](https://github.com/windmill-labs/windmill/commit/90c7c0ed8a0b268c4fae7254e25ef29ee7e2aef6)) + +### Bug Fixes + +- **cli:** update hub sync version + ([8b46b95](https://github.com/windmill-labs/windmill/commit/8b46b953a2d0ac48bab51cadfc11a2d299242c4a)) +- **frontend:** Truncate path on the run page + ([#3208](https://github.com/windmill-labs/windmill/issues/3208)) + ([3d0e5c8](https://github.com/windmill-labs/windmill/commit/3d0e5c8e576ab907a3533a30e3371641ddaea5f2)) +- init scripts are tagged with 'init_script' + ([3c52ef1](https://github.com/windmill-labs/windmill/commit/3c52ef14691b0db3774ed7dd376ee23687e9462f)) +- **scim:** switch right join to left join for groups + ([9655b8f](https://github.com/windmill-labs/windmill/commit/9655b8fb3275bc332a3bd2a10be27a30b3d653a5)) +- **scim:** when deleting instance groups manually, delete also members mapping + ([ce4d077](https://github.com/windmill-labs/windmill/commit/ce4d0777f6d9297af62b92d29855d7108aac23d2)) +- search on table set page to 0 + ([5c5c9c5](https://github.com/windmill-labs/windmill/commit/5c5c9c5ac4aa166054666b64d00cc82a2afac8f5)) + +## [1.268.0](https://github.com/windmill-labs/windmill/compare/v1.267.0...v1.268.0) (2024-02-11) + +### Features + +- flow inputs ai gen + ([#3191](https://github.com/windmill-labs/windmill/issues/3191)) + ([13e6706](https://github.com/windmill-labs/windmill/commit/13e6706a095639c92691a4e714704aedd09155c2)) + +### Bug Fixes + +- allow direct git-sync setting loading + ([f171d08](https://github.com/windmill-labs/windmill/commit/f171d0827858fbbf1b2a478164ae67bce404e7d1)) +- **cli:** improve tty handling + ([87ee3e4](https://github.com/windmill-labs/windmill/commit/87ee3e4a93f955f8ee5dab04e8bcec5415fb3fb5)) +- **cli:** improve tty handling + ([f1ae3f2](https://github.com/windmill-labs/windmill/commit/f1ae3f21ef97b5144cc670b1c5f12508d3ac6c9d)) + +## [1.267.0](https://github.com/windmill-labs/windmill/compare/v1.266.1...v1.267.0) (2024-02-10) + +### Features + +- default tag can be made workspace specific + ([#3194](https://github.com/windmill-labs/windmill/issues/3194)) + ([8a3a9bd](https://github.com/windmill-labs/windmill/commit/8a3a9bda1c03661c4072c9ce53c07ee632e3c6ca)) + +### Bug Fixes + +- **cli:** improve restart_unless_cancelled handling + ([16507ad](https://github.com/windmill-labs/windmill/commit/16507ad45eba1cb2212f22a3cce05b60b1d3a39c)) + +## [1.266.1](https://github.com/windmill-labs/windmill/compare/v1.266.0...v1.266.1) (2024-02-10) + +### Bug Fixes + +- improve load schedule args + ([31469cb](https://github.com/windmill-labs/windmill/commit/31469cb77c5a768f2720fb711a203c57089a5a3b)) + +## [1.266.0](https://github.com/windmill-labs/windmill/compare/v1.265.3...v1.266.0) (2024-02-09) + +### Features + +- git sync now accepts path filters and type filters + ([#3189](https://github.com/windmill-labs/windmill/issues/3189)) + ([e9a6c81](https://github.com/windmill-labs/windmill/commit/e9a6c8154c4fc1bf52e26251a9d75e54c511837d)) + +### Bug Fixes + +- add --unstable-http arg to deno + ([#3186](https://github.com/windmill-labs/windmill/issues/3186)) + ([8d5c7c2](https://github.com/windmill-labs/windmill/commit/8d5c7c2b461ee71b8376b12f574dffff1c9f1387)) +- **frontend:** fix html component initial data + ([#3188](https://github.com/windmill-labs/windmill/issues/3188)) + ([6a13b97](https://github.com/windmill-labs/windmill/commit/6a13b97bc3561fe4bdeb8a02e88f80f749d906f6)) +- improve no flow overlap + schedule args loading + ([6614817](https://github.com/windmill-labs/windmill/commit/6614817cd4c208eebc52955f408041b14b9dd34f)) +- improve no flow overlap + schedule args loading + ([48b8520](https://github.com/windmill-labs/windmill/commit/48b8520239a591756e4573190e3fa45b57e52535)) +- improve on-boarding flow app + ([4d64c94](https://github.com/windmill-labs/windmill/commit/4d64c942fced44b4ca4af2801009849d5dd1f55b)) +- Properly handle pip index urls in pip-compile + ([#3192](https://github.com/windmill-labs/windmill/issues/3192)) + ([b230378](https://github.com/windmill-labs/windmill/commit/b230378320336331de1c50d6fdec60da576751e6)) + +## [1.265.3](https://github.com/windmill-labs/windmill/compare/v1.265.2...v1.265.3) (2024-02-08) + +### Bug Fixes + +- ai builder colors + ([b9c0eda](https://github.com/windmill-labs/windmill/commit/b9c0eda16874ee7a85a63872ea20636f64a48c90)) + +## [1.265.2](https://github.com/windmill-labs/windmill/compare/v1.265.1...v1.265.2) (2024-02-08) + +### Bug Fixes + +- Cuda image building + ([#3179](https://github.com/windmill-labs/windmill/issues/3179)) + ([29be502](https://github.com/windmill-labs/windmill/commit/29be5021ff9603d6cc7e302c46fb44c573967b80)) +- **frontend:** Fix tutorials + Move into itself + Disable app history… + ([#3181](https://github.com/windmill-labs/windmill/issues/3181)) + ([9f98caa](https://github.com/windmill-labs/windmill/commit/9f98caa072b3ac83b60e9c9b0f31d39ae072b08a)) +- handle better \u0000 in python result + ([e4dc972](https://github.com/windmill-labs/windmill/commit/e4dc972d40770e5d0ffb2c2726b0053cdff7e407)) +- Improve python writeS3File perf + ([#3182](https://github.com/windmill-labs/windmill/issues/3182)) + ([e00e3f9](https://github.com/windmill-labs/windmill/commit/e00e3f9d2d65b81cdf8abf7500deb5b4f5ecf607)) + +## [1.265.1](https://github.com/windmill-labs/windmill/compare/v1.265.0...v1.265.1) (2024-02-07) + +### Bug Fixes + +- graphql web worker + ([#3177](https://github.com/windmill-labs/windmill/issues/3177)) + ([361ea76](https://github.com/windmill-labs/windmill/commit/361ea7627982f36797138f58fe8ad9c503729e34)) + +## [1.265.0](https://github.com/windmill-labs/windmill/compare/v1.264.0...v1.265.0) (2024-02-07) + +### Features + +- Worker env variables are hidden to developers in the config panel + ([#3175](https://github.com/windmill-labs/windmill/issues/3175)) + ([126aa60](https://github.com/windmill-labs/windmill/commit/126aa60a9da2595f7f64a6e14b2467ac933acd22)) + +### Bug Fixes + +- **frontend:** handle not found folder in FolderEditor + ([#3170](https://github.com/windmill-labs/windmill/issues/3170)) + ([284e43c](https://github.com/windmill-labs/windmill/commit/284e43c0644b05784497a2494de3a0e59f897dd4)) +- improve agent policies + ([73ff48b](https://github.com/windmill-labs/windmill/commit/73ff48bc8356c3c205f6a74eba7ad1c99c68e097)) + +## [1.264.0](https://github.com/windmill-labs/windmill/compare/v1.263.1...v1.264.0) (2024-02-07) + +### Features + +- violet ai branding + flow summary + ([#3171](https://github.com/windmill-labs/windmill/issues/3171)) + ([91743c3](https://github.com/windmill-labs/windmill/commit/91743c3cfbce22a72ca33feef4cd2fa4714a4282)) + +### Bug Fixes + +- add audit logs to worker configs + ([cd78c67](https://github.com/windmill-labs/windmill/commit/cd78c6766d2c92ba7759faf768ff93788ec6b7d8)) +- export base64 from typescript client + ([0af0aae](https://github.com/windmill-labs/windmill/commit/0af0aae0b537ec2b24205745d4d4d1dcfda1901c)) +- **frontend:** Fix delete script + ([#3166](https://github.com/windmill-labs/windmill/issues/3166)) + ([83b8d62](https://github.com/windmill-labs/windmill/commit/83b8d628f006533eb23bf223e4a2bcd17155dcf2)) +- Main compile breaks + ([#3169](https://github.com/windmill-labs/windmill/issues/3169)) + ([6edc4c4](https://github.com/windmill-labs/windmill/commit/6edc4c4fc822763992e33ab2dbeafbfeee0de1c8)) +- only create shared dir symlink if not exists + ([75e210b](https://github.com/windmill-labs/windmill/commit/75e210bfc7f7b6e32acdad74e222be3b28062cd1)) +- SAML redirect uses SAMLRequest in URL + ([#3168](https://github.com/windmill-labs/windmill/issues/3168)) + ([812516b](https://github.com/windmill-labs/windmill/commit/812516bb06539cc408d2c46366f9adaa7925261d)) + +## [1.263.1](https://github.com/windmill-labs/windmill/compare/v1.263.0...v1.263.1) (2024-02-06) + +### Bug Fixes + +- **frontend:** fix toggles margins + ([#3165](https://github.com/windmill-labs/windmill/issues/3165)) + ([a352d85](https://github.com/windmill-labs/windmill/commit/a352d85b0ba4756226b98032e0879a9f91bb20e4)) +- improve ts wrappers + ([#3163](https://github.com/windmill-labs/windmill/issues/3163)) + ([0fc2221](https://github.com/windmill-labs/windmill/commit/0fc22213e45691e5d42dacdbf903ae0416a9d599)) + +## [1.263.0](https://github.com/windmill-labs/windmill/compare/v1.262.1...v1.263.0) (2024-02-06) + +### Features + +- **frontend:** add status when a flow setting is enabled + ([#3161](https://github.com/windmill-labs/windmill/issues/3161)) + ([8a8c1d3](https://github.com/windmill-labs/windmill/commit/8a8c1d3c3f6ad6053fbd107a0f0e85d70f4215ac)) +- new ai design ([#3152](https://github.com/windmill-labs/windmill/issues/3152)) + ([58d3484](https://github.com/windmill-labs/windmill/commit/58d34845a05cd215f682bc9081b0cb883d174676)) + +### Bug Fixes + +- add ping since to list workers + ([557d0bc](https://github.com/windmill-labs/windmill/commit/557d0bcbef185aaef90d4058d9f01fa567bef349)) +- **frontend:** fix dateslider doclink + ([#3159](https://github.com/windmill-labs/windmill/issues/3159)) + ([bc75a5a](https://github.com/windmill-labs/windmill/commit/bc75a5acbce89d3ff4332ecbe7b98c63d5e55e1b)) +- **frontend:** Fix operators actions + small UI fixes + ([#3157](https://github.com/windmill-labs/windmill/issues/3157)) + ([4faedfe](https://github.com/windmill-labs/windmill/commit/4faedfe58926cfa770857a514d08749f3e40d17e)) +- go client sets resource properly + ([#3160](https://github.com/windmill-labs/windmill/issues/3160)) + ([057b415](https://github.com/windmill-labs/windmill/commit/057b415e9ab5a2e5789be7181c86e885edd86c7f)) +- increase default max conn of a worker to 4 + ([887bf68](https://github.com/windmill-labs/windmill/commit/887bf6872b5b5438ca5f33ec5dda5162c1c4b132)) +- scim added users are now auto-added/invited + ([1352add](https://github.com/windmill-labs/windmill/commit/1352add8c65de5266d40baf3d9058a6f4ea3d9b0)) + +## [1.262.1](https://github.com/windmill-labs/windmill/compare/v1.262.0...v1.262.1) (2024-02-05) + +### Bug Fixes + +- add get_root_job_id typescript-client + ([9877c5f](https://github.com/windmill-labs/windmill/commit/9877c5fd9da0b912a90efc0bfdc3a0ba08b04bfc)) + +## [1.262.0](https://github.com/windmill-labs/windmill/compare/v1.261.0...v1.262.0) (2024-02-05) + +### Features + +- **frontend:** add support for toasts in frontend scripts + ([#3147](https://github.com/windmill-labs/windmill/issues/3147)) + ([81174ab](https://github.com/windmill-labs/windmill/commit/81174abf5a9353535df3c7a8ce92a4e354689af5)) +- **frontend:** alert component + ([#3140](https://github.com/windmill-labs/windmill/issues/3140)) + ([2637fa2](https://github.com/windmill-labs/windmill/commit/2637fa23bbae00b17bc08c31dc8a751b8c1581a7)) +- **frontend:** App date slider component + ([#3146](https://github.com/windmill-labs/windmill/issues/3146)) + ([4c37479](https://github.com/windmill-labs/windmill/commit/4c37479b67b7515b905c7f043c4646fa0b3c80ec)) + +### Bug Fixes + +- add get_root_job_id + ([60f3a9f](https://github.com/windmill-labs/windmill/commit/60f3a9fa6b54ca5f62d10a82d974e78f2faaa198)) +- auto-add user add user to the group all + ([c067a87](https://github.com/windmill-labs/windmill/commit/c067a875710e2fa217d7c973e5d4d109d5bf0aa5)) +- go preload wmill dependencies + ([#3148](https://github.com/windmill-labs/windmill/issues/3148)) + ([364284c](https://github.com/windmill-labs/windmill/commit/364284cf4121eca0fdb24d130cdf73b156c16886)) +- go preload wmill dependencies + ([#3149](https://github.com/windmill-labs/windmill/issues/3149)) + ([9c9e543](https://github.com/windmill-labs/windmill/commit/9c9e5439968b0f141b8c6b90ced558f8c93f48ca)) +- go preload wmill dependencies + ([#3150](https://github.com/windmill-labs/windmill/issues/3150)) + ([40c3b91](https://github.com/windmill-labs/windmill/commit/40c3b916d86a810ff7de57bc77f40c78131a784c)) +- remove duplicated on deployment management UI + ([6c184eb](https://github.com/windmill-labs/windmill/commit/6c184eb4e4da3af83792b56fb1cd987a53037356)) +- scheduling of flows is done immediately + ([a89f681](https://github.com/windmill-labs/windmill/commit/a89f6817f0af971c0ba85f5ce2bedda51126f0e0)) + +## [1.261.0](https://github.com/windmill-labs/windmill/compare/v1.260.1...v1.261.0) (2024-02-05) + +### Features + +- add flow debug info endpoint + button + ([608c759](https://github.com/windmill-labs/windmill/commit/608c7597aedfb896376b2272e45a30a9e7545b58)) +- add nobypassrls migration + ([97d1349](https://github.com/windmill-labs/windmill/commit/97d134994edca26156aa3de85c5e9651e605dc5a)) + +### Bug Fixes + +- add support for ephemeral tokens + ([95952da](https://github.com/windmill-labs/windmill/commit/95952da387fa9954292932588bd1c106e811e59a)) +- decrease database connections of workers to 3 + ([2c4eb46](https://github.com/windmill-labs/windmill/commit/2c4eb46e65dfed981c0fce1acf35ea36225c6063)) + +## [1.260.1](https://github.com/windmill-labs/windmill/compare/v1.260.0...v1.260.1) (2024-02-02) + +### Bug Fixes + +- retrigger release + ([160f91e](https://github.com/windmill-labs/windmill/commit/160f91e0be87a6ccf59eb99589ac7f73fa43d10c)) + +## [1.260.0](https://github.com/windmill-labs/windmill/compare/v1.259.2...v1.260.0) (2024-02-02) + +### Features + +- disable self approval toggle + ([#3137](https://github.com/windmill-labs/windmill/issues/3137)) + ([017d9b8](https://github.com/windmill-labs/windmill/commit/017d9b86707c8c11d41dec7532c440cc79801167)) + +## [1.259.2](https://github.com/windmill-labs/windmill/compare/v1.259.1...v1.259.2) (2024-02-02) + +### Bug Fixes + +- **frontend:** Fix dt branch + ([#3124](https://github.com/windmill-labs/windmill/issues/3124)) + ([fc8ef58](https://github.com/windmill-labs/windmill/commit/fc8ef5867acc7e4a62c8d8e378d179a240c02a66)) +- Python buffered reader + ([#3136](https://github.com/windmill-labs/windmill/issues/3136)) + ([86aa6d0](https://github.com/windmill-labs/windmill/commit/86aa6d0f0dee237c10ace4a278b9a0dc03460f03)) + +## [1.259.1](https://github.com/windmill-labs/windmill/compare/v1.259.0...v1.259.1) (2024-02-02) + +### Bug Fixes + +- **python:** fix python reader + ([583e942](https://github.com/windmill-labs/windmill/commit/583e942174673ec40f263a932912fac7ec00c383)) + +## [1.259.0](https://github.com/windmill-labs/windmill/compare/v1.258.4...v1.259.0) (2024-02-01) + +### Features + +- ai cron ([#3128](https://github.com/windmill-labs/windmill/issues/3128)) + ([c4308de](https://github.com/windmill-labs/windmill/commit/c4308de7206a200a588f98f947fc532189c92ef0)) +- auto-add users + ([#3114](https://github.com/windmill-labs/windmill/issues/3114)) + ([6b772dd](https://github.com/windmill-labs/windmill/commit/6b772dd2a7b7e5c9b58777a3e3e99f8b46775e93)) +- **frontend:** add support for dynamic default values + enums + ([#3109](https://github.com/windmill-labs/windmill/issues/3109)) + ([ba10432](https://github.com/windmill-labs/windmill/commit/ba104324805edbced9c2adfbeccf8d83b91ea62d)) +- generate script summary + ([#3110](https://github.com/windmill-labs/windmill/issues/3110)) + ([1446cb4](https://github.com/windmill-labs/windmill/commit/1446cb45adbbb4fa59ca2ca98e9d7dd37af26a76)) +- migrate s3 client to object_store + ([#3116](https://github.com/windmill-labs/windmill/issues/3116)) + ([5dabe22](https://github.com/windmill-labs/windmill/commit/5dabe22935134984d017c20f4ce44389a67b5e4a)) + +### Bug Fixes + +- **frontend:** fix DB studio when columns have space in their names + ([#3126](https://github.com/windmill-labs/windmill/issues/3126)) + ([8a8a30c](https://github.com/windmill-labs/windmill/commit/8a8a30c5ecf894945f812561ad0f79db7a75d541)) +- **frontend:** fix schema form toolips + ([#3123](https://github.com/windmill-labs/windmill/issues/3123)) + ([5a6fc48](https://github.com/windmill-labs/windmill/commit/5a6fc4891f36f200f60e97ae168516fedd6d4411)) +- handle array of null in display result + ([e185eb3](https://github.com/windmill-labs/windmill/commit/e185eb37caf603d10a4e6084e6151d74735bd17b)) +- metadata gen typo + ([#3125](https://github.com/windmill-labs/windmill/issues/3125)) + ([c926e71](https://github.com/windmill-labs/windmill/commit/c926e714dc5d683208171c5c7308ba6da2f04204)) +- pg coerce nb to string + ([#3127](https://github.com/windmill-labs/windmill/issues/3127)) + ([b9d5506](https://github.com/windmill-labs/windmill/commit/b9d550679339f6fafc173fe68ab40730dc84376e)) + +## [1.258.4](https://github.com/windmill-labs/windmill/compare/v1.258.3...v1.258.4) (2024-01-31) + +### Bug Fixes + +- improve git sync + ([23f06d1](https://github.com/windmill-labs/windmill/commit/23f06d1a0424862afd6f733ed103f7a66f59dd12)) +- improve git sync + ([cc0aec8](https://github.com/windmill-labs/windmill/commit/cc0aec87438ebe4aef6dae1464b9dc267da3ad97)) + +## [1.258.3](https://github.com/windmill-labs/windmill/compare/v1.258.2...v1.258.3) (2024-01-31) + +### Bug Fixes + +- **cli:** restore other files support + ([7494e7e](https://github.com/windmill-labs/windmill/commit/7494e7ee2d7f56a95b6f976b9646c2bce3bdc22b)) +- **frontend:** Fix adding nodes to decision tree + ([#3107](https://github.com/windmill-labs/windmill/issues/3107)) + ([740801f](https://github.com/windmill-labs/windmill/commit/740801f4a73849919419ee96f4fc090eef855a17)) +- improve git sync + ([b063164](https://github.com/windmill-labs/windmill/commit/b0631648c3899134e668c30b890efc40aa2c0c49)) +- improve git sync + ([1c4129c](https://github.com/windmill-labs/windmill/commit/1c4129c4f68f690eac6bffe9016bc8506bb9cf37)) + +## [1.258.2](https://github.com/windmill-labs/windmill/compare/v1.258.1...v1.258.2) (2024-01-31) + +### Bug Fixes + +- **cli:** push folders first + on_behalf_of stripped from metadata + ([d2cbc7a](https://github.com/windmill-labs/windmill/commit/d2cbc7a41671e91e07fc1e81e966c51133abcc72)) + +## [1.258.1](https://github.com/windmill-labs/windmill/compare/v1.258.0...v1.258.1) (2024-01-31) + +### Bug Fixes + +- **cli:** add support for restart_unless_cancelled in sync + ([b4d0a3c](https://github.com/windmill-labs/windmill/commit/b4d0a3c4239973fa32e198b117c25e0d13a53b4c)) +- fix RETENTION period setting UI + ([5cec2ed](https://github.com/windmill-labs/windmill/commit/5cec2edaefd908a5bf3c9853035e6e2d2466656d)) + +## [1.258.0](https://github.com/windmill-labs/windmill/compare/v1.257.0...v1.258.0) (2024-01-30) + +### Features + +- Support sending SIGINT to jobs + ([#3094](https://github.com/windmill-labs/windmill/issues/3094)) + ([a719170](https://github.com/windmill-labs/windmill/commit/a719170a6ae125f03312fc1c12a73fd2f01a09c6)) + +### Bug Fixes + +- improve array static editor + ([ef17fd0](https://github.com/windmill-labs/windmill/commit/ef17fd0f5ea02df218200709f742de2c5ae4cc76)) + +## [1.257.0](https://github.com/windmill-labs/windmill/compare/v1.256.0...v1.257.0) (2024-01-30) + +### Features + +- **frontend:** Correctly set the licence key on the approval page + ([#3112](https://github.com/windmill-labs/windmill/issues/3112)) + ([8ebc90a](https://github.com/windmill-labs/windmill/commit/8ebc90abb2e9d99c4f20cb2e14c0a5487d5a11a0)) + +### Bug Fixes + +- **cli:** avoid flows in script generate-metadata + ([565e166](https://github.com/windmill-labs/windmill/commit/565e1668b372e7ac4482fc13962b32b1dbb084b3)) +- **frontend:** expose Filters + Displayed row count in the outputs + ([#3101](https://github.com/windmill-labs/windmill/issues/3101)) + ([b55c0bd](https://github.com/windmill-labs/windmill/commit/b55c0bd2c5a1646709328d8ee9b191a34a2c976c)) +- **frontend:** fix logpanel + ([#3111](https://github.com/windmill-labs/windmill/issues/3111)) + ([64441b3](https://github.com/windmill-labs/windmill/commit/64441b34522ba99ce44e74a2c81dcc4999acdfa3)) +- simplify folder creation by non admins + ([34253fd](https://github.com/windmill-labs/windmill/commit/34253fd43b01fbe15dafe233d008fc9b98c29828)) + +## [1.256.0](https://github.com/windmill-labs/windmill/compare/v1.255.0...v1.256.0) (2024-01-30) + +### Features + +- list jobs metrics + ([#3104](https://github.com/windmill-labs/windmill/issues/3104)) + ([26d5c6c](https://github.com/windmill-labs/windmill/commit/26d5c6c1ba2dfa7edb0217bf7dc89f45279781a7)) + +### Bug Fixes + +- add support for NPM_CONFIG_REGISTRY + ([47fcfbb](https://github.com/windmill-labs/windmill/commit/47fcfbbbdf179d241f1deb3d5527f8faa0a8132e)) +- add support for NPM_CONFIG_REGISTRY + ([27f4624](https://github.com/windmill-labs/windmill/commit/27f4624b30fcb04c98d093e49c614baa5a938528)) +- **frontend:** fix chartjs when resolvedDatasets is not defined + ([#3106](https://github.com/windmill-labs/windmill/issues/3106)) + ([0102dce](https://github.com/windmill-labs/windmill/commit/0102dcef8ecbc1d8a9528bac8fdfd95b93689155)) + +## [1.255.0](https://github.com/windmill-labs/windmill/compare/v1.254.1...v1.255.0) (2024-01-29) + +### Features + +- **cli:** allow all sync options to be passable from wmill.yaml directly + ([2a80df4](https://github.com/windmill-labs/windmill/commit/2a80df4a80cbd4ccecf2066e55efe092b070fefa)) +- **cli:** global generate-metadata + inherit deps from closest + package.json/requirements.txt + bun settable as default + ([#3102](https://github.com/windmill-labs/windmill/issues/3102)) + ([49c1bc5](https://github.com/windmill-labs/windmill/commit/49c1bc50f3ae6aba42317c2a0ef181927e915d26)) +- **cli:** make --raw the default for cli sync + ([28a1966](https://github.com/windmill-labs/windmill/commit/28a196657fa60d4db7c6528367e578b1202c5353)) +- **cli:** make default typescript configurable + ([1f46bcb](https://github.com/windmill-labs/windmill/commit/1f46bcba72592e39820074d160381fe0ff42ac70)) +- Download s3 file as stream in Python and TS + ([#3099](https://github.com/windmill-labs/windmill/issues/3099)) + ([6160889](https://github.com/windmill-labs/windmill/commit/616088979378712eab5b3abbb646d3e688d2cece)) +- **frontend:** handle file default value + ([#3095](https://github.com/windmill-labs/windmill/issues/3095)) + ([94ddf80](https://github.com/windmill-labs/windmill/commit/94ddf803566e94c443f989fc0c7bde578b704786)) +- Passing HOME env var through to python workers + ([#3092](https://github.com/windmill-labs/windmill/issues/3092)) + ([ec911f6](https://github.com/windmill-labs/windmill/commit/ec911f6a5a68b9d4b2703bef8ebc3342c755a35a)) +- update openai models + increase length + improve code completion + ([#3097](https://github.com/windmill-labs/windmill/issues/3097)) + ([6d77578](https://github.com/windmill-labs/windmill/commit/6d77578590cc666272bb364d21b7f2a3fe4494ac)) + +### Bug Fixes + +- **frontend:** various UI fix + ([#3098](https://github.com/windmill-labs/windmill/issues/3098)) + ([cbfa5ff](https://github.com/windmill-labs/windmill/commit/cbfa5ff8871097c4f292e32b850a6c10a0809575)) +- improve display result + ([ff559ec](https://github.com/windmill-labs/windmill/commit/ff559ecdbdfedc09e17a1ccfc94d17d5b587c453)) +- improve schedule args clearing on script change + ([59e0be7](https://github.com/windmill-labs/windmill/commit/59e0be77ad215e13dbd1e071766152c3fa676fde)) +- update deno to 1.38 -> 1.40.2 + ([a5d2536](https://github.com/windmill-labs/windmill/commit/a5d25362dbbe09c0c544ddddf0749936cdb8e317)) +- use extra headers when urlencoded + ([#3103](https://github.com/windmill-labs/windmill/issues/3103)) + ([8fcf119](https://github.com/windmill-labs/windmill/commit/8fcf119798c576a57e6dee3ed5119b7b5d1130f6)) + +## [1.254.1](https://github.com/windmill-labs/windmill/compare/v1.254.0...v1.254.1) (2024-01-27) + +### Bug Fixes + +- render all responsiveness fix + ([18d832c](https://github.com/windmill-labs/windmill/commit/18d832c6347c31fb2c2ddc1268cfd066d01352ae)) +- render all responsiveness fix + ([dfabb37](https://github.com/windmill-labs/windmill/commit/dfabb371003e955a05e4d8672fb95a637f236a72)) + +## [1.254.0](https://github.com/windmill-labs/windmill/compare/v1.253.8...v1.254.0) (2024-01-26) + +### Features + +- **frontend:** add support for render all + ([#3084](https://github.com/windmill-labs/windmill/issues/3084)) + ([4607939](https://github.com/windmill-labs/windmill/commit/460793954944f695d6c8fed88424d48571348135)) +- **frontend:** S3 resource schema + ([#3083](https://github.com/windmill-labs/windmill/issues/3083)) + ([fa8a6e8](https://github.com/windmill-labs/windmill/commit/fa8a6e8c3dcfcca6f17c2fdd4910ab7980192e11)) + +### Bug Fixes + +- **frontend:** add missing InitializeComponent + ([#3088](https://github.com/windmill-labs/windmill/issues/3088)) + ([6a73ccf](https://github.com/windmill-labs/windmill/commit/6a73ccf6261d58f019bbb01e10c4f81be62f66e6)) +- **frontend:** Fix currency input dark mode + ([#3085](https://github.com/windmill-labs/windmill/issues/3085)) + ([bcc341c](https://github.com/windmill-labs/windmill/commit/bcc341c255ee04dfbf28ed678b025310f57e501c)) +- load input history correctly on past versions + ([80eeba5](https://github.com/windmill-labs/windmill/commit/80eeba5ee34204876a4db4e3fda7539247cd0322)) + +## [1.253.8](https://github.com/windmill-labs/windmill/compare/v1.253.7...v1.253.8) (2024-01-26) + +### Bug Fixes + +- add support for instance name for mssql + ([91289a0](https://github.com/windmill-labs/windmill/commit/91289a0d5a96d6f7b11e60d512d0d3a9ceb341e7)) +- git sync include changing permissions on apps, scripts, flows + ([ee965a1](https://github.com/windmill-labs/windmill/commit/ee965a1a4c1e122c5b0adb93c548b41d587bd0a2)) +- git sync include changing permissions on folders + ([0f6c127](https://github.com/windmill-labs/windmill/commit/0f6c127002cee35479231140ec96eef2176bba42)) +- improve git sync on rename/deletion + ([a025146](https://github.com/windmill-labs/windmill/commit/a0251463f803db7e35572ba68862345d2b53a399)) + +## [1.253.7](https://github.com/windmill-labs/windmill/compare/v1.253.6...v1.253.7) (2024-01-25) + +### Bug Fixes + +- Improvement for Python write_s3_file + ([#3079](https://github.com/windmill-labs/windmill/issues/3079)) + ([082aa6a](https://github.com/windmill-labs/windmill/commit/082aa6a61d860354929efcccfcff695c5ccc8c1d)) + +## [1.253.6](https://github.com/windmill-labs/windmill/compare/v1.253.5...v1.253.6) (2024-01-25) + +### Bug Fixes + +- merge conflicts + ([7d6039f](https://github.com/windmill-labs/windmill/commit/7d6039f9694bfef672c508dbc2699d33bedeae23)) + +## [1.253.5](https://github.com/windmill-labs/windmill/compare/v1.253.4...v1.253.5) (2024-01-25) + +### Bug Fixes + +- openapi definition + ([09e08c3](https://github.com/windmill-labs/windmill/commit/09e08c3c94dfff12ac8df9750bea3fadfa455f40)) + +## [1.253.4](https://github.com/windmill-labs/windmill/compare/v1.253.3...v1.253.4) (2024-01-25) + +### Bug Fixes + +- add s3 parquet file renderer + ([4a6710e](https://github.com/windmill-labs/windmill/commit/4a6710ea913da64ce2caf93499c9ec69d89b3cf3)) +- add s3 parquet file renderer + ([2f8243b](https://github.com/windmill-labs/windmill/commit/2f8243b39085222a3bde8c31fce6fc36a7b8f453)) +- improve parquet renderer error + ([4b348a0](https://github.com/windmill-labs/windmill/commit/4b348a032e3cb7ea3c945635ed8d3cb1bd91b9b4)) + +## [1.253.3](https://github.com/windmill-labs/windmill/compare/v1.253.2...v1.253.3) (2024-01-25) + +### Bug Fixes + +- Better UI for S3 download and S3 TS SDK endpoints + ([#3065](https://github.com/windmill-labs/windmill/issues/3065)) + ([da6edee](https://github.com/windmill-labs/windmill/commit/da6edee4505318deef4557a82eb61356a5f1bfb4)) + +## [1.253.2](https://github.com/windmill-labs/windmill/compare/v1.253.1...v1.253.2) (2024-01-24) + +### Bug Fixes + +- **app:** improve app reactivity + ([737c4fb](https://github.com/windmill-labs/windmill/commit/737c4fb497ce4d04c8404b745dd00868724cfc51)) + +## [1.253.1](https://github.com/windmill-labs/windmill/compare/v1.253.0...v1.253.1) (2024-01-24) + +### Bug Fixes + +- **scim:** improve get_user for scim + ([a66208f](https://github.com/windmill-labs/windmill/commit/a66208f326cb1be9ede6408beb4b6357d7a8bd57)) + +## [1.253.0](https://github.com/windmill-labs/windmill/compare/v1.252.0...v1.253.0) (2024-01-24) + +### Features + +- **frontend:** app editor right click menu + ([#3050](https://github.com/windmill-labs/windmill/issues/3050)) + ([2b8c0bb](https://github.com/windmill-labs/windmill/commit/2b8c0bbaeae22e2231edb7b8560f58003312353f)) + +### Bug Fixes + +- bun default registry and performance improvements + ([801106e](https://github.com/windmill-labs/windmill/commit/801106e9b8878e5fd1acd805497ed81f0bf5c99c)) + +## [1.252.0](https://github.com/windmill-labs/windmill/compare/v1.251.1...v1.252.0) (2024-01-24) + +### Features + +- **cli:** add support for excludes in yaml.conf + ([21bf011](https://github.com/windmill-labs/windmill/commit/21bf0115fc3e9af96262594eb76d664a3c531498)) +- Custom concurrency key for scripts + ([#3046](https://github.com/windmill-labs/windmill/issues/3046)) + ([f189224](https://github.com/windmill-labs/windmill/commit/f189224b8d0b17fe7a5d78795ac4129f31919538)) +- exporting tarball/sync doesn't require admin perms anymore + ([c2fb24d](https://github.com/windmill-labs/windmill/commit/c2fb24d4803b9654c248f84861e86b99b559b6eb)) +- **frontend:** add support for range area + ([#3068](https://github.com/windmill-labs/windmill/issues/3068)) + ([0dd54f9](https://github.com/windmill-labs/windmill/commit/0dd54f93bb652af17173697682a6080a513b7f5f)) +- **frontend:** Ag Grid compactness + ([#3052](https://github.com/windmill-labs/windmill/issues/3052)) + ([1ffb4c5](https://github.com/windmill-labs/windmill/commit/1ffb4c5abebc418f41a969a983a03a2ebc521ea6)) +- **frontend:** Changelog updates + ([#3067](https://github.com/windmill-labs/windmill/issues/3067)) + ([c14b880](https://github.com/windmill-labs/windmill/commit/c14b880a7c93424ff13cf0fe8d6e9499af6e56ac)) +- **frontend:** display a warning with a documentation link on how to… + ([#3012](https://github.com/windmill-labs/windmill/issues/3012)) + ([c73bdad](https://github.com/windmill-labs/windmill/commit/c73bdad08c556b656c7fdcd509f097de675126c4)) +- Set a default app for each workspace + ([#3014](https://github.com/windmill-labs/windmill/issues/3014)) + ([3225420](https://github.com/windmill-labs/windmill/commit/32254203d81d4353fbfb7f6cd7b72f1e237dc45c)) + +### Bug Fixes + +- fix add resource with keys as objects + ([0c88abc](https://github.com/windmill-labs/windmill/commit/0c88abccf0ebbeccd3bfb0b6a066feb78cc8ecf3)) +- improve decision tree + ([e6b8f73](https://github.com/windmill-labs/windmill/commit/e6b8f73c9cc8d94b58388726c5a31832871c398e)) +- no-emit-index-url on lockfiles + ([450267a](https://github.com/windmill-labs/windmill/commit/450267a84e428a7b5b107aa50ddb51a0f0a7f187)) +- remove first part of account_identifier for snowflake + ([e365693](https://github.com/windmill-labs/windmill/commit/e365693497e7055ee891748621ee3472efc6047a)) + +## [1.251.1](https://github.com/windmill-labs/windmill/compare/v1.251.0...v1.251.1) (2024-01-23) + +### Bug Fixes + +- improve npm typescript client + ([5b98b00](https://github.com/windmill-labs/windmill/commit/5b98b005cda2615b332d904dc3d4a6a7898ae46e)) + +## [1.251.0](https://github.com/windmill-labs/windmill/compare/v1.250.0...v1.251.0) (2024-01-22) + +### Features + +- Download button for s3 files + ([#3059](https://github.com/windmill-labs/windmill/issues/3059)) + ([376038d](https://github.com/windmill-labs/windmill/commit/376038d70b04fe012566872bee6a4cc4b46db0c7)) + +## [1.250.0](https://github.com/windmill-labs/windmill/compare/v1.249.0...v1.250.0) (2024-01-22) + +### Features + +- deprecate .wmillignore in favor of wmill.yaml/includes + ([b8defbc](https://github.com/windmill-labs/windmill/commit/b8defbcfc68181397ae50daba6616df26e4383fd)) + +### Bug Fixes + +- fix initialization callback of AppDbexplorer + ([1fcdad7](https://github.com/windmill-labs/windmill/commit/1fcdad7f7b284d0a66db57df0582c89a146ef653)) + +## [1.249.0](https://github.com/windmill-labs/windmill/compare/v1.248.0...v1.249.0) (2024-01-21) + +### Features + +- File path is option when uploading a file to S3 + ([#3029](https://github.com/windmill-labs/windmill/issues/3029)) + ([bbf897a](https://github.com/windmill-labs/windmill/commit/bbf897a718f403de0e9809914acd18b4b79fd605)) +- improve cli to generate proper metadata and schema by default + ([d1eed4e](https://github.com/windmill-labs/windmill/commit/d1eed4e09d09b4ec2a3aa27608dc2a70fc0a4d0a)) +- improve handling of pinned versions for bun + ([ab010ce](https://github.com/windmill-labs/windmill/commit/ab010ce4f3a0628d4699f558bd463e657a8f1a97)) +- non owner can resume flows if resume url is in message + ([ac87e2f](https://github.com/windmill-labs/windmill/commit/ac87e2f85b55742fd1472b3ba18cc1e523b56b98)) + +### Bug Fixes + +- **frontend:** Fix display for array of objects + ([#3051](https://github.com/windmill-labs/windmill/issues/3051)) + ([773e2d3](https://github.com/windmill-labs/windmill/commit/773e2d3103d23b5eb31a47565d577461adf239df)) +- improve approval/prompt helpers + ([0d7d2ef](https://github.com/windmill-labs/windmill/commit/0d7d2efde8b6bb00ba8d14ce341fe230d79fe9f2)) +- more explicit CLI error + ([#3049](https://github.com/windmill-labs/windmill/issues/3049)) + ([c4f0b67](https://github.com/windmill-labs/windmill/commit/c4f0b67fb65b705f7fecae93991880925f7b3c80)) +- use hash on objects instead of shallow equal comparison to improve trigger + reliability of apps + ([d1cfe7c](https://github.com/windmill-labs/windmill/commit/d1cfe7c202cfa34bdc46997a50c278c9f8ff4fb0)) + +## [1.248.0](https://github.com/windmill-labs/windmill/compare/v1.247.0...v1.248.0) (2024-01-19) + +### Features + +- improve SCIM support for groups + ([77f7fb2](https://github.com/windmill-labs/windmill/commit/77f7fb2dd35c337a3a79fcf9038c73cf3939f85f)) + +### Bug Fixes + +- fix rename apps from home menu + ([91ea031](https://github.com/windmill-labs/windmill/commit/91ea031f281af8776e94890e80101197f9c71e46)) + +## [1.247.0](https://github.com/windmill-labs/windmill/compare/v1.246.15...v1.247.0) (2024-01-19) + +### Features + +- **frontend:** Rich table display + ([#3028](https://github.com/windmill-labs/windmill/issues/3028)) + ([54cad28](https://github.com/windmill-labs/windmill/commit/54cad2886b7e5ca26c6da9547376b43daac9e881)) + +### Bug Fixes + +- add ability to rename group from scim + ([9fefdcc](https://github.com/windmill-labs/windmill/commit/9fefdccc132c4a61ab0a72a86c4dc9bbb23a811e)) +- **frontend:** fix hidden wizards + ([#3045](https://github.com/windmill-labs/windmill/issues/3045)) + ([b64eb3d](https://github.com/windmill-labs/windmill/commit/b64eb3d8b10ba6ca453715dbf8d18b8ad7e3db17)) +- improve onDemandOnly runnables + ([a0d7ea2](https://github.com/windmill-labs/windmill/commit/a0d7ea22b4cd29f47ec308c9c6e2c2d8ab0ed38f)) + +## [1.246.15](https://github.com/windmill-labs/windmill/compare/v1.246.14...v1.246.15) (2024-01-18) + +### Bug Fixes + +- improve error message format for logs + ([582339c](https://github.com/windmill-labs/windmill/commit/582339c83ef32a81c3b02d88a47fab3fd18ce2fe)) + +## [1.246.14](https://github.com/windmill-labs/windmill/compare/v1.246.13...v1.246.14) (2024-01-18) + +### Bug Fixes + +- fix OIDC issuer + ([8b302b4](https://github.com/windmill-labs/windmill/commit/8b302b4dc564c6336deca26d36c270c70a0efd98)) + +## [1.246.13](https://github.com/windmill-labs/windmill/compare/v1.246.12...v1.246.13) (2024-01-18) + +### Bug Fixes + +- cli sync improvement + ([58cad70](https://github.com/windmill-labs/windmill/commit/58cad70363310eb107a3e4c8c7b9428630e5deb3)) + +## [1.246.12](https://github.com/windmill-labs/windmill/compare/v1.246.11...v1.246.12) (2024-01-18) + +### Bug Fixes + +- cli sync improvement + ([c8f269b](https://github.com/windmill-labs/windmill/commit/c8f269b870adac9628b197f4ab3516ccdbd590d3)) + +## [1.246.11](https://github.com/windmill-labs/windmill/compare/v1.246.10...v1.246.11) (2024-01-18) + +### Bug Fixes + +- improve cli script deletion + ([20c422c](https://github.com/windmill-labs/windmill/commit/20c422c5467b4188a7618bc4c7c303c70346a5a9)) + +## [1.246.10](https://github.com/windmill-labs/windmill/compare/v1.246.9...v1.246.10) (2024-01-18) + +### Bug Fixes + +- make cli backcompatible with respect to lockfile + ([eb000f1](https://github.com/windmill-labs/windmill/commit/eb000f1fbc697869aab46b3be430c8d56b7a7e8c)) +- make some eval onDemandOnly + ([36905da](https://github.com/windmill-labs/windmill/commit/36905daef60d78725d5b78d70e314281ed297565)) + +## [1.246.9](https://github.com/windmill-labs/windmill/compare/v1.246.8...v1.246.9) (2024-01-17) + +### Bug Fixes + +- avoid too long diffs in cli + ([828cdd4](https://github.com/windmill-labs/windmill/commit/828cdd45f08a12071a028052b19503a441f047b1)) + +## [1.246.8](https://github.com/windmill-labs/windmill/compare/v1.246.7...v1.246.8) (2024-01-17) + +### Bug Fixes + +- improve lockfile handling for cli + ([d00de26](https://github.com/windmill-labs/windmill/commit/d00de2640abfe6265f12ee4f237c9ee5ba3e00db)) + +## [1.246.7](https://github.com/windmill-labs/windmill/compare/v1.246.6...v1.246.7) (2024-01-17) + +### Bug Fixes + +- improve lockfile handling for cli + ([8a6ea49](https://github.com/windmill-labs/windmill/commit/8a6ea496022ad70c658121e9694b634177dcc578)) + +## [1.246.6](https://github.com/windmill-labs/windmill/compare/v1.246.5...v1.246.6) (2024-01-17) + +### Bug Fixes + +- improve lockfile handling for cli + ([0e9b649](https://github.com/windmill-labs/windmill/commit/0e9b649d03f79cdf6d5bece5dc0ae8072e22f5b0)) + +## [1.246.5](https://github.com/windmill-labs/windmill/compare/v1.246.4...v1.246.5) (2024-01-17) + +### Bug Fixes + +- improve app push for cli + ([e6de809](https://github.com/windmill-labs/windmill/commit/e6de809ff29a9df54af5fef3f425072e24de49ec)) +- lock file in metadata is now a string + ([#3027](https://github.com/windmill-labs/windmill/issues/3027)) + ([8752dcb](https://github.com/windmill-labs/windmill/commit/8752dcbb191279b44a2b86ee0ed45ab040465b96)) + +## [1.246.4](https://github.com/windmill-labs/windmill/compare/v1.246.3...v1.246.4) (2024-01-17) + +### Bug Fixes + +- **frontend:** Fix deno logo + add missing onDestroy + ([#3025](https://github.com/windmill-labs/windmill/issues/3025)) + ([b9de44c](https://github.com/windmill-labs/windmill/commit/b9de44c2b7daf964834af1d3598dbf40971e4a4f)) +- make DisplayResult more resilient + ([b42c84d](https://github.com/windmill-labs/windmill/commit/b42c84df40e234436e7fcf30a64317e654bed3ed)) +- wmill app push <path_to_app_file> + ([#3024](https://github.com/windmill-labs/windmill/issues/3024)) + ([803962a](https://github.com/windmill-labs/windmill/commit/803962a943001ff5f2a58bf36f955cc16e92d2b1)) + +## [1.246.3](https://github.com/windmill-labs/windmill/compare/v1.246.2...v1.246.3) (2024-01-17) + +### Bug Fixes + +- oidc token generation endpoint GET -> POST + ([1f3e374](https://github.com/windmill-labs/windmill/commit/1f3e374b85581da463fda8727d9379d6711b7da8)) + +## [1.246.2](https://github.com/windmill-labs/windmill/compare/v1.246.1...v1.246.2) (2024-01-17) + +### Bug Fixes + +- oidc token generation endpoint GET -> POST + ([3119830](https://github.com/windmill-labs/windmill/commit/3119830062e9d4e30438950e208a2dde4eb12759)) + +## [1.246.1](https://github.com/windmill-labs/windmill/compare/v1.246.0...v1.246.1) (2024-01-17) + +### Bug Fixes + +- expose getIdToken in python-client + ([4604ccd](https://github.com/windmill-labs/windmill/commit/4604ccde7dd656627605b8c55256cc3628235cab)) +- expose getIdToken in typescript-client + ([6568c9f](https://github.com/windmill-labs/windmill/commit/6568c9f93aa477c142bde6d989e4eec3a2440687)) + +## [1.246.0](https://github.com/windmill-labs/windmill/compare/v1.245.1...v1.246.0) (2024-01-17) + +### Features + +- OIDC support ([#3017](https://github.com/windmill-labs/windmill/issues/3017)) + ([640ebcb](https://github.com/windmill-labs/windmill/commit/640ebcb146eae371abfa637a4f55fe1919aab013)) + +## [1.245.1](https://github.com/windmill-labs/windmill/compare/v1.245.0...v1.245.1) (2024-01-16) + +### Bug Fixes + +- CLI script generate-metadata creates a default file if none exist + ([#3015](https://github.com/windmill-labs/windmill/issues/3015)) + ([eb48e0a](https://github.com/windmill-labs/windmill/commit/eb48e0a1071d33e19425f2228e029453b3484458)) + +## [1.245.0](https://github.com/windmill-labs/windmill/compare/v1.244.4...v1.245.0) (2024-01-16) + +### Features + +- add script bootstrap and script generate-metadata CLI commands + ([#3007](https://github.com/windmill-labs/windmill/issues/3007)) + ([b9bee40](https://github.com/windmill-labs/windmill/commit/b9bee403f1ee922c776cf7a82aef0cdfc04c4c10)) +- Browse s3 bucket content from workspace settings page + ([#3013](https://github.com/windmill-labs/windmill/issues/3013)) + ([1053979](https://github.com/windmill-labs/windmill/commit/10539790d20e01faf7aa992f44c89ab623a794c0)) +- **frontend:** Add running runs on the script detail page + ([#3005](https://github.com/windmill-labs/windmill/issues/3005)) + ([c93932a](https://github.com/windmill-labs/windmill/commit/c93932a5b3b17cf3ddc7c86bf047343dc5da114d)) +- **frontend:** add specific bun and deno icons + ([#3006](https://github.com/windmill-labs/windmill/issues/3006)) + ([e9ab3ce](https://github.com/windmill-labs/windmill/commit/e9ab3ceac901503c6d6e0af0954516af80e1f4a0)) + +### Bug Fixes + +- s3 resource is accessed by backend with admin permissions + ([#3011](https://github.com/windmill-labs/windmill/issues/3011)) + ([9fffe4f](https://github.com/windmill-labs/windmill/commit/9fffe4f6f578665242612a596300e93b6cf2e6b6)) + +## [1.244.4](https://github.com/windmill-labs/windmill/compare/v1.244.2...v1.244.4) (2024-01-15) + +### Features + +- experimental nodejs support + ([047ee10](https://github.com/windmill-labs/windmill/commit/047ee10246f8e1bb952d3b8cdf21612948ac9843)) +- git sync branch name no contains the workspace ID and the type + ([#3004](https://github.com/windmill-labs/windmill/issues/3004)) + +### Bug Fixes + +- git sync branch name no contains the workspace ID and the type + ([#3004](https://github.com/windmill-labs/windmill/issues/3004)) + ([d845864](https://github.com/windmill-labs/windmill/commit/d845864872aff0057d6a3f5d9df2cc4a8c642be5)) +- improve bun imports resolutions + ([2b28854](https://github.com/windmill-labs/windmill/commit/2b288542bdfdba62b9182002db6c8c23cdd9869f)) +- improve bun imports resolutions + ([64e592b](https://github.com/windmill-labs/windmill/commit/64e592b874ef0414dcea2a3dd113d323cff0661e)) + +## [1.244.2](https://github.com/windmill-labs/windmill/compare/v1.244.1...v1.244.2) (2024-01-13) + +### Bug Fixes + +- improve favorite menu + ([a1f93a4](https://github.com/windmill-labs/windmill/commit/a1f93a495e36e04b40c58bb8e33ab2336628ba8b)) + +## [1.244.1](https://github.com/windmill-labs/windmill/compare/v1.244.0...v1.244.1) (2024-01-13) + +### Bug Fixes + +- menu colors + ([b84cd6d](https://github.com/windmill-labs/windmill/commit/b84cd6d52d723fea55a407d347afec1c669da03a)) +- menu colors + ([5201dcd](https://github.com/windmill-labs/windmill/commit/5201dcdd679690bf82b2606d85829ae9333e09ac)) + +## [1.244.0](https://github.com/windmill-labs/windmill/compare/v1.243.0...v1.244.0) (2024-01-13) + +### Features + +- **frontend:** Operator mode + ([#2973](https://github.com/windmill-labs/windmill/issues/2973)) + ([aaff17f](https://github.com/windmill-labs/windmill/commit/aaff17f813ae3f31cae58bb40b9c8118e772a2d8)) + +### Bug Fixes + +- add ability to set secret variable from python + ([0733dd1](https://github.com/windmill-labs/windmill/commit/0733dd118e463f73caa9155b97fc8d9b02759e06)) +- improve oauth accounts permissions + ([1621975](https://github.com/windmill-labs/windmill/commit/16219755a7fa8b9ff5a901c18842a1eceb68086a)) +- improve table behavior when searching + ([f0c4901](https://github.com/windmill-labs/windmill/commit/f0c4901c218cfc4564f9f2be0cacaf3d9997d822)) + +## [1.243.0](https://github.com/windmill-labs/windmill/compare/v1.242.0...v1.243.0) (2024-01-13) + +### Features + +- add support for bun install scopes + ([d785def](https://github.com/windmill-labs/windmill/commit/d785deff3312b076e3ed9043924f514f8823e041)) +- **frontend:** s3 file upload + ([#2976](https://github.com/windmill-labs/windmill/issues/2976)) + ([3c59fb8](https://github.com/windmill-labs/windmill/commit/3c59fb8b4d8a80077c2f352ccf1314fd32ff442c)) +- GIt sync to multiple repo + ([#2996](https://github.com/windmill-labs/windmill/issues/2996)) + ([fda0e28](https://github.com/windmill-labs/windmill/commit/fda0e28db31fba9f71be6db7280696c3949fd7be)) +- support dynamic args in tags + ([aafd7d9](https://github.com/windmill-labs/windmill/commit/aafd7d90037bae20808e836d34c352ca6b357155)) +- Tag override for scheduled scripts + ([#2998](https://github.com/windmill-labs/windmill/issues/2998)) + ([99484bd](https://github.com/windmill-labs/windmill/commit/99484bdc20bac966ca1d9d45ca4278133ea91b87)) + +### Bug Fixes + +- allow for any extra bunfig config + ([e200889](https://github.com/windmill-labs/windmill/commit/e200889cff6c5166ce6564d7f9d606c1613fe03b)) + +## [1.242.0](https://github.com/windmill-labs/windmill/compare/v1.241.0...v1.242.0) (2024-01-12) + +### Features + +- Instance group management page + ([#2994](https://github.com/windmill-labs/windmill/issues/2994)) + ([5f54f55](https://github.com/windmill-labs/windmill/commit/5f54f557903792ea6307b17f966c216cbd402709)) + +### Bug Fixes + +- catch more agGrid errors + ([01dbf54](https://github.com/windmill-labs/windmill/commit/01dbf548f712c2e669038e4eb704c470d2cb0426)) + +## [1.241.0](https://github.com/windmill-labs/windmill/compare/v1.240.0...v1.241.0) (2024-01-12) + +### Features + +- Instance group CRUD API + ([#2992](https://github.com/windmill-labs/windmill/issues/2992)) + ([5a157c4](https://github.com/windmill-labs/windmill/commit/5a157c415e7f075d3f57872a9adf7f5130632bb6)) +- make dedicated workers for flows able to share runtime for the same scripts + ([d59b89e](https://github.com/windmill-labs/windmill/commit/d59b89ec3cdf2285c0eac56d7678fc0b9a2c2a32)) + +### Bug Fixes + +- add cache for flow as flow step + ([28ac763](https://github.com/windmill-labs/windmill/commit/28ac7632cf767b1c0df30d93c841ad32bf891202)) +- git sync now works for delete and rename + ([#2988](https://github.com/windmill-labs/windmill/issues/2988)) + ([cde574b](https://github.com/windmill-labs/windmill/commit/cde574b8910bbaf737e0d7e515c42fc796911c5e)) + +## [1.240.0](https://github.com/windmill-labs/windmill/compare/v1.239.0...v1.240.0) (2024-01-11) + +### Features + +- **cli:** introduce --stateful for CLI, in preparation for --raw to become the + default + ([39ecf80](https://github.com/windmill-labs/windmill/commit/39ecf8017ee88c4311cb2dd580b20cd59066612e)) + +## [1.239.0](https://github.com/windmill-labs/windmill/compare/v1.238.0...v1.239.0) (2024-01-11) + +### Features + +- add configurable ordering for script's generated UI + ([717ccc9](https://github.com/windmill-labs/windmill/commit/717ccc94a06ee65a5676c7d9091faf892396657e)) +- **frontend:** AG chart + ([#2972](https://github.com/windmill-labs/windmill/issues/2972)) + ([e3c1661](https://github.com/windmill-labs/windmill/commit/e3c166154da4251e21a5f6a6fcf5b2e101b558e1)) + +### Bug Fixes + +- **cli:** improve .wmillignore handling of folders + ([6996c90](https://github.com/windmill-labs/windmill/commit/6996c9083d9ae93922caf68e5658f18b49678630)) +- handle Etc/Unknown timezone better + ([8c97ef0](https://github.com/windmill-labs/windmill/commit/8c97ef0394925b49a04c253259783be301e8f4ee)) +- only cache flow if it's a success + ([589e683](https://github.com/windmill-labs/windmill/commit/589e683c27f15fcb48993f2f6e91523abef1794a)) +- spelling error dtails -> details + ([#2986](https://github.com/windmill-labs/windmill/issues/2986)) + ([308c4ce](https://github.com/windmill-labs/windmill/commit/308c4ceb475fef033ea87af5f772e1f35b4fb16d)) + +## [1.238.0](https://github.com/windmill-labs/windmill/compare/v1.237.0...v1.238.0) (2024-01-10) + +### Features + +- add ability to use secrets in pip requirements + ([3517c7f](https://github.com/windmill-labs/windmill/commit/3517c7f28389a4ddf46a6bef4f2044aa94174050)) +- add support for multiselect in python + ([c8a793d](https://github.com/windmill-labs/windmill/commit/c8a793d35ea843fb75428182edc06cfe7105af3b)) +- **frontend:** add shortcuts to audit logs + ([#2975](https://github.com/windmill-labs/windmill/issues/2975)) + ([4147d16](https://github.com/windmill-labs/windmill/commit/4147d1604a4c50ad0c667b413d64b44b357fb7e4)) +- **frontend:** Display the index by which a node can be selected with the + setTab function + add tooltip + ([#2974](https://github.com/windmill-labs/windmill/issues/2974)) + ([cffae36](https://github.com/windmill-labs/windmill/commit/cffae3633107d9359e04354ba01876ccaf98193a)) +- S3 multipart upload accepts a custom S3 resource + ([#2982](https://github.com/windmill-labs/windmill/issues/2982)) + ([eea0d92](https://github.com/windmill-labs/windmill/commit/eea0d92dd11a3607fbb156e2bf3a3a001ab5e6a0)) + +### Bug Fixes + +- main compile ([#2983](https://github.com/windmill-labs/windmill/issues/2983)) + ([6d5c3f0](https://github.com/windmill-labs/windmill/commit/6d5c3f0f2252be15bf0169a42f5baa06d592911c)) + +## [1.237.0](https://github.com/windmill-labs/windmill/compare/v1.236.2...v1.237.0) (2024-01-08) + +### Features + +- make okta SSO configurable using custom domain + ([4f01ee8](https://github.com/windmill-labs/windmill/commit/4f01ee89de743eab6ae323dea1ec4190ee23e0bf)) + +### Bug Fixes + +- delete is captured in more fields in app + ([d340fbc](https://github.com/windmill-labs/windmill/commit/d340fbc02fd9500249c1d23799c1bdbfe9602cb8)) + +## [1.236.2](https://github.com/windmill-labs/windmill/compare/v1.236.1...v1.236.2) (2024-01-08) + +### Bug Fixes + +- handle better non object result for app result loader + ([269afe4](https://github.com/windmill-labs/windmill/commit/269afe41f7e02da8d3a364e649e5fef00847d24a)) + +## [1.236.1](https://github.com/windmill-labs/windmill/compare/v1.236.0...v1.236.1) (2024-01-08) + +### Bug Fixes + +- fix app initialization + ([6b075e9](https://github.com/windmill-labs/windmill/commit/6b075e92ef4e312e6a4ce582dc7c4d88456b2f5d)) + +## [1.236.0](https://github.com/windmill-labs/windmill/compare/v1.235.1...v1.236.0) (2024-01-08) + +### Features + +- improve git sync and recompute dependents when common python script is + redeployed ([#2967](https://github.com/windmill-labs/windmill/issues/2967)) + ([9449381](https://github.com/windmill-labs/windmill/commit/94493812ac0030cc6bba468d8ee24a14661716a8)) + +### Bug Fixes + +- reduce stack size needed for workflow transitions + ([4384617](https://github.com/windmill-labs/windmill/commit/4384617f1ec4c27de88ef6c895d6ef060a79f6bd)) + +## [1.235.1](https://github.com/windmill-labs/windmill/compare/v1.235.0...v1.235.1) (2024-01-07) + +### Bug Fixes + +- fix resultjobloader + ([2e02300](https://github.com/windmill-labs/windmill/commit/2e023003da8bea9efa86c0fbc52bf9723c73907d)) + +## [1.235.0](https://github.com/windmill-labs/windmill/compare/v1.234.1...v1.235.0) (2024-01-06) + +### Features + +- **frontend:** DB Explorer + ([#2892](https://github.com/windmill-labs/windmill/issues/2892)) + ([fffc533](https://github.com/windmill-labs/windmill/commit/fffc5338ce76fda9a68b19f03cefe199cc09a905)) + +## [1.234.1](https://github.com/windmill-labs/windmill/compare/v1.234.0...v1.234.1) (2024-01-05) + +### Bug Fixes + +- fix double view runs button + ([9efcb53](https://github.com/windmill-labs/windmill/commit/9efcb53bcd903bf756c4beb92a5c7634e8e016ad)) +- fix typo "Wourker" -> "Worker" + ([4385edc](https://github.com/windmill-labs/windmill/commit/4385edc6ffdb1b2e4544347928b4cf08faf1eaa1)) + +## [1.234.0](https://github.com/windmill-labs/windmill/compare/v1.233.0...v1.234.0) (2024-01-05) + +### Features + +- Detailed job memory footprint on job run page + ([#2956](https://github.com/windmill-labs/windmill/issues/2956)) + ([0710ce6](https://github.com/windmill-labs/windmill/commit/0710ce6ef25d8f2344ac1350e96aa906f16d1be1)) +- git sync can now push commits to individual branches + ([#2959](https://github.com/windmill-labs/windmill/issues/2959)) + ([fb5cd6a](https://github.com/windmill-labs/windmill/commit/fb5cd6a4298c88e26481b76258bf5b09a11cf4b0)) + +### Bug Fixes + +- Deleting workspace delete all workspace related values in DB + ([#2961](https://github.com/windmill-labs/windmill/issues/2961)) + ([c05d119](https://github.com/windmill-labs/windmill/commit/c05d119ae5dfb6f1bae88fc9d53b48a707cd2f15)) + +## [1.233.0](https://github.com/windmill-labs/windmill/compare/v1.232.0...v1.233.0) (2024-01-03) + +### Features + +- **frontend:** add the view runs buttons for operators + ([#2932](https://github.com/windmill-labs/windmill/issues/2932)) + ([821d2d7](https://github.com/windmill-labs/windmill/commit/821d2d7ea15e828dbb3683c85025dbc09c7e8dc7)) +- Job caching now works with S3 files + ([#2934](https://github.com/windmill-labs/windmill/issues/2934)) + ([b44618f](https://github.com/windmill-labs/windmill/commit/b44618f35b6fe4558a5cd9fddec1e82216a2cf5e)) +- PIP_LOCAL_DEPENDENCIES now accepts regex and is configurable from the UI + ([#2940](https://github.com/windmill-labs/windmill/issues/2940)) + ([e0140f1](https://github.com/windmill-labs/windmill/commit/e0140f175d371e239f315613a537820b9a6ad25f)) + +### Bug Fixes + +- allow extraConfig for agGrid to set onGridReady + ([74fc2d3](https://github.com/windmill-labs/windmill/commit/74fc2d3f4397d976fec326893f8196008cb8b332)) +- decision tree fix wording + ([#2941](https://github.com/windmill-labs/windmill/issues/2941)) + ([0299c65](https://github.com/windmill-labs/windmill/commit/0299c656c368876581dc228c76513f1171ffd682)) +- decision tree nits + ([#2936](https://github.com/windmill-labs/windmill/issues/2936)) + ([787017f](https://github.com/windmill-labs/windmill/commit/787017f53c8227e1246b09e412e92316977937ae)) +- **frontend:** handle case where large json has a file and a filename + ([#2951](https://github.com/windmill-labs/windmill/issues/2951)) + ([2494171](https://github.com/windmill-labs/windmill/commit/2494171b9cb3d1857235b6558d276451d5550560)) +- persist state for agGrid + ([c085f5f](https://github.com/windmill-labs/windmill/commit/c085f5fa7ec598d0abf6aad98de0e5c7b1c92985)) +- Tag all docker images with latest and main tags + ([#2953](https://github.com/windmill-labs/windmill/issues/2953)) + ([9655718](https://github.com/windmill-labs/windmill/commit/965571853ca253b130bcc4473190b6c9c98f44e1)) + +## [1.232.0](https://github.com/windmill-labs/windmill/compare/v1.231.0...v1.232.0) (2023-12-27) + +### Features + +- add summary to schedules + ([606b03d](https://github.com/windmill-labs/windmill/commit/606b03d7613cf15ab9a60ef34a82657ff49ccdbd)) +- no overlap for flows togglable on schedules + ([4935528](https://github.com/windmill-labs/windmill/commit/49355280f6442c342a46f90b2fe2cb089b3f4eff)) + +### Bug Fixes + +- fix file input + ([263f41c](https://github.com/windmill-labs/windmill/commit/263f41cda3dba24bcaa2bbabfc3f5bc54c70f9cb)) +- improve ata for bun + ([b66fcbf](https://github.com/windmill-labs/windmill/commit/b66fcbf6261f69a57e6711fa8b9d1d499c1b47ed)) +- use bun install in every case + ([948b0da](https://github.com/windmill-labs/windmill/commit/948b0da59e6bcd3b6312373a1bbe52d541e54d56)) + +## [1.231.0](https://github.com/windmill-labs/windmill/compare/v1.230.0...v1.231.0) (2023-12-26) + +### Features + +- bun can read private npm package + ([#2915](https://github.com/windmill-labs/windmill/issues/2915)) + ([5fa5ab1](https://github.com/windmill-labs/windmill/commit/5fa5ab1514a2d20083d30809c30e50bfcb29e82f)) +- **cli:** support skip args for push --raw + ([fc07d58](https://github.com/windmill-labs/windmill/commit/fc07d5886893c8d493c3ca507e0c9d4a066622fc)) + +### Bug Fixes + +- improve conditional wrapper + ([4b65594](https://github.com/windmill-labs/windmill/commit/4b65594cbd138452c471a339aaa548c27fc0a4ce)) + +## [1.230.0](https://github.com/windmill-labs/windmill/compare/v1.229.0...v1.230.0) (2023-12-22) + +### Features + +- add button for auto-formatting + ([642c037](https://github.com/windmill-labs/windmill/commit/642c037c1a87efd8d63558cc0ca5e98fb7b51ff7)) +- move S3 file within bucket + ([#2913](https://github.com/windmill-labs/windmill/issues/2913)) + ([e40787c](https://github.com/windmill-labs/windmill/commit/e40787c616ec288ffc83450fac6f6f7f127ac008)) +- quick search in flow support workspace scripts + ([5698a0e](https://github.com/windmill-labs/windmill/commit/5698a0ebf2052fd51b687951595a543f0b6c0308)) +- Retry for scheduled scripts + ([#2893](https://github.com/windmill-labs/windmill/issues/2893)) + ([5f60d46](https://github.com/windmill-labs/windmill/commit/5f60d468365c65dc48e247107487f64adf77b123)) +- S3 delete file and upload new + ([#2909](https://github.com/windmill-labs/windmill/issues/2909)) + ([e27e887](https://github.com/windmill-labs/windmill/commit/e27e8874918af84d8afffb26abd5828b4c43ed54)) + +### Bug Fixes + +- add relative path handling for bun ATA + ([6b570a7](https://github.com/windmill-labs/windmill/commit/6b570a779fa7592c527cee84b0ca238872d86347)) +- edit schedule from trigger page + ([9667eb7](https://github.com/windmill-labs/windmill/commit/9667eb74f99b74621e0f00e3f380bbd34dd9654f)) +- Failing jobs in dedicated worker mode are now marked as failing + ([#2894](https://github.com/windmill-labs/windmill/issues/2894)) + ([5f85b67](https://github.com/windmill-labs/windmill/commit/5f85b67dfcf063fd8a3c3f69f0e7605fc40e473d)) +- fix multiplayer + ([b5f1f99](https://github.com/windmill-labs/windmill/commit/b5f1f99daa30627f224f262653e459799fc0d6fe)) +- **frontend:** Fix debug condition + decision tree + add missing date to job + preview + prevent header node from being selected in the flow editor + ([#2912](https://github.com/windmill-labs/windmill/issues/2912)) + ([d7b777a](https://github.com/windmill-labs/windmill/commit/d7b777a8e9b4a2a4f0772f9b29851476f9405dae)) +- improve javascript editors with semantic validation + ([b3527f5](https://github.com/windmill-labs/windmill/commit/b3527f5164f9e487840773df57846394f118ebbb)) +- pin deno windmill-client version to relase + ([ea322d9](https://github.com/windmill-labs/windmill/commit/ea322d9c14cc92b54cfc39791e162f8f248e74ab)) +- Python wrapper catches BaseException instead of Exception + ([#2902](https://github.com/windmill-labs/windmill/issues/2902)) + ([4c3c988](https://github.com/windmill-labs/windmill/commit/4c3c988f7bd35f290b9d051369029e790b1e5c5b)) +- remove bad app type forcing + ([#2906](https://github.com/windmill-labs/windmill/issues/2906)) + ([187c34a](https://github.com/windmill-labs/windmill/commit/187c34a6835e3e748bc609fb4096f42bf3e09a73)) +- Update S3 TS code snippets and Python SDK for Polars 0.20.X + ([#2911](https://github.com/windmill-labs/windmill/issues/2911)) + ([3cbdd89](https://github.com/windmill-labs/windmill/commit/3cbdd890cd2aaef1d983da0270f8c230c9b9285e)) + +## [1.229.0](https://github.com/windmill-labs/windmill/compare/v1.228.1...v1.229.0) (2023-12-21) + +### Features + +- **frontend:** add a quick button to open decision tree graph + ([#2897](https://github.com/windmill-labs/windmill/issues/2897)) + ([3f7c19f](https://github.com/windmill-labs/windmill/commit/3f7c19f267a9965f21cf8a08040a45e088d24918)) + +### Bug Fixes + +- **frontend:** fix save draft when the app has no versions + ([#2904](https://github.com/windmill-labs/windmill/issues/2904)) + ([0170fcc](https://github.com/windmill-labs/windmill/commit/0170fcc338e0b59f8af1894d868f3819cad8aca3)) +- Re-add TS SDK changes for S3 + ([#2899](https://github.com/windmill-labs/windmill/issues/2899)) + ([5fafd71](https://github.com/windmill-labs/windmill/commit/5fafd71135c5d4d1764e9f96984bc5f5e5810465)) + +## [1.228.1](https://github.com/windmill-labs/windmill/compare/v1.228.0...v1.228.1) (2023-12-20) + +### Bug Fixes + +- TS SDK not found upon install error + ([#2895](https://github.com/windmill-labs/windmill/issues/2895)) + ([46e9818](https://github.com/windmill-labs/windmill/commit/46e9818c001b040c462ffe0b6f8681a97113ff04)) + +## [1.228.0](https://github.com/windmill-labs/windmill/compare/v1.227.1...v1.228.0) (2023-12-20) + +### Features + +- Add Zitadel IDP + ([#2888](https://github.com/windmill-labs/windmill/issues/2888)) + ([afbea19](https://github.com/windmill-labs/windmill/commit/afbea19421572f2986bf8ab1e5817f1902c0a22c)) +- bun automatic type acquisition in frontend directly + ([#2884](https://github.com/windmill-labs/windmill/issues/2884)) + ([d507ce4](https://github.com/windmill-labs/windmill/commit/d507ce449b04bf0be5ea29ec2431ad1eea405f13)) +- not on latest app version warning + ([#2889](https://github.com/windmill-labs/windmill/issues/2889)) + ([e8b2cc8](https://github.com/windmill-labs/windmill/commit/e8b2cc8835881a7b2c0a273cb8e505644e9be001)) +- S3 objects are now typed in Python and TS SDK + ([#2878](https://github.com/windmill-labs/windmill/issues/2878)) + ([2155a6c](https://github.com/windmill-labs/windmill/commit/2155a6c1334b79272742ba4626abd9572c9130d2)) + +### Bug Fixes + +- Persistent script spinner + ([#2879](https://github.com/windmill-labs/windmill/issues/2879)) + ([5dd5809](https://github.com/windmill-labs/windmill/commit/5dd58094fde38f13476e79b539e670ee150306d7)) +- Python imports from git repository + ([#2886](https://github.com/windmill-labs/windmill/issues/2886)) + ([292b230](https://github.com/windmill-labs/windmill/commit/292b2309a7b7093c85614ac9764620c9dce0e316)) +- remove 0x00 from logs automatically from bashoutput + ([59397e7](https://github.com/windmill-labs/windmill/commit/59397e7445f78cca2e602d8b45591a0bb123a734)) + +## [1.227.1](https://github.com/windmill-labs/windmill/compare/v1.227.0...v1.227.1) (2023-12-17) + +### Bug Fixes + +- improve on click behavior of tree view + ([fa7261f](https://github.com/windmill-labs/windmill/commit/fa7261f273b517acd85a8c3f465cd8095cdf9f3c)) + +## [1.227.0](https://github.com/windmill-labs/windmill/compare/v1.226.1...v1.227.0) (2023-12-17) + +### Features + +- Add download button to S3 file picker + ([#2857](https://github.com/windmill-labs/windmill/issues/2857)) + ([f8c7a8e](https://github.com/windmill-labs/windmill/commit/f8c7a8edf87226e020cec5e602e2dcb31f87d95e)) +- add filter for home screen to filter u/\* + ([7fac60c](https://github.com/windmill-labs/windmill/commit/7fac60c37f638c0a717d2062f7e79db655506c4c)) +- Add Kanidm SSO support + ([#2871](https://github.com/windmill-labs/windmill/issues/2871)) + ([40013cd](https://github.com/windmill-labs/windmill/commit/40013cd6cb00ebaf83eb75ec3f6907a727ba8f63)) +- add overridable tag directly from run page + ([9b25faa](https://github.com/windmill-labs/windmill/commit/9b25faaa95a4f659aa2c72b0b8ed46acee31a691)) +- Cancel persistent script runs from drawer + ([#2847](https://github.com/windmill-labs/windmill/issues/2847)) + ([9b0b919](https://github.com/windmill-labs/windmill/commit/9b0b9197d717c6dad7b1f5e934158e7526455a47)) +- **frontend:** Add submitted text prop + ([#2864](https://github.com/windmill-labs/windmill/issues/2864)) + ([864e6a5](https://github.com/windmill-labs/windmill/commit/864e6a5b9432e32ed1463972f7f980ae0b52745b)) +- **frontend:** Decision tree + ([#2812](https://github.com/windmill-labs/windmill/issues/2812)) + ([c80544e](https://github.com/windmill-labs/windmill/commit/c80544e8e4f7b635847603e6e9ef9e661ce20c89)) + +### Bug Fixes + +- **cli:** improve flow sync for windows + ([65e18ab](https://github.com/windmill-labs/windmill/commit/65e18abe7d17334391b9326cd9968e64fa9f6586)) +- **cli:** improve flow sync for windows + ([0118136](https://github.com/windmill-labs/windmill/commit/011813654da596a8c7235408f1cd77e9abc63255)) +- **cli:** remove is_expired from variables + ([aa44a88](https://github.com/windmill-labs/windmill/commit/aa44a88960123204405e03efea87f0ba6bbe15ec)) +- **frontend:** fix tutorial typos + ([#2852](https://github.com/windmill-labs/windmill/issues/2852)) + ([28b8c4b](https://github.com/windmill-labs/windmill/commit/28b8c4be833efd0b4c56584945b823c4e4fafa7a)) +- handle empty result + ([#2862](https://github.com/windmill-labs/windmill/issues/2862)) + ([e04d8b0](https://github.com/windmill-labs/windmill/commit/e04d8b0d51ed57bd56b28c178dc6668be65fafbd)) +- postgres ssl mode + ([#2861](https://github.com/windmill-labs/windmill/issues/2861)) + ([6c809b8](https://github.com/windmill-labs/windmill/commit/6c809b86300cd4cb461556eb570620f70ca0e26d)) +- powershell nsjail + ([#2856](https://github.com/windmill-labs/windmill/issues/2856)) + ([fdd9374](https://github.com/windmill-labs/windmill/commit/fdd9374aa1cc4d21e9543771e9d1ad256e083461)) +- Stopping perpetual scripts + ([#2860](https://github.com/windmill-labs/windmill/issues/2860)) + ([a84b432](https://github.com/windmill-labs/windmill/commit/a84b4324d2b39eea42fc8c0ed7c9df2a6c2207aa)) + +## [1.226.1](https://github.com/windmill-labs/windmill/compare/v1.226.0...v1.226.1) (2023-12-14) + +### Bug Fixes + +- cli uses await for every push call + ([996bf64](https://github.com/windmill-labs/windmill/commit/996bf64393e221f3749e17c3c3755f45a73b616f)) +- **cli:** check for existing resource even in raw mode + ([f039008](https://github.com/windmill-labs/windmill/commit/f039008dc0d5e8f309148c1cab2998e03b4298c1)) +- getVariable can now return the encrypted value + ([087c516](https://github.com/windmill-labs/windmill/commit/087c5167afc90dacb4264bde73834d60a6ae2063)) + +## [1.226.0](https://github.com/windmill-labs/windmill/compare/v1.225.1...v1.226.0) (2023-12-14) + +### Features + +- ee-only stats ([#2849](https://github.com/windmill-labs/windmill/issues/2849)) + ([3c4e41c](https://github.com/windmill-labs/windmill/commit/3c4e41c9975956339682ef35c298d294c55304f0)) + +### Bug Fixes + +- fix s3 test connection + ([17bb7d3](https://github.com/windmill-labs/windmill/commit/17bb7d3991d48abe08ab42b9381285112f2440f1)) +- Handle s3object in Deno and Bun + ([#2851](https://github.com/windmill-labs/windmill/issues/2851)) + ([0f913d0](https://github.com/windmill-labs/windmill/commit/0f913d0df915a8189a036f06bd6684d9ed5ecadc)) + +## [1.225.1](https://github.com/windmill-labs/windmill/compare/v1.225.0...v1.225.1) (2023-12-13) + +### Bug Fixes + +- fix setting base_url from empty initial value + ([63740ad](https://github.com/windmill-labs/windmill/commit/63740adec8b075069cbee942ae03c1c2cbec5de0)) +- pwsh modules nsjail + ([#2845](https://github.com/windmill-labs/windmill/issues/2845)) + ([b939785](https://github.com/windmill-labs/windmill/commit/b9397856a8c2219d5315eb441b2b279a1dd8dab5)) + +## [1.225.0](https://github.com/windmill-labs/windmill/compare/v1.224.1...v1.225.0) (2023-12-13) + +### Features + +- Add default timeout for instance and custom timeout for scripts + ([#2811](https://github.com/windmill-labs/windmill/issues/2811)) + ([26670f6](https://github.com/windmill-labs/windmill/commit/26670f62e5e9f7bd50895fae9dd98bc75b61bb44)) +- Add jitter to exponential backoff + ([#2842](https://github.com/windmill-labs/windmill/issues/2842)) + ([dd1032f](https://github.com/windmill-labs/windmill/commit/dd1032fbc3b589f00095c2f9523e1e3f7fca80d5)) +- EnvVar allow list is configurable from the UI + ([#2829](https://github.com/windmill-labs/windmill/issues/2829)) + ([350c8e8](https://github.com/windmill-labs/windmill/commit/350c8e843f8facb154bb6b8223744e1c5ba65a28)) +- oauth flow openai key + ([#2833](https://github.com/windmill-labs/windmill/issues/2833)) + ([4c7d64b](https://github.com/windmill-labs/windmill/commit/4c7d64bc5fdfeb33c63524ddd61173c655ab28e3)) +- powershell deps + ([#2820](https://github.com/windmill-labs/windmill/issues/2820)) + ([505b417](https://github.com/windmill-labs/windmill/commit/505b417f3b07fd5b27256a6a01001aadba7c1f84)) +- Resource type description is now displayed when creating a new resource + ([#2834](https://github.com/windmill-labs/windmill/issues/2834)) + ([c06a56a](https://github.com/windmill-labs/windmill/commit/c06a56ab785f072ff5525e685188d97c71f71da5)) + +### Bug Fixes + +- improve nested flow status viewer + ([18e07a7](https://github.com/windmill-labs/windmill/commit/18e07a781d453b867f325ae6086abe406767fd11)) +- openai cache lock + ([#2841](https://github.com/windmill-labs/windmill/issues/2841)) + ([107bfa7](https://github.com/windmill-labs/windmill/commit/107bfa72520bca2df2b92adbbbb7e7f652b85a68)) +- Simplify worker env var input + ([#2838](https://github.com/windmill-labs/windmill/issues/2838)) + ([b401984](https://github.com/windmill-labs/windmill/commit/b401984514f095a60bce913d245160dd8746a9a5)) + +## [1.224.1](https://github.com/windmill-labs/windmill/compare/v1.224.0...v1.224.1) (2023-12-11) + +### Bug Fixes + +- **frontend:** add truncate to DrawerContent + ([#2830](https://github.com/windmill-labs/windmill/issues/2830)) + ([69abe27](https://github.com/windmill-labs/windmill/commit/69abe27662c801d9ecbe2d31a51142e84d7dcfa2)) +- sql types completions when monaco initialized + ([#2831](https://github.com/windmill-labs/windmill/issues/2831)) + ([64a4528](https://github.com/windmill-labs/windmill/commit/64a452826f3e00aaea6b5205c908f117327398c4)) + +## [1.224.0](https://github.com/windmill-labs/windmill/compare/v1.223.1...v1.224.0) (2023-12-10) + +### Features + +- add authelia sso support + ([#2824](https://github.com/windmill-labs/windmill/issues/2824)) + ([6fefdb5](https://github.com/windmill-labs/windmill/commit/6fefdb5438d0fd7546759d93b5f4465731a4cac5)) +- embedded server only get killed after last job of worker + ([4f4ca26](https://github.com/windmill-labs/windmill/commit/4f4ca264aef3e1d3ee4748593f0ebcb425d333ef)) + +### Bug Fixes + +- make cleanup_module backcompatible + ([58c4c0b](https://github.com/windmill-labs/windmill/commit/58c4c0b5c2b009ff56e3eb6bd19e766dbff4cf54)) + +## [1.223.1](https://github.com/windmill-labs/windmill/compare/v1.223.0...v1.223.1) (2023-12-08) + +### Bug Fixes + +- improve aggrid selectedRow output + make first selectedRow configurable + ([651d998](https://github.com/windmill-labs/windmill/commit/651d99824d1932a48fdb9ffd5dff944fa2c2c8aa)) + +## [1.223.0](https://github.com/windmill-labs/windmill/compare/v1.222.0...v1.223.0) (2023-12-08) + +### Features + +- Add a git sync test button + ([#2817](https://github.com/windmill-labs/windmill/issues/2817)) + ([535202c](https://github.com/windmill-labs/windmill/commit/535202c1fe1e3a90b1aff2dad6632f615ca8aef8)) +- add mysql datetime + ([#2808](https://github.com/windmill-labs/windmill/issues/2808)) + ([8896a8c](https://github.com/windmill-labs/windmill/commit/8896a8cacffb5da5575203a5fc9aa6863b303fde)) +- Add possibility to delete flow step results when the flow is complete + ([#2806](https://github.com/windmill-labs/windmill/issues/2806)) + ([b65657d](https://github.com/windmill-labs/windmill/commit/b65657d0f8db21f87a90bdcd6ce1122a8bb209ce)) +- no worker with tag warning + ([#2803](https://github.com/windmill-labs/windmill/issues/2803)) + ([e7141c1](https://github.com/windmill-labs/windmill/commit/e7141c147d9ff4728399ae0703ca636c776cb264)) +- sql types autocomplete + ([#2810](https://github.com/windmill-labs/windmill/issues/2810)) + ([a9b5d6b](https://github.com/windmill-labs/windmill/commit/a9b5d6bebb00c96cc329b4178816c73db5cbe3f0)) + +### Bug Fixes + +- conditional component also for toggles + ([d26730a](https://github.com/windmill-labs/windmill/commit/d26730ad3419df5c5d75328e7f441c701b2c0c68)) +- db schema autocomplete + ([#2809](https://github.com/windmill-labs/windmill/issues/2809)) + ([e250897](https://github.com/windmill-labs/windmill/commit/e2508972378f455b7af7984f2c33894dadd4f7bc)) +- deno chromium support when nsjail enabled + ([#2815](https://github.com/windmill-labs/windmill/issues/2815)) + ([2964569](https://github.com/windmill-labs/windmill/commit/296456996293d861c7cab2d10e01e3b6443e421c)) +- Fix test_complex_flow_restart + ([#2813](https://github.com/windmill-labs/windmill/issues/2813)) + ([b089449](https://github.com/windmill-labs/windmill/commit/b0894492f1e3c06880c0e1875c8c8886e31a165f)) +- improve sql default arg parsing + auto invite + ([033000f](https://github.com/windmill-labs/windmill/commit/033000fed36d6172cf3b9a83ff449f5ba051fa08)) +- support interval in pg + ([009a83d](https://github.com/windmill-labs/windmill/commit/009a83dd9bbc115b94978d2cb3113cbe10acd05d)) + +## [1.222.0](https://github.com/windmill-labs/windmill/compare/v1.221.0...v1.222.0) (2023-12-07) + +### Features + +- conditional fields on forms + ([b10df30](https://github.com/windmill-labs/windmill/commit/b10df302455202940348cd20c2e733734fb7d027)) +- mysql named params + ([#2805](https://github.com/windmill-labs/windmill/issues/2805)) + ([c4a1054](https://github.com/windmill-labs/windmill/commit/c4a1054a5a4ab3fd700de842a1f46d5886632b11)) + +### Bug Fixes + +- add saml feature flag + ([#2802](https://github.com/windmill-labs/windmill/issues/2802)) + ([da15a56](https://github.com/windmill-labs/windmill/commit/da15a56a07288d4164c88289dd559389735db719)) +- app reports screenshot refresh + ([#2800](https://github.com/windmill-labs/windmill/issues/2800)) + ([f7f7130](https://github.com/windmill-labs/windmill/commit/f7f71302f7d0fcac7468d506ebaceb55332ec1ed)) +- fix extraOptions for agGrid + ([f7d7746](https://github.com/windmill-labs/windmill/commit/f7d7746327411da06cede4e0ff06222d318d01bc)) +- fix extraOptions for agGrid + ([2f7fb9b](https://github.com/windmill-labs/windmill/commit/2f7fb9bfd490932a2f0bc01f02df678668487f8c)) +- **frontend:** Fix chartjs options merge + ([#2804](https://github.com/windmill-labs/windmill/issues/2804)) + ([e11b257](https://github.com/windmill-labs/windmill/commit/e11b257b2d761b2b26160d61f8e113dbe47e9efe)) + +## [1.221.0](https://github.com/windmill-labs/windmill/compare/v1.220.0...v1.221.0) (2023-12-06) + +### Features + +- limit pro plans + ([#2794](https://github.com/windmill-labs/windmill/issues/2794)) + ([c58190e](https://github.com/windmill-labs/windmill/commit/c58190ef788feaae9bac9848e8cfa59d10f51cab)) + +### Bug Fixes + +- Allow run git for Deno + ([#2789](https://github.com/windmill-labs/windmill/issues/2789)) + ([8ad8d20](https://github.com/windmill-labs/windmill/commit/8ad8d20136f3151ca28784ba3513af562fcb5c9b)) +- Allow run git for Deno + ([#2790](https://github.com/windmill-labs/windmill/issues/2790)) + ([d822beb](https://github.com/windmill-labs/windmill/commit/d822beba63f08e4e1e1dac4aff56353276558f02)) +- app reports nits + ([#2788](https://github.com/windmill-labs/windmill/issues/2788)) + ([0b13f2d](https://github.com/windmill-labs/windmill/commit/0b13f2d782d5626d64b5efe39232ec8da268cd27)) +- app reports ts + ([#2798](https://github.com/windmill-labs/windmill/issues/2798)) + ([4f6a116](https://github.com/windmill-labs/windmill/commit/4f6a116e462d198cb81260749fdd8d57bc0ef03a)) +- Deno allow run git + ([#2791](https://github.com/windmill-labs/windmill/issues/2791)) + ([256ee64](https://github.com/windmill-labs/windmill/commit/256ee646b49bca091ee6e7a0fea37f7d98c9e378)) +- **frontend:** fix storage key typo + ([#2796](https://github.com/windmill-labs/windmill/issues/2796)) + ([e4da819](https://github.com/windmill-labs/windmill/commit/e4da819cda12e0e1f27cabc594fe5af5e2d9966c)) +- **frontend:** use correct id for selected for loop iteration + ([#2787](https://github.com/windmill-labs/windmill/issues/2787)) + ([90668fb](https://github.com/windmill-labs/windmill/commit/90668fb0e5b4ac9f09a0b1e57fcb10b4b4208d2e)) +- improve conditionalwrapper selection + ([b5f5355](https://github.com/windmill-labs/windmill/commit/b5f53556a9afb3becbaaab034eeb8fdf4b1178a1)) +- linked variable already being a variable + ([9c4f1e0](https://github.com/windmill-labs/windmill/commit/9c4f1e0333743b35c237b4d8fe49757c8ae122e7)) +- smtp doesn't require username/password + ([abb50fa](https://github.com/windmill-labs/windmill/commit/abb50fac93a615d0ee18e9776c1fb84829fa2464)) + +## [1.220.0](https://github.com/windmill-labs/windmill/compare/v1.219.1...v1.220.0) (2023-12-05) + +### Features + +- Add workspace settings to sync scripts/flows/apps to git repo on deployment + ([#2740](https://github.com/windmill-labs/windmill/issues/2740)) + ([194ee83](https://github.com/windmill-labs/windmill/commit/194ee830cc8d8cc0ea69c877b428966f3f20bdb5)) +- app reports v2 + ([#2778](https://github.com/windmill-labs/windmill/issues/2778)) + ([f36a510](https://github.com/windmill-labs/windmill/commit/f36a510025d87fc20e15f66e041390cc701c65c8)) +- CLI now accepts message arg for sync push + ([#2784](https://github.com/windmill-labs/windmill/issues/2784)) + ([d9458e9](https://github.com/windmill-labs/windmill/commit/d9458e96ebc26160e9d5f909574bd1cf1d288d73)) +- Custom content type for script and flow results + ([#2767](https://github.com/windmill-labs/windmill/issues/2767)) + ([6c0f921](https://github.com/windmill-labs/windmill/commit/6c0f921b3ab3acac8890ceb1fa0565bf082de0d4)) +- **frontend:** add before and after icons for text input components + ([#2746](https://github.com/windmill-labs/windmill/issues/2746)) + ([a3f1111](https://github.com/windmill-labs/windmill/commit/a3f1111ca7715ffaa3a615786adee20e00870b30)) +- History commit message can be updated from the UI + ([#2777](https://github.com/windmill-labs/windmill/issues/2777)) + ([874b7a5](https://github.com/windmill-labs/windmill/commit/874b7a50f72a6505490a02c82786ea5f5c8261e0)) +- perpetual scripts + ([bea0da3](https://github.com/windmill-labs/windmill/commit/bea0da3d6ff81ace956d6a1e7fb643e449927b05)) +- result preview in app editor + ([#2761](https://github.com/windmill-labs/windmill/issues/2761)) + ([51d648d](https://github.com/windmill-labs/windmill/commit/51d648d450c578580f6d9a9630ff91920060cc27)) +- save inline scripts of apps to workspace + search by path + ([f50cef0](https://github.com/windmill-labs/windmill/commit/f50cef03670e50b8d7a6bb4719ae636f2714f22f)) +- Various minor improvements for S3 DX + ([#2760](https://github.com/windmill-labs/windmill/issues/2760)) + ([5cb3c34](https://github.com/windmill-labs/windmill/commit/5cb3c34e440be878687217fdd95d735f053c7839)) + +### Bug Fixes + +- add access-control-allow-origin to static assets + ([60cd14f](https://github.com/windmill-labs/windmill/commit/60cd14ff59a80f671838a5f9bfa21effc309cb54)) +- add run_flow_sync to python client + few nits + ([042504f](https://github.com/windmill-labs/windmill/commit/042504f9052963c882ac346d2026c518c6d94f0f)) +- Array of S3 files now shows links to the S3 explorer + ([#2783](https://github.com/windmill-labs/windmill/issues/2783)) + ([20b0500](https://github.com/windmill-labs/windmill/commit/20b0500a2824be1e715d4301e05c6081a5575dbe)) +- deployment_metadata table app_version is a nullable BIGINT + ([#2769](https://github.com/windmill-labs/windmill/issues/2769)) + ([df86538](https://github.com/windmill-labs/windmill/commit/df865380bceb8663defb322a88f58f7c3f1a263c)) +- do not prorate for team plan checkouts mornings of firsts + ([#2751](https://github.com/windmill-labs/windmill/issues/2751)) + ([8fc0afc](https://github.com/windmill-labs/windmill/commit/8fc0afce714774647f86e1aca8eeec4b7d4c13fc)) +- fix early return sync on existing flows + ([60c4860](https://github.com/windmill-labs/windmill/commit/60c486023310ef85d1cb171ebca792be8d7917e8)) +- **frontend:** Fix dark mode observer, removed code duplication + ([#2770](https://github.com/windmill-labs/windmill/issues/2770)) + ([a6d1e7c](https://github.com/windmill-labs/windmill/commit/a6d1e7c79bb16d2c02d53f9ede56451e064956e0)) +- **frontend:** fix fileinput drag and drop check + ([#2781](https://github.com/windmill-labs/windmill/issues/2781)) + ([0c3d4a6](https://github.com/windmill-labs/windmill/commit/0c3d4a64c4a8ad823646f9ce27de7e58ccc002e8)) +- **frontend:** fix resource search + ([#2748](https://github.com/windmill-labs/windmill/issues/2748)) + ([6eaec47](https://github.com/windmill-labs/windmill/commit/6eaec471629d6c60e6c3123372fa3569bc5471c7)) +- **frontend:** fix sign in with Google button + ([#2756](https://github.com/windmill-labs/windmill/issues/2756)) + ([8ca04e4](https://github.com/windmill-labs/windmill/commit/8ca04e49b061675f820e4aeaad6196403eabe135)) +- **frontend:** fix tutorials contols + ([#2745](https://github.com/windmill-labs/windmill/issues/2745)) + ([85805bd](https://github.com/windmill-labs/windmill/commit/85805bdf8265f4fe14a583b43b786257ffccc4dc)) +- **frontend:** infer args if the schema is not an object + ([#2782](https://github.com/windmill-labs/windmill/issues/2782)) + ([b67d005](https://github.com/windmill-labs/windmill/commit/b67d00540b7adfac3550299d50fc9a620b5a6e2e)) +- improve azure openai readme + ([#2754](https://github.com/windmill-labs/windmill/issues/2754)) + ([d47d4cc](https://github.com/windmill-labs/windmill/commit/d47d4ccf85747a14e0498be871ead08371392ff5)) +- show bg runnables currently running + ([a122b6c](https://github.com/windmill-labs/windmill/commit/a122b6cab664e0b8b3d7223b9fd70569a2fe0991)) +- string or enum + ([#2752](https://github.com/windmill-labs/windmill/issues/2752)) + ([583dae6](https://github.com/windmill-labs/windmill/commit/583dae6a72ee6be70dee5a356e1b4172db9a7e2d)) +- string results with custom content types are not quoted + ([#2768](https://github.com/windmill-labs/windmill/issues/2768)) + ([1cad51b](https://github.com/windmill-labs/windmill/commit/1cad51b5941a3bd1892c935581373bb7375da45a)) +- strip prefix of s3 resource + ([#2780](https://github.com/windmill-labs/windmill/issues/2780)) + ([f3a0c81](https://github.com/windmill-labs/windmill/commit/f3a0c81639662a7da65af49e4032dfc573dd93eb)) + +## [1.219.1](https://github.com/windmill-labs/windmill/compare/v1.219.0...v1.219.1) (2023-12-01) + +### Bug Fixes + +- fix editorContext in preview + ([cb42f10](https://github.com/windmill-labs/windmill/commit/cb42f10dc605f00ba70fadc61069aba98af8ec88)) +- maps mapRegion update on move + ([62de305](https://github.com/windmill-labs/windmill/commit/62de305908ba7e6ac75aa5e8ffba822522b08345)) + +## [1.219.0](https://github.com/windmill-labs/windmill/compare/v1.218.0...v1.219.0) (2023-12-01) + +### Features + +- eval preview for apps + ([d4374a0](https://github.com/windmill-labs/windmill/commit/d4374a0103d2244b31b5cec7649dbfb96b2af1b4)) + +### Bug Fixes + +- **frontend:** rename menu component + ([#2738](https://github.com/windmill-labs/windmill/issues/2738)) + ([f816ad0](https://github.com/windmill-labs/windmill/commit/f816ad01d3e39917714abadcf3833a4d8619e4f3)) +- improve quickstyle to be in static ccomponents only + ([4774e03](https://github.com/windmill-labs/windmill/commit/4774e03be5663017bccbe95f026cc39d4c43f536)) +- improve stat card + ([fc5f054](https://github.com/windmill-labs/windmill/commit/fc5f054b94fa58ee889d10d06e486b6e8c4f885e)) +- limit log pull from queued jobs + ([592d783](https://github.com/windmill-labs/windmill/commit/592d7839d183843b425521a319b802fb8cac3f21)) +- support INET in pg + ([007d5be](https://github.com/windmill-labs/windmill/commit/007d5be23e038fbf82907c3b335b3d747791295d)) + +## [1.218.0](https://github.com/windmill-labs/windmill/compare/v1.217.0...v1.218.0) (2023-11-30) + +### Features + +- **frontend:** add menu component + ([#2721](https://github.com/windmill-labs/windmill/issues/2721)) + ([0665692](https://github.com/windmill-labs/windmill/commit/06656924ae8173e906a243aab2af658a1689af01)) +- **frontend:** resource rework + ([#2725](https://github.com/windmill-labs/windmill/issues/2725)) + ([ec25856](https://github.com/windmill-labs/windmill/commit/ec25856b7c8a7d33a50d1beb5f3e99c7b912e1ca)) + +### Bug Fixes + +- make REST language support URLSearchParams, headers, FormData + ([830dec0](https://github.com/windmill-labs/windmill/commit/830dec0f90e0189b4dea4de8c44a03e437acf440)) +- Pull patched version of gosyn + ([#2734](https://github.com/windmill-labs/windmill/issues/2734)) + ([0bf3685](https://github.com/windmill-labs/windmill/commit/0bf3685cbdecae0a8e7a24a5198ae2fed98fe340)) +- s3 resource openapi spec + ([#2730](https://github.com/windmill-labs/windmill/issues/2730)) + ([16d10ae](https://github.com/windmill-labs/windmill/commit/16d10aedf79cddf7cdc15d55c42c72f4948b3ee2)) +- update deployed even when draft only + ([#2694](https://github.com/windmill-labs/windmill/issues/2694)) + ([1f99fcd](https://github.com/windmill-labs/windmill/commit/1f99fcd3af21208676aa90015559359740b0534a)) +- Using latest gosyn + ([#2737](https://github.com/windmill-labs/windmill/issues/2737)) + ([920cc9a](https://github.com/windmill-labs/windmill/commit/920cc9a576db0112ffd9572480c3d0a8aa08055b)) +- Workspace error handler creation was not adding the slack resource + ([#2733](https://github.com/windmill-labs/windmill/issues/2733)) + ([70c504e](https://github.com/windmill-labs/windmill/commit/70c504edfaf7c114c91af2b3ca39dfee073f04f2)) + +## [1.217.0](https://github.com/windmill-labs/windmill/compare/v1.216.0...v1.217.0) (2023-11-29) + +### Features + +- add support for raw query args + ([8275602](https://github.com/windmill-labs/windmill/commit/82756023728fe392fee93a7bba0567ce582aad8c)) +- **frontend:** add "hide schedules" filter + ([#2710](https://github.com/windmill-labs/windmill/issues/2710)) + ([46e0f91](https://github.com/windmill-labs/windmill/commit/46e0f913878c9f688594cfe1c9184438e4facf49)) +- **frontend:** Added tailwind classes auto-complete + ([#2712](https://github.com/windmill-labs/windmill/issues/2712)) + ([2d3ce8a](https://github.com/windmill-labs/windmill/commit/2d3ce8a49c952accb4f1ceb0e6ea608df539f179)) +- **frontend:** Stat card improvement + ([#2709](https://github.com/windmill-labs/windmill/issues/2709)) + ([89abb68](https://github.com/windmill-labs/windmill/commit/89abb68f635d062778485c15d88fd6272ebd40a2)) +- scheduled app reports + ([#2714](https://github.com/windmill-labs/windmill/issues/2714)) + ([3789b34](https://github.com/windmill-labs/windmill/commit/3789b34dae72ff57bb9e0bb7e93439446c78095d)) + +### Bug Fixes + +- ai fix popup placement + update edit/fix prompt to return complete code + ([#2715](https://github.com/windmill-labs/windmill/issues/2715)) + ([76a387f](https://github.com/windmill-labs/windmill/commit/76a387f4a181d21afad0138c07f947aa292978cc)) +- better error for moved openai resource + ([#2724](https://github.com/windmill-labs/windmill/issues/2724)) + ([15b2c9f](https://github.com/windmill-labs/windmill/commit/15b2c9f171122ab074f8430a785f8ed577921fcc)) +- Deno can talk to private NPM registries behind HTTPS + ([#2713](https://github.com/windmill-labs/windmill/issues/2713)) + ([726866b](https://github.com/windmill-labs/windmill/commit/726866b410863ca9583a8145ebd9f4c4557cef08)) +- Error handler now supports flows + ([#2707](https://github.com/windmill-labs/windmill/issues/2707)) + ([36e46e2](https://github.com/windmill-labs/windmill/commit/36e46e2e47e1e949e1e235fa4ec0365b46d80de1)) +- **frontend:** fix separator z-index + ([#2720](https://github.com/windmill-labs/windmill/issues/2720)) + ([9525ab7](https://github.com/windmill-labs/windmill/commit/9525ab7bbab9f820d1f6fee44f9a2e9ad19d1b54)) +- **frontend:** Fix table initial ordering + ([#2727](https://github.com/windmill-labs/windmill/issues/2727)) + ([1a1d1db](https://github.com/windmill-labs/windmill/commit/1a1d1db96fd069434291f4b5f37ae1d0e21c5e44)) +- **frontend:** Improve error message + fix overflow when file name is too long + ([#2691](https://github.com/windmill-labs/windmill/issues/2691)) + ([c990f85](https://github.com/windmill-labs/windmill/commit/c990f856aaf821899cc54db20a653af396ceae7f)) +- generate cargo lock file + ([#2722](https://github.com/windmill-labs/windmill/issues/2722)) + ([bd31979](https://github.com/windmill-labs/windmill/commit/bd31979a62a30071e68385b5eb5dc28f37ea8fb5)) +- improve autocomplete reactivity + ([c3eaf0b](https://github.com/windmill-labs/windmill/commit/c3eaf0bf4aab531b52a1b3ac276c6840b0925786)) +- make dedicated workers able to redeploy automatically + ([e6d67f4](https://github.com/windmill-labs/windmill/commit/e6d67f4e5994360e7ae83c1303b31514b6062d1d)) +- minor fixes to private NPM and python registries to get everything working + ([#2728](https://github.com/windmill-labs/windmill/issues/2728)) + ([3d6fb15](https://github.com/windmill-labs/windmill/commit/3d6fb15a90f4d5aa18a6d6158760a380295e3d9e)) +- only list session and permanent token in user settings + ([c8046af](https://github.com/windmill-labs/windmill/commit/c8046af9d01ade6891ea97e56974bb742bbf3e6e)) +- trim .bun.ts for local imports + ([d2b3026](https://github.com/windmill-labs/windmill/commit/d2b3026032d288e1e5de1f37979d92d02094b3e4)) + +## [1.216.0](https://github.com/windmill-labs/windmill/compare/v1.215.0...v1.216.0) (2023-11-26) + +### Features + +- add early return for flows + ([dbaef0a](https://github.com/windmill-labs/windmill/commit/dbaef0aa5f22c55b691f6205ae053c155a0e025c)) +- fill pg resource from string + ([#2699](https://github.com/windmill-labs/windmill/issues/2699)) + ([f1cabb4](https://github.com/windmill-labs/windmill/commit/f1cabb40f6cbec05b105563dad58da048d9187ec)) +- **frontend:** add currency format + add enum autocomplete + fix run… + ([#2670](https://github.com/windmill-labs/windmill/issues/2670)) + ([0c0f43d](https://github.com/windmill-labs/windmill/commit/0c0f43dd3ac0541d889046c0c6df8dbf78650b9c)) +- **frontend:** add stat card + ([#2687](https://github.com/windmill-labs/windmill/issues/2687)) + ([81ef24b](https://github.com/windmill-labs/windmill/commit/81ef24b3cec18f86e407b343b4d72ac566d268e1)) +- **python:** Update return type for 'get_resource' function + ([#2695](https://github.com/windmill-labs/windmill/issues/2695)) + ([603e7ff](https://github.com/windmill-labs/windmill/commit/603e7ff67f5f68d291db37173b89325d5de911a1)) + +### Bug Fixes + +- expand enum type narrowing to forms + ([94e9b80](https://github.com/windmill-labs/windmill/commit/94e9b80e1993a217415118bf48b8575cd8363746)) +- **frontend:** correctly handle when result is undefined + ([#2693](https://github.com/windmill-labs/windmill/issues/2693)) + ([f4aa768](https://github.com/windmill-labs/windmill/commit/f4aa76897ea0f261c1e47976f517058601c479f9)) +- improve multiselect from form + ([5fa653d](https://github.com/windmill-labs/windmill/commit/5fa653d154c6e8697119796a025bdc380f68de9a)) +- improve resource pages + ([16be230](https://github.com/windmill-labs/windmill/commit/16be2300ff66cad8b740856a6435d1c1e53bce99)) +- lighten monaco editor workers + ([#2690](https://github.com/windmill-labs/windmill/issues/2690)) + ([4c42836](https://github.com/windmill-labs/windmill/commit/4c42836cfcad63da023a658213f03b45c925efb2)) +- Priority tags FE buggy when missing from config + ([#2702](https://github.com/windmill-labs/windmill/issues/2702)) + ([e8b1f22](https://github.com/windmill-labs/windmill/commit/e8b1f220dd299922a32b04451756f2b7fa735d5d)) +- S3 bucket browser small improvements and fixes + ([#2700](https://github.com/windmill-labs/windmill/issues/2700)) + ([55e34d8](https://github.com/windmill-labs/windmill/commit/55e34d8cdd64362615f2c1bc2698c0538c287784)) + +## [1.215.0](https://github.com/windmill-labs/windmill/compare/v1.214.1...v1.215.0) (2023-11-23) + +### Features + +- query embeddings from s3 + ([#2683](https://github.com/windmill-labs/windmill/issues/2683)) + ([e3f2b43](https://github.com/windmill-labs/windmill/commit/e3f2b43748e8e0853dd0dbae87cba37b950dc76e)) + +### Bug Fixes + +- bigquery schema and date inputs + ([#2688](https://github.com/windmill-labs/windmill/issues/2688)) + ([f5e098d](https://github.com/windmill-labs/windmill/commit/f5e098d03b467002a8deab4d2c519945c01458d4)) +- improve wmill go client + ([cfd3da4](https://github.com/windmill-labs/windmill/commit/cfd3da41efe4e89e5d8672c08433442b05d11f37)) + +## [1.214.1](https://github.com/windmill-labs/windmill/compare/v1.214.0...v1.214.1) (2023-11-23) + +### Features + +- **python:** Quality of Life improvements to Python client + ([#2686](https://github.com/windmill-labs/windmill/issues/2686)) + ([1c2abcd](https://github.com/windmill-labs/windmill/commit/1c2abcda231b2d10e7a358a4e4b7973785cb6199)) + +### Bug Fixes + +- add image base64 source kinds + ([7ae84fc](https://github.com/windmill-labs/windmill/commit/7ae84fce5014d97bf17803e2ccefafee009b28bb)) +- fix backend build + ([45ee1d7](https://github.com/windmill-labs/windmill/commit/45ee1d770345f03c03cc48a3ddcc130ca3655a4c)) +- **frontend:** disable active interaction to avoid broken state + ([#2675](https://github.com/windmill-labs/windmill/issues/2675)) + ([bfdb559](https://github.com/windmill-labs/windmill/commit/bfdb559b47786e37f135ca345c55828cc70e49e9)) +- **frontend:** improve tutorial ux + ([#2677](https://github.com/windmill-labs/windmill/issues/2677)) + ([7fe3bca](https://github.com/windmill-labs/windmill/commit/7fe3bca624fa3b434e3fbe9b33b213449044accc)) +- **frontend:** use popover for schedule for later on the runs page + ([#2678](https://github.com/windmill-labs/windmill/issues/2678)) + ([31fbc58](https://github.com/windmill-labs/windmill/commit/31fbc5867cc72befea5733811148126289ce8bb9)) +- graphql variables + ([#2682](https://github.com/windmill-labs/windmill/issues/2682)) + ([217e694](https://github.com/windmill-labs/windmill/commit/217e69498fa5958e83c595003b2a086528e51388)) +- relax tags constraints + ([8f8ea22](https://github.com/windmill-labs/windmill/commit/8f8ea227c850f9d01f913660547b6a6394c6e142)) +- Various fixes and improvements for Windmill S3 capabilities + ([#2674](https://github.com/windmill-labs/windmill/issues/2674)) + ([c42c54e](https://github.com/windmill-labs/windmill/commit/c42c54e69b5acdcbe44a0c26ae7fbaa2189e6b5f)) + +## [1.214.0](https://github.com/windmill-labs/windmill/compare/v1.213.0...v1.214.0) (2023-11-22) + +### Features + +- hub path scripts + nested inputs glue + ([#2668](https://github.com/windmill-labs/windmill/issues/2668)) + ([ad199af](https://github.com/windmill-labs/windmill/commit/ad199afd06814540bb7d36669709902be56eeb8a)) +- **python:** Refactor Windmill Python client (remove `windmill-api`) + ([#2665](https://github.com/windmill-labs/windmill/issues/2665)) + ([37ffdae](https://github.com/windmill-labs/windmill/commit/37ffdaed60fb750f1466b440353e1d8409eaea90)) + +### Bug Fixes + +- fix flow primary schedule clearing + ([3ebe6d7](https://github.com/windmill-labs/windmill/commit/3ebe6d7a620e37fd6c81bcf4c8713a48eb081f81)) + +## [1.213.0](https://github.com/windmill-labs/windmill/compare/v1.212.0...v1.213.0) (2023-11-21) + +### Features + +- code completion UI + other nits + ([#2657](https://github.com/windmill-labs/windmill/issues/2657)) + ([6d426b4](https://github.com/windmill-labs/windmill/commit/6d426b4ec49d4749a89c86dc5eb1f11bf705ca26)) +- Expanding an s3object result now opens the S3 file browser + ([#2656](https://github.com/windmill-labs/windmill/issues/2656)) + ([baac93f](https://github.com/windmill-labs/windmill/commit/baac93f40140ee37548a273885c028a8e6500b6d)) + +### Bug Fixes + +- ask to return value + ([#2659](https://github.com/windmill-labs/windmill/issues/2659)) + ([de1e1f5](https://github.com/windmill-labs/windmill/commit/de1e1f545d4cd42f46d9af9a0349af86acf1901c)) +- fix embedded approval step timeouts + ([51ce2f8](https://github.com/windmill-labs/windmill/commit/51ce2f8cb308da285dab0dc433bf596caa5eeed0)) +- fix error handling for list of errors + ([c1bb97d](https://github.com/windmill-labs/windmill/commit/c1bb97d990810c9b3d909c9a045f0ce84be6c25e)) +- set session code completion to enabled by default + ([#2664](https://github.com/windmill-labs/windmill/issues/2664)) + ([ded0bb8](https://github.com/windmill-labs/windmill/commit/ded0bb890bb54ef80c857395474e692865ee4717)) + +## [1.212.0](https://github.com/windmill-labs/windmill/compare/v1.211.0...v1.212.0) (2023-11-20) + +### Features + +- S3 file picker as a drawer + ([#2640](https://github.com/windmill-labs/windmill/issues/2640)) + ([624b4d0](https://github.com/windmill-labs/windmill/commit/624b4d0e9898dddcce3cb2ce989ce1f9e4736061)) +- test an iteration + ([c2598b3](https://github.com/windmill-labs/windmill/commit/c2598b330450f9885f7d10e2b5baa54d6ef88cc5)) +- upgrade to gpt-4-turbo + ([#2655](https://github.com/windmill-labs/windmill/issues/2655)) + ([8ea98c2](https://github.com/windmill-labs/windmill/commit/8ea98c2c8d636209954a267116eb03ab13217ef8)) + +## [1.211.0](https://github.com/windmill-labs/windmill/compare/v1.210.1...v1.211.0) (2023-11-20) + +### Features + +- agent mode v0 + ([cd260e7](https://github.com/windmill-labs/windmill/commit/cd260e7062802ab39115025577a2456c66435899)) +- agent mode v0 + ([47ad8d6](https://github.com/windmill-labs/windmill/commit/47ad8d6013e7144a5d018f43c827b171228b5f42)) +- ai regex + ([19907e4](https://github.com/windmill-labs/windmill/commit/19907e4012e88a8fd28a5f0564a7ea48ec12020c)) +- custom error messages for forms + ([2f15ebc](https://github.com/windmill-labs/windmill/commit/2f15ebc5f9628b0d26ec08b3527ddc96c6d42ba0)) +- **python:** Add functionality and resiliency to wmill python client + ([#2650](https://github.com/windmill-labs/windmill/issues/2650)) + ([c7a30f7](https://github.com/windmill-labs/windmill/commit/c7a30f7c9db26252f0ee69e1276ddccc0d52acb3)) + +### Bug Fixes + +- add refresh button to item picker + ([4882d94](https://github.com/windmill-labs/windmill/commit/4882d94dfe18c156662fe483e1dd4f5d3e3be3af)) +- fix base64 assignment (file input) + ([70f1210](https://github.com/windmill-labs/windmill/commit/70f121035edd94b3940f530a5603b1ff4bf03839)) +- main broken tests + ([#2652](https://github.com/windmill-labs/windmill/issues/2652)) + ([c90f7f1](https://github.com/windmill-labs/windmill/commit/c90f7f167e0b9c20008a62eeeef7819e24fc3da9)) +- token expiry is equal to timeout + ([b667317](https://github.com/windmill-labs/windmill/commit/b667317d44f37bb50f24e356a1a3d231ebe8b4b4)) + +## [1.210.1](https://github.com/windmill-labs/windmill/compare/v1.210.0...v1.210.1) (2023-11-18) + +### Bug Fixes + +- add toggle to invites + ([36379d6](https://github.com/windmill-labs/windmill/commit/36379d6db05de170e0237b12e767b6d6f4a6f2ef)) +- auto-invite all instead of by domain + ([c07e905](https://github.com/windmill-labs/windmill/commit/c07e9056f1872cae70b8c3bebdbbf47daeee7ac5)) +- flow copilot arg types + ([#2648](https://github.com/windmill-labs/windmill/issues/2648)) + ([08c14e5](https://github.com/windmill-labs/windmill/commit/08c14e51c792fe65d4f993379eff0e5c8a75215b)) +- improve error message for unauthorized variables/resources + ([5a72ca9](https://github.com/windmill-labs/windmill/commit/5a72ca9b24c5c4e9fe94c7865b9145283aceff53)) +- leave workspace + instance api + ([ee243de](https://github.com/windmill-labs/windmill/commit/ee243dedc6df28a64f15e0b274b7fa96f6428474)) +- make wmill compatible with python 3.7 + ([6ae1a69](https://github.com/windmill-labs/windmill/commit/6ae1a69b75fe039586956064880c274a21fc5970)) +- migrate old state env variable to new env variable + ([2692737](https://github.com/windmill-labs/windmill/commit/2692737418ed601c0a36c368f59ffb8d10d9ad38)) + +## [1.210.0](https://github.com/windmill-labs/windmill/compare/v1.209.0...v1.210.0) (2023-11-17) + +### Features + +- truncate logs when necessary + ([05d3fca](https://github.com/windmill-labs/windmill/commit/05d3fcad269adebd2a701da8a49cdc692f26b18f)) +- truncate logs when necessary + ([4d92745](https://github.com/windmill-labs/windmill/commit/4d927457867a3c828b5d09f43fc905984769e29f)) + +### Bug Fixes + +- remove stats payload logging + ([#2644](https://github.com/windmill-labs/windmill/issues/2644)) + ([cc978c2](https://github.com/windmill-labs/windmill/commit/cc978c230fe65d4f93b369abff96ee3354d3a899)) +- restore flow local storage + ([526b14c](https://github.com/windmill-labs/windmill/commit/526b14cca3ca5eb3fc2c60e404b057da05b84b4c)) + +## [1.209.0](https://github.com/windmill-labs/windmill/compare/v1.208.0...v1.209.0) (2023-11-17) + +### Features + +- add prompt history + ([#2638](https://github.com/windmill-labs/windmill/issues/2638)) + ([c2557a2](https://github.com/windmill-labs/windmill/commit/c2557a270f89d4bc055d03833bb90b20161e9de0)) +- collect vcpus and accounts usage + ([#2635](https://github.com/windmill-labs/windmill/issues/2635)) + ([8183c38](https://github.com/windmill-labs/windmill/commit/8183c38d05da220e036ec36a8ac5cc6f6e004d56)) +- dedicated workers for flows + ([#2637](https://github.com/windmill-labs/windmill/issues/2637)) + ([b13cc58](https://github.com/windmill-labs/windmill/commit/b13cc58315ea07d67d98bffb907e2cbd0c1d6b7d)) +- **frontend:** add filter by resource on Audit Log page + ([#2628](https://github.com/windmill-labs/windmill/issues/2628)) + ([1d1258f](https://github.com/windmill-labs/windmill/commit/1d1258ff5873023e66e727a87d6ecb04d1a77e70)) +- **frontend:** Add optional dropdown trigger + ([#2642](https://github.com/windmill-labs/windmill/issues/2642)) + ([998843b](https://github.com/windmill-labs/windmill/commit/998843ba62a9b154c7a4903bef5b6fc2dc3fafe5)) + +### Bug Fixes + +- improve suspended flow handling when missing next step + ([316d5f3](https://github.com/windmill-labs/windmill/commit/316d5f344f409ca564f92e32d6a04068a316c012)) +- nested schemas can use required + ([33dfcfb](https://github.com/windmill-labs/windmill/commit/33dfcfbdc74d611e457e54cc8ddb9152bf365560)) +- support non root imports in bun + ([9ff428f](https://github.com/windmill-labs/windmill/commit/9ff428f210dd1dea6cff664aaade1411317587c5)) +- www-url-encoded body + ([9c7bb5e](https://github.com/windmill-labs/windmill/commit/9c7bb5ecd9f169d627d98cc1a494d0e5010f0166)) +- x overflow scroll + add clear history btn + ([#2641](https://github.com/windmill-labs/windmill/issues/2641)) + ([1aef2aa](https://github.com/windmill-labs/windmill/commit/1aef2aae9027010346ce352e6a6993fb175bc904)) + +## [1.208.0](https://github.com/windmill-labs/windmill/compare/v1.207.0...v1.208.0) (2023-11-15) + +### Features + +- Add Python SDK capabilities to generate Polars and DuckDB connection settings + to S3 ([#2625](https://github.com/windmill-labs/windmill/issues/2625)) + ([9009365](https://github.com/windmill-labs/windmill/commit/90093656b49f78d550012ff2e8627fc43b8e26ea)) +- add yaml for import/export/diff + ([#2631](https://github.com/windmill-labs/windmill/issues/2631)) + ([34abe01](https://github.com/windmill-labs/windmill/commit/34abe01c2f0d9d7055ed17cb2dd34acf9d5e2e88)) +- sync team plans + ([#2619](https://github.com/windmill-labs/windmill/issues/2619)) + ([f38498b](https://github.com/windmill-labs/windmill/commit/f38498b725cb475d8b4c04641d3fa9870ed23adc)) + +### Bug Fixes + +- Resource secret heuristic is wrong + ([#2632](https://github.com/windmill-labs/windmill/issues/2632)) + ([0d6c1ec](https://github.com/windmill-labs/windmill/commit/0d6c1ec064d83d3394791cef776bcd33ef3f570f)) +- stripe ops ee only + ([#2634](https://github.com/windmill-labs/windmill/issues/2634)) + ([e3cb2e6](https://github.com/windmill-labs/windmill/commit/e3cb2e66ba41b156e2833ce54b1b153eba20785e)) + +## [1.207.0](https://github.com/windmill-labs/windmill/compare/v1.206.0...v1.207.0) (2023-11-15) + +### Features + +- cache postgres connection + ([#2621](https://github.com/windmill-labs/windmill/issues/2621)) + ([ff8b9b0](https://github.com/windmill-labs/windmill/commit/ff8b9b03848bf44303bb3dc7d04572823fef28f8)) + +### Bug Fixes + +- ai gen minor fixes + ([#2626](https://github.com/windmill-labs/windmill/issues/2626)) + ([eafde10](https://github.com/windmill-labs/windmill/commit/eafde1099532caacd23af19fd1405f71e6f7f723)) +- copy component only if empty selection + ([9fd8a31](https://github.com/windmill-labs/windmill/commit/9fd8a31e1c3b515022e7967d5195c9b38a1e4cc3)) +- false not undefined in result + ([#2620](https://github.com/windmill-labs/windmill/issues/2620)) + ([f185eba](https://github.com/windmill-labs/windmill/commit/f185eba49cc84fc0bcfcfd00716999c11212db44)) +- fix delete schedule clear jobs + ([244b85e](https://github.com/windmill-labs/windmill/commit/244b85e859e74e8e509c48c22dc9f543f11dd1f2)) +- fix diff editor error + ([cbeefa8](https://github.com/windmill-labs/windmill/commit/cbeefa807a25e06dc8052e5c0984fe9c883da460)) +- **frontend:** Fix Step viewer + ([#2627](https://github.com/windmill-labs/windmill/issues/2627)) + ([1daccdb](https://github.com/windmill-labs/windmill/commit/1daccdbdb104f4d6e619ed0bdf28ef9ecc15bebb)) + +## [1.206.0](https://github.com/windmill-labs/windmill/compare/v1.205.0...v1.206.0) (2023-11-12) + +### Features + +- Add Authentik SSO support + ([#2614](https://github.com/windmill-labs/windmill/issues/2614)) + ([ce38a43](https://github.com/windmill-labs/windmill/commit/ce38a4322e13b35660f16d4a3ca66224487dd27b)) +- add dedicated worker support for deno + ([528f6fa](https://github.com/windmill-labs/windmill/commit/528f6fa9107d3b93c36fd5418ca95b7f2b701445)) +- add support for requiring users to pre-exist + ([eb5067a](https://github.com/windmill-labs/windmill/commit/eb5067aee5fd0c64614c967ef4b2af2398e8807c)) + +### Bug Fixes + +- add windmill loading screen + ([8151b01](https://github.com/windmill-labs/windmill/commit/8151b01013383a83ce8aca8c2f918ead159b4273)) +- fix selected component switch tab + copyComponent keep layout + ([6a819cc](https://github.com/windmill-labs/windmill/commit/6a819cc51211cba7009d985caddb9ae6f0ec8f48)) +- handle console logs in dedicated workers + ([fa3efd3](https://github.com/windmill-labs/windmill/commit/fa3efd3f608a754f0c271da557a244ff6b359cfd)) +- keep dark theme on login redirect + ([7bbe3cf](https://github.com/windmill-labs/windmill/commit/7bbe3cf288ec480e56cc33a5d3248c00567e137f)) +- update monaco ([#2616](https://github.com/windmill-labs/windmill/issues/2616)) + ([f809172](https://github.com/windmill-labs/windmill/commit/f809172e3da88594d7e5a3ed8a12116e804ca6ae)) + +## [1.205.0](https://github.com/windmill-labs/windmill/compare/v1.204.1...v1.205.0) (2023-11-11) + +### Features + +- exit dedicated worker upon new deployment + ([2038fe6](https://github.com/windmill-labs/windmill/commit/2038fe68ce2ffeeed34c4cfcb44c46ad08f8e732)) +- exit dedicated worker upon new deployment + ([4661dd2](https://github.com/windmill-labs/windmill/commit/4661dd2cea343572099ca66459d3db5f3c7879c8)) + +### Bug Fixes + +- improve display of optimized one-loops + dependency jobs of dedicated workers + happen on dedicated worker + ([f998c72](https://github.com/windmill-labs/windmill/commit/f998c7229cd0b27d906a79f99ee7c6e0da1d1810)) +- Invalid config for workers does not panic + ([#2612](https://github.com/windmill-labs/windmill/issues/2612)) + ([aee35d6](https://github.com/windmill-labs/windmill/commit/aee35d6d511d16130fb64ae4dd2e28757e99f79a)) +- support digit prefixed script in python + ([b9e41d0](https://github.com/windmill-labs/windmill/commit/b9e41d066da801ac43276c48af3f100aa70c5a5d)) + +## [1.204.1](https://github.com/windmill-labs/windmill/compare/v1.204.0...v1.204.1) (2023-11-10) + +### Bug Fixes + +- fix custom components + ([4136442](https://github.com/windmill-labs/windmill/commit/41364421ea2ed5980bada139261760bbb6ee8e31)) +- **frontend:** fix login icons + add Okta + ([#2609](https://github.com/windmill-labs/windmill/issues/2609)) + ([e22f373](https://github.com/windmill-labs/windmill/commit/e22f3738d512b4d7657acc8d4ddf280039acbe56)) +- optimize single step iterative forloops + ([#2596](https://github.com/windmill-labs/windmill/issues/2596)) + ([88e3648](https://github.com/windmill-labs/windmill/commit/88e3648ee413286769b72acc02a4af6173fa6bac)) + +## [1.204.0](https://github.com/windmill-labs/windmill/compare/v1.203.0...v1.204.0) (2023-11-10) + +### Features + +- add sql server + ([#2604](https://github.com/windmill-labs/windmill/issues/2604)) + ([577e130](https://github.com/windmill-labs/windmill/commit/577e1300b93773ab038b067574928d92cae69275)) +- add support for custom sso logins + ([0ccf706](https://github.com/windmill-labs/windmill/commit/0ccf706fa28ba615b887ae9c930089be45f14b13)) +- **frontend:** add confirmation modal when deleting a user in instance settings + ([#2608](https://github.com/windmill-labs/windmill/issues/2608)) + ([a99edf7](https://github.com/windmill-labs/windmill/commit/a99edf7764f1a46809387f851fd9acdb1057810a)) +- **frontend:** Buttons refactor + ([#2545](https://github.com/windmill-labs/windmill/issues/2545)) + ([fe35c7a](https://github.com/windmill-labs/windmill/commit/fe35c7ad3cf5cb9d8ebcd2a0723533200034fa74)) +- **frontend:** draft script/flow can only access the edit page until… + ([#2607](https://github.com/windmill-labs/windmill/issues/2607)) + ([adad712](https://github.com/windmill-labs/windmill/commit/adad71266269c17d27ca1bbe8ebe5505b89eb855)) + +### Bug Fixes + +- `iter` args conflicts with external variables named iter + ([#2605](https://github.com/windmill-labs/windmill/issues/2605)) + ([cb01703](https://github.com/windmill-labs/windmill/commit/cb01703a08f4f63362af98594eec4d08e3f25c04)) + +## [1.203.0](https://github.com/windmill-labs/windmill/compare/v1.202.1...v1.203.0) (2023-11-09) + +### Features + +- add support for custom components in react or vanilla JS + ([#2603](https://github.com/windmill-labs/windmill/issues/2603)) + ([28c9fdc](https://github.com/windmill-labs/windmill/commit/28c9fdc4f209bcc099f741a448cd3af0797acd53)) +- **frontend:** add a way to customise the link's label + ([#2591](https://github.com/windmill-labs/windmill/issues/2591)) + ([72854b5](https://github.com/windmill-labs/windmill/commit/72854b55b9db5c7c2ec3cbf65b0ed851ca7eb29a)) +- **frontend:** Migrate flow advanced settings to new layout + ([#2589](https://github.com/windmill-labs/windmill/issues/2589)) + ([55e3a95](https://github.com/windmill-labs/windmill/commit/55e3a9561899127ba647ff87d32cf010f2aefb90)) + +### Bug Fixes + +- Fix error handler token injection + ([#2598](https://github.com/windmill-labs/windmill/issues/2598)) + ([aefa43d](https://github.com/windmill-labs/windmill/commit/aefa43dcafe929d8939dd2ee5ba94633759204a7)) +- frontend build + ([#2593](https://github.com/windmill-labs/windmill/issues/2593)) + ([a87b15f](https://github.com/windmill-labs/windmill/commit/a87b15f2c56c19e6f901da69240b3c127ece3b50)) +- Frontend workspace error handler args + ([#2597](https://github.com/windmill-labs/windmill/issues/2597)) + ([fc87413](https://github.com/windmill-labs/windmill/commit/fc874132c029a7fb2571fe5c296c836b451b351a)) +- **frontend:** correctly clear result when removing all options in a multi + select ([#2600](https://github.com/windmill-labs/windmill/issues/2600)) + ([ed24838](https://github.com/windmill-labs/windmill/commit/ed24838b46916f8415afcfab3e9700d2ffad9a63)) +- Pythong script in dedicated worker fails with more than 1 arg + ([#2588](https://github.com/windmill-labs/windmill/issues/2588)) + ([0d846b3](https://github.com/windmill-labs/windmill/commit/0d846b310d8f1ade8a01607d49c6e50ba417f54e)) +- s3 snippets arg inputs update + ([#2592](https://github.com/windmill-labs/windmill/issues/2592)) + ([16a5fb9](https://github.com/windmill-labs/windmill/commit/16a5fb9e8662afdf84c7e87dbe7a8db7d7f09563)) + +## [1.202.1](https://github.com/windmill-labs/windmill/compare/v1.202.0...v1.202.1) (2023-11-07) + +### Bug Fixes + +- remove the FOO + ([f89a01f](https://github.com/windmill-labs/windmill/commit/f89a01ff2fb26224884e59599f72da0b83fa4a0f)) + +## [1.202.0](https://github.com/windmill-labs/windmill/compare/v1.201.0...v1.202.0) (2023-11-07) + +### Features + +- add diffs when editing workspace script inside a flow + ([#2581](https://github.com/windmill-labs/windmill/issues/2581)) + ([e84e38d](https://github.com/windmill-labs/windmill/commit/e84e38d3bd4e3cb95fc71f91b3bd133740d82b05)) +- Add override all schedule handlers button + ([#2579](https://github.com/windmill-labs/windmill/issues/2579)) + ([f2bff84](https://github.com/windmill-labs/windmill/commit/f2bff8450223d29d3de8edd2e60d483f6ced5caa)) +- add support for flows in vscode extension + ([#2585](https://github.com/windmill-labs/windmill/issues/2585)) + ([8a7fe93](https://github.com/windmill-labs/windmill/commit/8a7fe93559209e7aa5427f5b6a8b9e03df9da406)) +- **frontend:** Rework variable table + ([#2576](https://github.com/windmill-labs/windmill/issues/2576)) + ([b040a89](https://github.com/windmill-labs/windmill/commit/b040a89b27f6dca41049e4bceeae4e3665c005ae)) + +### Bug Fixes + +- add tag support for CLI + ([0ede0f4](https://github.com/windmill-labs/windmill/commit/0ede0f4c972eb1b65dcb542ea6facf5ee2c74cfd)) +- add tag sync for cli + ([6c12c6e](https://github.com/windmill-labs/windmill/commit/6c12c6e7846c8be3f843ca7a98b8bac6fac1d7e8)) +- **frontend:** add missing classes when tabs are in sidebar mode + ([#2577](https://github.com/windmill-labs/windmill/issues/2577)) + ([dd3594c](https://github.com/windmill-labs/windmill/commit/dd3594c5e5624b712564126f046fde4fc06c42ca)) +- **frontend:** escape wasn't removing the hash when closing a drawer + ([#2583](https://github.com/windmill-labs/windmill/issues/2583)) + ([0951431](https://github.com/windmill-labs/windmill/commit/0951431e419c127cc562158447012960feb6d3af)) +- handle graphql invalid response + ([#2582](https://github.com/windmill-labs/windmill/issues/2582)) + ([12e731b](https://github.com/windmill-labs/windmill/commit/12e731b5c03fa788c9f0d00a955b7b01b4c570a0)) + +## [1.201.0](https://github.com/windmill-labs/windmill/compare/v1.200.0...v1.201.0) (2023-11-06) + +### Features + +- add new stats ([#2568](https://github.com/windmill-labs/windmill/issues/2568)) + ([1ed52ab](https://github.com/windmill-labs/windmill/commit/1ed52ab4c96988847c74c0672497dce1dd24ff6d)) +- Add toggle to optionally mute error handler for cancelled jobs + ([#2567](https://github.com/windmill-labs/windmill/issues/2567)) + ([83f9ef3](https://github.com/windmill-labs/windmill/commit/83f9ef34e6f7bb207f3410cbe2cceca7b52a4dea)) +- **frontend:** Ag grid styling + ([#2565](https://github.com/windmill-labs/windmill/issues/2565)) + ([97c5fe8](https://github.com/windmill-labs/windmill/commit/97c5fe8985166c9dae063de7e9d122914b190a4e)) +- telemetry disclosure + ([#2562](https://github.com/windmill-labs/windmill/issues/2562)) + ([1bb8b60](https://github.com/windmill-labs/windmill/commit/1bb8b606ed2e8ade12d5278072cc2b57c8d3ca27)) + +### Bug Fixes + +- add no changes popup when saving draft + ([#2571](https://github.com/windmill-labs/windmill/issues/2571)) + ([d3dbb18](https://github.com/windmill-labs/windmill/commit/d3dbb188156cfd98e6cb1348d40e8854c008559e)) +- apps diffs ([#2570](https://github.com/windmill-labs/windmill/issues/2570)) + ([3ed7ae7](https://github.com/windmill-labs/windmill/commit/3ed7ae7ffa28cb8b8c4799034ae8f0c8822fd519)) +- flow diffs ([#2561](https://github.com/windmill-labs/windmill/issues/2561)) + ([aa5b71c](https://github.com/windmill-labs/windmill/commit/aa5b71ca05429788078547b3249eb1c3cd375ccc)) +- **frontend:** fix label event issues + ([#2574](https://github.com/windmill-labs/windmill/issues/2574)) + ([8935d22](https://github.com/windmill-labs/windmill/commit/8935d2272fcd630ccb1ab70ba0fa334934640fcb)) +- improve dedicated workers + ([141f45b](https://github.com/windmill-labs/windmill/commit/141f45bf95388c0547e84980096a99607f3dba2f)) +- minor bug fixes + ([#2566](https://github.com/windmill-labs/windmill/issues/2566)) + ([e195202](https://github.com/windmill-labs/windmill/commit/e19520295f41784aae66df0d686b22fec810d57b)) + +## [1.200.0](https://github.com/windmill-labs/windmill/compare/v1.199.0...v1.200.0) (2023-11-04) + +### Features + +- improve drafts and diffs + ([#2534](https://github.com/windmill-labs/windmill/issues/2534)) + ([3bfc2c8](https://github.com/windmill-labs/windmill/commit/3bfc2c81d2d405c8ea12d68622bbf7175b3947db)) + +### Bug Fixes + +- **frontend:** fix treeview + ([#2552](https://github.com/windmill-labs/windmill/issues/2552)) + ([02764b1](https://github.com/windmill-labs/windmill/commit/02764b1fad7e2f44f46b49cbe7500266e9cc2f8e)) +- return non-integer sleep error directly + ([#2558](https://github.com/windmill-labs/windmill/issues/2558)) + ([543fae7](https://github.com/windmill-labs/windmill/commit/543fae77a75b88a1199f8d3cbb0460257ed5db95)) + +## [1.199.0](https://github.com/windmill-labs/windmill/compare/v1.198.0...v1.199.0) (2023-11-03) + +### Features + +- Schedule error handler improvements + ([#2555](https://github.com/windmill-labs/windmill/issues/2555)) + ([668c9da](https://github.com/windmill-labs/windmill/commit/668c9da6461997c1b7907111bbfd0eff5e0ec159)) + +### Bug Fixes + +- fail on non-integer sleep value + ([#2556](https://github.com/windmill-labs/windmill/issues/2556)) + ([6f47b96](https://github.com/windmill-labs/windmill/commit/6f47b9600629ec24a4e265a0ccc9eee75458229f)) + +## [1.198.0](https://github.com/windmill-labs/windmill/compare/v1.197.1...v1.198.0) (2023-11-03) + +### Features + +- **frontend:** fix table when seaching with hidden columns + ([#2549](https://github.com/windmill-labs/windmill/issues/2549)) + ([0aaffad](https://github.com/windmill-labs/windmill/commit/0aaffadf0ca6964539011733b5d4882fdd26588a)) +- **frontend:** update displayed path for treeview + ([#2551](https://github.com/windmill-labs/windmill/issues/2551)) + ([0349ba5](https://github.com/windmill-labs/windmill/commit/0349ba5d567f2b52ff8058f347e501598ce4c981)) + +### Bug Fixes + +- **frontend:** fix mobile sidebar opacity + ([#2554](https://github.com/windmill-labs/windmill/issues/2554)) + ([e1e48cf](https://github.com/windmill-labs/windmill/commit/e1e48cfc5f3cb68aa4bbd18a1a2ad6f0a300c374)) +- make graph rendering uniform across all rem + ([#2553](https://github.com/windmill-labs/windmill/issues/2553)) + ([0d4fc6a](https://github.com/windmill-labs/windmill/commit/0d4fc6a0bbc9b8e20c20bf2646eab202f795b8bd)) +- make python imports work at any nesting level + ([75a5766](https://github.com/windmill-labs/windmill/commit/75a5766f8bf14c3749aff56fb94a8c04b32de4b6)) +- make timeline fit for high number of iterations for flows + ([37eac60](https://github.com/windmill-labs/windmill/commit/37eac608666d903504872ce815839a7493fe876a)) +- subflow with cache can not be considered simple + ([54f0812](https://github.com/windmill-labs/windmill/commit/54f08122d2837b5ee3d283733e0da403b21fadf0)) +- support results[<x>] + export more metatada for scripts + ([0f37439](https://github.com/windmill-labs/windmill/commit/0f37439877ab498a615746357d771703db47a6d2)) + +## [1.197.1](https://github.com/windmill-labs/windmill/compare/v1.197.0...v1.197.1) (2023-11-02) + +### Bug Fixes + +- fix cli + ([77e0e2e](https://github.com/windmill-labs/windmill/commit/77e0e2ebc1fbe00eec431bd5d20619b89e8b7511)) +- Slack error handler missing "slack" arg + ([#2546](https://github.com/windmill-labs/windmill/issues/2546)) + ([7ba2a6c](https://github.com/windmill-labs/windmill/commit/7ba2a6c4f111b980181034ef5181193996c19fc4)) + +## [1.197.0](https://github.com/windmill-labs/windmill/compare/v1.196.0...v1.197.0) (2023-11-02) + +### Features + +- **frontend:** add treeview + ([#2542](https://github.com/windmill-labs/windmill/issues/2542)) + ([86a2ced](https://github.com/windmill-labs/windmill/commit/86a2ced605fbab27bd01984c846e467a2612102b)) +- **frontend:** fix sidebar + ([#2544](https://github.com/windmill-labs/windmill/issues/2544)) + ([b4f043d](https://github.com/windmill-labs/windmill/commit/b4f043d32dd4fefc104d0fca429f4b39a23e1166)) +- **frontend:** fix sidebar color + ([#2541](https://github.com/windmill-labs/windmill/issues/2541)) + ([30a9460](https://github.com/windmill-labs/windmill/commit/30a9460cca676ac8f8e585024a0927ca90252f17)) + +### Bug Fixes + +- enable default tokenizer truncation + ([#2537](https://github.com/windmill-labs/windmill/issues/2537)) + ([29aabd3](https://github.com/windmill-labs/windmill/commit/29aabd3472f59a4b5a657e7b046d66183d5fa0ba)) +- fix powershell args passing + ([b4d5c5a](https://github.com/windmill-labs/windmill/commit/b4d5c5add8b92db1094e46c347efded52aa0f389)) +- improve rendering of list with undefined heights + ([9eec2e2](https://github.com/windmill-labs/windmill/commit/9eec2e2c3e0183520cc50c716342bf329145edbd)) + +## [1.196.0](https://github.com/windmill-labs/windmill/compare/v1.195.0...v1.196.0) (2023-11-01) + +### Features + +- improve inputs handling for large list on apps + ([270d871](https://github.com/windmill-labs/windmill/commit/270d871039c708b7cfa218e22650fc25b1ec841c)) + +## [1.195.0](https://github.com/windmill-labs/windmill/compare/v1.194.0...v1.195.0) (2023-10-31) + +### Features + +- Ability to restart flow on loop/branchall iteration + ([#2526](https://github.com/windmill-labs/windmill/issues/2526)) + ([c31299b](https://github.com/windmill-labs/windmill/commit/c31299bed8110f53e31f69983f144aaa82d5560d)) +- **frontend:** chartjs wizard + ([#2532](https://github.com/windmill-labs/windmill/issues/2532)) + ([03dfe71](https://github.com/windmill-labs/windmill/commit/03dfe711c6292d8d9af78ed610fd2885ad62b8d7)) +- invalidate result cache on flow or script change + ([cf9669c](https://github.com/windmill-labs/windmill/commit/cf9669c18de6091dbf5dafad0f6ffd6e17675ca4)) + +### Bug Fixes + +- add on success events to triggers list + ([1974012](https://github.com/windmill-labs/windmill/commit/1974012621f3a2112eace60ba5d68854d567c9c2)) +- fix quick search scripts + ([b3d2213](https://github.com/windmill-labs/windmill/commit/b3d2213ccec73bf4a7f27242ac31eb0941b791ac)) +- Load schedule statistics in background + ([#2530](https://github.com/windmill-labs/windmill/issues/2530)) + ([c98ebf9](https://github.com/windmill-labs/windmill/commit/c98ebf92e5f99f63cc3754555b5867f71c09e1a9)) +- only load embeddings if in server mode + ([c803631](https://github.com/windmill-labs/windmill/commit/c8036317d23bf81b474742223e903255dd8825e0)) + +## [1.194.0](https://github.com/windmill-labs/windmill/compare/v1.193.0...v1.194.0) (2023-10-30) + +### Features + +- **frontend:** plotly wizard + ([#2517](https://github.com/windmill-labs/windmill/issues/2517)) + ([40adfdb](https://github.com/windmill-labs/windmill/commit/40adfdb7fd6e21d053e79c6db876a4a8c90509c3)) +- Restartable flows + ([#2514](https://github.com/windmill-labs/windmill/issues/2514)) + ([76a736a](https://github.com/windmill-labs/windmill/commit/76a736aee67517807d86e1c8c3961af907fc919c)) + +### Bug Fixes + +- assign column length of table actions based on number of actions + ([0c672e7](https://github.com/windmill-labs/windmill/commit/0c672e7e18b52d4615dcf473bf1424dfe685cc9d)) +- fix table reactivity + ([01560db](https://github.com/windmill-labs/windmill/commit/01560dbdaf2dc30c16e9182b5a3353d13c927827)) +- **frontend:** fix ai gen + ([#2518](https://github.com/windmill-labs/windmill/issues/2518)) + ([6f4fb76](https://github.com/windmill-labs/windmill/commit/6f4fb7668cd09d2e5fdca8977718fd6b87883a27)) +- make modal and drawer button hiddable as config + ([2e55af5](https://github.com/windmill-labs/windmill/commit/2e55af50c70b9d1118e9a63f119ac31e5a574e51)) +- workspaced embeddings for resource types + ([#2525](https://github.com/windmill-labs/windmill/issues/2525)) + ([302649f](https://github.com/windmill-labs/windmill/commit/302649faa858233ea62073a2460e1586db67249f)) + +## [1.193.0](https://github.com/windmill-labs/windmill/compare/v1.192.0...v1.193.0) (2023-10-28) + +### Features + +- refactor metrics and add performance debug metrics + ([#2520](https://github.com/windmill-labs/windmill/issues/2520)) + ([b888348](https://github.com/windmill-labs/windmill/commit/b8883481f46f1317748bb1884e0f0d287e8ae7fa)) + +### Bug Fixes + +- **frontend:** add a disabled prop to text inputs + ([#2512](https://github.com/windmill-labs/windmill/issues/2512)) + ([7164de8](https://github.com/windmill-labs/windmill/commit/7164de81b02376f61eac965f08d75ab8b790e0ee)) +- **frontend:** fix insert new item + ([#2519](https://github.com/windmill-labs/windmill/issues/2519)) + ([c4383cf](https://github.com/windmill-labs/windmill/commit/c4383cfe740220f4674c93beeae9eb74397f7aff)) +- **frontend:** increased size limit for images + ([#2510](https://github.com/windmill-labs/windmill/issues/2510)) + ([aaa2657](https://github.com/windmill-labs/windmill/commit/aaa26579dc5e24f46e554a42c0121fb6a04d58f3)) +- move keep job directories and expose debug metrics to instance settings UI + ([55ceca1](https://github.com/windmill-labs/windmill/commit/55ceca19131ac6dfb190f8818b18b46ca329babc)) +- prometheus metrics are an instance settings + ([ea28163](https://github.com/windmill-labs/windmill/commit/ea28163865a22174dc1b92242a24989a1a47af21)) + +## [1.192.0](https://github.com/windmill-labs/windmill/compare/v1.191.0...v1.192.0) (2023-10-25) + +### Features + +- **frontend:** add display borders configuration to list component + ([#2508](https://github.com/windmill-labs/windmill/issues/2508)) + ([dc54829](https://github.com/windmill-labs/windmill/commit/dc548292ac05f92116d2d65863da3a52e0cfe027)) + +### Bug Fixes + +- do not share http_client in js_eval runtime + ([402193c](https://github.com/windmill-labs/windmill/commit/402193cef9eff0ca03f5bd854d29f95774c4b73e)) +- fix global instance dynamic css + ([8efe0ca](https://github.com/windmill-labs/windmill/commit/8efe0cadacaae894cf93a3a569e3d0b8e79c7d14)) + +## [1.191.0](https://github.com/windmill-labs/windmill/compare/v1.190.3...v1.191.0) (2023-10-24) + +### Features + +- Priority worker tags + ([#2504](https://github.com/windmill-labs/windmill/issues/2504)) + ([51f2198](https://github.com/windmill-labs/windmill/commit/51f2198c3403a424787b8dee51bc7eddc13c31b8)) + +### Bug Fixes + +- concurrency limit EE feature warning + ([#2505](https://github.com/windmill-labs/windmill/issues/2505)) + ([927cbbe](https://github.com/windmill-labs/windmill/commit/927cbbe23090b212b13c106b65ad65668baf2f04)) +- improve concurrency limit lock + ([d44b078](https://github.com/windmill-labs/windmill/commit/d44b078e70a5782f1a1c88a4546d369a547e966a)) +- improve runs to display flow informations + ([9eaffa5](https://github.com/windmill-labs/windmill/commit/9eaffa5b5fe59ed9e0e7e2cea0721eea75b3d1b3)) + +## [1.190.3](https://github.com/windmill-labs/windmill/compare/v1.190.2...v1.190.3) (2023-10-24) + +### Bug Fixes + +- sort arg infos on the client-side + ([8025a27](https://github.com/windmill-labs/windmill/commit/8025a27b8ce36b9c9b8d1d17d72075819f58c607)) + +## [1.190.2](https://github.com/windmill-labs/windmill/compare/v1.190.1...v1.190.2) (2023-10-24) + +### Bug Fixes + +- ListableQueuedJob were missing the priority field + ([#2500](https://github.com/windmill-labs/windmill/issues/2500)) + ([96f3854](https://github.com/windmill-labs/windmill/commit/96f38541459195ed70bd24b62b7d1f081be4cb95)) + +## [1.190.1](https://github.com/windmill-labs/windmill/compare/v1.190.0...v1.190.1) (2023-10-24) + +### Bug Fixes + +- add shapefile to python remapping + ([2bd629e](https://github.com/windmill-labs/windmill/commit/2bd629ecabaded79df9e504fea4136bc8c365e03)) +- improve flow performance at high-throughput + ([1ec56c0](https://github.com/windmill-labs/windmill/commit/1ec56c0e237eedd6f13b86e077c3b90f6862a414)) +- Track job UUIDs in concurrency table instead of a simple counter + ([#2498](https://github.com/windmill-labs/windmill/issues/2498)) + ([f428581](https://github.com/windmill-labs/windmill/commit/f4285812696a80e3a92a0e5d79e5c19ca78d58fb)) + +## [1.190.0](https://github.com/windmill-labs/windmill/compare/v1.189.0...v1.190.0) (2023-10-23) + +### Features + +- dedicated worker for python + ([#2492](https://github.com/windmill-labs/windmill/issues/2492)) + ([39f3078](https://github.com/windmill-labs/windmill/commit/39f30785a04a54c651e532d7ede3b8c17cdec7ea)) + +### Bug Fixes + +- stats nits ([#2490](https://github.com/windmill-labs/windmill/issues/2490)) + ([ec65fa8](https://github.com/windmill-labs/windmill/commit/ec65fa84cc233789b0335a558edfe7e2db6b729d)) + +## [1.189.0](https://github.com/windmill-labs/windmill/compare/v1.188.1...v1.189.0) (2023-10-23) + +### Features + +- add form validation for apps + ([8ac0562](https://github.com/windmill-labs/windmill/commit/8ac0562a3625546ec9e16db12d310e65fb9e867f)) +- add unique id ([#2483](https://github.com/windmill-labs/windmill/issues/2483)) + ([7037d70](https://github.com/windmill-labs/windmill/commit/7037d70ca235aa85c0f550e2c6c03cf457fe6eeb)) +- dragndrop component on creation + ([2b70184](https://github.com/windmill-labs/windmill/commit/2b7018413a90274164a4c5743ddf1631b1b62f9f)) +- improve dragndrop experience on editor + ([6951331](https://github.com/windmill-labs/windmill/commit/69513319e783b800e857270e03f180b078156afd)) +- Priority queue + ([#2476](https://github.com/windmill-labs/windmill/issues/2476)) + ([3f4af48](https://github.com/windmill-labs/windmill/commit/3f4af48b0b584096f5753a618ac3de11d89063b6)) + +### Bug Fixes + +- fix drawer escape order + ([8a8feb3](https://github.com/windmill-labs/windmill/commit/8a8feb378ee086357e71d6f0eb4c4a37d35db066)) +- fix include_header + ([44c3c96](https://github.com/windmill-labs/windmill/commit/44c3c96d3eb72d2c2fc75e83b3490f5edffeb88b)) +- graphql local sync + ([#2488](https://github.com/windmill-labs/windmill/issues/2488)) + ([2e8dba9](https://github.com/windmill-labs/windmill/commit/2e8dba94425cf5b14ecfe58023f394a10256bdf0)) +- powershell local sync + ([#2489](https://github.com/windmill-labs/windmill/issues/2489)) + ([3c6186d](https://github.com/windmill-labs/windmill/commit/3c6186dc50891a68aefc44424cb412075c00f880)) +- Update openapi definition to be compatible with oapi-codegen + ([#2487](https://github.com/windmill-labs/windmill/issues/2487)) + ([af45ef0](https://github.com/windmill-labs/windmill/commit/af45ef06f2edfba671043274e69f6b53cc1e31f5)) + +## [1.188.1](https://github.com/windmill-labs/windmill/compare/v1.188.0...v1.188.1) (2023-10-21) + +### Bug Fixes + +- allow superadmin to run inline scripts in repo they are not part of + ([cef2949](https://github.com/windmill-labs/windmill/commit/cef2949497e03bd31e4804e820ca7204962ebd23)) + +## [1.188.0](https://github.com/windmill-labs/windmill/compare/v1.187.0...v1.188.0) (2023-10-21) + +### Features + +- enable secret to be read from file + ([#2477](https://github.com/windmill-labs/windmill/issues/2477)) + ([7905e2c](https://github.com/windmill-labs/windmill/commit/7905e2c853fa519f2ad868c14679c3a3fad17205)) + +### Bug Fixes + +- fix app reactivity + ([656cb83](https://github.com/windmill-labs/windmill/commit/656cb83d6b86353598a53f9a9071c7e47185f18e)) + +## [1.187.0](https://github.com/windmill-labs/windmill/compare/v1.186.0...v1.187.0) (2023-10-21) + +### Features + +- timelines for apps + ([d0161d2](https://github.com/windmill-labs/windmill/commit/d0161d2772e6bead7917bcfc12e721d0c79bca69)) +- timelines for apps + ([2385e18](https://github.com/windmill-labs/windmill/commit/2385e182867a4cc51a268545a9c62e7c9a90aa20)) + +### Bug Fixes + +- cache embedding model in docker img + ([#2474](https://github.com/windmill-labs/windmill/issues/2474)) + ([8fe30ca](https://github.com/windmill-labs/windmill/commit/8fe30ca4caae488c8586d35ec2979ac045f86eb3)) +- **frontend:** Remove monaco as a dependency of AppPreview + ([#2475](https://github.com/windmill-labs/windmill/issues/2475)) + ([dd1e03d](https://github.com/windmill-labs/windmill/commit/dd1e03de4a965f75a66fda027e993435684d0790)) +- hub scripts search types + ([#2471](https://github.com/windmill-labs/windmill/issues/2471)) + ([e0edd37](https://github.com/windmill-labs/windmill/commit/e0edd3763704e0e52956043fb20e73fb8380cad1)) +- windmill_status_code script now properly return + script bash default arg + ([255dd53](https://github.com/windmill-labs/windmill/commit/255dd53ed38deb116eb09d202f2c615e63239c6c)) + +## [1.186.0](https://github.com/windmill-labs/windmill/compare/v1.185.0...v1.186.0) (2023-10-19) + +### Features + +- Approval step optionally require logged-in user + ([#2462](https://github.com/windmill-labs/windmill/issues/2462)) + ([9442068](https://github.com/windmill-labs/windmill/commit/9442068374f57263bf3be5ecae03c95bd6ac5702)) +- Flow approvers user groups can be JS InputTransforms + ([#2468](https://github.com/windmill-labs/windmill/issues/2468)) + ([1200add](https://github.com/windmill-labs/windmill/commit/1200add2a7a3cac4f2519db33f9285e38591b19d)) +- local hub embeddings search + ([#2463](https://github.com/windmill-labs/windmill/issues/2463)) + ([ef3e4b2](https://github.com/windmill-labs/windmill/commit/ef3e4b2623d07e605d0507983f7976ec6656b4f6)) +- test openai key + improve AI UI + ([#2465](https://github.com/windmill-labs/windmill/issues/2465)) + ([94a52f1](https://github.com/windmill-labs/windmill/commit/94a52f1d2de14e78485a5429e56afaa7b9628199)) +- timeline for apps + ([#2470](https://github.com/windmill-labs/windmill/issues/2470)) + ([5469321](https://github.com/windmill-labs/windmill/commit/54693210229c01ed27d4ad2c4ca362b78292ad88)) + +### Bug Fixes + +- embeddings duplicate id + ([#2467](https://github.com/windmill-labs/windmill/issues/2467)) + ([666ac56](https://github.com/windmill-labs/windmill/commit/666ac56824dead5dd1e44d7960de3c492096b445)) +- hub scripts search + ([#2469](https://github.com/windmill-labs/windmill/issues/2469)) + ([3a03eb3](https://github.com/windmill-labs/windmill/commit/3a03eb37606ae569674f5e77a72f638f560c4c60)) + +## [1.185.0](https://github.com/windmill-labs/windmill/compare/v1.184.0...v1.185.0) (2023-10-19) + +### Features + +- add timeline progress bars to flows" + ([#2464](https://github.com/windmill-labs/windmill/issues/2464)) + ([d96f8d0](https://github.com/windmill-labs/windmill/commit/d96f8d0d41540053cb0e65b643c3ce3e1f43a095)) + +### Bug Fixes + +- add select tabs as list inputs for apps + ([39e612e](https://github.com/windmill-labs/windmill/commit/39e612e11601ab0aea26ccf30ad45b6452c127ce)) +- fix handling of undefined values in input transforms by serde + ([acbe129](https://github.com/windmill-labs/windmill/commit/acbe1298fc01dd3264e3533277a1c837e3b2961b)) +- fix mocking for workflows + ([f9045dc](https://github.com/windmill-labs/windmill/commit/f9045dc70f42df53222ccfc58599e32b8e2487aa)) +- go-client build dependencies + ([#2460](https://github.com/windmill-labs/windmill/issues/2460)) + ([92c0ab2](https://github.com/windmill-labs/windmill/commit/92c0ab21b7f22626dbed02017fddc11e8c093186)) + +## [1.184.0](https://github.com/windmill-labs/windmill/compare/v1.183.0...v1.184.0) (2023-10-17) + +### Features + +- filter resource types passed to gpt-4 + ([#2430](https://github.com/windmill-labs/windmill/issues/2430)) + ([e20889b](https://github.com/windmill-labs/windmill/commit/e20889b910b0e5c72d9e04eedc59b650a2550dce)) +- **frontend:** app editor tutorials + ([#2443](https://github.com/windmill-labs/windmill/issues/2443)) + ([aaf8385](https://github.com/windmill-labs/windmill/commit/aaf83859bd268e8bf8ecb382c2b39a92ddb40967)) +- Improve Slack schedule error handler and default to it + ([#2439](https://github.com/windmill-labs/windmill/issues/2439)) + ([a1d6799](https://github.com/windmill-labs/windmill/commit/a1d6799625ae40c5f88615007d01f11b55a0add4)) +- Mute workspace error handler for flows and scripts + ([#2458](https://github.com/windmill-labs/windmill/issues/2458)) + ([2dc75f0](https://github.com/windmill-labs/windmill/commit/2dc75f0f6528ecd884d93ad749dae28efa249f06)) +- refactor entirely json processing in favor or rawjson to handle larger + payloads ([#2446](https://github.com/windmill-labs/windmill/issues/2446)) + ([9314d38](https://github.com/windmill-labs/windmill/commit/9314d38bf1da6247b367effe69394f25a27067ca)) +- Workspace error handler now supports args and Slack for EE + ([#2447](https://github.com/windmill-labs/windmill/issues/2447)) + ([f7cc773](https://github.com/windmill-labs/windmill/commit/f7cc77382652a41e27fefc2b988e034447881bcb)) + +### Bug Fixes + +- Error handler script pickers lists both "regular" script and "error handler" + scripts ([#2449](https://github.com/windmill-labs/windmill/issues/2449)) + ([8a3537b](https://github.com/windmill-labs/windmill/commit/8a3537b76124b67d0aa163f8dcc55f1db0f4f56d)) +- fix previous ids for iterators and branches + ([8d89605](https://github.com/windmill-labs/windmill/commit/8d89605bc6c1fcda0ae3d2d37353f7c76ed18ff6)) +- **frontend:** fix forloop tutorial + ([#2444](https://github.com/windmill-labs/windmill/issues/2444)) + ([26371fd](https://github.com/windmill-labs/windmill/commit/26371fde0c35d508af82e9951bbe2fc74e4235ff)) +- **frontend:** fix style panel overflow + ([#2437](https://github.com/windmill-labs/windmill/issues/2437)) + ([0ce4b34](https://github.com/windmill-labs/windmill/commit/0ce4b344818b4f25533224f3c6b5b6e99e823110)) +- **frontend:** simplify flow tutorials + ([#2448](https://github.com/windmill-labs/windmill/issues/2448)) + ([0c2004f](https://github.com/windmill-labs/windmill/commit/0c2004f5adff2a2752255cbc1fa5f1a4a82b177d)) +- Slack token is readable by g/error_handler + ([#2454](https://github.com/windmill-labs/windmill/issues/2454)) + ([f9e48dd](https://github.com/windmill-labs/windmill/commit/f9e48ddcba3d776cca263219a229b02c95ef9abb)) +- update bun to 1.0.5 + ([a84ce44](https://github.com/windmill-labs/windmill/commit/a84ce44cd9a7ecf2baf8388a43e362fed875c1a1)) +- update bun to 1.0.6 + ([e770f25](https://github.com/windmill-labs/windmill/commit/e770f25667229189acedc25fba685a43c827537b)) +- Workspace error handler extra args are passed to job + ([#2452](https://github.com/windmill-labs/windmill/issues/2452)) + ([b7ce7f0](https://github.com/windmill-labs/windmill/commit/b7ce7f0b18537836f16fa3fefcdd80b622b51665)) + +## [1.183.0](https://github.com/windmill-labs/windmill/compare/v1.182.3...v1.183.0) (2023-10-11) + +### Features + +- **frontend:** Table wizard + ([#2416](https://github.com/windmill-labs/windmill/issues/2416)) + ([6f0cda0](https://github.com/windmill-labs/windmill/commit/6f0cda0e1ea84e2b5c5d297c841749dc5bae879d)) + +### Bug Fixes + +- benchmark config syntax error + ([#2432](https://github.com/windmill-labs/windmill/issues/2432)) + ([109c2f1](https://github.com/windmill-labs/windmill/commit/109c2f17d68e0cac2f365297cc2fcdd54d9d105a)) +- **frontend:** add a validation for base url + ([#2434](https://github.com/windmill-labs/windmill/issues/2434)) + ([c914ac6](https://github.com/windmill-labs/windmill/commit/c914ac64cfbaacaf5fe3c7486ea9901ce4828387)) +- **frontend:** fix drawer title truncate + ([#2429](https://github.com/windmill-labs/windmill/issues/2429)) + ([46d2c13](https://github.com/windmill-labs/windmill/commit/46d2c13e0d2dde1e87c3bbe7cc2be29de84fa2cf)) +- **frontend:** fix mobile multi select + ([#2431](https://github.com/windmill-labs/windmill/issues/2431)) + ([cb2b6df](https://github.com/windmill-labs/windmill/commit/cb2b6dfdba8953a3d1f432e4af2b2725f5e267ca)) +- **frontend:** fix table wizards for old apps + ([#2435](https://github.com/windmill-labs/windmill/issues/2435)) + ([e088ec5](https://github.com/windmill-labs/windmill/commit/e088ec566958079e468b3c1f5df057f6e70dffc3)) + +## [1.182.3](https://github.com/windmill-labs/windmill/compare/v1.182.2...v1.182.3) (2023-10-10) + +### Bug Fixes + +- improve binary build + ([094539f](https://github.com/windmill-labs/windmill/commit/094539ff3aa79531953f82941337bdd3d34db630)) + +## [1.182.2](https://github.com/windmill-labs/windmill/compare/v1.182.1...v1.182.2) (2023-10-10) + +### Bug Fixes + +- add binaries to release + ([17b42e6](https://github.com/windmill-labs/windmill/commit/17b42e6a3555ae1f45d8f24934f290a72e3d60c5)) + +## [1.182.1](https://github.com/windmill-labs/windmill/compare/v1.182.0...v1.182.1) (2023-10-10) + +### Bug Fixes + +- Small fixes UI & Slack OAuth tuto + ([#2398](https://github.com/windmill-labs/windmill/issues/2398)) + ([e1eccc2](https://github.com/windmill-labs/windmill/commit/e1eccc2d9331ba4e33019a6109bc0368d718397c)) + +## [1.182.0](https://github.com/windmill-labs/windmill/compare/v1.181.0...v1.182.0) (2023-10-10) + +### Features + +- add support for aggrid ee + ([c4a817a](https://github.com/windmill-labs/windmill/commit/c4a817aeb6590d8972342f815f3cf3b891ea1446)) +- **frontend:** App polish + ([#2397](https://github.com/windmill-labs/windmill/issues/2397)) + ([11e0bc7](https://github.com/windmill-labs/windmill/commit/11e0bc76c4bc80339e43590f5becf6b2442a2227)) +- **frontend:** column definition helper + ([#2399](https://github.com/windmill-labs/windmill/issues/2399)) + ([53447f1](https://github.com/windmill-labs/windmill/commit/53447f1b43e897bb8856106cabc502c822052441)) +- **frontend:** error handler tutorial + ([#2404](https://github.com/windmill-labs/windmill/issues/2404)) + ([bc1ad3b](https://github.com/windmill-labs/windmill/commit/bc1ad3b8d09fb2b6547dbcb37ac074ffdf9b383c)) +- **frontend:** fix css editor + fix dark mode + ([#2409](https://github.com/windmill-labs/windmill/issues/2409)) + ([2d7712c](https://github.com/windmill-labs/windmill/commit/2d7712c02115006fe84cb323b3b3af99ac14ffdb)) +- manage cache and init scripts from worker group UI + ([#2396](https://github.com/windmill-labs/windmill/issues/2396)) + ([2c9ae41](https://github.com/windmill-labs/windmill/commit/2c9ae41706edc6570559d7d83864fb05c846c0c1)) + +### Bug Fixes + +- add lsp absolute imports for deno in all cases + ([27c45e3](https://github.com/windmill-labs/windmill/commit/27c45e38cc57350df193440aa0c09ddbca93902a)) +- fix aggrid initialization + ([9b75e33](https://github.com/windmill-labs/windmill/commit/9b75e33887c3a9c4cac84d648763a6e3b4490fae)) +- **frontend:** Fix tutorial trigger + ([#2392](https://github.com/windmill-labs/windmill/issues/2392)) + ([cad37bc](https://github.com/windmill-labs/windmill/commit/cad37bc6defa7a42b96fec6ad0a9bcac55d88d51)) +- improve flow status viewer for large values + ([64c5590](https://github.com/windmill-labs/windmill/commit/64c5590aa32e4dbff6af43e711cb6899c02e4ee3)) +- improve handling of large results by frontend + ([21454a7](https://github.com/windmill-labs/windmill/commit/21454a7a052db3cc1d24fd36c4504098751c66d2)) +- tarball for workspace export is generated in /tmp/windmill + ([f4957d6](https://github.com/windmill-labs/windmill/commit/f4957d66b9bf6124ad3f73912f32cd1ea47b46e2)) + +## [1.181.0](https://github.com/windmill-labs/windmill/compare/v1.180.0...v1.181.0) (2023-10-05) + +### Features + +- add npm_config_registry support for bun, deno and being settable from UI + ([#2373](https://github.com/windmill-labs/windmill/issues/2373)) + ([c42b875](https://github.com/windmill-labs/windmill/commit/c42b8750f1d41c9b4de6c96f1ea82239c5325495)) +- **frontend:** add driverjs + ([#2327](https://github.com/windmill-labs/windmill/issues/2327)) + ([bda6f1f](https://github.com/windmill-labs/windmill/commit/bda6f1fe5d44a3c1d925c1b8a8e872d9f5fba484)) + +### Bug Fixes + +- add numeric, array and date types + ([#2379](https://github.com/windmill-labs/windmill/issues/2379)) + ([768f972](https://github.com/windmill-labs/windmill/commit/768f972cbf578b3394f89120d172b02bcaac5413)) +- add reserved variables in args + ([#2371](https://github.com/windmill-labs/windmill/issues/2371)) + ([e7165f3](https://github.com/windmill-labs/windmill/commit/e7165f3357a2ba7a690accd78a03c2518aa61860)) +- ai flow prompt fix + explanation in ui + ([#2374](https://github.com/windmill-labs/windmill/issues/2374)) + ([66d15f0](https://github.com/windmill-labs/windmill/commit/66d15f0c17698077c5bf299af8368e9cfdbf3ecb)) +- flow trigger prompt + lower temp + ([#2377](https://github.com/windmill-labs/windmill/issues/2377)) + ([733bfe3](https://github.com/windmill-labs/windmill/commit/733bfe3f14e6eb0237c6a528ab64ae71082a4679)) +- **frontend:** fix flow tutorials + ([#2383](https://github.com/windmill-labs/windmill/issues/2383)) + ([63ad53f](https://github.com/windmill-labs/windmill/commit/63ad53fa70c4f1769d873bff962bfb2d66081163)) +- schema autocomplete/ai + ([#2372](https://github.com/windmill-labs/windmill/issues/2372)) + ([9ed748a](https://github.com/windmill-labs/windmill/commit/9ed748a0dac95f152f91de6e25b63d841af0dd50)) +- trigger bun prompt + ([#2368](https://github.com/windmill-labs/windmill/issues/2368)) + ([fc9adbe](https://github.com/windmill-labs/windmill/commit/fc9adbe56081065fa3de662e664fcebe0f4c25ee)) + +## [1.180.0](https://github.com/windmill-labs/windmill/compare/v1.179.1...v1.180.0) (2023-10-01) + +### Features + +- code content search + ([#2367](https://github.com/windmill-labs/windmill/issues/2367)) + ([fb96059](https://github.com/windmill-labs/windmill/commit/fb960594fce265d5d4f4eb443e0c9cc19d14e025)) + +### Bug Fixes + +- improve connection in apps + ([a2fca17](https://github.com/windmill-labs/windmill/commit/a2fca17ae2ac8257154e2aec4a0ceabfe16fc46a)) + +## [1.179.1](https://github.com/windmill-labs/windmill/compare/v1.179.0...v1.179.1) (2023-09-30) + +### Bug Fixes + +- fix 0 len flow module processing + ([f97289a](https://github.com/windmill-labs/windmill/commit/f97289a3d8bc6ce978d0be1fec35a424211e4a20)) + +## [1.179.0](https://github.com/windmill-labs/windmill/compare/v1.178.1...v1.179.0) (2023-09-30) + +### Features + +- add trustedDependencies escape hatch for bun + ([#2364](https://github.com/windmill-labs/windmill/issues/2364)) + ([52df265](https://github.com/windmill-labs/windmill/commit/52df2650ea5d5c03e94c96af0b8a79275856fc37)) +- ai code completion + ([#2361](https://github.com/windmill-labs/windmill/issues/2361)) + ([0937706](https://github.com/windmill-labs/windmill/commit/093770692ac40b8ee0139f24d63bcccda9bf6ddb)) +- **backend:** parse expires_in from string in TokenResponse + ([#2353](https://github.com/windmill-labs/windmill/issues/2353)) + ([4621915](https://github.com/windmill-labs/windmill/commit/46219154de07ef5a6e071f1c2859cea35c7f9943)) +- **frontend:** copy schema from json and past runs in flow inputs + ([#2352](https://github.com/windmill-labs/windmill/issues/2352)) + ([3cb2977](https://github.com/windmill-labs/windmill/commit/3cb29778dd70199d9504aa7c1a12bfd7a02569d6)) + +### Bug Fixes + +- error handler does not recover flow anymore and error handler is called only + once up the flow + ([445bf96](https://github.com/windmill-labs/windmill/commit/445bf965eddc6da39a125fce60b53e0903698664)) +- **frontend:** Properly handle click + ([#2351](https://github.com/windmill-labs/windmill/issues/2351)) + ([55b7f98](https://github.com/windmill-labs/windmill/commit/55b7f982c2bbbb5d4daa9752ec8ffc0c79c374fc)) +- **frontend:** timezone fix + ([#2360](https://github.com/windmill-labs/windmill/issues/2360)) + ([dcfa5fc](https://github.com/windmill-labs/windmill/commit/dcfa5fc0e40f5cd8dba5a26be31695ce765c7e23)) +- improve superadmin settings page + ([b029027](https://github.com/windmill-labs/windmill/commit/b029027c1c75c0b6489966371db7d2f9c99d15f8)) +- non skipped failures stop even in presence of an error handler + ([1c5cc0c](https://github.com/windmill-labs/windmill/commit/1c5cc0c237101caf6c5e6e34b11c967a27cd4112)) +- remove shared http clients in rest runtime + ([4931ed9](https://github.com/windmill-labs/windmill/commit/4931ed95c4b12f63effa1dd7d6a5cd526a612302)) + +## [1.178.1](https://github.com/windmill-labs/windmill/compare/v1.178.0...v1.178.1) (2023-09-28) + +### Bug Fixes + +- improve license key check + ([035bad5](https://github.com/windmill-labs/windmill/commit/035bad5268d182af3f30915b5356defd7f6ccbc0)) + +## [1.178.0](https://github.com/windmill-labs/windmill/compare/v1.177.1...v1.178.0) (2023-09-28) + +### Features + +- **frontend:** add app groups management + ([#2347](https://github.com/windmill-labs/windmill/issues/2347)) + ([20e0427](https://github.com/windmill-labs/windmill/commit/20e0427a1303c1c32f41b198cd2d0f7f28b5bd32)) +- **frontend:** add AppDrawer controls + ([#2339](https://github.com/windmill-labs/windmill/issues/2339)) + ([3de6d44](https://github.com/windmill-labs/windmill/commit/3de6d446f281dcaac288deee19342a08e0ccf9af)) +- **frontend:** Switch to component list when deleting a component + ([#2346](https://github.com/windmill-labs/windmill/issues/2346)) + ([6fcd72c](https://github.com/windmill-labs/windmill/commit/6fcd72c79453dd9d60ca869cd9996cc0c25971fa)) + +### Bug Fixes + +- add env tags to default worker group + ([#2348](https://github.com/windmill-labs/windmill/issues/2348)) + ([f5bed95](https://github.com/windmill-labs/windmill/commit/f5bed95ab15bc397f822b06816c43b4b13a84af3)) + +## [1.177.1](https://github.com/windmill-labs/windmill/compare/v1.177.0...v1.177.1) (2023-09-26) + +### Bug Fixes + +- **frontend:** fix modal closing issues + ([#2340](https://github.com/windmill-labs/windmill/issues/2340)) + ([18cf8fa](https://github.com/windmill-labs/windmill/commit/18cf8faec16d496e4b327505b682459ed518a5b4)) +- **frontend:** fix overflow + ([#2341](https://github.com/windmill-labs/windmill/issues/2341)) + ([2e8f2ec](https://github.com/windmill-labs/windmill/commit/2e8f2ec724f6802170121f4f8aa73b697a39c9ee)) +- improve list component handling of non array data + ([dc44b08](https://github.com/windmill-labs/windmill/commit/dc44b0841af17227160b9d56ec446e6646a8ab0d)) + +## [1.177.0](https://github.com/windmill-labs/windmill/compare/v1.176.0...v1.177.0) (2023-09-26) + +### Features + +- add custom oauth support + ([#2336](https://github.com/windmill-labs/windmill/issues/2336)) + ([01277f4](https://github.com/windmill-labs/windmill/commit/01277f4d3b8bb04b955d5bbb2ed69c1c7c8f4f9e)) +- support automatic reconnection to pg + ([ccaa05d](https://github.com/windmill-labs/windmill/commit/ccaa05d4bf5954c3fb8678239d2962cac6550a5a)) + +### Bug Fixes + +- fix resource type picker object reinitialization + ([f0f15c4](https://github.com/windmill-labs/windmill/commit/f0f15c47cb35cc1e3cfa13549465803a1e970770)) +- **frontend:** Fix build + ([#2330](https://github.com/windmill-labs/windmill/issues/2330)) + ([46592af](https://github.com/windmill-labs/windmill/commit/46592affd3d51b54632a2a7a281c11141edcb4a5)) +- **frontend:** Fix markdown dark mode + ([#2329](https://github.com/windmill-labs/windmill/issues/2329)) + ([6c19740](https://github.com/windmill-labs/windmill/commit/6c197407185810f43c47d4107007bd69814a1d65)) +- set min size of components to 1 + ([d298093](https://github.com/windmill-labs/windmill/commit/d298093e29bd9983c7631a8f8c80e47b768bb93c)) + +## [1.176.0](https://github.com/windmill-labs/windmill/compare/v1.175.0...v1.176.0) (2023-09-24) + +### Features + +- add license key as superadmin setting + ([#2321](https://github.com/windmill-labs/windmill/issues/2321)) + ([304a259](https://github.com/windmill-labs/windmill/commit/304a2596fd29fbd9a79c5cf9fe4df7b44d5c5254)) +- add running filter + ([ea364ad](https://github.com/windmill-labs/windmill/commit/ea364ad9602647cbc9e8ee78fb5f17f0012105f6)) +- ai flow trigger menu + ([#2317](https://github.com/windmill-labs/windmill/issues/2317)) + ([95194ab](https://github.com/windmill-labs/windmill/commit/95194abeacc42416174ee9dd79b75f2204a40d33)) +- improved dedicated benchmarks + buffer fix + ([#2313](https://github.com/windmill-labs/windmill/issues/2313)) + ([fc93c2a](https://github.com/windmill-labs/windmill/commit/fc93c2a7cece95c00070a3a3391ae2bcb4513e85)) +- set instance settings from UI + ([#2314](https://github.com/windmill-labs/windmill/issues/2314)) + ([2f0e43b](https://github.com/windmill-labs/windmill/commit/2f0e43bfdbd1e196131f126c83b1d7dd2eea98d8)) + +### Bug Fixes + +- add ability to test this step for flow step + ([3585929](https://github.com/windmill-labs/windmill/commit/3585929bb758b0cfc2cbe43f66597b184e7b8ee0)) +- benchmark worker tags + ([#2319](https://github.com/windmill-labs/windmill/issues/2319)) + ([481bcd5](https://github.com/windmill-labs/windmill/commit/481bcd53cb07e4520d5fd81572cad74340c4eb64)) +- change cache implementation to remove async-timer + ([4911b4b](https://github.com/windmill-labs/windmill/commit/4911b4b3fd6e3a9f6bccc4c8712b736e18dcb6e1)) +- fix upto preview issue with nested flows + ([6492ff6](https://github.com/windmill-labs/windmill/commit/6492ff627a800832e12a31fd89a6070703988eb9)) +- flow steps appears in all static inputs + ([c043847](https://github.com/windmill-labs/windmill/commit/c0438479aa3b6dc6349df01abdd9dcc434fe8781)) +- optimize performance for bun scripts without deps + ([5b33f56](https://github.com/windmill-labs/windmill/commit/5b33f563e6e83605ae72338af351dcc97beb1a55)) +- overflow on workspace script picker + ([5e4db0e](https://github.com/windmill-labs/windmill/commit/5e4db0ebab616305928cfa455af6833335e0fcf9)) +- tag id as flow + ([#2318](https://github.com/windmill-labs/windmill/issues/2318)) + ([f68cee4](https://github.com/windmill-labs/windmill/commit/f68cee4ebddbf6e774f80e91a8c89fb8dc213f91)) + +## [1.175.0](https://github.com/windmill-labs/windmill/compare/v1.174.0...v1.175.0) (2023-09-19) + +### Features + +- add batch jobs + ([#2306](https://github.com/windmill-labs/windmill/issues/2306)) + ([5867e5d](https://github.com/windmill-labs/windmill/commit/5867e5d0f80fd515fab165659831b5ee9a8c3f97)) +- add dediacted worker env var + ([#2296](https://github.com/windmill-labs/windmill/issues/2296)) + ([e0c6eee](https://github.com/windmill-labs/windmill/commit/e0c6eee16e535b3a7d803a7978e463404f5fec30)) +- dedicated benchmarks + ([#2297](https://github.com/windmill-labs/windmill/issues/2297)) + ([c549239](https://github.com/windmill-labs/windmill/commit/c5492396843ddd9143ffe890696d0317c970de36)) +- **frontend:** Add component control doc + ([#2295](https://github.com/windmill-labs/windmill/issues/2295)) + ([26f8863](https://github.com/windmill-labs/windmill/commit/26f88636f0b972d4fe4931ed02135c38b27a56d2)) +- suggest adding openai key on workspace creation + ([a6b3b2f](https://github.com/windmill-labs/windmill/commit/a6b3b2f63b317825a3d80218cbb606b9f610c221)) +- support pinned versions for bun in deployed scripts + ([03806dc](https://github.com/windmill-labs/windmill/commit/03806dc3907cba724be14acb6aadf5be6e35cdb6)) + +### Bug Fixes + +- add HOME to bun and deno + ([0e3ecc7](https://github.com/windmill-labs/windmill/commit/0e3ecc7d6025c173135f20bacc33a0dc972ec222)) +- add queue_count to metrics + ([9ced883](https://github.com/windmill-labs/windmill/commit/9ced8834a45151c6900b1eb33eca2cff4886a065)) +- ai improve prompts + ([#2310](https://github.com/windmill-labs/windmill/issues/2310)) + ([b647213](https://github.com/windmill-labs/windmill/commit/b647213b2c968b0cb1f90c97d94e8023c415dd55)) +- **frontend:** add missing key + ([#2299](https://github.com/windmill-labs/windmill/issues/2299)) + ([39d2467](https://github.com/windmill-labs/windmill/commit/39d24672ddd696372e55e9b4566f322a322385a8)) +- **frontend:** Always mount components + ([#2309](https://github.com/windmill-labs/windmill/issues/2309)) + ([34f94aa](https://github.com/windmill-labs/windmill/commit/34f94aa50e92254114c046fa8b7e900d93807937)) +- **frontend:** fix alignment + ([#2307](https://github.com/windmill-labs/windmill/issues/2307)) + ([f9fc6f1](https://github.com/windmill-labs/windmill/commit/f9fc6f19482e68c9ccba0014879fd8761662c36a)) +- **frontend:** Fix rich result styling + add title and hideDetails config + ([#2294](https://github.com/windmill-labs/windmill/issues/2294)) + ([732daef](https://github.com/windmill-labs/windmill/commit/732daef1c3515f7df3e09deac691bb585f9859cd)) +- **frontend:** fix tab styling + component bg + ([#2308](https://github.com/windmill-labs/windmill/issues/2308)) + ([5e773d3](https://github.com/windmill-labs/windmill/commit/5e773d386343f003425173207c166e3c4eeef956)) +- **frontend:** fix theme make default + ([#2304](https://github.com/windmill-labs/windmill/issues/2304)) + ([4629819](https://github.com/windmill-labs/windmill/commit/46298197c5333a81b9b8a004027ab9a856bdada4)) +- **frontend:** fix theme UI + ([#2305](https://github.com/windmill-labs/windmill/issues/2305)) + ([576f76b](https://github.com/windmill-labs/windmill/commit/576f76b1ffe9c50c8ccaca8c5e34d0ec03aebf3f)) +- validate more strongly usernames + ([47094bb](https://github.com/windmill-labs/windmill/commit/47094bb8d1c6f4ba621d42515dede061fd04afdd)) + +## [1.174.0](https://github.com/windmill-labs/windmill/compare/v1.173.0...v1.174.0) (2023-09-15) + +### Features + +- ai gen support all langs + ([#2276](https://github.com/windmill-labs/windmill/issues/2276)) + ([39590b3](https://github.com/windmill-labs/windmill/commit/39590b3d2592b2d08117c0f70829c13f1efb4885)) +- bun absolute/relative imports + tests + ([#2286](https://github.com/windmill-labs/windmill/issues/2286)) + ([e5ce85b](https://github.com/windmill-labs/windmill/commit/e5ce85b9affe665342f24b1d39ce3d03db09b941)) +- **frontend:** Global CSS editor + ([#2178](https://github.com/windmill-labs/windmill/issues/2178)) + ([7e9ee39](https://github.com/windmill-labs/windmill/commit/7e9ee39aa69bc31766b5e4f4aab498c8f14067cd)) + +## [1.173.0](https://github.com/windmill-labs/windmill/compare/v1.172.1...v1.173.0) (2023-09-14) + +### Features + +- cli sync on windows + ([#2283](https://github.com/windmill-labs/windmill/issues/2283)) + ([c371cb3](https://github.com/windmill-labs/windmill/commit/c371cb397ab3d0c534e2c553d1dfb1ad5176d2a6)) + +### Bug Fixes + +- accept jobs whose duration > 24 days + ([2c00894](https://github.com/windmill-labs/windmill/commit/2c00894122aa8caee59b20625935284de6902950)) + +## [1.172.1](https://github.com/windmill-labs/windmill/compare/v1.172.0...v1.172.1) (2023-09-14) + +### Bug Fixes + +- improve splitpane + improve deleting conditional tab + ([1629008](https://github.com/windmill-labs/windmill/commit/1629008eb2eb48ff9cc2cf6b3a351efcf682244d)) +- update to svelte 4 + ([#2280](https://github.com/windmill-labs/windmill/issues/2280)) + ([90c10d8](https://github.com/windmill-labs/windmill/commit/90c10d803b4c47a9e1ac5b9e49e2a614344299a9)) + +## [1.172.0](https://github.com/windmill-labs/windmill/compare/v1.171.0...v1.172.0) (2023-09-13) + +### Features + +- improve ai flow + ([#2270](https://github.com/windmill-labs/windmill/issues/2270)) + ([b23417a](https://github.com/windmill-labs/windmill/commit/b23417ab5b9938bbdf9db6449102760ff8c80152)) +- worker groups admin panel + ([#2277](https://github.com/windmill-labs/windmill/issues/2277)) + ([070b162](https://github.com/windmill-labs/windmill/commit/070b16222bc666866284180b3878f4d4f27bfa85)) + +### Bug Fixes + +- ai flow nits ([#2272](https://github.com/windmill-labs/windmill/issues/2272)) + ([8f6f46d](https://github.com/windmill-labs/windmill/commit/8f6f46de199d58133b9faa77cdbcbcfd6cb962f7)) + +## [1.171.0](https://github.com/windmill-labs/windmill/compare/v1.170.0...v1.171.0) (2023-09-12) + +### Features + +- attempt to SIGTERM before SIGKILL for bash + ([f40bbba](https://github.com/windmill-labs/windmill/commit/f40bbba519a97cbb1ec142c335f038dbebcd4e7c)) +- zero copy result for job result + ([#2263](https://github.com/windmill-labs/windmill/issues/2263)) + ([22a7da5](https://github.com/windmill-labs/windmill/commit/22a7da58b1d20721892906cba2dee6fbeb1cc1fd)) + +### Bug Fixes + +- 2257 TIME convertion in pg_executor.rs + ([#2267](https://github.com/windmill-labs/windmill/issues/2267)) + ([3d71253](https://github.com/windmill-labs/windmill/commit/3d71253abdb0dff1670a796d07a53ecd0a98414e)) +- fix field duplicate in app background settings + ([164cdaf](https://github.com/windmill-labs/windmill/commit/164cdaf09464646dee4e70a699222a454eb0d898)) +- improve bun lockfile resolution + ([9103ec4](https://github.com/windmill-labs/windmill/commit/9103ec445db81395a5851202eecb87301d0b4987)) +- remove result and args from list completed and list queue jobs + ([e7e63e1](https://github.com/windmill-labs/windmill/commit/e7e63e111a73e0986050a8fe7fdc18784ba902b0)) + +## [1.170.0](https://github.com/windmill-labs/windmill/compare/v1.169.0...v1.170.0) (2023-09-08) + +### Features + +- display jobs currently waiting for a worker + ([3c950c0](https://github.com/windmill-labs/windmill/commit/3c950c03de0bc71974eb29985381adba8c098660)) +- snowflake schema explorer + refactoring + ([#2260](https://github.com/windmill-labs/windmill/issues/2260)) + ([5cca583](https://github.com/windmill-labs/windmill/commit/5cca5833e94fc4c8a80e210164da09f2a1ceb677)) + +### Bug Fixes + +- fix get_result for python-client + ([fe41f4f](https://github.com/windmill-labs/windmill/commit/fe41f4ff4ce596cf394bd69a0ba48e88db8d2328)) + +## [1.169.0](https://github.com/windmill-labs/windmill/compare/v1.168.3...v1.169.0) (2023-09-08) + +### Features + +- benchmarks graph + ([#2244](https://github.com/windmill-labs/windmill/issues/2244)) + ([c496602](https://github.com/windmill-labs/windmill/commit/c496602e9e2e0dfecaaffe731e58e551d039d02f)) +- big query schema explorer + ([#2247](https://github.com/windmill-labs/windmill/issues/2247)) + ([ec7d923](https://github.com/windmill-labs/windmill/commit/ec7d923cca0f6050855473ababd1bb27d668711b)) +- flow copilot ([#2219](https://github.com/windmill-labs/windmill/issues/2219)) + ([2f3138c](https://github.com/windmill-labs/windmill/commit/2f3138c65d9d3f0161bf3e069c6eec0c32ac3b86)) +- **frontend:** fix runs page when the row has a parent + ([#2255](https://github.com/windmill-labs/windmill/issues/2255)) + ([2271263](https://github.com/windmill-labs/windmill/commit/22712632f683fb63ad6d4b475a01c63800a9559d)) +- introduce container groups + ([49c5553](https://github.com/windmill-labs/windmill/commit/49c5553f3b496c2aaf03376689ee0fd42ecbd2bf)) + +### Bug Fixes + +- benchmark svg ([#2249](https://github.com/windmill-labs/windmill/issues/2249)) + ([24c5802](https://github.com/windmill-labs/windmill/commit/24c580211572d6447ca502db141e90c5e084d790)) +- pass TZ from env to runtimes + ([75a1490](https://github.com/windmill-labs/windmill/commit/75a149009a5a13230b4d6de6eac8bba0618629d6)) + +## [1.168.3](https://github.com/windmill-labs/windmill/compare/v1.168.2...v1.168.3) (2023-09-07) + +### Bug Fixes + +- add list resource types names + ([fbbab5c](https://github.com/windmill-labs/windmill/commit/fbbab5c874748547a9ff3e58c1b7b22c90766f4f)) +- add stable ids to rows in AppTable + ([0c91581](https://github.com/windmill-labs/windmill/commit/0c91581fcdf3a141f36e34610935aa100fcfee52)) +- reduce aggregate period to list users in workspace + ([6bc0e37](https://github.com/windmill-labs/windmill/commit/6bc0e373fc6088636f09d217e8800a32337291ea)) + +## [1.168.2](https://github.com/windmill-labs/windmill/compare/v1.168.1...v1.168.2) (2023-09-06) + +### Bug Fixes + +- fix sqlx build + ([64e7fb5](https://github.com/windmill-labs/windmill/commit/64e7fb56e41b45bc2476d0e98fa99dcbc355cfe0)) + +## [1.168.1](https://github.com/windmill-labs/windmill/compare/v1.168.0...v1.168.1) (2023-09-06) + +### Bug Fixes + +- fix sqlx build + ([92c8146](https://github.com/windmill-labs/windmill/commit/92c8146a5778290b5a76c2ea5685f95b85be2e38)) + +## [1.168.0](https://github.com/windmill-labs/windmill/compare/v1.167.0...v1.168.0) (2023-09-06) + +### Features + +- dedicated workers for native-throughput performance (EE only) + ([#2239](https://github.com/windmill-labs/windmill/issues/2239)) + ([c80f155](https://github.com/windmill-labs/windmill/commit/c80f155602eca972842be7bd560395a06e4e0ae6)) + +### Bug Fixes + +- **frontend:** add virtual list + ([#2218](https://github.com/windmill-labs/windmill/issues/2218)) + ([e4c896b](https://github.com/windmill-labs/windmill/commit/e4c896b4b9f28b2fa219be249a2794faf3f1b7d0)) + +## [1.167.1](https://github.com/windmill-labs/windmill/compare/v1.167.0...v1.167.1) (2023-09-05) + +### Bug Fixes + +- **frontend:** add virtual list + ([#2218](https://github.com/windmill-labs/windmill/issues/2218)) + ([e4c896b](https://github.com/windmill-labs/windmill/commit/e4c896b4b9f28b2fa219be249a2794faf3f1b7d0)) + +## [1.167.0](https://github.com/windmill-labs/windmill/compare/v1.166.1...v1.167.0) (2023-09-04) + +### Features + +- submit result in background thread (unify architecture for dedicated worker) + ([#2226](https://github.com/windmill-labs/windmill/issues/2226)) + ([dff1cd9](https://github.com/windmill-labs/windmill/commit/dff1cd9a64f755f239eb57599c104c47f4d33b12)) + +### Bug Fixes + +- **cli:** prioritize correctly content file to resolve for ts types + ([2906d53](https://github.com/windmill-labs/windmill/commit/2906d535a126f4fe2cfe6dffda46e5fe841056da)) + +## [1.166.1](https://github.com/windmill-labs/windmill/compare/v1.166.0...v1.166.1) (2023-09-03) + +### Bug Fixes + +- fix setting is ready for s3 workers + ([b0ed0f9](https://github.com/windmill-labs/windmill/commit/b0ed0f964843247d11ecfe586f1565589df95ff6)) + +## [1.166.0](https://github.com/windmill-labs/windmill/compare/v1.165.0...v1.166.0) (2023-09-03) + +### Features + +- **frontend:** App stepper debug + ([#2202](https://github.com/windmill-labs/windmill/issues/2202)) + ([77f8eac](https://github.com/windmill-labs/windmill/commit/77f8eac21e0edfa1eada617d78a498a3a6ae1dce)) + +### Bug Fixes + +- fix datetime handling for python + ([b35ffd4](https://github.com/windmill-labs/windmill/commit/b35ffd435de97ed34fcda69490abd734ea3229fa)) +- **frontend:** Fix App Modal z-index + ([#2210](https://github.com/windmill-labs/windmill/issues/2210)) + ([9787edb](https://github.com/windmill-labs/windmill/commit/9787edb67c329265bf179fe304d00cdc1df7042e)) +- see run detail in a new tab + ([719a7b1](https://github.com/windmill-labs/windmill/commit/719a7b11da81f68452ba9fc22ff456fe1ddde1de)) +- update wmill python generator thus updating windmill-api + ([f912f1d](https://github.com/windmill-labs/windmill/commit/f912f1de86e91c5cdbc0012e2362467c4965936a)) + +### Performance Improvements + +- improve queue performance + ([#2222](https://github.com/windmill-labs/windmill/issues/2222)) + ([069e2d1](https://github.com/windmill-labs/windmill/commit/069e2d18d586aa3d407e3b089d1ad94b2b838af0)) + +## [1.165.0](https://github.com/windmill-labs/windmill/compare/v1.164.0...v1.165.0) (2023-08-31) + +### Features + +- improve queue performance when queue grows large + ([ada88a2](https://github.com/windmill-labs/windmill/commit/ada88a2bf94fec71187bbdb210065de43d4cd3fb)) +- support partial go dependency pinning + ([41107c7](https://github.com/windmill-labs/windmill/commit/41107c7cfa7b56099a9c8b08cfb16ff3cf840ff2)) + +### Bug Fixes + +- uniformize that all job links specify the workspace + ([d311d76](https://github.com/windmill-labs/windmill/commit/d311d76557432a72a5d6d7ab010aeb1fe0e599de)) + +## [1.164.0](https://github.com/windmill-labs/windmill/compare/v1.163.1...v1.164.0) (2023-08-31) + +### Features + +- add workspace variable to worker tag + ([276cd6d](https://github.com/windmill-labs/windmill/commit/276cd6dac39b7cb181ac46e3edea79a3a3bcff8d)) + +### Bug Fixes + +- **frontend:** allow using Docker in Flow + ([#2201](https://github.com/windmill-labs/windmill/issues/2201)) + ([bb749c1](https://github.com/windmill-labs/windmill/commit/bb749c14f877f7cb1e8642b881a00aedfeb08f7d)) + +## [1.163.1](https://github.com/windmill-labs/windmill/compare/v1.163.0...v1.163.1) (2023-08-30) + +### Bug Fixes + +- avoid perpetual spinning of recompute all component + ([11e1ecb](https://github.com/windmill-labs/windmill/commit/11e1ecbcda92f5ab643b776094ef10005d51b579)) + +## [1.163.0](https://github.com/windmill-labs/windmill/compare/v1.162.2...v1.163.0) (2023-08-30) + +### Features + +- add global cache configuration + ([7c5ea56](https://github.com/windmill-labs/windmill/commit/7c5ea569a8102ef052d42216e2ff8d4c3169a7a5)) + +### Bug Fixes + +- fix cyclical loop in apps + ([61df339](https://github.com/windmill-labs/windmill/commit/61df339343767e63cbe7a4e75f1fd4f848dbd7e0)) + +## [1.162.2](https://github.com/windmill-labs/windmill/compare/v1.162.1...v1.162.2) (2023-08-29) + +### Bug Fixes + +- fix incorrect bump + ([4704899](https://github.com/windmill-labs/windmill/commit/4704899a81cb281b99949c934184e23b199b2ed8)) + +## [1.162.1](https://github.com/windmill-labs/windmill/compare/v1.162.0...v1.162.1) (2023-08-29) + +### Bug Fixes + +- fix deps incompatibilities + ([6c5a8a3](https://github.com/windmill-labs/windmill/commit/6c5a8a3613b4608e6d2b57e7f40cd4ab2d1af9ae)) + +## [1.162.0](https://github.com/windmill-labs/windmill/compare/v1.161.0...v1.162.0) (2023-08-29) + +### Features + +- add cache to inline scripts + ([bf0014c](https://github.com/windmill-labs/windmill/commit/bf0014c387361ce358d31c7cbc44a9c4c97606df)) +- add caching to flows and scripts + ([#2193](https://github.com/windmill-labs/windmill/issues/2193)) + ([03e48a4](https://github.com/windmill-labs/windmill/commit/03e48a4ca557cd2c385988d3a935cea38bc6e81e)) +- **frontend:** Filter runs by user + ([#2187](https://github.com/windmill-labs/windmill/issues/2187)) + ([095969f](https://github.com/windmill-labs/windmill/commit/095969f125e9186cb4f02f75e914ef9a70e3abc4)) + +### Bug Fixes + +- add setState, getState to client + ([67f868f](https://github.com/windmill-labs/windmill/commit/67f868f08ed10f3f7c185af67bff7080c339e974)) +- relative imports in deno + ([30ea354](https://github.com/windmill-labs/windmill/commit/30ea354cae91ea040b3112c4138a1e5f0d7ab530)) + +## [1.161.0](https://github.com/windmill-labs/windmill/compare/v1.160.0...v1.161.0) (2023-08-28) + +### Features + +- concurrency limits for flows + ([d0d041f](https://github.com/windmill-labs/windmill/commit/d0d041fde37ceda5e3a04e5da9c87d6b7e5691b3)) +- early stop for flows + ([6354c95](https://github.com/windmill-labs/windmill/commit/6354c95bb74c5d1af838234c0146176a0d3e408e)) +- **frontend:** rework premium plans + ([#2155](https://github.com/windmill-labs/windmill/issues/2155)) + ([272ff63](https://github.com/windmill-labs/windmill/commit/272ff63e4072b4c25a46c133b518649f88b7598e)) + +### Bug Fixes + +- allow deno to --write lock when using lockfiles + ([770a3e8](https://github.com/windmill-labs/windmill/commit/770a3e8835637af1b1e017ecc1675e526ca40345)) +- fix refresh init in presence of app stepper + ([840fbbc](https://github.com/windmill-labs/windmill/commit/840fbbcbb1f969ef3b000f9e50d5c5dde8371995)) + +## [1.160.0](https://github.com/windmill-labs/windmill/compare/v1.159.0...v1.160.0) (2023-08-27) + +### Features + +- add parallelism control to forloops + ([34e2a80](https://github.com/windmill-labs/windmill/commit/34e2a8001afa8bb948bf907383bffbc8aa11901f)) + +## [1.159.0](https://github.com/windmill-labs/windmill/compare/v1.158.2...v1.159.0) (2023-08-27) + +### Features + +- add support for root certificate in postgresql + ([b492fd9](https://github.com/windmill-labs/windmill/commit/b492fd98846ff4b4e073bb41de91dd84f0bd7031)) +- support to set linked secret variable to any field of a newly created resource + ([fe1e419](https://github.com/windmill-labs/windmill/commit/fe1e419fa83db6a9db59aac23490e52cd3649f51)) + +### Bug Fixes + +- canceling jobs + ([0dfdf8f](https://github.com/windmill-labs/windmill/commit/0dfdf8fa1be88d601f7dbf7b348aaf8a3ae8e2fd)) +- fix app table footer label when -1 + ([24ac1e2](https://github.com/windmill-labs/windmill/commit/24ac1e25ff87eef591e9f766bd0e7991b3668723)) +- operation are redacted instead of username which fix audit logs for non admin + users + ([487d56c](https://github.com/windmill-labs/windmill/commit/487d56cb0fedde47c77cdb7a4b5424b51c4a2e10)) + +## [1.158.2](https://github.com/windmill-labs/windmill/compare/v1.158.1...v1.158.2) (2023-08-26) + +### Bug Fixes + +- expose getResumeUrls in windmill-client + ([3142bc9](https://github.com/windmill-labs/windmill/commit/3142bc932c8ca915b9dda8879d31ef19ecfaa07f)) + +## [1.158.1](https://github.com/windmill-labs/windmill/compare/v1.158.0...v1.158.1) (2023-08-26) + +### Bug Fixes + +- fix windmill-client + ([7defd45](https://github.com/windmill-labs/windmill/commit/7defd451ac847b9824d503d0b7685344221ff564)) + +## [1.158.0](https://github.com/windmill-labs/windmill/compare/v1.157.0...v1.158.0) (2023-08-26) + +### Features + +- add lockfile for deno + use npm module for deno for windmill-client + ([9547a06](https://github.com/windmill-labs/windmill/commit/9547a061da0b80a4bc278ee09a0004d410ec7410)) + +## [1.157.0](https://github.com/windmill-labs/windmill/compare/v1.156.1...v1.157.0) (2023-08-26) + +### Features + +- lock inline scripts for apps on deploy + ([f5121e9](https://github.com/windmill-labs/windmill/commit/f5121e9066e1a93ad6f928daad891a08ae840d81)) + +### Bug Fixes + +- make workspace error handler picker accept any script + ([53976da](https://github.com/windmill-labs/windmill/commit/53976da8ae70de3f8e251564220312541604d77b)) + +## [1.156.1](https://github.com/windmill-labs/windmill/compare/v1.156.0...v1.156.1) (2023-08-25) + +### Bug Fixes + +- fix python client + ([7649a53](https://github.com/windmill-labs/windmill/commit/7649a53f3c792ceba8f2a0fc8535c512b25bf969)) + +## [1.156.0](https://github.com/windmill-labs/windmill/compare/v1.155.0...v1.156.0) (2023-08-24) + +### Features + +- schedule recovery handler + ([#2126](https://github.com/windmill-labs/windmill/issues/2126)) + ([0dcb425](https://github.com/windmill-labs/windmill/commit/0dcb425e4a9cf241ed301f794680b36a7f17cc34)) + +## [1.155.0](https://github.com/windmill-labs/windmill/compare/v1.154.2...v1.155.0) (2023-08-24) + +### Features + +- add templatev2 using new eval + ([13d870f](https://github.com/windmill-labs/windmill/commit/13d870f16370a74fe481a1701eda27109a776c75)) +- eval v2, blazing fast eval triggered only upon the right changes + ([#2164](https://github.com/windmill-labs/windmill/issues/2164)) + ([5207a7a](https://github.com/windmill-labs/windmill/commit/5207a7a6aa1520c987d26d5c1f99f653c1c81cf6)) +- remove connect in favor of eval + ([e7aaa17](https://github.com/windmill-labs/windmill/commit/e7aaa177b72749ca9d0d78c452ec8e47d6514186)) + +### Bug Fixes + +- bump bun to 0.8.0 + ([4825519](https://github.com/windmill-labs/windmill/commit/4825519ac94a4992cf21fbf4a21fbea8038058d9)) +- fix tables not updating inputs on creation + ([a419bc4](https://github.com/windmill-labs/windmill/commit/a419bc41bfadce1ac75383d1824ff9fef3404aad)) +- **frontend:** Fix code display + use async/await in fetch examples + ([#2150](https://github.com/windmill-labs/windmill/issues/2150)) + ([2f9177f](https://github.com/windmill-labs/windmill/commit/2f9177f6cec0a676c774ee426482f55227e6e388)) +- **frontend:** fix copyToClipboard on non-HTTPS site + ([#2046](https://github.com/windmill-labs/windmill/issues/2046)) + ([95ea0e8](https://github.com/windmill-labs/windmill/commit/95ea0e8f87195816dde3f9554b3cb92791b63a37)) +- update go to 1.12.0 and deno to 1.36.2 + ([4317573](https://github.com/windmill-labs/windmill/commit/431757339bbfff6d67f484439d87255acc5c62ff)) +- update python client with by_path methods + ([8a25a86](https://github.com/windmill-labs/windmill/commit/8a25a86e586485e7949bb208fa94db906e983b6c)) + +## [1.154.2](https://github.com/windmill-labs/windmill/compare/v1.154.1...v1.154.2) (2023-08-22) + +### Bug Fixes + +- fix cancel job for flows in some edge cases + ([58bb19a](https://github.com/windmill-labs/windmill/commit/58bb19a4471ce8cfced4b144fca40069b5ce0820)) + +## [1.154.1](https://github.com/windmill-labs/windmill/compare/v1.154.0...v1.154.1) (2023-08-22) + +### Bug Fixes + +- **frontend:** Fix hub navigation + ([#2151](https://github.com/windmill-labs/windmill/issues/2151)) + ([d0ed8f0](https://github.com/windmill-labs/windmill/commit/d0ed8f0fefe3176b9bab621a6b3e9231254504e2)) +- show for-loop settings + ([ab8a27f](https://github.com/windmill-labs/windmill/commit/ab8a27f123fbca187eee3b372d512797f8a03916)) + +## [1.154.0](https://github.com/windmill-labs/windmill/compare/v1.153.0...v1.154.0) (2023-08-21) + +### Features + +- deploy folders as well in the UI deployer + ([bcf5d4e](https://github.com/windmill-labs/windmill/commit/bcf5d4e5d42a7d17e2d1932b030cca101d9de9b4)) + +### Bug Fixes + +- avoid stack-overflow on jsruntime for recursive objects + ([127eea3](https://github.com/windmill-labs/windmill/commit/127eea3c8144b14b8f78a196f5c2cd245d2caad9)) +- do not require auth for OPTIONS requests + ([bdd59c9](https://github.com/windmill-labs/windmill/commit/bdd59c94a9bde10e808427ef529d1b6ab6e78a45)) + +## [1.153.0](https://github.com/windmill-labs/windmill/compare/v1.152.0...v1.153.0) (2023-08-20) + +### Features + +- multiline support in bash + ([e1469cc](https://github.com/windmill-labs/windmill/commit/e1469cc64d672b5fc42edac313bc11a017812511)) + +### Bug Fixes + +- update deno-client to use new Resource and Variable endpoints + ([c13428a](https://github.com/windmill-labs/windmill/commit/c13428ad089999e38768b86bfd251d747759dc69)) + +## [1.152.0](https://github.com/windmill-labs/windmill/compare/v1.151.2...v1.152.0) (2023-08-20) + +### Features + +- handle drift in every time referencing db times + ([b9fb206](https://github.com/windmill-labs/windmill/commit/b9fb206c112798f3776ba0e6da70e86e7c769a1f)) +- prometheus metrics are now ee only + ([2afea50](https://github.com/windmill-labs/windmill/commit/2afea504977f9cd08d62c5f85be1fd2cefe8a691)) + +### Bug Fixes + +- improve progress bar UX + ([85d2d47](https://github.com/windmill-labs/windmill/commit/85d2d4782779d981a131f48db6e1058fe79daeef)) +- reinit retry to undefined in flow steps + ([75f4723](https://github.com/windmill-labs/windmill/commit/75f472381cfa73d77295b29a202efbd58c79918d)) + +## [1.151.2](https://github.com/windmill-labs/windmill/compare/v1.151.1...v1.151.2) (2023-08-18) + +### Bug Fixes + +- **frontend:** Fix app multiselect dark mode + ([#2121](https://github.com/windmill-labs/windmill/issues/2121)) + ([be577e5](https://github.com/windmill-labs/windmill/commit/be577e561dff33a404bb6f29f178b01f20aa0121)) +- **frontend:** Fix JSON pane scroll issues + ([#2123](https://github.com/windmill-labs/windmill/issues/2123)) + ([d367716](https://github.com/windmill-labs/windmill/commit/d367716b0a8198573b26a3c82ac7e4fd9cefe753)) + +## [1.151.1](https://github.com/windmill-labs/windmill/compare/v1.151.0...v1.151.1) (2023-08-18) + +### Bug Fixes + +- at UTC Time + ([0193fcc](https://github.com/windmill-labs/windmill/commit/0193fcc1d7c24147e553a0e3f9f0ab8d6f5d5996)) +- improve flow progress bar + ([67cb451](https://github.com/windmill-labs/windmill/commit/67cb4516c913926c1755e46bc7acf46340fdb692)) +- show help on empty cli args + ([237460b](https://github.com/windmill-labs/windmill/commit/237460b121846d160a40e849bf85fabbb7c14fdc)) + +## [1.151.0](https://github.com/windmill-labs/windmill/compare/v1.150.0...v1.151.0) (2023-08-17) + +### Features + +- **frontend:** Fix workspace switch + always displays confirmation modal on top + of splitpanel separator + ([#2115](https://github.com/windmill-labs/windmill/issues/2115)) + ([eea9ce9](https://github.com/windmill-labs/windmill/commit/eea9ce93b918115e9ed6b951d000049ca66bd5fd)) + +### Bug Fixes + +- fix python get_resource + ([cb00a13](https://github.com/windmill-labs/windmill/commit/cb00a1358d0e47575d8315e70695a9693190f211)) + +## [1.150.0](https://github.com/windmill-labs/windmill/compare/v1.149.0...v1.150.0) (2023-08-17) + +### Features + +- copilot tokens streaming + cancel + ([#2107](https://github.com/windmill-labs/windmill/issues/2107)) + ([82612c3](https://github.com/windmill-labs/windmill/commit/82612c35bd4cd15af21582f9650b615d3e12c06c)) +- graphql custom headers + ([#2111](https://github.com/windmill-labs/windmill/issues/2111)) + ([6733b85](https://github.com/windmill-labs/windmill/commit/6733b8552b1128663c8fb8086c85ad0406d9b999)) + +### Bug Fixes + +- powershell icon + ([#2109](https://github.com/windmill-labs/windmill/issues/2109)) + ([c817af7](https://github.com/windmill-labs/windmill/commit/c817af769457a069617fafb2d3fcf38a85212690)) +- set NETRC at init and not for every job + ([359845f](https://github.com/windmill-labs/windmill/commit/359845fa9dd14e8445cc95e73cc646dce1f45ddb)) +- unify clients to use server-side interpolation to retrieve full resources + ([067908c](https://github.com/windmill-labs/windmill/commit/067908c0b59f1e73222cad0e5f214f3605006ef3)) +- unify clients to use server-side interpolation to retrieve full resources + ([930839a](https://github.com/windmill-labs/windmill/commit/930839aad22eaeee0737f1d057b8cfb538d26d3f)) +- unify clients to use server-side interpolation to retrieve full resources + ([e9c19b5](https://github.com/windmill-labs/windmill/commit/e9c19b5b985c0e03524b2d12b1f26a0e6fdc6e0b)) + +## [1.149.0](https://github.com/windmill-labs/windmill/compare/v1.148.0...v1.149.0) (2023-08-17) + +### Features + +- **frontend:** Add List pagination + add loading state in tables + ([#2096](https://github.com/windmill-labs/windmill/issues/2096)) + ([9b15e40](https://github.com/windmill-labs/windmill/commit/9b15e409a5b902874d0cf1566b57db6fc23a87ec)) + +### Bug Fixes + +- appgrid refresh selected on row on result changes + ([0af264f](https://github.com/windmill-labs/windmill/commit/0af264f6f8d0ff018094b97a2af9fe6f02e6ccfe)) +- fix folder creation if job folder already exist + ([c320ea8](https://github.com/windmill-labs/windmill/commit/c320ea865f1632e517d4c597491517da89ff77e7)) +- fix go envs passing + ([ed6494f](https://github.com/windmill-labs/windmill/commit/ed6494ff7a1f6102eaad8c0052c1ac3f82d4cadf)) +- **frontend:** Fix toast when adding a user + set default vscoode the… + ([#2080](https://github.com/windmill-labs/windmill/issues/2080)) + ([801f2a8](https://github.com/windmill-labs/windmill/commit/801f2a8299956f0debe95bb13faef798a0ea0b08)) + +## [1.148.0](https://github.com/windmill-labs/windmill/compare/v1.147.3...v1.148.0) (2023-08-14) + +### Features + +- add s3 snippets + ([#2052](https://github.com/windmill-labs/windmill/issues/2052)) + ([beb4a00](https://github.com/windmill-labs/windmill/commit/beb4a000e3631a1b0a27a68923361652317aec63)) + +### Bug Fixes + +- allow multiple db schema explorers + ([#2054](https://github.com/windmill-labs/windmill/issues/2054)) + ([e1b4f0a](https://github.com/windmill-labs/windmill/commit/e1b4f0a8328bc62a19e693bac99589711d08d566)) +- **frontend:** Fix Dark mode in the sleep helpbox + ([#2072](https://github.com/windmill-labs/windmill/issues/2072)) + ([c6ef1a6](https://github.com/windmill-labs/windmill/commit/c6ef1a6d4fbe5661f6b9018121e21061952908d0)) +- handle object pat in sig of typescript + ([1d8213a](https://github.com/windmill-labs/windmill/commit/1d8213a25ba90f3d4af952e03c74196f8ce908ab)) +- remove ansi codes from result + ([#2069](https://github.com/windmill-labs/windmill/issues/2069)) + ([a3fa174](https://github.com/windmill-labs/windmill/commit/a3fa174cd46ce1bd67a69f7781dbdfa0719d3d06)) +- script fix no resource + error handling + ([#2053](https://github.com/windmill-labs/windmill/issues/2053)) + ([00b1afb](https://github.com/windmill-labs/windmill/commit/00b1afb1c90773408d1dc3233a25fa93e24d4da0)) + +## [1.147.3](https://github.com/windmill-labs/windmill/compare/v1.147.2...v1.147.3) (2023-08-13) + +### Bug Fixes + +- **bun:** correctly handle empty deps script bun to deploy + ([46b25f9](https://github.com/windmill-labs/windmill/commit/46b25f9b550f5f8e804cabeeeb575daea46cba31)) + +## [1.147.2](https://github.com/windmill-labs/windmill/compare/v1.147.1...v1.147.2) (2023-08-13) + +### Bug Fixes + +- **bun:** add npm type acquisition + ([3284245](https://github.com/windmill-labs/windmill/commit/32842457fef73f654ca89c3a232265927cf40961)) + +## [1.147.1](https://github.com/windmill-labs/windmill/compare/v1.147.0...v1.147.1) (2023-08-13) + +### Bug Fixes + +- **bun:** only install -p dependencies + ([23164c8](https://github.com/windmill-labs/windmill/commit/23164c83494ee6f42e77b181de0df26b4fba22dc)) +- **bun:** only install when requirements are missing if using nsjail + ([3bc1050](https://github.com/windmill-labs/windmill/commit/3bc1050258bd7a9ba2be739144260037d2274b87)) + +## [1.147.0](https://github.com/windmill-labs/windmill/compare/v1.146.1...v1.147.0) (2023-08-13) + +### Features + +- add lsp to bun and remove experimental status + ([891c9dc](https://github.com/windmill-labs/windmill/commit/891c9dc266edea4f5239f1a82c884437b7df89e4)) + +## [1.146.1](https://github.com/windmill-labs/windmill/compare/v1.146.0...v1.146.1) (2023-08-13) + +### Bug Fixes + +- **bun:** windmill-client does not require set to be initalized + ([993a145](https://github.com/windmill-labs/windmill/commit/993a14502fb16387b174d1af19c87d3ae65c317c)) +- enable bun to do resolution as fallback to allow specifier + ([9c97828](https://github.com/windmill-labs/windmill/commit/9c978281cdbfefa7d11213a181ffcbfdfac8115e)) +- powershell escape backticks + ([#2044](https://github.com/windmill-labs/windmill/issues/2044)) + ([cddef1a](https://github.com/windmill-labs/windmill/commit/cddef1a50a48e7cb60a69762a579b95e0018aa17)) +- really use bun in flow builder + ([#2045](https://github.com/windmill-labs/windmill/issues/2045)) + ([c2281ef](https://github.com/windmill-labs/windmill/commit/c2281ef5da7aa0222e70c5f6ca91d066d79d3862)) + +## [1.146.0](https://github.com/windmill-labs/windmill/compare/v1.145.3...v1.146.0) (2023-08-12) + +### Features + +- respect lockfiles for bun + ([2ba132b](https://github.com/windmill-labs/windmill/commit/2ba132bd05fc1b01e6de19ac13e98100f55f8895)) + +### Bug Fixes + +- fix array static input editor initialization + ([4dcf7ae](https://github.com/windmill-labs/windmill/commit/4dcf7ae088d336171d58aa8914c6b58ec522cc14)) + +## [1.145.3](https://github.com/windmill-labs/windmill/compare/v1.145.2...v1.145.3) (2023-08-11) + +### Bug Fixes + +- fix bun client + ([611d42d](https://github.com/windmill-labs/windmill/commit/611d42db2caa7cf366d7c67ee1434d8de2be8a97)) + +## [1.145.2](https://github.com/windmill-labs/windmill/compare/v1.145.1...v1.145.2) (2023-08-11) + +### Bug Fixes + +- **bun:** remove need for manual setClient + ([4794bd0](https://github.com/windmill-labs/windmill/commit/4794bd0b60268db7c679b2faa2692f6fceb5769f)) + +## [1.145.1](https://github.com/windmill-labs/windmill/compare/v1.145.0...v1.145.1) (2023-08-11) + +### Bug Fixes + +- sqlx build + ([169c413](https://github.com/windmill-labs/windmill/commit/169c413c8d0519e7c11d4d0847585aff59da23e5)) + +## [1.145.0](https://github.com/windmill-labs/windmill/compare/v1.144.4...v1.145.0) (2023-08-11) + +### Features + +- add native powershell support + ([#2025](https://github.com/windmill-labs/windmill/issues/2025)) + ([8a1f9a7](https://github.com/windmill-labs/windmill/commit/8a1f9a7c6aadf735f3d6f118fbc8a344a675ec6a)) +- **frontend:** Runs rework v2 + ([#2012](https://github.com/windmill-labs/windmill/issues/2012)) + ([7d88a2d](https://github.com/windmill-labs/windmill/commit/7d88a2d13ade2265532a222ca2b0e804bd3b2e02)) +- migrate state path to new schema + ([de8a727](https://github.com/windmill-labs/windmill/commit/de8a7279b644cd1eb7999b9da2900b760acd7297)) + +### Bug Fixes + +- **frontend:** Fix lagging issues when resizing + ([#2027](https://github.com/windmill-labs/windmill/issues/2027)) + ([c2a92b6](https://github.com/windmill-labs/windmill/commit/c2a92b69ef0b5acacbda38261e654fe7d7cf36f6)) +- **frontend:** Handle invalid string defaults for date values. + ([#2033](https://github.com/windmill-labs/windmill/issues/2033)) + ([7cdd6db](https://github.com/windmill-labs/windmill/commit/7cdd6db3feeb99a0055ab187348aabfc7a979915)) +- modify snake case numbers resource types + ([#2029](https://github.com/windmill-labs/windmill/issues/2029)) + ([a4ba4af](https://github.com/windmill-labs/windmill/commit/a4ba4af478d2cebf1b4840091446be65f2f9d224)) +- restrict furthermore when the summary is transformed into a path + ([2de4192](https://github.com/windmill-labs/windmill/commit/2de4192cac84336e0b812862b7dca3769a0ba4fc)) +- sync dark-mode icon across multiple renders + ([#2024](https://github.com/windmill-labs/windmill/issues/2024)) + ([27a8e52](https://github.com/windmill-labs/windmill/commit/27a8e526f79c6b0d7e0d8f8ceb34d4355b5df46b)) + +## [1.144.4](https://github.com/windmill-labs/windmill/compare/v1.144.3...v1.144.4) (2023-08-10) + +### Bug Fixes + +- revert monaco update + ([785e172](https://github.com/windmill-labs/windmill/commit/785e172e6eb83c107cad2c843a15234a6c6f9f6b)) + +## [1.144.3](https://github.com/windmill-labs/windmill/compare/v1.144.2...v1.144.3) (2023-08-10) + +### Bug Fixes + +- fix monaco initialize api error + ([fb64ba0](https://github.com/windmill-labs/windmill/commit/fb64ba034442fa52ecf2fb88c8974ba184b58ef9)) +- revert monaco update + ([f4de5ea](https://github.com/windmill-labs/windmill/commit/f4de5ea436b2bdf8c92e27ce43f684116f47d1ff)) + +## [1.144.2](https://github.com/windmill-labs/windmill/compare/v1.144.1...v1.144.2) (2023-08-09) + +### Bug Fixes + +- make path changeable even if linked to summary + ([f3b674a](https://github.com/windmill-labs/windmill/commit/f3b674acd1a0e76c12c321fa7d9d131716622ae5)) + +## [1.144.1](https://github.com/windmill-labs/windmill/compare/v1.144.0...v1.144.1) (2023-08-09) + +### Bug Fixes + +- make path changeable even if linked to summary + ([003da78](https://github.com/windmill-labs/windmill/commit/003da78a46cce3a3376e375a74b9e5f31f4b6256)) + +## [1.144.0](https://github.com/windmill-labs/windmill/compare/v1.143.0...v1.144.0) (2023-08-09) + +### Features + +- add graphql support + ([#2014](https://github.com/windmill-labs/windmill/issues/2014)) + ([e4534d2](https://github.com/windmill-labs/windmill/commit/e4534d2dc329d307ca7690ab58bf3b063ad81539)) +- **frontend:** Add disable prop to App Toggles + ([#2010](https://github.com/windmill-labs/windmill/issues/2010)) + ([40c86e4](https://github.com/windmill-labs/windmill/commit/40c86e4f4b5a511fc8059051f326e930f9bc7839)) +- implement binary caching for go + ([933021a](https://github.com/windmill-labs/windmill/commit/933021ad8d1d7cf70f9b3f56e1671046675dec3c)) +- v0 of relative imports in bun + ([383793f](https://github.com/windmill-labs/windmill/commit/383793f7991ff4c1024e1b86b418f01f2557d5e0)) + +### Bug Fixes + +- **frontend:** Fix flow preview + ([#2013](https://github.com/windmill-labs/windmill/issues/2013)) + ([0b8d37a](https://github.com/windmill-labs/windmill/commit/0b8d37a2486df5756148645a630213d16e5998bc)) +- graphql api not db + ([#2017](https://github.com/windmill-labs/windmill/issues/2017)) + ([356b1f2](https://github.com/windmill-labs/windmill/commit/356b1f2242d7bbe4c71e021cb441e29b652c5126)) +- hide AI Gen btn when language not supported + ([#2016](https://github.com/windmill-labs/windmill/issues/2016)) + ([46ff76f](https://github.com/windmill-labs/windmill/commit/46ff76fc86884e11986edc998e06f37c43102d1f)) +- make flow editor more resilient to id duplicates + ([83d1d11](https://github.com/windmill-labs/windmill/commit/83d1d11a934843d91c76912018a3c057a97de101)) + +## [1.143.0](https://github.com/windmill-labs/windmill/compare/v1.142.0...v1.143.0) (2023-08-08) + +### Features + +- **frontend:** add disabled prop to select input + ([#2007](https://github.com/windmill-labs/windmill/issues/2007)) + ([f6c9e34](https://github.com/windmill-labs/windmill/commit/f6c9e349fc82a74efed6fb8ddb6d79889b8b031b)) + +### Bug Fixes + +- add BASE_URL and WM_TOKEN to native scripts + ([b5ba9da](https://github.com/windmill-labs/windmill/commit/b5ba9daffce8891ba54697cd595ac935a7266e4d)) +- fix clear schedule to be workspace specific + ([1d1cd31](https://github.com/windmill-labs/windmill/commit/1d1cd31252c6619441219cdb2bb6ba064d029ac9)) +- **frontend:** Fix auto invite overflow + ([#2009](https://github.com/windmill-labs/windmill/issues/2009)) + ([c22e3b5](https://github.com/windmill-labs/windmill/commit/c22e3b54025153a9d28831c2fdacc9bd6d558c2c)) + +## [1.142.0](https://github.com/windmill-labs/windmill/compare/v1.141.0...v1.142.0) (2023-08-07) + +### Features + +- add magic tag part + ([90dfda0](https://github.com/windmill-labs/windmill/commit/90dfda0d1f00e1f11a82d12d2466eb2252c6e5fb)) +- **frontend:** Audit logs rework + ([#1997](https://github.com/windmill-labs/windmill/issues/1997)) + ([57110b9](https://github.com/windmill-labs/windmill/commit/57110b93c942024099538143f695c6c9294d0097)) +- **frontend:** make diff editor editable + ([#1999](https://github.com/windmill-labs/windmill/issues/1999)) + ([dee1096](https://github.com/windmill-labs/windmill/commit/dee1096bc0cb094932320c4a7801106a0eba2d59)) + +### Bug Fixes + +- custom config layout get priority for plotly components + ([e7febc7](https://github.com/windmill-labs/windmill/commit/e7febc759676c1f0f5030874abc7382ec87d47a2)) +- **frontend:** Download as CSV + ([#2000](https://github.com/windmill-labs/windmill/issues/2000)) + ([5f3b2ea](https://github.com/windmill-labs/windmill/commit/5f3b2eacbf1d10fe870074ea079ce66e6dca0d5d)) +- refresh token on login and regularly + ([9337716](https://github.com/windmill-labs/windmill/commit/933771651e9dde1c3489aaa9f31d9331ac4d5f7f)) + +## [1.141.0](https://github.com/windmill-labs/windmill/compare/v1.140.1...v1.141.0) (2023-08-05) + +### Features + +- add support for custom import map on deno + ([23a5bfa](https://github.com/windmill-labs/windmill/commit/23a5bfa36824c48694dbe42080b14d8969cbf3da)) + +## [1.140.1](https://github.com/windmill-labs/windmill/compare/v1.140.0...v1.140.1) (2023-08-05) + +### Bug Fixes + +- **cli:** handle extra headers in zip call + ([7a731dc](https://github.com/windmill-labs/windmill/commit/7a731dc838fae1664ca80ed572e5e986b331d874)) + +## [1.140.0](https://github.com/windmill-labs/windmill/compare/v1.139.0...v1.140.0) (2023-08-05) + +### Features + +- add azure openAI support + ([#1989](https://github.com/windmill-labs/windmill/issues/1989)) + ([0b7d639](https://github.com/windmill-labs/windmill/commit/0b7d6398cbddfd65306542a8300881517b1413cb)) +- add snowflake ([#1987](https://github.com/windmill-labs/windmill/issues/1987)) + ([d57b8d7](https://github.com/windmill-labs/windmill/commit/d57b8d79ad7493905e11e42470a8bfaa59e68709)) +- add test connection for bigquery + ([#1988](https://github.com/windmill-labs/windmill/issues/1988)) + ([c585377](https://github.com/windmill-labs/windmill/commit/c585377c2a7b42a1e74ff55b37cac7afceee318d)) +- add toggle for postgres between public and all schemas + ([#1991](https://github.com/windmill-labs/windmill/issues/1991)) + ([8d550a7](https://github.com/windmill-labs/windmill/commit/8d550a7ea5708ccae1136f4c0445fd9e4573341c)) +- **frontend:** Add flow steps details + ([#1986](https://github.com/windmill-labs/windmill/issues/1986)) + ([6d89121](https://github.com/windmill-labs/windmill/commit/6d89121ff951b3f192138c3c453c6d78f4bb6285)) +- **frontend:** Settings rework + ([#1983](https://github.com/windmill-labs/windmill/issues/1983)) + ([b8e9338](https://github.com/windmill-labs/windmill/commit/b8e9338d722fe0ec166df3f3b7c895f2ed8ea7ac)) +- support native jobs from hub + ([af29692](https://github.com/windmill-labs/windmill/commit/af29692ee1231b202d3c11b65559ae14421c472d)) + +### Bug Fixes + +- add more indexes for performance reasons + ([4e21b1a](https://github.com/windmill-labs/windmill/commit/4e21b1ac1780ba966f030c537b4b6d9650a12e61)) +- ai code block regex + ([#1992](https://github.com/windmill-labs/windmill/issues/1992)) + ([8289afd](https://github.com/windmill-labs/windmill/commit/8289afd8ff7b5b35f123c43941232ffae1602c27)) +- **frontend:** Fix flow editor panel sizes + ([#1985](https://github.com/windmill-labs/windmill/issues/1985)) + ([911162a](https://github.com/windmill-labs/windmill/commit/911162a1d2c7444dd4d4e98e96fbb542e004130b)) +- **frontend:** Fix image loading animation + app preview select scrolling + issues ([#1990](https://github.com/windmill-labs/windmill/issues/1990)) + ([ae79216](https://github.com/windmill-labs/windmill/commit/ae79216d5322c237250aad272bc7b73864ac7c62)) +- **frontend:** Fix log bg color + add style to the supabase connect button + ([#1981](https://github.com/windmill-labs/windmill/issues/1981)) + ([b2f23fb](https://github.com/windmill-labs/windmill/commit/b2f23fbaa167f10ae36ebe8a70cc35830051ddc2)) +- **frontend:** View runs+ fix flow graph overflow issues + ([#1984](https://github.com/windmill-labs/windmill/issues/1984)) + ([923504f](https://github.com/windmill-labs/windmill/commit/923504f2b40781a857ce08ff9ae7d74d73afe02d)) +- make plotly dynamically change on layout change + ([c31118c](https://github.com/windmill-labs/windmill/commit/c31118c270c69f6d54a9ff3e706ac175f7996f9e)) +- reset with minimal code + ([#1982](https://github.com/windmill-labs/windmill/issues/1982)) + ([c031b9f](https://github.com/windmill-labs/windmill/commit/c031b9f3525855c695d557ecb8c8e93b695e2eaa)) + +## [1.139.0](https://github.com/windmill-labs/windmill/compare/v1.138.1...v1.139.0) (2023-08-01) + +### Features + +- add bun to flow and apps + ([0081f54](https://github.com/windmill-labs/windmill/commit/0081f54c777e7586a6b55a020cd9134fc66837d9)) +- add SECRET_SALT for secure environments + ([7afb686](https://github.com/windmill-labs/windmill/commit/7afb6869d0cbdded2f0c0e395f77c9f9889788a3)) +- add step's custom timeout + ([4c87027](https://github.com/windmill-labs/windmill/commit/4c870272d487e8deef9b22c2dfe829b0a92afc44)) +- add support for postgresql numeric + ([e51d67f](https://github.com/windmill-labs/windmill/commit/e51d67f843b6a6849dd9b8fb496d0c20c34d9c9c)) +- **frontend:** Add config to optionally include mimetype + ([#1978](https://github.com/windmill-labs/windmill/issues/1978)) + ([654efb7](https://github.com/windmill-labs/windmill/commit/654efb7ec47887d61b25b4fcbf6d03d42882b240)) +- **frontend:** add markdown component + ([#1959](https://github.com/windmill-labs/windmill/issues/1959)) + ([a69aa22](https://github.com/windmill-labs/windmill/commit/a69aa2275f04eca82eff6590cc6296f0ed8d6fc1)) +- **frontend:** App carousel + ([#1956](https://github.com/windmill-labs/windmill/issues/1956)) + ([3a40b19](https://github.com/windmill-labs/windmill/commit/3a40b19cdbf608f7aa3cd81e10ed583bb5e24394)) +- **frontend:** Sanitize Supabase resource name + ([#1975](https://github.com/windmill-labs/windmill/issues/1975)) + ([aeb1131](https://github.com/windmill-labs/windmill/commit/aeb1131a3d553f128295ae11338a9d454bbe85c4)) +- unveil windmill AI + ([#1972](https://github.com/windmill-labs/windmill/issues/1972)) + ([b479cd6](https://github.com/windmill-labs/windmill/commit/b479cd6fca8ac74bb8df4f126552f455d689b75f)) + +### Bug Fixes + +- **cli:** add support for inlining native ts + ([87326b7](https://github.com/windmill-labs/windmill/commit/87326b7d16c8c4c2ae1d0a369ab621db23e8d664)) +- fix draft permissions (require writer instead of owner) + ([bf57c3a](https://github.com/windmill-labs/windmill/commit/bf57c3a628d78af18bcc4c4051e2425313d2d6f7)) +- **frontend:** Display transformer errors + ([#1971](https://github.com/windmill-labs/windmill/issues/1971)) + ([d67cfa4](https://github.com/windmill-labs/windmill/commit/d67cfa4aa9fc09834a3704a37ffd9df539283cc4)) +- **frontend:** Fix app icons + ([#1977](https://github.com/windmill-labs/windmill/issues/1977)) + ([1a15372](https://github.com/windmill-labs/windmill/commit/1a1537265accb4be7f24ea0e755979ff1333f9b1)) +- **frontend:** Fix dropdown buttons + ([#1970](https://github.com/windmill-labs/windmill/issues/1970)) + ([eea36b5](https://github.com/windmill-labs/windmill/commit/eea36b5bfc541d10e1adfbfdf9b97883a6d3fd7e)) +- **frontend:** Fix script settings overflow + ([#1969](https://github.com/windmill-labs/windmill/issues/1969)) + ([b576686](https://github.com/windmill-labs/windmill/commit/b57668610cae73d85a974493d8c0a5f3125f7007)) +- improve code structure to reduce unecessary dependency of apppreview on heavy + packages + ([3410e66](https://github.com/windmill-labs/windmill/commit/3410e66b22b4b0d8fdf12ed9144ff694bd258656)) + +## [1.138.1](https://github.com/windmill-labs/windmill/compare/v1.138.0...v1.138.1) (2023-07-30) + +### Bug Fixes + +- **cli:** reassign -d to --verbose and --data + ([5a354fc](https://github.com/windmill-labs/windmill/commit/5a354fcc2d166a4c98749f21e1026ff32a2fb111)) +- **frontend:** fix rename for runnable inputs + ([3c0c05a](https://github.com/windmill-labs/windmill/commit/3c0c05a2eb16c9c37ffe334ff17fa976d7d0d74e)) +- **postgres:** add uuid support as input + ([a3801d0](https://github.com/windmill-labs/windmill/commit/a3801d086de1fa7ca6afb7854ccfa86410341bd7)) +- **postgres:** add uuid support as input + ([3dac295](https://github.com/windmill-labs/windmill/commit/3dac295d41666a3766bf1843e757e7946958c527)) + +## [1.138.0](https://github.com/windmill-labs/windmill/compare/v1.137.1...v1.138.0) (2023-07-28) + +### Features + +- add bigquery ([#1934](https://github.com/windmill-labs/windmill/issues/1934)) + ([fd4c978](https://github.com/windmill-labs/windmill/commit/fd4c978874e6020d59e85b209d418435a0bcda1b)) +- add supabaze wizard + ([24b0658](https://github.com/windmill-labs/windmill/commit/24b0658460453b6e8d241be3be9f11946c3cf84b)) +- **frontend:** Make app from scripts and flows + ([#1938](https://github.com/windmill-labs/windmill/issues/1938)) + ([9f9498d](https://github.com/windmill-labs/windmill/commit/9f9498dbd90349ad641487824d4d85ed73c43260)) +- **frontend:** schema explorer, autocomplete and db aware AI for mysql + ([#1944](https://github.com/windmill-labs/windmill/issues/1944)) + ([5061a87](https://github.com/windmill-labs/windmill/commit/5061a873760f232d7824f407d2d0fad5ee6891db)) + +### Bug Fixes + +- add sync method for flows + ([e03da23](https://github.com/windmill-labs/windmill/commit/e03da23f17a63dea30a93607a2986d9ddeb6c213)) +- **frontend:** AI gen popup + ([#1950](https://github.com/windmill-labs/windmill/issues/1950)) + ([029d017](https://github.com/windmill-labs/windmill/commit/029d0170995f3bc1f0fe43f3e5991b7513121439)) +- **frontend:** Fix Account settings unreadable texts + ([#1958](https://github.com/windmill-labs/windmill/issues/1958)) + ([3b90580](https://github.com/windmill-labs/windmill/commit/3b905800bff45eaa23dd69e5b60619bf1d289e3d)) +- **frontend:** Fix App Table select + ([#1955](https://github.com/windmill-labs/windmill/issues/1955)) + ([16d6815](https://github.com/windmill-labs/windmill/commit/16d6815945eccd1c671b73ffd2163973874bea5c)) +- **frontend:** Fix build app from flow + ([#1954](https://github.com/windmill-labs/windmill/issues/1954)) + ([5c66afe](https://github.com/windmill-labs/windmill/commit/5c66afeb8fec3829e1fcdc95afcc4c4050470793)) +- **frontend:** Fix dark mode issues + ([#1953](https://github.com/windmill-labs/windmill/issues/1953)) + ([4f0c94a](https://github.com/windmill-labs/windmill/commit/4f0c94aafbef08b7c5f44f4073a3adfb17956a95)) +- **frontend:** reset btn for all langs + ([#1949](https://github.com/windmill-labs/windmill/issues/1949)) + ([265b7d7](https://github.com/windmill-labs/windmill/commit/265b7d7fbe1402986492c02d200342596925bcab)) +- improve webhooks panel correctness + ([adea8ff](https://github.com/windmill-labs/windmill/commit/adea8ff1b484e8653ae189312775cd0f34e321dd)) +- prevent error if json editor not mounted + ([#1945](https://github.com/windmill-labs/windmill/issues/1945)) + ([bdde59d](https://github.com/windmill-labs/windmill/commit/bdde59d7b385fbdbbac722f918672c7e3d601d56)) +- schema modal behavior when pressing enter + ([#1947](https://github.com/windmill-labs/windmill/issues/1947)) + ([3d54790](https://github.com/windmill-labs/windmill/commit/3d5479000a3732f7299ba79a57bd06303a359d90)) + +## [1.137.1](https://github.com/windmill-labs/windmill/compare/v1.137.0...v1.137.1) (2023-07-27) + +### Bug Fixes + +- pin deno backend versions + ([acf2765](https://github.com/windmill-labs/windmill/commit/acf27659a9fd619bfbb1f2edf9c6895bdabed083)) + +## [1.137.0](https://github.com/windmill-labs/windmill/compare/v1.136.0...v1.137.0) (2023-07-27) + +### Features + +- add workspace specific tags + ([52f28b5](https://github.com/windmill-labs/windmill/commit/52f28b5173daffdbffeb45dbe94574fe54c73f4b)) +- extra_requirements + ([93ac794](https://github.com/windmill-labs/windmill/commit/93ac7944b04b0e39043ed149df0dd3f50ff0e02a)) +- **frontend:** Add an output format + ([#1939](https://github.com/windmill-labs/windmill/issues/1939)) + ([e4506fe](https://github.com/windmill-labs/windmill/commit/e4506fef0ed3ece7702d677d4a82c87e8e7616a4)) +- **frontend:** AI edit / fix improvements + ([#1923](https://github.com/windmill-labs/windmill/issues/1923)) + ([0aa81e3](https://github.com/windmill-labs/windmill/commit/0aa81e39705d8c2109c8ec30855bb5f68eae133b)) +- **frontend:** App components dark mode + ([#1937](https://github.com/windmill-labs/windmill/issues/1937)) + ([71502c2](https://github.com/windmill-labs/windmill/commit/71502c2e0eced308fec3783450466c37007292e4)) +- **frontend:** Make Plotly layout dynamic + ([#1942](https://github.com/windmill-labs/windmill/issues/1942)) + ([9a539f9](https://github.com/windmill-labs/windmill/commit/9a539f909dd9e960f29901861dff674c416b4601)) +- handle worker groups with redis + ([6f47bf9](https://github.com/windmill-labs/windmill/commit/6f47bf98065ff42d35078b9376fc670dbc868ea6)) +- lock depedency for the entire flow + dependency job depend on script/flow's + tag + ([90d57e2](https://github.com/windmill-labs/windmill/commit/90d57e2fadd9459d7fda6fad35aeb603e5074a65)) +- resolve dependencies across relative imports for python + ([0f31ffe](https://github.com/windmill-labs/windmill/commit/0f31ffe174a8414393f8a2c3d0d9a0b4256667b6)) +- resolve dependencies across relative imports for python + ([31141ce](https://github.com/windmill-labs/windmill/commit/31141ce52a73cdfa89127b9c4a03428bab6029cc)) +- use flock to avoid concurrency issues on pip and shared volume + ([c22d2b9](https://github.com/windmill-labs/windmill/commit/c22d2b91a1d4257a6daeae1e29d77e9cc7fd3be5)) +- worker group for flows + ([a099791](https://github.com/windmill-labs/windmill/commit/a0997911bf9da8651ddb830e9e09f2d3f82c73e4)) + +### Bug Fixes + +- add property while viewing as JSON (+ ui tweaks) + ([#1941](https://github.com/windmill-labs/windmill/issues/1941)) + ([4f3b483](https://github.com/windmill-labs/windmill/commit/4f3b4836c2834d1f9975b92d8605bc6b046319fa)) +- respect FIFO order for concurrency limit + ([601da7f](https://github.com/windmill-labs/windmill/commit/601da7f878ca039729e2ba1be734530b63bd773f)) + +## [1.136.0](https://github.com/windmill-labs/windmill/compare/v1.135.1...v1.136.0) (2023-07-24) + +### Features + +- add SCIM instances groups to group page + ([6517caf](https://github.com/windmill-labs/windmill/commit/6517caf7d5e5a905d251dfcc3055308487e644f8)) + +### Bug Fixes + +- **frontend:** Fix fetch webhook code + add copy to clipboard button + ([#1928](https://github.com/windmill-labs/windmill/issues/1928)) + ([7799e4e](https://github.com/windmill-labs/windmill/commit/7799e4e73283d51b7dff8a27f70ecf29be298c13)) +- improve SCIM sync + ([c05b138](https://github.com/windmill-labs/windmill/commit/c05b13804f21cb02d5f27df2a046e37a6ccfcce7)) + +## [1.135.1](https://github.com/windmill-labs/windmill/compare/v1.135.0...v1.135.1) (2023-07-23) + +### Bug Fixes + +- fix database migration + ([0b019bc](https://github.com/windmill-labs/windmill/commit/0b019bc8a917a76c7631a20fb4a21f7252c418ba)) + +## [1.135.0](https://github.com/windmill-labs/windmill/compare/v1.134.2...v1.135.0) (2023-07-22) + +### Features + +- add SCIM support + ([ebb9235](https://github.com/windmill-labs/windmill/commit/ebb92356febadd4a0576b1bb88f59dc79da3b7e4)) +- add SCIM support + ([c4d1d50](https://github.com/windmill-labs/windmill/commit/c4d1d50f817c2b0d014b925056d6f404415f004f)) +- **frontend:** db schema explorer + db aware AI + ([#1920](https://github.com/windmill-labs/windmill/issues/1920)) + ([a6025ae](https://github.com/windmill-labs/windmill/commit/a6025ae75e47f1f66abd865604a991c42c4920f1)) + +### Bug Fixes + +- **frontend:** Fix show archived button position + ([#1921](https://github.com/windmill-labs/windmill/issues/1921)) + ([713f3e8](https://github.com/windmill-labs/windmill/commit/713f3e84c94a0c9a0bddc504702833974d7f70d9)) +- off by one concurrency limit fix + ([a054bdd](https://github.com/windmill-labs/windmill/commit/a054bdd0438567996b551b1b00a4c0697ce61986)) + +## [1.134.2](https://github.com/windmill-labs/windmill/compare/v1.134.1...v1.134.2) (2023-07-20) + +### Bug Fixes + +- **frontend:** Prevent options from closing when an option is selected + ([#1912](https://github.com/windmill-labs/windmill/issues/1912)) + ([b2b3249](https://github.com/windmill-labs/windmill/commit/b2b3249e51c3340b8a819e037ba68984a35d90a8)) +- remove lockfile on any rawinput change in flows + ([8c58752](https://github.com/windmill-labs/windmill/commit/8c58752a16e66d74981eb5eab4763198d4775905)) +- remove lockfile on any rawinput change in flows + ([dfb1d8f](https://github.com/windmill-labs/windmill/commit/dfb1d8fa44222f52b285a37d867a42cb1f27450d)) + +## [1.134.1](https://github.com/windmill-labs/windmill/compare/v1.134.0...v1.134.1) (2023-07-20) + +### Bug Fixes + +- handle pip requirements to git commits + ([a48edf4](https://github.com/windmill-labs/windmill/commit/a48edf435fb1df876c8012bf49a4c4265847d10e)) +- s/paylod/payload + ([#1910](https://github.com/windmill-labs/windmill/issues/1910)) + ([8f3960c](https://github.com/windmill-labs/windmill/commit/8f3960c93556301f6fdf9825a6e6b2e4d389dd2c)) + +## [1.134.0](https://github.com/windmill-labs/windmill/compare/v1.133.0...v1.134.0) (2023-07-19) + +### Features + +- **frontend:** add deployment history + script path + ([#1896](https://github.com/windmill-labs/windmill/issues/1896)) + ([3a805d1](https://github.com/windmill-labs/windmill/commit/3a805d1e4b85009fae3f81d97b918b3c6bd551b5)) +- make row information available from table rows' evals + ([ad1b92d](https://github.com/windmill-labs/windmill/commit/ad1b92d59df5aba39d7ae29e902c55b1f2411458)) +- use openai resource for windmill AI + ([#1902](https://github.com/windmill-labs/windmill/issues/1902)) + ([ddd8049](https://github.com/windmill-labs/windmill/commit/ddd8049b0aa74c9431cd01ff8a6e10e8a0196b3d)) + +### Bug Fixes + +- **backend:** openai resource not only variable + ([#1906](https://github.com/windmill-labs/windmill/issues/1906)) + ([778ac92](https://github.com/windmill-labs/windmill/commit/778ac92411fc1dd5686087797be19fb602c55d46)) +- parse bash args with same-line comments + ([#1907](https://github.com/windmill-labs/windmill/issues/1907)) + ([0f7ed87](https://github.com/windmill-labs/windmill/commit/0f7ed8798be7ef33f91fd5c4cd751beec28601a1)) + +## [1.133.0](https://github.com/windmill-labs/windmill/compare/v1.132.0...v1.133.0) (2023-07-19) + +### Features + +- add SAML support in EE + ([d715ec5](https://github.com/windmill-labs/windmill/commit/d715ec58f251765ad2071809161eab8ad189d92d)) +- **frontend:** generate scripts in the flow and app builders + ([#1886](https://github.com/windmill-labs/windmill/issues/1886)) + ([2416805](https://github.com/windmill-labs/windmill/commit/24168056293d4e570f78fbd13068bb94b76d9d9c)) + +## [1.132.0](https://github.com/windmill-labs/windmill/compare/v1.131.0...v1.132.0) (2023-07-16) + +### Features + +- add powershell as a template + ([b71362f](https://github.com/windmill-labs/windmill/commit/b71362fc7f9eb8a4506d231eb6687eb26696da24)) +- add schedule to syncable resources + ([1956c43](https://github.com/windmill-labs/windmill/commit/1956c43705f11e809abf113f7af8deb708e5ccd2)) +- add whitelist envs to passthrough the workers + ([ff0048a](https://github.com/windmill-labs/windmill/commit/ff0048afabad865898cda4be3a599f8d9ef569e8)) +- **frontend:** Eval for Drawer titles + ([#1882](https://github.com/windmill-labs/windmill/issues/1882)) + ([fee2b47](https://github.com/windmill-labs/windmill/commit/fee2b47ebe47a625e0f2b0672f232b54b544200e)) + +### Bug Fixes + +- **frontend:** fix bg script selection + ([#1881](https://github.com/windmill-labs/windmill/issues/1881)) + ([df5a4db](https://github.com/windmill-labs/windmill/commit/df5a4dbdc877ef4f8fd0c105d8bbc8a5d601eeb3)) +- **frontend:** fix payload query parameter in get by path webhook + ([#1875](https://github.com/windmill-labs/windmill/issues/1875)) + ([e5027cd](https://github.com/windmill-labs/windmill/commit/e5027cd9a38685cd7ee9ac8f67514524dda2cffc)) + +## [1.131.0](https://github.com/windmill-labs/windmill/compare/v1.130.0...v1.131.0) (2023-07-14) + +### Features + +- **frontend:** add missing link to job run page + ([#1878](https://github.com/windmill-labs/windmill/issues/1878)) + ([b3d61ad](https://github.com/windmill-labs/windmill/commit/b3d61ad67865128114f2c58491aa99f87189dc8c)) +- **frontend:** add modal component controls + ([#1877](https://github.com/windmill-labs/windmill/issues/1877)) + ([c0e1852](https://github.com/windmill-labs/windmill/commit/c0e18526987b07373e73566118cb7edf2a27ab15)) + +### Bug Fixes + +- fix REST job potential double execution + ([70bc56a](https://github.com/windmill-labs/windmill/commit/70bc56a68bdf8d53b5ae6bb8995572509bea954d)) +- global cache now cache symlinks + ([da9c634](https://github.com/windmill-labs/windmill/commit/da9c6340a2ba4a8aaf1ae5d6c16b05583da6860d)) + +## [1.130.0](https://github.com/windmill-labs/windmill/compare/v1.129.1...v1.130.0) (2023-07-13) + +### Features + +- add transformer to background scripts + ([8547125](https://github.com/windmill-labs/windmill/commit/85471252a5ec136f240048b71e94427bfcacd846)) + +## [1.129.1](https://github.com/windmill-labs/windmill/compare/v1.129.0...v1.129.1) (2023-07-13) + +### Bug Fixes + +- add configurable HEADERS for CLI + ([53f57e0](https://github.com/windmill-labs/windmill/commit/53f57e027235f36f7678594a9f869072e8439fca)) + +## [1.129.0](https://github.com/windmill-labs/windmill/compare/v1.128.0...v1.129.0) (2023-07-13) + +### Features + +- add jumpcloud support for sso + ([9fcd37c](https://github.com/windmill-labs/windmill/commit/9fcd37cf436f40e719059843aa27d8bb9d2d70da)) +- add powershell to base image + ([06d15bf](https://github.com/windmill-labs/windmill/commit/06d15bfa45a78aad5af3cfe874cc445e816982ee)) +- **frontend:** Add manual calendar button + add shortcuts + ([#1866](https://github.com/windmill-labs/windmill/issues/1866)) + ([4017407](https://github.com/windmill-labs/windmill/commit/4017407df545092921c4ef231e90583bac84327b)) +- **frontend:** use typed dict for resource types in python + ([#1869](https://github.com/windmill-labs/windmill/issues/1869)) + ([da70133](https://github.com/windmill-labs/windmill/commit/da701336577049d72375e72e603313114534a63f)) +- generate and fix scripts using Autopilot powered by OpenAI + [#1827](https://github.com/windmill-labs/windmill/issues/1827)) + ([012ea2d](https://github.com/windmill-labs/windmill/commit/012ea2dc0a3ce4685a50d5250b37003f40bfd0c8)) +- Per script concurrency limit with time window + ([#1816](https://github.com/windmill-labs/windmill/issues/1816)) + ([e2fb35a](https://github.com/windmill-labs/windmill/commit/e2fb35a487608c6d5a35896f1fb17a8698d2d552)) + +### Bug Fixes + +- fix initial reactivity double trigger + ([dfcb6eb](https://github.com/windmill-labs/windmill/commit/dfcb6eb28467e890664b8f6dc09754a811031ad2)) +- **frontend:** Fix App multi select render + ([#1867](https://github.com/windmill-labs/windmill/issues/1867)) + ([9f1d630](https://github.com/windmill-labs/windmill/commit/9f1d63059be8e744b67d60a0d984591636140528)) +- **frontend:** fix conditional portal + ([#1868](https://github.com/windmill-labs/windmill/issues/1868)) + ([8345b38](https://github.com/windmill-labs/windmill/commit/8345b389a65a86cec296e6544df264b167dfaeab)) +- **frontend:** store exists openai key + ([#1870](https://github.com/windmill-labs/windmill/issues/1870)) + ([16b0e28](https://github.com/windmill-labs/windmill/commit/16b0e281cb785a3820ec6256873c8423449610f3)) +- improve bash flushing + ([1fc36c9](https://github.com/windmill-labs/windmill/commit/1fc36c9b074d66d615906b6e3bf0b5cd71dde97b)) +- make workers bind their http servers on any available port for OCI compliance + ([08e3502](https://github.com/windmill-labs/windmill/commit/08e3502126f9727301fc2609740ecfa30beb3e9e)) +- Other schedules only display schedules related to script/flow + ([2be0714](https://github.com/windmill-labs/windmill/commit/2be071482202ecf295e713339be442f0d0d45b58)) + +## [1.128.0](https://github.com/windmill-labs/windmill/compare/v1.127.1...v1.128.0) (2023-07-11) + +### Features + +- add mysql as native integration + ([#1859](https://github.com/windmill-labs/windmill/issues/1859)) + ([a048e0d](https://github.com/windmill-labs/windmill/commit/a048e0d7e221aa0162d33197566bcd4036da1b67)) + +### Bug Fixes + +- **frontend:** App errors array + ([#1851](https://github.com/windmill-labs/windmill/issues/1851)) + ([06a8772](https://github.com/windmill-labs/windmill/commit/06a8772dde84a872982e6a1e7d16170c6dc906fe)) +- **frontend:** Fix app drawer display + add missing flattent + ([#1853](https://github.com/windmill-labs/windmill/issues/1853)) + ([4093939](https://github.com/windmill-labs/windmill/commit/4093939936203f2603bb999618f4810d33c3ecb7)) +- **frontend:** Fix select width in app table to avoid content jump + ([#1850](https://github.com/windmill-labs/windmill/issues/1850)) + ([1ebc86c](https://github.com/windmill-labs/windmill/commit/1ebc86c2a7edfb182d1723bf06cbca0058154622)) +- **frontend:** only forward css variable + ([#1856](https://github.com/windmill-labs/windmill/issues/1856)) + ([4034ab0](https://github.com/windmill-labs/windmill/commit/4034ab07df47f1eee5772144879858f64cd7b116)) +- **frontend:** Support both copying the key and the value in the ObjectViewer + ([#1854](https://github.com/windmill-labs/windmill/issues/1854)) + ([f2101c0](https://github.com/windmill-labs/windmill/commit/f2101c05efa5f691f3b3e6d0abcbe1f78082e90f)) + +## [1.127.1](https://github.com/windmill-labs/windmill/compare/v1.127.0...v1.127.1) (2023-07-10) + +### Bug Fixes + +- **frontend:** Fix debug runs zIndex + ([#1822](https://github.com/windmill-labs/windmill/issues/1822)) + ([ce9088e](https://github.com/windmill-labs/windmill/commit/ce9088e7a847834522890ed53c96794773ced491)) +- **frontend:** Fix graph view when mulitple graphs are displayed + ([#1821](https://github.com/windmill-labs/windmill/issues/1821)) + ([5e4e52a](https://github.com/windmill-labs/windmill/commit/5e4e52a10941c83b54da730ed51fc982f44f8ac8)) + +## [1.127.0](https://github.com/windmill-labs/windmill/compare/v1.126.0...v1.127.0) (2023-07-10) + +### Features + +- add test connection to resource editor + ([9d5cfaf](https://github.com/windmill-labs/windmill/commit/9d5cfafb281c1cc7dd3eb18e5eb7bf9f7423957c)) +- **frontend:** add mobile view + ([#1819](https://github.com/windmill-labs/windmill/issues/1819)) + ([47d211b](https://github.com/windmill-labs/windmill/commit/47d211b21807d688fe631be8c4027285a2932cfc)) + +### Bug Fixes + +- **frontend:** support special chars in postgresql client + [[#1775](https://github.com/windmill-labs/windmill/issues/1775)] + ([#1818](https://github.com/windmill-labs/windmill/issues/1818)) + ([9e385d9](https://github.com/windmill-labs/windmill/commit/9e385d9467a554070e375fc406a6762879a582cb)) + +## [1.126.0](https://github.com/windmill-labs/windmill/compare/v1.125.1...v1.126.0) (2023-07-09) + +### Features + +- add support for pg uuid + ([79bc1da](https://github.com/windmill-labs/windmill/commit/79bc1da5ea8f0ae0985612515ef99279f93634ff)) +- bun support ([#1800](https://github.com/windmill-labs/windmill/issues/1800)) + ([2921649](https://github.com/windmill-labs/windmill/commit/2921649c3cc68e4f388c2b81e3707613bc737d1e)) +- **frontend:** Fix App Select styles + ([#1811](https://github.com/windmill-labs/windmill/issues/1811)) + ([5af82e4](https://github.com/windmill-labs/windmill/commit/5af82e4afd2bec68607969eab09510581eda5aeb)) +- workspace error handler + ([#1799](https://github.com/windmill-labs/windmill/issues/1799)) + ([54cd5ce](https://github.com/windmill-labs/windmill/commit/54cd5ce569823df8a4dd391a7267c7aec7435f11)) + +### Bug Fixes + +- **frontend:** add missing required argument to correctly compute isValue + ([#1807](https://github.com/windmill-labs/windmill/issues/1807)) + ([94a0820](https://github.com/windmill-labs/windmill/commit/94a08209c71899c7ae447bc92ac0f4137cd13f51)) +- **frontend:** Fix multi select custom css + ([#1813](https://github.com/windmill-labs/windmill/issues/1813)) + ([518bf23](https://github.com/windmill-labs/windmill/commit/518bf23005c2d52db6c0dc89ec1356635bbdf32b)) +- **frontend:** isValid when no properties + ([#1806](https://github.com/windmill-labs/windmill/issues/1806)) + ([8e7db51](https://github.com/windmill-labs/windmill/commit/8e7db51cff5ea6f604f52d22db4e0ea0f514b95c)) +- **frontend:** unselect ScriptPicker + slack script + ([#1802](https://github.com/windmill-labs/windmill/issues/1802)) + ([ec6fbab](https://github.com/windmill-labs/windmill/commit/ec6fbabe888d937416030485f8de533ffab908f8)) +- update deno to 1.35.0 + ([18f4dc0](https://github.com/windmill-labs/windmill/commit/18f4dc079933f160e729586379cc2a55191d0d65)) + +## [1.125.1](https://github.com/windmill-labs/windmill/compare/v1.125.0...v1.125.1) (2023-07-05) + +### Bug Fixes + +- fix go and py resolution cache overlap + ([5b7c796](https://github.com/windmill-labs/windmill/commit/5b7c7965e5d43e3a0f9d7ad481eb520123a799e0)) +- **frontend:** Fix Quill component + ([#1797](https://github.com/windmill-labs/windmill/issues/1797)) + ([8ece51c](https://github.com/windmill-labs/windmill/commit/8ece51c6888b16019e589d451ac77ea5adce5b82)) + +## [1.125.0](https://github.com/windmill-labs/windmill/compare/v1.124.0...v1.125.0) (2023-07-04) + +### Features + +- add groups to app ctx + ([499dd5b](https://github.com/windmill-labs/windmill/commit/499dd5b8ea2a7bf0484e2ee472b7f07af9a19b9e)) +- improve debug runs wrt to frontend scripts + ([dda9920](https://github.com/windmill-labs/windmill/commit/dda99206fa3d9ab31357e5766e2ff56635221759)) +- native fetch + native postgresql jobs + ([#1796](https://github.com/windmill-labs/windmill/issues/1796)) + ([c669e99](https://github.com/windmill-labs/windmill/commit/c669e9940bddb74163bc049e0951b91b7e31c8ed)) + +### Bug Fixes + +- fix global error handler + ([f98c199](https://github.com/windmill-labs/windmill/commit/f98c199b63b4428532c2710a0d19215cccd4abbf)) +- fix go and python cache resolution conflict + ([54c6aed](https://github.com/windmill-labs/windmill/commit/54c6aed31cc1f344a345f19f9aa583cb55c1b944)) +- **frontend:** Allow AppSelectTab + ([#1787](https://github.com/windmill-labs/windmill/issues/1787)) + ([080e244](https://github.com/windmill-labs/windmill/commit/080e2443ab49a101bea819d08b48090a1d988b98)) +- **frontend:** Fix script builder + ([#1795](https://github.com/windmill-labs/windmill/issues/1795)) + ([c6d520b](https://github.com/windmill-labs/windmill/commit/c6d520bb59f7ba204fb448ea95bca1c04311c97d)) +- **frontend:** Forked svelte-select to fix overflow issues using a po… + ([#1778](https://github.com/windmill-labs/windmill/issues/1778)) + ([bd481ad](https://github.com/windmill-labs/windmill/commit/bd481adbfc5dedce0db9ee5ac7bb2097048a767a)) +- tooltip and copy button in text + ([30b041e](https://github.com/windmill-labs/windmill/commit/30b041e2205ed9e3fbbcd4e7be58e10d84e67d2e)) + +## [1.124.0](https://github.com/windmill-labs/windmill/compare/v1.123.1...v1.124.0) (2023-06-30) + +### Features + +- add configurable global error handler + ([8c566a2](https://github.com/windmill-labs/windmill/commit/8c566a2e46e5136f6fb3783b6fbb65833b5f202c)) + +## [1.123.1](https://github.com/windmill-labs/windmill/compare/v1.123.0...v1.123.1) (2023-06-29) + +### Bug Fixes + +- add CREATE_WORKSPACE_REQUIRE_SUPERADMIN + ([ff942f4](https://github.com/windmill-labs/windmill/commit/ff942f4d06ed06877ec2512e6940c346e3484c47)) + +## [1.123.0](https://github.com/windmill-labs/windmill/compare/v1.122.0...v1.123.0) (2023-06-29) + +### Features + +- cancel non-yet-running jobs and rework force cancellation + ([4763242](https://github.com/windmill-labs/windmill/commit/4763242780fcc65aca857d0e476d19e7ba5f5bb7)) +- **frontend:** Add documentation link in the component settings + ([#1773](https://github.com/windmill-labs/windmill/issues/1773)) + ([3b25fd9](https://github.com/windmill-labs/windmill/commit/3b25fd9748c958e41e84cdbeede0f259fc46593d)) +- **frontend:** add resources warning + ([#1776](https://github.com/windmill-labs/windmill/issues/1776)) + ([a8af158](https://github.com/windmill-labs/windmill/commit/a8af158b9f9c4f0bb3f7d3a7f7d0f86238919d07)) +- smtp support to invite users + ([#1777](https://github.com/windmill-labs/windmill/issues/1777)) + ([7851e93](https://github.com/windmill-labs/windmill/commit/7851e932eca9904c1e192a9bea9ae4002a46fdf2)) + +### Bug Fixes + +- **frontend:** Fix typing + ([#1774](https://github.com/windmill-labs/windmill/issues/1774)) + ([99d19f6](https://github.com/windmill-labs/windmill/commit/99d19f6c36b6cd03bebb2ca6af01ca506a0cf5cc)) +- improve list component force recompute + ([13e049a](https://github.com/windmill-labs/windmill/commit/13e049af60d25c8bac05be6c87a850447b1d9d31)) + +## [1.122.0](https://github.com/windmill-labs/windmill/compare/v1.121.0...v1.122.0) (2023-06-23) + +### Features + +- release wmillbench publicly + ([161f793](https://github.com/windmill-labs/windmill/commit/161f793ae6a67761709d4ced2de060c9546b2d3b)) + +## [1.121.0](https://github.com/windmill-labs/windmill/compare/v1.120.0...v1.121.0) (2023-06-22) + +### Features + +- download logs from backend + ([7a1f999](https://github.com/windmill-labs/windmill/commit/7a1f999cea6d068d8971a7196fc9ce39e8273aed)) +- script versions history + ([ee433bd](https://github.com/windmill-labs/windmill/commit/ee433bdd4b00a6b4d45df4332203554682c51bc1)) + +## [1.120.0](https://github.com/windmill-labs/windmill/compare/v1.119.0...v1.120.0) (2023-06-22) + +### Features + +- add ability to copy job args + ([29a2eeb](https://github.com/windmill-labs/windmill/commit/29a2eeb382b1d9359eb385fc21fc332c861ea2ff)) +- add update checker on version info + ([f9341af](https://github.com/windmill-labs/windmill/commit/f9341af2feaf3bf2e0681c82350cdf24adfd7e8d)) + +### Bug Fixes + +- **cli:** expose --skip-secrets --skip-variables --skip-resources + ([a1b5c14](https://github.com/windmill-labs/windmill/commit/a1b5c142bd1012e83b2f194d073a1d1531753618)) + +## [1.119.0](https://github.com/windmill-labs/windmill/compare/v1.118.0...v1.119.0) (2023-06-22) + +### Features + +- **cli:** add skipSecrets, skipVariables, skipResources + ([2df29a1](https://github.com/windmill-labs/windmill/commit/2df29a131e2c3a556b50be6c73234ce8e752a7e7)) + +### Bug Fixes + +- bump dependencies + ([66ca3f1](https://github.com/windmill-labs/windmill/commit/66ca3f1522b3838707681d553b1612169619bddd)) + +## [1.118.0](https://github.com/windmill-labs/windmill/compare/v1.117.0...v1.118.0) (2023-06-22) + +### Features + +- add dynamic args for input list + ([05d1b20](https://github.com/windmill-labs/windmill/commit/05d1b20b663a3b0cf38638472fb4f7823d56db4c)) +- add preselect first config for app selects + ([11c6ff7](https://github.com/windmill-labs/windmill/commit/11c6ff7481f351a0e9549d3ac8e2dbc8ce2ca4d8)) +- editable resource types + rt in deployments + ([fdb7ab7](https://github.com/windmill-labs/windmill/commit/fdb7ab7f51f739094e785438a5bff45d983556d5)) +- resume and approvers available in iterator and branch expr + ([a98e146](https://github.com/windmill-labs/windmill/commit/a98e146aedfa39539bd86685dbe9c4f5a7e8f1df)) +- step mocking for flows + ([4c594c0](https://github.com/windmill-labs/windmill/commit/4c594c0e649d8b416a53823e457e43a029e5f940)) + +### Bug Fixes + +- correctly handle deeply nested results for out-of-order loops + ([82f20d3](https://github.com/windmill-labs/windmill/commit/82f20d3ef4fe3c43adc9489d5fe950c3504f2425)) + +## [1.117.0](https://github.com/windmill-labs/windmill/compare/v1.116.0...v1.117.0) (2023-06-20) + +### Features + +- add dynamic default args to approval page form + ([a4365cb](https://github.com/windmill-labs/windmill/commit/a4365cb864120b3545564871c507c8224a85b749)) +- add schema form to approval steps + ([59e395a](https://github.com/windmill-labs/windmill/commit/59e395a92ad13a1d2d09d4f6bbdc400257087c22)) +- list component for apps + ([#1740](https://github.com/windmill-labs/windmill/issues/1740)) + ([dd03f33](https://github.com/windmill-labs/windmill/commit/dd03f33337c2787b56981ad1c6e1b7200c94376a)) + +### Bug Fixes + +- make postgresql attempt to create users regardless of if superadmin or not + ([6dabc93](https://github.com/windmill-labs/windmill/commit/6dabc933890709746aab83cbbd0cad41a42723bc)) +- remove \_\_index from aggrid + ([258943c](https://github.com/windmill-labs/windmill/commit/258943cb8590f51e1af725b68ea727705288ac93)) + +## [1.116.0](https://github.com/windmill-labs/windmill/compare/v1.115.0...v1.116.0) (2023-06-19) + +### Features + +- add delete draft from home + ([4b7f681](https://github.com/windmill-labs/windmill/commit/4b7f681e5a0a87a0e6922595b1e5aa7d142b4415)) +- add diff viewer to script autosave discard menu + ([80c07ad](https://github.com/windmill-labs/windmill/commit/80c07ad905c51a1e247d95238126a10a9d2bab75)) +- add enums to array args + ([1060d32](https://github.com/windmill-labs/windmill/commit/1060d3271cb5ed3f7bc518a2baf8bf1dbbabf971)) + +### Bug Fixes + +- deploy dev/staging/prod small fixes + ([848c03b](https://github.com/windmill-labs/windmill/commit/848c03ba50cd4e7643791644443778073f92b95c)) + +## [1.115.0](https://github.com/windmill-labs/windmill/compare/v1.114.2...v1.115.0) (2023-06-18) + +### Features + +- add dataflow view for workflows + ([d31959b](https://github.com/windmill-labs/windmill/commit/d31959b30b6b888d5ae0c75d24311bb4a555a7e6)) +- add dataflow view for workflows + ([d7d5bce](https://github.com/windmill-labs/windmill/commit/d7d5bce499fb65091692926d65e47fadcc6c7bb0)) +- add extra config to aggrid + ([1a75641](https://github.com/windmill-labs/windmill/commit/1a75641d08fd94344036fec963b2a0c70274191c)) +- dev/staging/prod and deploy from web + ([#1733](https://github.com/windmill-labs/windmill/issues/1733)) + ([ac1a432](https://github.com/windmill-labs/windmill/commit/ac1a432bb9a7033a068fe77c92ffb54e3ec43806)) +- **frontend:** vscode extension dark mode + ([#1730](https://github.com/windmill-labs/windmill/issues/1730)) + ([157d722](https://github.com/windmill-labs/windmill/commit/157d722c1e7bc3ee3c3c902543b622976504ca62)) +- new default encoding for resource types in deno + ([a16798b](https://github.com/windmill-labs/windmill/commit/a16798b4d666dfc074088b31d423e935abcdfc6f)) + +### Bug Fixes + +- autosize app inputs + ([5210150](https://github.com/windmill-labs/windmill/commit/5210150722ead3015f6ce4ee8a6f3ec7c9dec7eb)) +- flow editor design improvements + ([d87e5ea](https://github.com/windmill-labs/windmill/commit/d87e5ea4fe3b5356275ff8268ed7ea3ab063679c)) +- flow editor design improvements + ([eafb6ed](https://github.com/windmill-labs/windmill/commit/eafb6edb45ffcacc8cb30748df5cc33093e98699)) +- flow viewer + ([6ccbf2d](https://github.com/windmill-labs/windmill/commit/6ccbf2d791ff4bbf47a836221fc48923fa321d3e)) +- improve agGrid persistence when result change + setSelectedIndex + ([fe9c757](https://github.com/windmill-labs/windmill/commit/fe9c757add83747bbec304a8ea0f5f775a19d1d9)) +- infer schema for script without schema in flows + ([2db5337](https://github.com/windmill-labs/windmill/commit/2db533774cb1e6dd7dc9f3317c1441294c623724)) + +## [1.114.2](https://github.com/windmill-labs/windmill/compare/v1.114.1...v1.114.2) (2023-06-12) + +### Bug Fixes + +- improve dev cli + ([afce4ef](https://github.com/windmill-labs/windmill/commit/afce4ef77aa598b2ed7c6785ee7ca61a89eb64ab)) + +## [1.114.1](https://github.com/windmill-labs/windmill/compare/v1.114.0...v1.114.1) (2023-06-12) + +### Bug Fixes + +- fix app button form modal + ([a121ca0](https://github.com/windmill-labs/windmill/commit/a121ca08759194dd33fed6b034c84aea8ce4703c)) +- fix use input from input library + make selected subgrid clearer + ([e942c43](https://github.com/windmill-labs/windmill/commit/e942c437cba3dd5e02ebf7f25173442cc14a6236)) +- **frontend:** Fix text input + ([#1712](https://github.com/windmill-labs/windmill/issues/1712)) + ([f495cf0](https://github.com/windmill-labs/windmill/commit/f495cf0b045e99f324d5616ffc0ac826a2aa23fa)) + +## [1.114.0](https://github.com/windmill-labs/windmill/compare/v1.113.2...v1.114.0) (2023-06-12) + +### Features + +- remove the need for BASE_INTERNAL_URL + ([263e03c](https://github.com/windmill-labs/windmill/commit/263e03c2bd508dd94ae6f30fd4cbc67b416b7ef4)) + +## [1.113.2](https://github.com/windmill-labs/windmill/compare/v1.113.1...v1.113.2) (2023-06-12) + +### Bug Fixes + +- correct schedule jobs ordering + avoid cdn for quill css + ([7418923](https://github.com/windmill-labs/windmill/commit/7418923e950f376e94a6d7c9235c62f6d83f44e5)) + +## [1.113.1](https://github.com/windmill-labs/windmill/compare/v1.113.0...v1.113.1) (2023-06-12) + +### Bug Fixes + +- fix retrieving last jobs of schedules + ([e266337](https://github.com/windmill-labs/windmill/commit/e2663371d5a4c0b6bb27546c9847ea7707f64536)) + +## [1.113.0](https://github.com/windmill-labs/windmill/compare/v1.112.0...v1.113.0) (2023-06-12) + +### Features + +- add rich text editor as component to apps (quill) + ([1a7aa4c](https://github.com/windmill-labs/windmill/commit/1a7aa4cda31426f0a960cc243c8c5d0da7065e8d)) +- rework schedule page entirely to display jobs informations + ([4963286](https://github.com/windmill-labs/windmill/commit/4963286edde771a9e6aa17b1f105060828cb1ebc)) + +## [1.112.0](https://github.com/windmill-labs/windmill/compare/v1.111.3...v1.112.0) (2023-06-10) + +### Features + +- local dev page on the web and compatible with vscode extension + ([8342ed8](https://github.com/windmill-labs/windmill/commit/8342ed855b5d8576760b6df7efa10ef299615211)) + +### Bug Fixes + +- pip install repsect proxy settings + ([ebb6311](https://github.com/windmill-labs/windmill/commit/ebb631190d3cf537d82c11b11e892afbfd16e4ed)) +- use app for dev setup directly + ([8b6e5a3](https://github.com/windmill-labs/windmill/commit/8b6e5a347e13311637f4e4f4205a5d3f758e8445)) + +## [1.111.3](https://github.com/windmill-labs/windmill/compare/v1.111.2...v1.111.3) (2023-06-09) + +### Bug Fixes + +- add NO_PROXY and make pip respect proxy args + ([b6a037a](https://github.com/windmill-labs/windmill/commit/b6a037aa049ae71924df6c9a7b8abf2b9d5e9210)) + +## [1.111.2](https://github.com/windmill-labs/windmill/compare/v1.111.1...v1.111.2) (2023-06-09) + +### Bug Fixes + +- add job execution time and mem everywhere applicable + ([98d6b21](https://github.com/windmill-labs/windmill/commit/98d6b21b309ac5d7f2fb8677f69ab2ea66c560d7)) +- add more options to aggrid + ([2e190f3](https://github.com/windmill-labs/windmill/commit/2e190f3c0b2a28f1ec0d69300684734458930096)) +- add support for http_proxy and https_proxy + ([67b3b06](https://github.com/windmill-labs/windmill/commit/67b3b0635b4e04eefdd1f23081a1e04d9818ff5c)) +- toggle self-signed certs support in oauth2 using env variable + ACCEPT_INVALID_CERTS + ([#1694](https://github.com/windmill-labs/windmill/issues/1694)) + ([bfe88de](https://github.com/windmill-labs/windmill/commit/bfe88def346e5de14f68104c6d8ea138d63ac83e)) + +## [1.111.1](https://github.com/windmill-labs/windmill/compare/v1.111.0...v1.111.1) (2023-06-09) + +### Bug Fixes + +- add cancel button to flowpreview + ([6b50a2b](https://github.com/windmill-labs/windmill/commit/6b50a2bb6d5076919b28569ce498068fae042813)) + +## [1.111.0](https://github.com/windmill-labs/windmill/compare/v1.110.0...v1.111.0) (2023-06-09) + +### Features + +- wmill dev v0 + ([ee77bee](https://github.com/windmill-labs/windmill/commit/ee77bee80f3da75f0be3ab6586f4fabc140bf760)) + +### Bug Fixes + +- be more specific about replacing nan in python deser + ([9cd73ab](https://github.com/windmill-labs/windmill/commit/9cd73ab32bdc64029445aad4bae634e945393923)) + +## [1.110.0](https://github.com/windmill-labs/windmill/compare/v1.109.1...v1.110.0) (2023-06-07) + +### Features + +- add suggested results to prop picker + ([67b05d3](https://github.com/windmill-labs/windmill/commit/67b05d38719714fd219977bee02b13b0ce1a0a77)) +- **apps:** copy paste across apps + ([7f81abd](https://github.com/windmill-labs/windmill/commit/7f81abd545f0261e366963cf9ae8c41c485ee749)) +- deleting a flow step show confirmation modal with refs + ([c7fac8c](https://github.com/windmill-labs/windmill/commit/c7fac8c6d282d8f513971ed05fb552c338368bde)) +- migrate ts parser to wasm + ([#1686](https://github.com/windmill-labs/windmill/issues/1686)) + ([c702f40](https://github.com/windmill-labs/windmill/commit/c702f40980a397319aa02de3f67176a2762651f4)) +- support custom env variables + ([#1675](https://github.com/windmill-labs/windmill/issues/1675)) + ([98e1fdd](https://github.com/windmill-labs/windmill/commit/98e1fdd898f916f71c4e07e1029fb828a9891bbd)) + +### Bug Fixes + +- empty flows not return their inputs + ([253fd91](https://github.com/windmill-labs/windmill/commit/253fd910249a58db4697d67233fb1b2ba558090e)) + +## [1.109.1](https://github.com/windmill-labs/windmill/compare/v1.109.0...v1.109.1) (2023-06-04) + +### Bug Fixes + +- fix go-client generation + ([a0401ac](https://github.com/windmill-labs/windmill/commit/a0401ac8f12782277674dfce7b32b292d33de8bc)) + +## [1.109.0](https://github.com/windmill-labs/windmill/compare/v1.108.2...v1.109.0) (2023-06-04) + +### Features + +- add cache as a primitive for flows + ([#1671](https://github.com/windmill-labs/windmill/issues/1671)) + ([7e466b7](https://github.com/windmill-labs/windmill/commit/7e466b771565207344365068e09d784b2ea31473)) + +## [1.108.2](https://github.com/windmill-labs/windmill/compare/v1.108.1...v1.108.2) (2023-06-03) + +### Bug Fixes + +- improve websockets handling for flow editor + ([ce94426](https://github.com/windmill-labs/windmill/commit/ce944264415cea66f90a5448fc90de6b7d2184e4)) +- optimize object viewer to handle large data + ([ae5b11a](https://github.com/windmill-labs/windmill/commit/ae5b11aba5b6e1be141c51afdfc3c4918b118126)) + +## [1.108.1](https://github.com/windmill-labs/windmill/compare/v1.108.0...v1.108.1) (2023-06-02) + +### Bug Fixes + +- **frontend:** Fix currency input + ([#1667](https://github.com/windmill-labs/windmill/issues/1667)) + ([3e7dd0d](https://github.com/windmill-labs/windmill/commit/3e7dd0d179cc516a8bb68b9435bded48df0c405a)) +- renaming app + improve flow rendering + ([f7e23ac](https://github.com/windmill-labs/windmill/commit/f7e23acfdcd19e0af19b5d6416a2843d72e3a067)) + +## [1.108.0](https://github.com/windmill-labs/windmill/compare/v1.107.0...v1.108.0) (2023-05-31) + +### Features + +- add app presence + ([e9fe595](https://github.com/windmill-labs/windmill/commit/e9fe595de40deca44cde1b26a5654caa6919094d)) +- add multiplayer support for webeditor + ([#1562](https://github.com/windmill-labs/windmill/issues/1562)) + ([428e0ab](https://github.com/windmill-labs/windmill/commit/428e0ab2f8632dc7a6cefb83f2d3c5d8d1c4508a)) + +### Bug Fixes + +- **frontend:** Fix app table actions + ([#1665](https://github.com/windmill-labs/windmill/issues/1665)) + ([1634ee6](https://github.com/windmill-labs/windmill/commit/1634ee635ed8400dc67683395449d7b7448a073b)) + +## [1.107.0](https://github.com/windmill-labs/windmill/compare/v1.106.0...v1.107.0) (2023-05-29) + +### Features + +- **backend:** webhook specific tokens + ([8c33599](https://github.com/windmill-labs/windmill/commit/8c335996631b7512e7699ffd0aebe04e43c498ab)) + +### Bug Fixes + +- **backend:** fix initial worker ping issue + ([1816252](https://github.com/windmill-labs/windmill/commit/1816252f03cb4c45a1211f1b2641f79bc679421f)) + +## [1.106.1](https://github.com/windmill-labs/windmill/compare/v1.106.0...v1.106.1) (2023-05-29) + +### Bug Fixes + +- **backend:** fix initial worker ping issue + ([1816252](https://github.com/windmill-labs/windmill/commit/1816252f03cb4c45a1211f1b2641f79bc679421f)) + +## [1.106.0](https://github.com/windmill-labs/windmill/compare/v1.105.0...v1.106.0) (2023-05-28) + +### Features + +- **apps:** add setValue to frontend script's SDK + ([8c9b080](https://github.com/windmill-labs/windmill/commit/8c9b080875cc734d37621bc140b2c2fad135edbb)) +- **cli:** add resolveDefaultResource + ([e19fabb](https://github.com/windmill-labs/windmill/commit/e19fabb02ff9a3d4044c5a208a2f8d0692c0aa81)) + +## [1.105.0](https://github.com/windmill-labs/windmill/compare/v1.104.2...v1.105.0) (2023-05-27) + +### Features + +- **apps:** added deployment history browser + ([7cb1d12](https://github.com/windmill-labs/windmill/commit/7cb1d12d4ea9c82b96a759878af77a96b5222ad1)) +- **cli:** add variables add to CLI + ([6f1d5c4](https://github.com/windmill-labs/windmill/commit/6f1d5c497f52004342234c226d2e36bd3f11b915)) + +### Bug Fixes + +- **cli:** expose an encrypt value endpoint + ([1fff16b](https://github.com/windmill-labs/windmill/commit/1fff16bbb8e71566155d860a7c5f768b2aedbede)) +- **frontend:** Check whether the source has the right type + ([#1647](https://github.com/windmill-labs/windmill/issues/1647)) + ([7fd5543](https://github.com/windmill-labs/windmill/commit/7fd5543d1a452466be9515f8b5f8fb709569c77b)) + +## [1.104.2](https://github.com/windmill-labs/windmill/compare/v1.104.1...v1.104.2) (2023-05-24) + +### Bug Fixes + +- **python:** fix python execution + ([3e19be1](https://github.com/windmill-labs/windmill/commit/3e19be10039ec21f207499361af0920da42607df)) + +## [1.104.1](https://github.com/windmill-labs/windmill/compare/v1.104.0...v1.104.1) (2023-05-24) + +### Bug Fixes + +- **cli:** avoid looping infinitely and avoid prompt if interactive + ([97b4403](https://github.com/windmill-labs/windmill/commit/97b4403b7aaae80e4801487d7edfce62ccf116da)) +- **cli:** fix hub pull + ([d892ca5](https://github.com/windmill-labs/windmill/commit/d892ca56b7d9fd4f006dfb9f666995d710036422)) +- **cli:** parse schema when pulling from hub + ([6851b86](https://github.com/windmill-labs/windmill/commit/6851b86eb5781cc7c652458503be9374f123f53e)) +- **frontend:** Fix app toolbar z-index + ([#1641](https://github.com/windmill-labs/windmill/issues/1641)) + ([42af285](https://github.com/windmill-labs/windmill/commit/42af2854b28c4149c1def8f7e60c9cb4360a7182)) + +## [1.104.0](https://github.com/windmill-labs/windmill/compare/v1.103.0...v1.104.0) (2023-05-24) + +### Features + +- schedule error handler + ([#1636](https://github.com/windmill-labs/windmill/issues/1636)) + ([34048f9](https://github.com/windmill-labs/windmill/commit/34048f9ea655a0afb1983a169b69b454023ec6a8)) + +### Bug Fixes + +- **cli:** do not rely on x.nest.land + ([ad66bfa](https://github.com/windmill-labs/windmill/commit/ad66bfadaf0c3153975f7452779ac664c0d0dd41)) +- **python:** handle nan + ([de4042e](https://github.com/windmill-labs/windmill/commit/de4042e9dcc813d88ef872f694cf6568b087bd1f)) + +## [1.103.0](https://github.com/windmill-labs/windmill/compare/v1.102.1...v1.103.0) (2023-05-22) + +### Features + +- docker as a new supported language + ([b8da43d](https://github.com/windmill-labs/windmill/commit/b8da43db2c31225b0ade8cd9995aeacf2c0eae86)) +- **frontend:** add flowstatus and log component for apps + ([11a52f2](https://github.com/windmill-labs/windmill/commit/11a52f2d593a9b233fd138c7af52fc34fa1e6173)) +- **frontend:** add plain chartjs component + ([#1621](https://github.com/windmill-labs/windmill/issues/1621)) + ([eb99b73](https://github.com/windmill-labs/windmill/commit/eb99b73346a02993fcaeb6df906fcaf663db259d)) +- **frontend:** disable tabs + ([#1623](https://github.com/windmill-labs/windmill/issues/1623)) + ([5905d3b](https://github.com/windmill-labs/windmill/commit/5905d3b103b0d1466c4d11b248aec9adbe3bfaad)) + +## [1.102.1](https://github.com/windmill-labs/windmill/compare/v1.102.0...v1.102.1) (2023-05-21) + +### Bug Fixes + +- add setVariable to deno-client + ([501bb11](https://github.com/windmill-labs/windmill/commit/501bb11d9676439062be7a96c9f6655c2b609ee1)) + +## [1.102.0](https://github.com/windmill-labs/windmill/compare/v1.101.1...v1.102.0) (2023-05-19) + +### Features + +- add ability to pass the full raw body + ([#1611](https://github.com/windmill-labs/windmill/issues/1611)) + ([b91f7d5](https://github.com/windmill-labs/windmill/commit/b91f7d501390358b01b6656297f56a9f24ef4683)) +- add GOPROXY + fix on saved inputs + ([cdc4f29](https://github.com/windmill-labs/windmill/commit/cdc4f29ec1231820cfb2e0882d167b7dae3ae06e)) +- **backend:** add REQUEST_SIZE_LIMIT env variable + ([1cbd704](https://github.com/windmill-labs/windmill/commit/1cbd704a257bcf2bd7b344958104e5c626c52a79)) +- **backend:** non mapped values are passed as arg 'body' + ([a13d283](https://github.com/windmill-labs/windmill/commit/a13d2832d47d262f0b3ac222a8eb889fb17c75ad)) +- expose a react sdk to integrate windmill into react apps + ([#1605](https://github.com/windmill-labs/windmill/issues/1605)) + ([632be3b](https://github.com/windmill-labs/windmill/commit/632be3b8fb547ca4a2d976f868ee931218b653b3)) +- **frontend:** add presets components + ([#1589](https://github.com/windmill-labs/windmill/issues/1589)) + ([f7338c9](https://github.com/windmill-labs/windmill/commit/f7338c9c9a4cfa10d9c22d32a5ae70c4e3504ef3)) +- **lsp:** add black + ruff + shellcheck + ([#1597](https://github.com/windmill-labs/windmill/issues/1597)) + ([89e55e0](https://github.com/windmill-labs/windmill/commit/89e55e0226d50951c5c99ce789af80ccaa5c1e25)) + +### Bug Fixes + +- **frontend:** Add missing tooltips + multilpe small fix in the app builder + ([#1590](https://github.com/windmill-labs/windmill/issues/1590)) + ([fff2b5a](https://github.com/windmill-labs/windmill/commit/fff2b5a24abdd70371e2b8a49ff810c217c01bb1)) +- **frontend:** Fix inputValue connection to ensure done event is always sent + ([#1607](https://github.com/windmill-labs/windmill/issues/1607)) + ([f27abec](https://github.com/windmill-labs/windmill/commit/f27abecbaca4be46715ef15216492cb0984fe32b)) +- **frontend:** fix pdf header + icon picker + ([#1586](https://github.com/windmill-labs/windmill/issues/1586)) + ([a1cdf13](https://github.com/windmill-labs/windmill/commit/a1cdf13cb33494457e9f3cba24d5c7398565881f)) +- **frontend:** Fix rx + ([#1609](https://github.com/windmill-labs/windmill/issues/1609)) + ([c687a77](https://github.com/windmill-labs/windmill/commit/c687a775eb8efdb792c495bec72e7e547b82c068)) +- **frontend:** Fix the spinning logo position + ([#1595](https://github.com/windmill-labs/windmill/issues/1595)) + ([94b8bc4](https://github.com/windmill-labs/windmill/commit/94b8bc47380ea537512042ae412a3ace1ef709e7)) +- rework multiselect as app component + ([#1599](https://github.com/windmill-labs/windmill/issues/1599)) + ([85576b0](https://github.com/windmill-labs/windmill/commit/85576b00836225656b88c6751fdc619034b1ebca)) + +## [1.101.1](https://github.com/windmill-labs/windmill/compare/v1.101.0...v1.101.1) (2023-05-16) + +### Bug Fixes + +- **backend:** make result job endpoints public + ([41f2d35](https://github.com/windmill-labs/windmill/commit/41f2d35c971c42b9a4842b1411dd21603cabf084)) +- **frontend:** add temp hidden span to compute the text max length + ([#1573](https://github.com/windmill-labs/windmill/issues/1573)) + ([2a17d60](https://github.com/windmill-labs/windmill/commit/2a17d60caaef11f4b6cce464e1905a52095fe228)) +- **frontend:** fix app multi select + ([#1574](https://github.com/windmill-labs/windmill/issues/1574)) + ([45acdc8](https://github.com/windmill-labs/windmill/commit/45acdc895b6b5047a17e59dfcd9ca8cba2dd234a)) + +## [1.101.0](https://github.com/windmill-labs/windmill/compare/v1.100.2...v1.101.0) (2023-05-15) + +### Features + +- **backend:** add job_id as a query arg to force set the new job_id + ([b6c0018](https://github.com/windmill-labs/windmill/commit/b6c0018e2acaaed324832dfc715853ea58a4a268)) +- **frontend:** stepper standalone + ([#1558](https://github.com/windmill-labs/windmill/issues/1558)) + ([ad6e967](https://github.com/windmill-labs/windmill/commit/ad6e967205550b86cc8744f1ce08bb86215ce3e6)) + +### Bug Fixes + +- **frontend:** Handle empty required in SchemaForm + ([#1571](https://github.com/windmill-labs/windmill/issues/1571)) + ([efc4e9c](https://github.com/windmill-labs/windmill/commit/efc4e9ce8a988aacb8e8dda264702dc08d25f7e0)) + +## [1.100.2](https://github.com/windmill-labs/windmill/compare/v1.100.1...v1.100.2) (2023-05-14) + +### Bug Fixes + +- **cli:** update wmill script push + ([678b574](https://github.com/windmill-labs/windmill/commit/678b574efcae66801a115d576db9d00aa9e4145d)) +- discriminate execute apps by component + ([908358e](https://github.com/windmill-labs/windmill/commit/908358eb08614d07b5e846630743242b68b9e149)) +- transform_inputs now only support single line expressions + ([c252b76](https://github.com/windmill-labs/windmill/commit/c252b765f1b1fd38f07cbe06548ca5cbe4047ea1)) + +## [1.100.1](https://github.com/windmill-labs/windmill/compare/v1.100.0...v1.100.1) (2023-05-12) + +### Bug Fixes + +- update setup step + ([178ed6f](https://github.com/windmill-labs/windmill/commit/178ed6f426020c9966380392088562e27aa77cf3)) + +## [1.100.0](https://github.com/windmill-labs/windmill/compare/v1.99.0...v1.100.0) (2023-05-12) + +### Features + +- **frontend:** add download button + ([9b9730d](https://github.com/windmill-labs/windmill/commit/9b9730d2b7239827fd8dfe8f46b6bd98d535e8d0)) + +### Bug Fixes + +- **backend:** handle Date type + ([5e7e46e](https://github.com/windmill-labs/windmill/commit/5e7e46e0259bfc11e92f2446858ddbe9f1b4b08e)) +- **frontend:** apps rendering should not depend on local time + ([8e785d8](https://github.com/windmill-labs/windmill/commit/8e785d8ba6da16d06816d0379cadfb899be99b06)) +- **frontend:** only download result for apps + ([6bbd937](https://github.com/windmill-labs/windmill/commit/6bbd9374cbd2c516dd3b56551103fcfeba01f80f)) + +## [1.99.0](https://github.com/windmill-labs/windmill/compare/v1.98.0...v1.99.0) (2023-05-10) + +### Features + +- **backend:** run endpoints also support support x-www-form-urlencoded encoded + payloads + ([2b57418](https://github.com/windmill-labs/windmill/commit/2b57418427e9417599f9f969cb78088c5166958a)) +- **frontend:** add hide refresh button + ([ef089ab](https://github.com/windmill-labs/windmill/commit/ef089ab56c5ef493118574076d9512ae3b6a42bf)) +- **frontend:** add input library to flow builder + ([957fd81](https://github.com/windmill-labs/windmill/commit/957fd81576dfe65326cad2ed8487121e157e0953)) +- **frontend:** allow copy pasting nested containers + ([742ee3a](https://github.com/windmill-labs/windmill/commit/742ee3a5181fdcfba1f59889a8d99347fd0c4610)) +- **frontend:** app on error + ([#1556](https://github.com/windmill-labs/windmill/issues/1556)) + ([6c2ba05](https://github.com/windmill-labs/windmill/commit/6c2ba053a1a023e454296a5ebf2842abf90362a8)) +- **frontend:** App select tabs + ([#1557](https://github.com/windmill-labs/windmill/issues/1557)) + ([4ad530f](https://github.com/windmill-labs/windmill/commit/4ad530f2f004cb33cbc95d5c3b1591a44f93bdee)) +- **frontend:** conditional rendering + ([#1555](https://github.com/windmill-labs/windmill/issues/1555)) + ([3d371d5](https://github.com/windmill-labs/windmill/commit/3d371d5b6524a4ec0152b15d001d8758900de457)) +- increase timeout to 900 + ([018b504](https://github.com/windmill-labs/windmill/commit/018b504986a6c36c1e5ecbc5e92a763a6b6e613b)) + +### Bug Fixes + +- **backend:** run endpoints also support support x-www-form-urlencoded encoded + payloads + ([5601d04](https://github.com/windmill-labs/windmill/commit/5601d047fe4736a996d064dc8ff34af5d70706a5)) + +## [1.98.0](https://github.com/windmill-labs/windmill/compare/v1.97.0...v1.98.0) (2023-05-09) + +### Features + +- **frontend:** if member of a single workspace, autoset at login + ([2dfb74e](https://github.com/windmill-labs/windmill/commit/2dfb74e7e45b279f5169ac89b483ed336e0bd109)) + +### Bug Fixes + +- **backend:** grant all on raw_app + ([c62670f](https://github.com/windmill-labs/windmill/commit/c62670f735da8378a896b538f3c3afeef100f7ab)) + +## [1.97.0](https://github.com/windmill-labs/windmill/compare/v1.96.3...v1.97.0) (2023-05-09) + +### Features + +- **backend:** add windmill_status_code to run_wait_result + ([38ec7d3](https://github.com/windmill-labs/windmill/commit/38ec7d3a857a19e474f0a1b07b73b85aa5f10f41)) +- **backend:** cache hub scripts in the worker cache + ([7537f1a](https://github.com/windmill-labs/windmill/commit/7537f1a1d7162610f78a7e84a53d57f8478a5965)) +- **backend:** in python, if a value is bytes, it is encoded to base64 + automaticaly + ([6b5ceed](https://github.com/windmill-labs/windmill/commit/6b5ceed6525d4251517627351a15a4fe604629fc)) + +### Bug Fixes + +- **lsp:** handle write_message errors + ([9392890](https://github.com/windmill-labs/windmill/commit/939289030ba667afc9b517dfdc90f26378fa44a6)) + +## [1.96.3](https://github.com/windmill-labs/windmill/compare/v1.96.2...v1.96.3) (2023-05-08) + +### Bug Fixes + +- **cli:** add folder listing + ([c598083](https://github.com/windmill-labs/windmill/commit/c5980839251cdc759c5afc688e7084f5d58ad57f)) +- **cli:** show diffs only with --show-diffs + ([d254088](https://github.com/windmill-labs/windmill/commit/d254088fce00091352ad95888deeaf88bc6c9d6f)) +- **cli:** show diffs only with --show-diffs + ([37f08e9](https://github.com/windmill-labs/windmill/commit/37f08e9357c7a74a1c6cdc18bad2d6dc4de5d33d)) +- **cli:** variable updating + ([2639250](https://github.com/windmill-labs/windmill/commit/2639250b43c3c55f5b9a43f4020fc2f0747e792b)) + +## [1.96.2](https://github.com/windmill-labs/windmill/compare/v1.96.1...v1.96.2) (2023-05-08) + +### Bug Fixes + +- **cli:** add debug mode to CLI + improve error output + ([8f1cdf1](https://github.com/windmill-labs/windmill/commit/8f1cdf1d61adf80bf0d7c4a5160fd3085d3814ac)) + +## [1.96.1](https://github.com/windmill-labs/windmill/compare/v1.96.0...v1.96.1) (2023-05-08) + +### Bug Fixes + +- **cli:** fix cli folder sync + ([239f401](https://github.com/windmill-labs/windmill/commit/239f40199955d47e4943be4c72c3d150a58f2dd9)) +- **cli:** fix cli folder sync + ([a90514b](https://github.com/windmill-labs/windmill/commit/a90514b8e99a419c26512eb370895322088b6aa9)) + +## [1.96.0](https://github.com/windmill-labs/windmill/compare/v1.95.1...v1.96.0) (2023-05-08) + +### Features + +- add support for full fleged apps (react, svelte, vue) + ([#1536](https://github.com/windmill-labs/windmill/issues/1536)) + ([13242ab](https://github.com/windmill-labs/windmill/commit/13242abff153b021cac1ecaa3cbf65ae9d87fb69)) +- **frontend:** Add a custom deepEqualWithOrderedArray to handle orde… + ([#1537](https://github.com/windmill-labs/windmill/issues/1537)) + ([3a291f7](https://github.com/windmill-labs/windmill/commit/3a291f7108623b5c7194f0a7f6a3774499669313)) +- **frontend:** Add label, description, input style + add displayType… + ([#1540](https://github.com/windmill-labs/windmill/issues/1540)) + ([bef829d](https://github.com/windmill-labs/windmill/commit/bef829d4805bb6c5330b13dc17c9a89a84ad48ca)) +- **frontend:** app modal + ([#1518](https://github.com/windmill-labs/windmill/issues/1518)) + ([686f5bb](https://github.com/windmill-labs/windmill/commit/686f5bbe1847cb2a92678e7cfdbb51ecf6bbe2b6)) + +## [1.95.1](https://github.com/windmill-labs/windmill/compare/v1.95.0...v1.95.1) (2023-05-06) + +### Bug Fixes + +- **cli:** cli flow sync improvements + ([e585e3a](https://github.com/windmill-labs/windmill/commit/e585e3aea2b18b6dc0c9fa7ffa1e6c1dfb2a3ce2)) + +## [1.95.0](https://github.com/windmill-labs/windmill/compare/v1.94.0...v1.95.0) (2023-05-05) + +### Features + +- **backend:** default parameters are used in python if missing from args + ([8791a86](https://github.com/windmill-labs/windmill/commit/8791a86a936301d44ae05ea09d26c9815abf8929)) +- **frontend:** App Schema Form component + ([#1533](https://github.com/windmill-labs/windmill/issues/1533)) + ([85c0d93](https://github.com/windmill-labs/windmill/commit/85c0d939f59411d023cd4b173ce11224d3cbc9db)) +- **frontend:** App stepper + ([#1529](https://github.com/windmill-labs/windmill/issues/1529)) + ([15f1c94](https://github.com/windmill-labs/windmill/commit/15f1c947bb233147f7da261fd32054a51a9c6efa)) +- **frontend:** Merge run configuration + triggers + ([#1530](https://github.com/windmill-labs/windmill/issues/1530)) + ([1be4658](https://github.com/windmill-labs/windmill/commit/1be4658150ef20a9f1f0fe57b5f30ba3c2d4d94e)) + +## [1.94.0](https://github.com/windmill-labs/windmill/compare/v1.93.1...v1.94.0) (2023-05-04) + +### Features + +- **frontend:** add eval badge + alert + ([#1522](https://github.com/windmill-labs/windmill/issues/1522)) + ([32f04c7](https://github.com/windmill-labs/windmill/commit/32f04c796856fa48ddc1548752ba1e7a8802083a)) + +### Bug Fixes + +- **backend:** fix python transformers + ([a07e3e8](https://github.com/windmill-labs/windmill/commit/a07e3e84386c0895a7209fc87a4b07218271feca)) +- **frontend:** fix ArrayStaticInputEditor width + ([#1528](https://github.com/windmill-labs/windmill/issues/1528)) + ([b423eec](https://github.com/windmill-labs/windmill/commit/b423eec019785a62c279db01fc93eb3fe08f7f1f)) +- **frontend:** fix select width + ([#1526](https://github.com/windmill-labs/windmill/issues/1526)) + ([f248c09](https://github.com/windmill-labs/windmill/commit/f248c09655889ddace24f451597a56e81443be3c)) +- **frontend:** preserve customise arguments + ([b4867f1](https://github.com/windmill-labs/windmill/commit/b4867f12bb4f595b5b0e8142ab5d720307ecadd3)) + +## [1.93.1](https://github.com/windmill-labs/windmill/compare/v1.93.0...v1.93.1) (2023-05-03) + +### Bug Fixes + +- **cli:** add yaml support for cli + ([03e6017](https://github.com/windmill-labs/windmill/commit/03e6017860526784f1a8696eceed5750b25f1c5c)) + +## [1.93.0](https://github.com/windmill-labs/windmill/compare/v1.92.2...v1.93.0) (2023-05-03) + +### Features + +- **frontend:** add recompute others to background scripts + ([392d0f8](https://github.com/windmill-labs/windmill/commit/392d0f8b876c9b587fe85421098f3eceb8a74dec)) + +### Bug Fixes + +- **frontend:** deploy path for apps + ([7ac9677](https://github.com/windmill-labs/windmill/commit/7ac96771a5c3d44234c790e8cea3d621d8c1d00e)) + +## [1.93.0](https://github.com/windmill-labs/windmill/compare/v1.92.2...v1.93.0) (2023-05-03) + +### Features + +- **frontend:** add recompute others to background scripts + ([392d0f8](https://github.com/windmill-labs/windmill/commit/392d0f8b876c9b587fe85421098f3eceb8a74dec)) + +### Bug Fixes + +- **frontend:** deploy path for apps + ([7ac9677](https://github.com/windmill-labs/windmill/commit/7ac96771a5c3d44234c790e8cea3d621d8c1d00e)) + +## [1.92.2](https://github.com/windmill-labs/windmill/compare/v1.92.1...v1.92.2) (2023-05-02) + +### Bug Fixes + +- **go-client:** fix go-client gen + ([82c4d66](https://github.com/windmill-labs/windmill/commit/82c4d6629e134f00389c87a948c52878e5a3f4f5)) + +## [1.92.1](https://github.com/windmill-labs/windmill/compare/v1.92.0...v1.92.1) (2023-05-02) + +### Bug Fixes + +- **go-client:** fix go-client gen + ([df333d9](https://github.com/windmill-labs/windmill/commit/df333d9739f601714f7a0124f47422dfb113d320)) + +## [1.92.0](https://github.com/windmill-labs/windmill/compare/v1.91.0...v1.92.0) (2023-05-02) + +### Features + +- **frontend:** add labels as table action + ([64065c1](https://github.com/windmill-labs/windmill/commit/64065c17f305fb4c7c078c7fa4935d5423da8f66)) +- **frontend:** add labels as table action + ([2ab1714](https://github.com/windmill-labs/windmill/commit/2ab1714dfa7cffc46b4b6aa40dabdd92c5a6270f)) +- **frontend:** allow running eval in every field + ([62acbb5](https://github.com/windmill-labs/windmill/commit/62acbb5ab3a0727b306e25a80b74ac8216619501)) +- **frontend:** background script can run script and flows + ([#1515](https://github.com/windmill-labs/windmill/issues/1515)) + ([607c803](https://github.com/windmill-labs/windmill/commit/607c803be91921b53f329a2c2c3c129ce53d6c0c)) + +### Bug Fixes + +- **frontend:** fix small ui issues + ([#1513](https://github.com/windmill-labs/windmill/issues/1513)) + ([f6ff8ca](https://github.com/windmill-labs/windmill/commit/f6ff8ca232f5725f86a36379956da2731def2580)) + +## [1.91.0](https://github.com/windmill-labs/windmill/compare/v1.90.0...v1.91.0) (2023-05-01) + +### Features + +- add drafts for apps + ([f7374c8](https://github.com/windmill-labs/windmill/commit/f7374c8204f85b4371e61f34dcd4b66857c0f8ab)) +- introduce backend persisted draft systems for scripts + ([88e37fe](https://github.com/windmill-labs/windmill/commit/88e37fe0bed58f396690622e925d5e078c60140c)) +- introduce draft for flows + ([a196642](https://github.com/windmill-labs/windmill/commit/a1966427e893dc8a58c8f2862ded752884843813)) + +## [1.90.0](https://github.com/windmill-labs/windmill/compare/v1.89.0...v1.90.0) (2023-04-28) + +### Features + +- **backend:** add EXIT_AFTER_NO_JOB_FOR_SECS for ephemeral workers + ([de9abd1](https://github.com/windmill-labs/windmill/commit/de9abd129db13dcdf0e69e2c1e2d3aa558fb783a)) +- **backend:** add JOB_RETENTION_SECS to delete completed jobs completed after + expiration period + ([0b7bad3](https://github.com/windmill-labs/windmill/commit/0b7bad3816e61841ef4765db7881227274c20b23)) +- **backend:** expose tag in the job + ([#1486](https://github.com/windmill-labs/windmill/issues/1486)) + ([324d4f5](https://github.com/windmill-labs/windmill/commit/324d4f5e9e89e6de600e882f23bf545c0b1dc539)) +- **frontend:** adapt style + ([#1488](https://github.com/windmill-labs/windmill/issues/1488)) + ([41a24ec](https://github.com/windmill-labs/windmill/commit/41a24ecd36d9cc537cbd1dd0cd1de6f689be1b8c)) +- **frontend:** add an eval input component for flow + ([#1494](https://github.com/windmill-labs/windmill/issues/1494)) + ([2815f1e](https://github.com/windmill-labs/windmill/commit/2815f1ec71177bb6e89d0d62a8df89030d37b1fc)) +- **frontend:** Add new integration icons + ([#1479](https://github.com/windmill-labs/windmill/issues/1479)) + ([7adacd4](https://github.com/windmill-labs/windmill/commit/7adacd4c9f03d17b47abc515bc391e348a7e6ec1)) +- **frontend:** refactor inline script + ([#1480](https://github.com/windmill-labs/windmill/issues/1480)) + ([05c837e](https://github.com/windmill-labs/windmill/commit/05c837e64f61bfb22ae1f80263deb1c879030985)) +- **frontend:** Schedules run now + ([#1475](https://github.com/windmill-labs/windmill/issues/1475)) + ([47f0f35](https://github.com/windmill-labs/windmill/commit/47f0f35236e02958f6bc00b5652e06e25eabeaf5)) +- **frontend:** Small style fix + ([#1473](https://github.com/windmill-labs/windmill/issues/1473)) + ([7ad496a](https://github.com/windmill-labs/windmill/commit/7ad496ad3f746ffd782856a35c1456999792fa94)) +- **frontend:** Support TS union type with a select field + ([#1457](https://github.com/windmill-labs/windmill/issues/1457)) + ([8b76324](https://github.com/windmill-labs/windmill/commit/8b763249cb1360c122cc81d50a1a95d1ad3ddd5b)) + +### Bug Fixes + +- **frontend:** Allow 0 as select default value + ([#1474](https://github.com/windmill-labs/windmill/issues/1474)) + ([d8529ff](https://github.com/windmill-labs/windmill/commit/d8529ff3ed6168de60bb24626a3e36ab4beae15c)) +- **frontend:** close the modal before deleting a form modal + ([#1484](https://github.com/windmill-labs/windmill/issues/1484)) + ([430c733](https://github.com/windmill-labs/windmill/commit/430c73399b7e1524ee81d0ce8d7d2eaf16117f9a)) +- **frontend:** fix apply connection + ([#1487](https://github.com/windmill-labs/windmill/issues/1487)) + ([cf59cc0](https://github.com/windmill-labs/windmill/commit/cf59cc04efb853fe06a23042115128689b5d26ee)) +- **frontend:** Fix frontend script + ([#1476](https://github.com/windmill-labs/windmill/issues/1476)) + ([b60a7f6](https://github.com/windmill-labs/windmill/commit/b60a7f63d04b1fc851479060e77613c77d20198a)) +- **frontend:** fix recomputa all + ([#1491](https://github.com/windmill-labs/windmill/issues/1491)) + ([fb05a09](https://github.com/windmill-labs/windmill/commit/fb05a09955f937000fbba0826c03c52e65aa146e)) +- **frontend:** Flow editor design updates + ([#1477](https://github.com/windmill-labs/windmill/issues/1477)) + ([50d814c](https://github.com/windmill-labs/windmill/commit/50d814c3dc55841b16cd1df8ae86d021de4e880c)) +- **frontend:** Minor app editor updates + ([#1458](https://github.com/windmill-labs/windmill/issues/1458)) + ([8fd10b1](https://github.com/windmill-labs/windmill/commit/8fd10b1f5813b3f4200a980de4a85e7d701660a7)) +- **frontend:** register applyConnection as a callback to remove unnecessary + reactivit ([#1485](https://github.com/windmill-labs/windmill/issues/1485)) + ([d915f6b](https://github.com/windmill-labs/windmill/commit/d915f6b004ea7cc27a3c55b3504df902f5db1aef)) +- **frontend:** reset ui job loading state when submitting preview job triggers + error ([#1483](https://github.com/windmill-labs/windmill/issues/1483)) + ([6f8616f](https://github.com/windmill-labs/windmill/commit/6f8616fb273b1f4a1489878a617d239f30ecb1c0)) +- **frontend:** Update CLI login request styling + ([#1454](https://github.com/windmill-labs/windmill/issues/1454)) + ([c77393c](https://github.com/windmill-labs/windmill/commit/c77393c15444868308b44a72bee89e49fc23d80f)) +- **frontend:** Update direct exports + ([#1456](https://github.com/windmill-labs/windmill/issues/1456)) + ([4a2af13](https://github.com/windmill-labs/windmill/commit/4a2af1359ee29001236591f685cacfa9df6715df)) + +## [1.89.0](https://github.com/windmill-labs/windmill/compare/v1.88.1...v1.89.0) (2023-04-23) + +### Features + +- **backend:** global cache refactor for pip using tar for each dependency + ([#1443](https://github.com/windmill-labs/windmill/issues/1443)) + ([369dd0d](https://github.com/windmill-labs/windmill/commit/369dd0dac61e5430856ed9abf7129bbad3b75860)) +- **backend:** only run fully deployed scripts + ([3d031c7](https://github.com/windmill-labs/windmill/commit/3d031c701705459f418b11d2ca83e71943e4079b)) +- **backend:** worker groups + ([#1452](https://github.com/windmill-labs/windmill/issues/1452)) + ([722783f](https://github.com/windmill-labs/windmill/commit/722783f7f630e3123ffd2605deb21a915188bd20)) +- **backend:** workers are instantly ready and sync with global cache in + background + ([670ba51](https://github.com/windmill-labs/windmill/commit/670ba51d9bd9a9a0b07a2ed064c316234bb5819d)) +- **ee:** sync cache in background + ([c919827](https://github.com/windmill-labs/windmill/commit/c919827cf8eb9437b6d9bd57b3d3ad883a66de3b)) +- **ee:** sync cache in background + ([0e77e37](https://github.com/windmill-labs/windmill/commit/0e77e37fbddbb517d5e1b1f07a27a40b63371439)) +- **frontend:** Add documentation links + ([#1399](https://github.com/windmill-labs/windmill/issues/1399)) + ([36acbf7](https://github.com/windmill-labs/windmill/commit/36acbf793b6714dffe4dbb0e2501b9438f034858)) +- **frontend:** Add seconds input + ([#1445](https://github.com/windmill-labs/windmill/issues/1445)) + ([30bf7ad](https://github.com/windmill-labs/windmill/commit/30bf7ad3e9785420b4dcd814ce3c7a444d23cc9f)) +- **frontend:** add toast actions + ([#1411](https://github.com/windmill-labs/windmill/issues/1411)) + ([d173232](https://github.com/windmill-labs/windmill/commit/d17323286a05aa0b1680ef94d7058d2c8902782f)) +- **frontend:** reorder array items in app editor + ([#1426](https://github.com/windmill-labs/windmill/issues/1426)) + ([3615fb2](https://github.com/windmill-labs/windmill/commit/3615fb26fb91d64626d82ace6e6275e424ece832)) +- **frontend:** support showing metadata on script add via query param + ([#1438](https://github.com/windmill-labs/windmill/issues/1438)) + ([3c98452](https://github.com/windmill-labs/windmill/commit/3c98452f50913ef639eba96996f3a6c80508bd63)) + +### Bug Fixes + +- **backend:** avoid potential conflict between pull from tar and background + sync + ([d76e907](https://github.com/windmill-labs/windmill/commit/d76e90757e209263da7f79fa85052969e7efd63d)) +- **backend:** global cache synco only start if all piptars have been downloaded + ([5f8a730](https://github.com/windmill-labs/windmill/commit/5f8a730fdfbb9e3d518555f7272a3bb297725f28)) +- **frontend:** App color picker overflow issue + ([#1449](https://github.com/windmill-labs/windmill/issues/1449)) + ([32903d2](https://github.com/windmill-labs/windmill/commit/32903d2839a082d53168bb9177fc88f6ab0ec482)) +- **frontend:** fix copy content button width + ([#1428](https://github.com/windmill-labs/windmill/issues/1428)) + ([d96d4a5](https://github.com/windmill-labs/windmill/commit/d96d4a524edebea65bc602194c8f11f5d69e920a)) +- **frontend:** Minor update of app default codes + ([#1440](https://github.com/windmill-labs/windmill/issues/1440)) + ([fe75aa1](https://github.com/windmill-labs/windmill/commit/fe75aa18f2f27745db35329aa60938694640a8c6)) +- **frontend:** Update app default codes + ([#1432](https://github.com/windmill-labs/windmill/issues/1432)) + ([c8acfbc](https://github.com/windmill-labs/windmill/commit/c8acfbc1ff0f6c23e5a2229ca83a3b09eec826c3)) +- **frontend:** Update app mobile preview width + ([#1431](https://github.com/windmill-labs/windmill/issues/1431)) + ([1764613](https://github.com/windmill-labs/windmill/commit/17646130bcf8cf646a4ccdfa39f9a8791876a137)) +- **frontend:** Update flow tooltip z-indexes + ([#1433](https://github.com/windmill-labs/windmill/issues/1433)) + ([17cb8fc](https://github.com/windmill-labs/windmill/commit/17cb8fc3fa0b39a9750e61ca2731a15bbda690ec)) +- **frontend:** Update flow viewer styling + ([#1441](https://github.com/windmill-labs/windmill/issues/1441)) + ([46a29b5](https://github.com/windmill-labs/windmill/commit/46a29b5d27b8d9f7ea38c1063fc081ed5933db5d)) + +## [1.88.1](https://github.com/windmill-labs/windmill/compare/v1.88.0...v1.88.1) (2023-04-18) + +### Bug Fixes + +- **frontend:** fix hub list + ([1144329](https://github.com/windmill-labs/windmill/commit/1144329972fb61e2df62873ca1e485c88fabc478)) + +## [1.88.0](https://github.com/windmill-labs/windmill/compare/v1.87.0...v1.88.0) (2023-04-17) + +### Features + +- **backend:** install python scripts on save + ([cb7e686](https://github.com/windmill-labs/windmill/commit/cb7e686dd95397d5b37edd5aac50b6d1429c4a71)) +- **frontend:** Add runs preview popup + ([#1405](https://github.com/windmill-labs/windmill/issues/1405)) + ([4ab023f](https://github.com/windmill-labs/windmill/commit/4ab023f95085958ab1ad01dc249d308c7ebf423e)) +- **frontend:** cancellable inline script editor run + ([e828d26](https://github.com/windmill-labs/windmill/commit/e828d2673e62e95e5e1235eeca8107ac7cfb7e45)) +- **frontend:** Remove gap when button label is empty + ([#1402](https://github.com/windmill-labs/windmill/issues/1402)) + ([568f59e](https://github.com/windmill-labs/windmill/commit/568f59eefb104047b8ef063f273fe238075d6407)) +- **frontend:** Unify main lists + ([#1406](https://github.com/windmill-labs/windmill/issues/1406)) + ([48bbbd0](https://github.com/windmill-labs/windmill/commit/48bbbd0e872a12ed1c562a6d14967a2a0f7c4735)) +- **frontend:** Update airtable instructions + ([#1403](https://github.com/windmill-labs/windmill/issues/1403)) + ([7dc7ece](https://github.com/windmill-labs/windmill/commit/7dc7ecef55b465fc096f71fc9de5c8b543136ff7)) +- inputs library on run page + ([92a2934](https://github.com/windmill-labs/windmill/commit/92a293488e8e58350229931ab69f7924d58474be)) + +### Bug Fixes + +- **backend:** deno uses --no-check + ([a5499c2](https://github.com/windmill-labs/windmill/commit/a5499c26f3ebd8b07541a7e0cbf33a7008a8f476)) +- **backend:** do not fail on schedule not existing anymore + ([a5f6d73](https://github.com/windmill-labs/windmill/commit/a5f6d73f7d53d7af9d285a85460509763263c508)) +- **frontend:** Fix app file uploads + ([#1408](https://github.com/windmill-labs/windmill/issues/1408)) + ([ac489ac](https://github.com/windmill-labs/windmill/commit/ac489ac2da0fbf01f5e2877612c14cfaf1ef79c2)) +- **frontend:** fix buttons width + ([#1407](https://github.com/windmill-labs/windmill/issues/1407)) + ([75a0482](https://github.com/windmill-labs/windmill/commit/75a0482ef046dd7e30f6d6039dbc66880182dc5e)) +- **frontend:** fix enum sync + ([#1410](https://github.com/windmill-labs/windmill/issues/1410)) + ([98060ce](https://github.com/windmill-labs/windmill/commit/98060ce55d5efa59a8989cf9357935976d57650b)) +- **frontend:** Handle scheduled runs in preview + ([#1413](https://github.com/windmill-labs/windmill/issues/1413)) + ([accdc1a](https://github.com/windmill-labs/windmill/commit/accdc1ac59ce9611f66567222a73995d3c0a3f9d)) +- **frontend:** Keep selected tab during renaming + ([#1409](https://github.com/windmill-labs/windmill/issues/1409)) + ([82cd048](https://github.com/windmill-labs/windmill/commit/82cd048ef4d08f31660f6f31a96940676a28996c)) +- **frontend:** Queued-running jobs preview + ([#1414](https://github.com/windmill-labs/windmill/issues/1414)) + ([b2a40a0](https://github.com/windmill-labs/windmill/commit/b2a40a05805344c1c34f2ba917b4cdd52dfffc3f)) +- **frontend:** Remove output when deleting a component + ([#1397](https://github.com/windmill-labs/windmill/issues/1397)) + ([6aa1008](https://github.com/windmill-labs/windmill/commit/6aa100893352870d5a99fdd56d7f1425a221a273)) + +## [1.87.0](https://github.com/windmill-labs/windmill/compare/v1.86.0...v2.0.0) (2023-04-11) + +### ⚠ BREAKING CHANGES + +- **frontend:** Add option to return file names + ([#1380](https://github.com/windmill-labs/windmill/issues/1380)) + +### Features + +- **backend:** add instance events webhook + ([f2d3c82](https://github.com/windmill-labs/windmill/commit/f2d3c8208b6daa49f304f355752145de47138a3c)) +- **backend:** extend cached resolution for go + ([dac61d1](https://github.com/windmill-labs/windmill/commit/dac61d1c982576d7589e16ab01c8cc8bad6e1686)) +- **backend:** Redis based queue + ([#1324](https://github.com/windmill-labs/windmill/issues/1324)) + ([d45e6c9](https://github.com/windmill-labs/windmill/commit/d45e6c94abed609357b18d4daa7de6b2ea0ba978)) +- **frontend:** Add option to return file names + ([#1380](https://github.com/windmill-labs/windmill/issues/1380)) + ([3dabac1](https://github.com/windmill-labs/windmill/commit/3dabac153f302f48210d15ebaec514e72717300f)) +- **python:** cache dependency resolution + ([facb670](https://github.com/windmill-labs/windmill/commit/facb67093ce7d3b0874d0d559fb272ed822ce360)) + +### Bug Fixes + +- **backend:** nested deno relative imports + ([955a213](https://github.com/windmill-labs/windmill/commit/955a213a504c1f3b8811c930823e87fe7dba101a)) +- **cli:** overwrite archived scripts + ([1f705ca](https://github.com/windmill-labs/windmill/commit/1f705cab2ce8c79829f22fc6af9e06ecba7450b1)) +- **frontend:** Add missing stopPropagation + ([#1394](https://github.com/windmill-labs/windmill/issues/1394)) + ([58d4b55](https://github.com/windmill-labs/windmill/commit/58d4b556ebbd76c6f07f1a16d601a9d824b99f7e)) +- **frontend:** fix app init issue + ([d0e0e1f](https://github.com/windmill-labs/windmill/commit/d0e0e1fdf27d9a7fb86c66e43398786b64d8b6b7)) +- **frontend:** Fix frontend dependencies + ([#1379](https://github.com/windmill-labs/windmill/issues/1379)) + ([8e9c491](https://github.com/windmill-labs/windmill/commit/8e9c49165060a4a7f831b8be075593f89d867784)) +- **frontend:** Fix icon picker input + ([#1389](https://github.com/windmill-labs/windmill/issues/1389)) + ([8a44f8e](https://github.com/windmill-labs/windmill/commit/8a44f8e7796f13698e2a99af9f3772f5e676604b)) +- **frontend:** Fix mac shortcuts + ([#1381](https://github.com/windmill-labs/windmill/issues/1381)) + ([41831d5](https://github.com/windmill-labs/windmill/commit/41831d58ed593bb283600b76170f6e76783e0eae)) +- **frontend:** fix popover configuration to avoid content shift + ([#1377](https://github.com/windmill-labs/windmill/issues/1377)) + ([2031e1e](https://github.com/windmill-labs/windmill/commit/2031e1ebd0dc020da104ee84a0294c86babcefaf)) +- **frontend:** remove stopPropagation that was preventing components dnd + ([#1378](https://github.com/windmill-labs/windmill/issues/1378)) + ([de8dc1e](https://github.com/windmill-labs/windmill/commit/de8dc1e9cd7beea2ce62656e9e7676214f77a110)) + +### Performance Improvements + +- parallelize more operations for deno jobs + ([e911869](https://github.com/windmill-labs/windmill/commit/e911869d990956463834ac9ff35c52ba8236e362)) + +## [1.86.0](https://github.com/windmill-labs/windmill/compare/v1.85.0...v1.86.0) (2023-04-08) + +### Features + +- **backend:** add /ready endpoint for workers + ([94eecea](https://github.com/windmill-labs/windmill/commit/94eecea02b6295ad5674db4b010bf6ab7984fa17)) +- **backend:** add GET endpoint to trigger scripts + ([15c75d9](https://github.com/windmill-labs/windmill/commit/15c75d9d00a69ae97123ed371b9657e298345bdb)) +- **backend:** lowercase all emails in relevant endpoints + ([#1361](https://github.com/windmill-labs/windmill/issues/1361)) + ([7f9050b](https://github.com/windmill-labs/windmill/commit/7f9050b285cf8f7f6baf05452b673f58988c452c)) +- **cli:** add getFullResource + ([3a232db](https://github.com/windmill-labs/windmill/commit/3a232dbb5792c28b26747e1ba260fffcdd4a8416)) +- do cache bucket syncing in background + check tar before pushing it + ([#1360](https://github.com/windmill-labs/windmill/issues/1360)) + ([3e5ff86](https://github.com/windmill-labs/windmill/commit/3e5ff8682a298ba9e59b2662c4c04c5698447204)) +- **frontend:** add flow expand button + ([34a8b01](https://github.com/windmill-labs/windmill/commit/34a8b01b762c0b210d76101e7da7bd2397258e8d)) +- **frontend:** add impersonate api + local resolution of import by lsp v0 + ([7675f08](https://github.com/windmill-labs/windmill/commit/7675f08b7bfe319e496a86a7ef1ab7cc8c1d12d2)) +- **frontend:** add workspace to ctx + ([8f7a11b](https://github.com/windmill-labs/windmill/commit/8f7a11b8964e2c3405ce3689f9cf2298f9e71c75)) +- **frontend:** Improve login + toasts + ([#1363](https://github.com/windmill-labs/windmill/issues/1363)) + ([92be102](https://github.com/windmill-labs/windmill/commit/92be102a070b1f17b9d3e40524cd21b54301b5a7)) +- **frontend:** make script editor a single page + ([b84be60](https://github.com/windmill-labs/windmill/commit/b84be60c53ca1ef65826123f39099d33c1f549c0)) +- **frontend:** Tone down text + display whole text + ([#1366](https://github.com/windmill-labs/windmill/issues/1366)) + ([f214d5f](https://github.com/windmill-labs/windmill/commit/f214d5f96b6ac26cd3ef90a6ab696a6dfe02b3f0)) +- improved cron/schedule editor + ([#1362](https://github.com/windmill-labs/windmill/issues/1362)) + ([17176bb](https://github.com/windmill-labs/windmill/commit/17176bb8d112b35228ce9183f4b2f81abe9e5b6e)) + +### Bug Fixes + +- **backend:** allow cors + ([8a594a8](https://github.com/windmill-labs/windmill/commit/8a594a89adba9915508884f900f58c4ab53cdfec)) +- **backend:** allow longer name/company + ([eff61bb](https://github.com/windmill-labs/windmill/commit/eff61bb8d3496bc1c5be4b1051f99ed4470a47ff)) +- **backend:** always flush bash output + ([517b2c9](https://github.com/windmill-labs/windmill/commit/517b2c9cca54628c8ee692d65c05bc2513eaaf22)) +- **backend:** always flush bash output + ([7a9091f](https://github.com/windmill-labs/windmill/commit/7a9091fed6aa99201b75bab88d4faddbe041eee4)) +- **backend:** inline script app python fix + ([8c72722](https://github.com/windmill-labs/windmill/commit/8c72722710db8e3720b01180b504cbc66e79f5ca)) +- **frontend:** Add FlowGraph display on Safari + ([#1351](https://github.com/windmill-labs/windmill/issues/1351)) + ([2819b09](https://github.com/windmill-labs/windmill/commit/2819b09ce5011a467e994ee8b1f09cf33145003d)) +- **frontend:** Fix button poppup + ([#1368](https://github.com/windmill-labs/windmill/issues/1368)) + ([a344928](https://github.com/windmill-labs/windmill/commit/a344928f251d697f53e40c517b0b86bd90e0ad52)) +- **frontend:** Fix connected property + ([#1371](https://github.com/windmill-labs/windmill/issues/1371)) + ([4af39f0](https://github.com/windmill-labs/windmill/commit/4af39f081bf3d07aaade39e5a5a221741fe8f973)) +- **frontend:** Fix flow templateEditor + ([#1367](https://github.com/windmill-labs/windmill/issues/1367)) + ([51fc436](https://github.com/windmill-labs/windmill/commit/51fc436456104c2d6a3cd6f6d62f08929e40d450)) +- **frontend:** make croninput a builder rather than a tab + ([266b5b0](https://github.com/windmill-labs/windmill/commit/266b5b00da3bd7643eaa5dba1b8c1456f11c5e30)) +- **frontend:** Minor fixes + ([#1374](https://github.com/windmill-labs/windmill/issues/1374)) + ([76a2a1d](https://github.com/windmill-labs/windmill/commit/76a2a1db363facbaf9a0e9618f169d6cc66e946f)) +- no need to map internal ports to hosts + ([#1365](https://github.com/windmill-labs/windmill/issues/1365)) + ([4ec035b](https://github.com/windmill-labs/windmill/commit/4ec035b09a58f8859bc576b03c24cc73f335f32d)) + +## [1.85.0](https://github.com/windmill-labs/windmill/compare/v1.84.1...v1.85.0) (2023-04-03) + +### Features + +- add local cache for folder path used + invalidate cache on folder creation + ([018b051](https://github.com/windmill-labs/windmill/commit/018b051781e3f40b9d1da8ccdd5edb1cd49877ba)) +- **frontend:** add agGrid api hooks + ready + ([de1e294](https://github.com/windmill-labs/windmill/commit/de1e29492c9aefdfc59f605ba81f7c51a96bf2f3)) +- **frontend:** Add ID renaming popup + ([#1344](https://github.com/windmill-labs/windmill/issues/1344)) + ([0b8a08c](https://github.com/windmill-labs/windmill/commit/0b8a08cb49644da7c354c3631751e925ac5353b9)) + +### Bug Fixes + +- **backend:** improve handling subflow with many depth using tailrec + ([8c53598](https://github.com/windmill-labs/windmill/commit/8c53598aba3fb89f4174d1c0ab3912096ac07c96)) +- **backend:** improve subflow processing + ([390a988](https://github.com/windmill-labs/windmill/commit/390a988d4c96256a4fbd6a9302fc47a5648c2c43)) +- **frontend:** PDF reader header positioning + ([#1350](https://github.com/windmill-labs/windmill/issues/1350)) + ([daf8276](https://github.com/windmill-labs/windmill/commit/daf827666b13917f8c9abeab5bb2b072bd0fef0b)) + +## [1.84.1](https://github.com/windmill-labs/windmill/compare/v1.84.0...v1.84.1) (2023-03-31) + +### Bug Fixes + +- **cli:** overwrite instead of smart diff + ([b6d5eef](https://github.com/windmill-labs/windmill/commit/b6d5eef5479e38cc36af2db67d4c45f78c622b9a)) + +## [1.84.0](https://github.com/windmill-labs/windmill/compare/v1.83.1...v1.84.0) (2023-03-31) + +### Features + +- add force cancel + ([fbe5c18](https://github.com/windmill-labs/windmill/commit/fbe5c18da02763371e6f32c898b31a6a29984b45)) +- add the ability to edit previous versions + ([2368da2](https://github.com/windmill-labs/windmill/commit/2368da214660ff1835b49b4c2c87256c9bd565cf)) +- **backend:** reduce memory allocation for big forloops of flows + ([c7506e4](https://github.com/windmill-labs/windmill/commit/c7506e4daec5b12bf908e6954bf6f3521a97b3ba)) +- **frontend:** App component style input grouping + ([#1334](https://github.com/windmill-labs/windmill/issues/1334)) + ([01564f0](https://github.com/windmill-labs/windmill/commit/01564f0a1c26ee9f065bb0adeb7d5e8df0b2e5b5)) +- **frontend:** Display frontend execution result in Debug Runs + ([#1341](https://github.com/windmill-labs/windmill/issues/1341)) + ([57f8dd9](https://github.com/windmill-labs/windmill/commit/57f8dd9570577a58fe91d93c7a9d1a9b4dc69598)) +- **frontend:** improve input connection UI + ([#1333](https://github.com/windmill-labs/windmill/issues/1333)) + ([5ac646e](https://github.com/windmill-labs/windmill/commit/5ac646e859a07efb65542aae9365aa7791ce1097)) + +### Bug Fixes + +- **backend:** add a refresh button to workspace script/hub + ([bb61cef](https://github.com/windmill-labs/windmill/commit/bb61cef0e56bf7fa7f8a5f91dabd590afd5db791)) +- **backend:** backend compatability on macos + ([#1340](https://github.com/windmill-labs/windmill/issues/1340)) + ([dfd2abc](https://github.com/windmill-labs/windmill/commit/dfd2abc76466cddca98f93fd82be91ba5d3076e0)) +- **frontend:** Export python code as string + ([#1339](https://github.com/windmill-labs/windmill/issues/1339)) + ([2779891](https://github.com/windmill-labs/windmill/commit/277989141100b033b26b496b8a55d97d48cf7e81)) +- **frontend:** improve app tables + ([cd1f9b6](https://github.com/windmill-labs/windmill/commit/cd1f9b6baa0dadfb14fee3a586a4b6b164e5e402)) +- **frontend:** improve loading of big args in job details + ([71619ac](https://github.com/windmill-labs/windmill/commit/71619acdfac010822c1eac496a6f3f869e6ca6fb)) +- **frontend:** improve loading of big jobs in run form + ([b325493](https://github.com/windmill-labs/windmill/commit/b3254938fe58d8c00a0c4347e7ef519e3a6e4031)) + +## [1.83.1](https://github.com/windmill-labs/windmill/compare/v1.83.0...v1.83.1) (2023-03-28) + +### Bug Fixes + +- **cli:** plain secrets might be undefined + ([569a55e](https://github.com/windmill-labs/windmill/commit/569a55e45b34641b0fb4569387166f3aa89ce35f)) + +## [1.83.0](https://github.com/windmill-labs/windmill/compare/v1.82.0...v1.83.0) (2023-03-28) + +### Features + +- **backend:** allow relative imports for python + ([a5500ea](https://github.com/windmill-labs/windmill/commit/a5500ea40a77b2e0408e2a644190a8f65b18cd1d)) +- **backend:** execute /bin/bash instead of /bin/sh for bash scripts + ([021fa23](https://github.com/windmill-labs/windmill/commit/021fa23f9ffcd11548977a4589eb9bc2815243cf)) +- **backend:** improve relative importsfor deno + ([eaac598](https://github.com/windmill-labs/windmill/commit/eaac598af308cedea8f0f8fc7c189a4640b4366b)) +- **backend:** increase timeout for premium workspace + ([00b70d9](https://github.com/windmill-labs/windmill/commit/00b70d9aaac8ae979782492d7754060a3c2c9567)) +- **frontend:** add pagination + ([33c07d3](https://github.com/windmill-labs/windmill/commit/33c07d3e63f96673719ecb15e45f4cd9e18be80e)) +- **frontend:** Add quick style settings to app editor + ([#1308](https://github.com/windmill-labs/windmill/issues/1308)) + ([ac24862](https://github.com/windmill-labs/windmill/commit/ac2486219cd91df3a7fe11d37894797a881cac6c)) +- **frontend:** add recompute as a primitive + ([449d3ae](https://github.com/windmill-labs/windmill/commit/449d3ae5ddeceef3fbcb7a815a4dba16c9639fb3)) +- **frontend:** add textareacomponent + fix multiselect style + select multi + components + ([2b31653](https://github.com/windmill-labs/windmill/commit/2b31653a8aa06807678e8609cfa62cf0f2f55dce)) +- **frontend:** multiselect components for apps + ([577dec5](https://github.com/windmill-labs/windmill/commit/577dec5c5733cdf88e8586ce6c27159920c69c8a)) +- **frontend:** use rich json editor for arrays of objects and for object in + ArgInput + ([b95afaa](https://github.com/windmill-labs/windmill/commit/b95afaa9bb41b102181657453a564f44f4511983)) + +### Bug Fixes + +- **apps:** improve app table actionButtons behavior under many clicks + ([8e3d8ac](https://github.com/windmill-labs/windmill/commit/8e3d8acc80de971ee115d6903d24864d8263f08b)) +- **cli:** add --plain-secrets + ([98d51e2](https://github.com/windmill-labs/windmill/commit/98d51e219df1680507114f9b57ec0b0a4a234b5c)) +- **frontend:** add a modal that is always mounted to make sure compon… + ([#1328](https://github.com/windmill-labs/windmill/issues/1328)) + ([a527cb8](https://github.com/windmill-labs/windmill/commit/a527cb8222a2ff80dae38ebae7dc5ea0979d74c5)) +- **frontend:** Disable app keyboard navigation on focused inputs + ([#1326](https://github.com/windmill-labs/windmill/issues/1326)) + ([da24e9a](https://github.com/windmill-labs/windmill/commit/da24e9ab0625a7503c498c179022ea4011a03170)) +- **frontend:** persist description for schemas + ([1a48673](https://github.com/windmill-labs/windmill/commit/1a4867302f72aaae8f422ac8f53812c116cc383d)) +- **frontend:** Revert app upload input + ([#1330](https://github.com/windmill-labs/windmill/issues/1330)) + ([fa457bb](https://github.com/windmill-labs/windmill/commit/fa457bb7099bd31c2315eaf7f7f2c40900b2ae39)) +- **frontend:** Small app fixes + ([#1331](https://github.com/windmill-labs/windmill/issues/1331)) + ([75306c8](https://github.com/windmill-labs/windmill/commit/75306c831616d9a01cc3a4681732aab93153f1a9)) + +## [1.82.0](https://github.com/windmill-labs/windmill/compare/v1.81.0...v1.82.0) (2023-03-24) + +### Features + +- **backend:** introduce RESTART_ZOMBIE_JOBS and ZOMBIE_JOB_TIMEOUT + ([47a7f71](https://github.com/windmill-labs/windmill/commit/47a7f7163aae3fe807e766c824085b4d1b75c8c8)) + +### Bug Fixes + +- **backend:** do not consider FlowPreview as potential zombie job + ([f7c30b5](https://github.com/windmill-labs/windmill/commit/f7c30b5d2f16e15f36208e07126557fd7ed84801)) +- **backend:** increase dynamic js timeout + improve client passing + ([34e25f0](https://github.com/windmill-labs/windmill/commit/34e25f0f96fe637cc42f4017a064c40def5d67ef)) +- **cli:** improve diff speed + fix replacing cli + ([b999c98](https://github.com/windmill-labs/windmill/commit/b999c9894b4011b735f37df485fe403c22c00512)) +- **frontend:** Fix AppTable error display + clear errors when removing a + component + properly detect that latest component run had an error + ([#1322](https://github.com/windmill-labs/windmill/issues/1322)) + ([c15bc8a](https://github.com/windmill-labs/windmill/commit/c15bc8a7bfb3bef2634e6093088967137cd06239)) +- **frontend:** fix refresh with manual dependencies + ([#1319](https://github.com/windmill-labs/windmill/issues/1319)) + ([a47031a](https://github.com/windmill-labs/windmill/commit/a47031a41e6a3392101e280dcd1aea098f898447)) +- **frontend:** fix settings panel + ([#1323](https://github.com/windmill-labs/windmill/issues/1323)) + ([30b8e47](https://github.com/windmill-labs/windmill/commit/30b8e474df5b71b7e7b36d3fe5974a289cf0dfae)) +- **frontend:** Fix transformer + ([#1321](https://github.com/windmill-labs/windmill/issues/1321)) + ([addabcc](https://github.com/windmill-labs/windmill/commit/addabcceb0c90782ba4a934bb3822f8cc9865069)) +- **frontend:** remove unnecessary div + ([#1318](https://github.com/windmill-labs/windmill/issues/1318)) + ([e193a0b](https://github.com/windmill-labs/windmill/commit/e193a0bcdf6690b007594d2f1325a7ec26603129)) + +## [1.81.0](https://github.com/windmill-labs/windmill/compare/v1.80.1...v1.81.0) (2023-03-21) + +### Features + +- **apps:** add action on form/button/formbutton + ([2593218](https://github.com/windmill-labs/windmill/commit/2593218cbf07c05521a270797055ddb22dc22b8d)) + +### Bug Fixes + +- **frontend:** Remove action outline on preview mode + ([#1313](https://github.com/windmill-labs/windmill/issues/1313)) + ([a7c4f1a](https://github.com/windmill-labs/windmill/commit/a7c4f1a12e02e8627a5955b75d572e9cf11d8122)) + +## [1.80.1](https://github.com/windmill-labs/windmill/compare/v1.80.0...v1.80.1) (2023-03-21) + +### Bug Fixes + +- **cli:** add support for non metadataed scripts + ([42f6d2e](https://github.com/windmill-labs/windmill/commit/42f6d2e0ee6294f8a1d97f5f62f2adb6edfd2fed)) + +## [1.80.0](https://github.com/windmill-labs/windmill/compare/v1.79.0...v1.80.0) (2023-03-20) + +### Features + +- **apps:** add transformers for data sources + ([0abacac](https://github.com/windmill-labs/windmill/commit/0abacac06c7dd586b48c66ff47b7589fe692205b)) +- **frontend:** App set tab + ([#1307](https://github.com/windmill-labs/windmill/issues/1307)) + ([48413a7](https://github.com/windmill-labs/windmill/commit/48413a78c5e7e0ee8208711f15135d81136b7386)) + +### Bug Fixes + +- **frontend:** add missing optional chaining + ([#1306](https://github.com/windmill-labs/windmill/issues/1306)) + ([29b1cc6](https://github.com/windmill-labs/windmill/commit/29b1cc6ff0ebc5edcad24a1780113889c507075d)) +- **frontend:** App button triggered by + ([#1304](https://github.com/windmill-labs/windmill/issues/1304)) + ([cf2d031](https://github.com/windmill-labs/windmill/commit/cf2d031e8e89faa2cd7fa58436cbe7cf4d9045f9)) + +## [1.79.0](https://github.com/windmill-labs/windmill/compare/v1.78.0...v1.79.0) (2023-03-17) + +### Features + +- **frontend:** add listeners for frontend scripts + ([597e38e](https://github.com/windmill-labs/windmill/commit/597e38ef367d38fa97fc443ccb2c721e5964fece)) +- **frontend:** add table actions navigation + ([#1298](https://github.com/windmill-labs/windmill/issues/1298)) + ([c3ba1a6](https://github.com/windmill-labs/windmill/commit/c3ba1a6ab97484a08a5a20187bb858a5af7025cb)) +- **frontend:** App component triggers + ([#1303](https://github.com/windmill-labs/windmill/issues/1303)) + ([078cb1b](https://github.com/windmill-labs/windmill/commit/078cb1bf3e4de08cb018578f04d24392a6462f69)) +- **frontend:** Component control + ([#1293](https://github.com/windmill-labs/windmill/issues/1293)) + ([bd927a2](https://github.com/windmill-labs/windmill/commit/bd927a27ed9581dbf67ea3694f9d989f8d71d2ed)) + +### Bug Fixes + +- **frontend:** App panel styling + ([#1284](https://github.com/windmill-labs/windmill/issues/1284)) + ([c1dd35c](https://github.com/windmill-labs/windmill/commit/c1dd35c3f0fcbc1be43273f82a873c3c07863417)) +- **frontend:** Display app context search on top + ([#1300](https://github.com/windmill-labs/windmill/issues/1300)) + ([bd3ee81](https://github.com/windmill-labs/windmill/commit/bd3ee81b14846f16ccd16461de99b46fe68be6ba)) +- **frontend:** fix horizontal splitpanes + ([#1301](https://github.com/windmill-labs/windmill/issues/1301)) + ([ea3dab4](https://github.com/windmill-labs/windmill/commit/ea3dab411b3d5dd772e04c8831e789e2470aaf28)) +- **frontend:** fix map render + ([#1297](https://github.com/windmill-labs/windmill/issues/1297)) + ([0092721](https://github.com/windmill-labs/windmill/commit/00927210fd68c31cb793ef4f0efea05711ebcf00)) +- **frontend:** Hide archive toggle with empty list + ([#1296](https://github.com/windmill-labs/windmill/issues/1296)) + ([bac831b](https://github.com/windmill-labs/windmill/commit/bac831b23ce85a683ddbd4537900670a0b7d12a8)) + +## [1.78.0](https://github.com/windmill-labs/windmill/compare/v1.77.0...v1.78.0) (2023-03-16) + +### Features + +- **frontend:** app textcomponent editable + tooltip + ([11567d6](https://github.com/windmill-labs/windmill/commit/11567d6280ea60f1a8c3c6607c724179775cbbe3)) + +### Bug Fixes + +- **backend:** whitelist for include_header was ignored in some cases + ([183a459](https://github.com/windmill-labs/windmill/commit/183a4591df700ab4720de6e92a83631256940089)) +- **frontend:** improve rendering performance after component moving + ([6f890f2](https://github.com/windmill-labs/windmill/commit/6f890f2120885f90d986fbd655096b45bf9de539)) +- **frontend:** remove staticOutputs from apps + ([dbdfd62](https://github.com/windmill-labs/windmill/commit/dbdfd626386398180ecba7976714f86365eeccd8)) + +## [1.77.0](https://github.com/windmill-labs/windmill/compare/v1.76.0...v1.77.0) (2023-03-14) + +### Features + +- **apps:** state can be used as input in apps + ([2f0acb9](https://github.com/windmill-labs/windmill/commit/2f0acb9ffa8dace4a886527dcee49809d019b271)) +- **apps:** tabs can be made pages or invisible + better frontend scripts + reactivity + ([cd645d0](https://github.com/windmill-labs/windmill/commit/cd645d0935f2d06e0ff71f14d2cf63accd378ff3)) +- **deno:** add support for custom npm repo + ([#1291](https://github.com/windmill-labs/windmill/issues/1291)) + ([944795f](https://github.com/windmill-labs/windmill/commit/944795f6eeaa7d01ab1a35a80570a55c363723e6)) +- **frontend:** add setTab to frontend scripts + ([c2a97c5](https://github.com/windmill-labs/windmill/commit/c2a97c53cfff0fdb35dd8bc249490566eebdc1a9)) +- **frontend:** app components output panel + ([#1283](https://github.com/windmill-labs/windmill/issues/1283)) + ([751edcf](https://github.com/windmill-labs/windmill/commit/751edcf9b8e0976a1d073603c9eff5dc6e714490)) + +### Bug Fixes + +- **backend:** do not cache reference to workspace scripts + ([eb73f2a](https://github.com/windmill-labs/windmill/commit/eb73f2a687f6faad301b9038ab8585450bec7481)) +- **frontend:** fix app tabs + ([#1288](https://github.com/windmill-labs/windmill/issues/1288)) + ([c71a577](https://github.com/windmill-labs/windmill/commit/c71a577fead90c9cd01a736b54d859ec4f0b7807)) +- **frontend:** fix container deletion + ([#1287](https://github.com/windmill-labs/windmill/issues/1287)) + ([bc870bd](https://github.com/windmill-labs/windmill/commit/bc870bd03eb76cb8bc0e0c861f6cd8a9c661186b)) +- **frontend:** Update setting accordion + ([#1285](https://github.com/windmill-labs/windmill/issues/1285)) + ([dea12e8](https://github.com/windmill-labs/windmill/commit/dea12e8870ece998bb6607723cbaab9b9a958f22)) + +## [1.76.0](https://github.com/windmill-labs/windmill/compare/v1.75.0...v1.76.0) (2023-03-13) + +### Features + +- **frontend:** add frontend (JS) scripts to apps + ([f0b1b1f](https://github.com/windmill-labs/windmill/commit/f0b1b1f752731ba434b960a75624118152f53c00)) +- **frontend:** Copy, Cut and Paste + ([#1279](https://github.com/windmill-labs/windmill/issues/1279)) + ([82c139e](https://github.com/windmill-labs/windmill/commit/82c139ed0992be401e250cfb7ecc0fca61b76772)) +- **frontend:** disabled for action buttons can now depend on row + ([75f87e7](https://github.com/windmill-labs/windmill/commit/75f87e7e1117a9c12afcf626379e94b134a9a493)) +- **frontend:** improve drag-n-drop behavior + ([cfd489a](https://github.com/windmill-labs/windmill/commit/cfd489a55059e7b6843f99bab261c70b3852e6a2)) + +### Bug Fixes + +- **backend:** improve worker ping api + ([c958480](https://github.com/windmill-labs/windmill/commit/c958480ce83844a989f58dd5a70eb288582e2194)) +- **frontend:** General fixes and updates + ([#1281](https://github.com/windmill-labs/windmill/issues/1281)) + ([3e5a179](https://github.com/windmill-labs/windmill/commit/3e5a179eb8cd8001f49c92305141dade1571e20f)) + +## [1.75.0](https://github.com/windmill-labs/windmill/compare/v1.74.2...v1.75.0) (2023-03-11) + +### Features + +- add filter jobs by args or result + ([3b44f9a](https://github.com/windmill-labs/windmill/commit/3b44f9a72ca0466a44963a4b9657a0ee59b44753)) +- **apps:** add resource picker + ([8681e83](https://github.com/windmill-labs/windmill/commit/8681e83b574141acbf7e5a389a9e8a4f340336d1)) +- **bash:** add default argument handling for bash + ([1d5c194](https://github.com/windmill-labs/windmill/commit/1d5c194f09ffba963d52e418c5954843d84ae337)) +- **frontend-apps:** add variable picker for static string input on apps + ([bc440f8](https://github.com/windmill-labs/windmill/commit/bc440f8d4154ce464c0e027d93b7a0a3b76d782e)) +- **frontend:** make runs filters synced with query args + ([61a5e1f](https://github.com/windmill-labs/windmill/commit/61a5e1f1accc988628b785b3b9be04c4ea719874)) + +### Bug Fixes + +- **backend:** add killpill for lines reading + ([7c825c2](https://github.com/windmill-labs/windmill/commit/7c825c212dd0f1e8be427eabd9a9756303241d1b)) +- **cli:** many small fixes + ([ce32370](https://github.com/windmill-labs/windmill/commit/ce323709a94d27fb24214719180ea1aafc66d646)) + +## [1.74.2](https://github.com/windmill-labs/windmill/compare/v1.74.1...v1.74.2) (2023-03-09) + +### Bug Fixes + +- **frontend:** fix splitpanes navigation + ([#1276](https://github.com/windmill-labs/windmill/issues/1276)) + ([8d5c5b8](https://github.com/windmill-labs/windmill/commit/8d5c5b88a35d7a3bad1d8ddf2d940026825241eb)) + +## [1.74.1](https://github.com/windmill-labs/windmill/compare/v1.74.0...v1.74.1) (2023-03-09) + +### Bug Fixes + +- **apps:** proper reactivity for non rendered static components + ([ae53baf](https://github.com/windmill-labs/windmill/commit/ae53bafaf6777f928113f84b2c6ed6a2ed341844)) +- **ci:** make windmill compile again by pinning swc deps + ([2ea15d5](https://github.com/windmill-labs/windmill/commit/2ea15d5035e5e15473968db3c0501a4dddff5cd0)) + +## [1.74.0](https://github.com/windmill-labs/windmill/compare/v1.73.1...v1.74.0) (2023-03-09) + +### Features + +- add delete by path for scripts + ([0c2cf92](https://github.com/windmill-labs/windmill/commit/0c2cf92dd3df9610e649f15e23921a4ca0d94e6a)) +- **frontend:** Add color picker input to app + ([#1270](https://github.com/windmill-labs/windmill/issues/1270)) + ([88e537a](https://github.com/windmill-labs/windmill/commit/88e537ad1fb4c207f38fbe951c82106bef6491a3)) +- **frontend:** add expand + ([#1268](https://github.com/windmill-labs/windmill/issues/1268)) + ([b854ee3](https://github.com/windmill-labs/windmill/commit/b854ee34393534bde104e2e6f606108fd66d38dc)) +- **frontend:** add hash to ctx in apps + ([b1a45b1](https://github.com/windmill-labs/windmill/commit/b1a45b1e708aa6f19f8be9c949507083e044f2d8)) +- **frontend:** Add key navigation in app editor + ([#1273](https://github.com/windmill-labs/windmill/issues/1273)) + ([6b0fb75](https://github.com/windmill-labs/windmill/commit/6b0fb75d23e2151c88b07814139d203c1bd0578d)) + +### Bug Fixes + +- **cli:** improve visibility of the active workspace + ([e6344da](https://github.com/windmill-labs/windmill/commit/e6344dac6d1be04b46231fa8ef8579fd12ca8f37)) +- **frontend:** add confirmation modal to delete script/flow/app + ([a4adcb5](https://github.com/windmill-labs/windmill/commit/a4adcb5192c11f7bf47a0d259825e474779378d7)) +- **frontend:** Clean up app editor + ([#1267](https://github.com/windmill-labs/windmill/issues/1267)) + ([0a5e181](https://github.com/windmill-labs/windmill/commit/0a5e181a3aa966fb8211bee0d9174fc16353b31f)) +- **frontend:** Minor changes + ([#1272](https://github.com/windmill-labs/windmill/issues/1272)) + ([3b6ae0c](https://github.com/windmill-labs/windmill/commit/3b6ae0cc49461b858d9cfff79eae9a7569465235)) +- **frontend:** simplify input bindings + ([b2de531](https://github.com/windmill-labs/windmill/commit/b2de531a46e4b120d7106d361b727746bec516dd)) + +## [1.73.1](https://github.com/windmill-labs/windmill/compare/v1.73.0...v1.73.1) (2023-03-07) + +### Bug Fixes + +- **frontend:** load flow is not initialized + ([719d475](https://github.com/windmill-labs/windmill/commit/719d4752621d462b1cfaa0d27930fba7586be779)) + +## [1.73.0](https://github.com/windmill-labs/windmill/compare/v1.72.0...v1.73.0) (2023-03-07) + +### Features + +- **frontend:** add a way to automatically resize + ([#1259](https://github.com/windmill-labs/windmill/issues/1259)) + ([24f58ef](https://github.com/windmill-labs/windmill/commit/24f58efd9994a2201c1b1d9bbfb11734c57068e3)) +- **frontend:** add ability to move nodes + ([614fb50](https://github.com/windmill-labs/windmill/commit/614fb5022aa7d5428fb96b7ee3a20794edd1e9d3)) +- **frontend:** Add app PDF viewer + ([#1254](https://github.com/windmill-labs/windmill/issues/1254)) + ([3e5d09e](https://github.com/windmill-labs/windmill/commit/3e5d09ef0b5619186bee5ec6d442cbfd12a6e8d5)) +- **frontend:** add fork/save buttons + consistent styling for slider/range + ([9e9f8ef](https://github.com/windmill-labs/windmill/commit/9e9f8efb8ee389ea75e99b67ef720756959ca737)) +- **frontend:** add history to flows and apps + ([9e4d90a](https://github.com/windmill-labs/windmill/commit/9e4d90ad37a57ff1f515eea0c82cf603649e915d)) +- **frontend:** Fix object viewer style + ([#1255](https://github.com/windmill-labs/windmill/issues/1255)) + ([94f1aad](https://github.com/windmill-labs/windmill/commit/94f1aadef2b09ac1962478f11b27cc708b8328f1)) +- **frontend:** refactor entire flow builder UX + ([2ac51b0](https://github.com/windmill-labs/windmill/commit/2ac51b0af08bdef7ce3c7e874e9983b9fc00478a)) + +### Bug Fixes + +- **frontend:** arginput + apppreview fixes + ([e2c4545](https://github.com/windmill-labs/windmill/commit/e2c45452401022b00285b21551ffaf35a114be33)) +- **frontend:** fix app map reactivity + ([#1260](https://github.com/windmill-labs/windmill/issues/1260)) + ([2557e13](https://github.com/windmill-labs/windmill/commit/2557e136bd0df1a023819b7d9b2235e30d7140b6)) +- **frontend:** fix branch deletion + ([#1261](https://github.com/windmill-labs/windmill/issues/1261)) + ([a999eb2](https://github.com/windmill-labs/windmill/commit/a999eb21121a7c0010621448324e0c77caf2b3f6)) +- **frontend:** Side menu z-index issue + ([#1265](https://github.com/windmill-labs/windmill/issues/1265)) + ([c638897](https://github.com/windmill-labs/windmill/commit/c638897fdcd58f55b0929f91641b21a6f9d25ead)) + +## [1.72.0](https://github.com/windmill-labs/windmill/compare/v1.71.0...v1.72.0) (2023-03-02) + +### Features + +- **backend:** get_result_by_id do a downward pass to find node at any depth + ([#1249](https://github.com/windmill-labs/windmill/issues/1249)) + ([4c913dc](https://github.com/windmill-labs/windmill/commit/4c913dc4b6be03571a015c97a13829adffb61479)) +- **frontend:** Add app map component + ([#1251](https://github.com/windmill-labs/windmill/issues/1251)) + ([ed25d9f](https://github.com/windmill-labs/windmill/commit/ed25d9f186d9925f75404cb193a025d8a41c4540)) +- **frontend:** app splitpanes + ([#1248](https://github.com/windmill-labs/windmill/issues/1248)) + ([f4d79ee](https://github.com/windmill-labs/windmill/commit/f4d79ee2633e6cdab0fa2410108b31cfa77e10da)) + +### Bug Fixes + +- **backend:** improve result retrieval + ([c4463bb](https://github.com/windmill-labs/windmill/commit/c4463bb029907f3c8d77abb194f872aae7876bf6)) +- **backend:** incorrect get_result_by_id for list_result job + ([2a75cd2](https://github.com/windmill-labs/windmill/commit/2a75cd250ea5e01849fc8bbb69bf44f147d0acb8)) +- **cli:** fix workspace option + run script/flow + whoami + ([35ea2b2](https://github.com/windmill-labs/windmill/commit/35ea2b27b12159c68c8507ec1f8686028c975387)) +- **frontend:** background script not showing inputs + ([55eb48c](https://github.com/windmill-labs/windmill/commit/55eb48c55332431304cedbf3bcbbbcff61ec3645)) +- **frontend:** fix table bindings + ([2679386](https://github.com/windmill-labs/windmill/commit/2679386bf87a56352269911bd89e52df5ee9f314)) +- **frontend:** rework app reactivity + ([94b20d2](https://github.com/windmill-labs/windmill/commit/94b20d2f5e3b551974c57ea82b6e3dc16e97b9b8)) +- **frontend:** rework app reactivity + ([1753cb7](https://github.com/windmill-labs/windmill/commit/1753cb7da658f47be974c15da82c71a8e19309a6)) + +## [1.71.0](https://github.com/windmill-labs/windmill/compare/v1.70.1...v1.71.0) (2023-02-28) + +### Features + +- **backend:** use counter for sleep/execution/pull durations + ([e568690](https://github.com/windmill-labs/windmill/commit/e56869092a03fec4703ddd9ef65c89edb8122962)) +- **cli:** add autocompletions + ([287b2db](https://github.com/windmill-labs/windmill/commit/287b2db22f7b56e90bcd0c4727c00096695c2e0d)) +- **frontend:** App drawer + ([#1246](https://github.com/windmill-labs/windmill/issues/1246)) + ([8a0d115](https://github.com/windmill-labs/windmill/commit/8a0d1158c4d7e970cb91e1adf4838e5efdbb39ff)) +- **frontend:** drawer for editing workspace scripts in flows + ([6adc875](https://github.com/windmill-labs/windmill/commit/6adc87561070d8aceaba1838008cd7e6be2e2660)) + +### Bug Fixes + +- **frontend:** Add more app custom css + ([#1229](https://github.com/windmill-labs/windmill/issues/1229)) + ([a4e4d18](https://github.com/windmill-labs/windmill/commit/a4e4d188ad10443dd0b7f104389594efc768dc59)) +- **frontend:** Add more app custom css + ([#1247](https://github.com/windmill-labs/windmill/issues/1247)) + ([1bb5ed9](https://github.com/windmill-labs/windmill/commit/1bb5ed9ae01fd7998b06833b6222e5dd5d774d35)) +- **frontend:** display currently selected filter even if not in list + ([42d1cd6](https://github.com/windmill-labs/windmill/commit/42d1cd6456620ba917c560c87d736dc93634adff)) +- **frontend:** Fix deeply nested move + ([#1245](https://github.com/windmill-labs/windmill/issues/1245)) + ([a67f10e](https://github.com/windmill-labs/windmill/commit/a67f10eeb6fdb44bbb3a510badcc5ad0ae187a2b)) +- **frontend:** invisible subgrids have h-0 + app policies fix + ([2244e83](https://github.com/windmill-labs/windmill/commit/2244e83b9da803a4cf46ab0825d7cb6cb0e24872)) + +## [1.70.1](https://github.com/windmill-labs/windmill/compare/v1.70.0...v1.70.1) (2023-02-27) + +### Bug Fixes + +- **cli:** make cli resilient to systems without openable browsers + ([c051ffe](https://github.com/windmill-labs/windmill/commit/c051ffeb42c1cff609f93da7745036ea722e17d4)) +- **frontend:** Disable move in nested subgrid + ([#1238](https://github.com/windmill-labs/windmill/issues/1238)) + ([70eab30](https://github.com/windmill-labs/windmill/commit/70eab303bd45111ae198d9b710bfd6f9f59e53b0)) +- **frontend:** Fix inline scripts list + ([#1240](https://github.com/windmill-labs/windmill/issues/1240)) + ([97602ac](https://github.com/windmill-labs/windmill/commit/97602ac6db1404d36d160a431ffcea6c0f567a48)) +- **frontend:** Fix subgrid lock + ([#1232](https://github.com/windmill-labs/windmill/issues/1232)) + ([8ee9d67](https://github.com/windmill-labs/windmill/commit/8ee9d67f4faa91446338b41c664ef91913eb8b81)) + +## [1.70.1](https://github.com/windmill-labs/windmill/compare/v1.70.0...v1.70.1) (2023-02-27) + +### Bug Fixes + +- **cli:** make cli resilient to systems without openable browsers + ([c051ffe](https://github.com/windmill-labs/windmill/commit/c051ffeb42c1cff609f93da7745036ea722e17d4)) +- **frontend:** Disable move in nested subgrid + ([#1238](https://github.com/windmill-labs/windmill/issues/1238)) + ([70eab30](https://github.com/windmill-labs/windmill/commit/70eab303bd45111ae198d9b710bfd6f9f59e53b0)) +- **frontend:** Fix subgrid lock + ([#1232](https://github.com/windmill-labs/windmill/issues/1232)) + ([8ee9d67](https://github.com/windmill-labs/windmill/commit/8ee9d67f4faa91446338b41c664ef91913eb8b81)) + +## [1.70.0](https://github.com/windmill-labs/windmill/compare/v1.69.3...v1.70.0) (2023-02-27) + +### Features + +- **apps:** add ag grid + ([b690d80](https://github.com/windmill-labs/windmill/commit/b690d801d4aa5695ee558e81d1ed114074dfcb83)) +- **frontend:** move to other grid + ([#1230](https://github.com/windmill-labs/windmill/issues/1230)) + ([104e4ac](https://github.com/windmill-labs/windmill/commit/104e4ac5e790c30e6fb6b27726776693038d4f19)) + +### Bug Fixes + +- app setup and sync now uses 1.69.3 + ([d38aff2](https://github.com/windmill-labs/windmill/commit/d38aff2fe228f23eb18c3991392928c064e6aca2)) +- **frontend:** Fix duplication + ([#1237](https://github.com/windmill-labs/windmill/issues/1237)) + ([e87f4fc](https://github.com/windmill-labs/windmill/commit/e87f4fc44b847a573f5acafc0348fbcbfcb2258f)) +- **frontend:** fix graph viewer id assignment + ([e1f686d](https://github.com/windmill-labs/windmill/commit/e1f686d8508cfc1f73c43be08facc44217ca8de0)) + +## [1.69.3](https://github.com/windmill-labs/windmill/compare/v1.69.2...v1.69.3) (2023-02-24) + +### Bug Fixes + +- **deno:** fix denoify buffer handling + ([c2e5afd](https://github.com/windmill-labs/windmill/commit/c2e5afd4e07fb63375832f308da8c744616ee188)) + +## [1.69.2](https://github.com/windmill-labs/windmill/compare/v1.69.1...v1.69.2) (2023-02-24) + +### Bug Fixes + +- **app:** fix all nested behavior + ([dd28308](https://github.com/windmill-labs/windmill/commit/dd28308c3cf1877ba3f19dcd2bd20bf1c7896a99)) +- **frontend:** delete grid item + ([008c30f](https://github.com/windmill-labs/windmill/commit/008c30fcaad64af512407f9889a9881fafac0868)) +- **frontend:** duplicate + ([483407c](https://github.com/windmill-labs/windmill/commit/483407cdf0e1ed61de180a904934e950fed4adc3)) +- **frontend:** Fix findGridItem + ([a8295d0](https://github.com/windmill-labs/windmill/commit/a8295d0b5acd08cec42b7939d907df5c25132644)) +- **frontend:** Fix findGridItem + ([5bb77ed](https://github.com/windmill-labs/windmill/commit/5bb77edf45740a75e969b1bef31580271c9d5505)) +- **frontend:** Fix next id + ([8ddcf4d](https://github.com/windmill-labs/windmill/commit/8ddcf4d9c1a8d6dd20ee241a3f308811c49e58f1)) +- **frontend:** gridtab + ([fa105b4](https://github.com/windmill-labs/windmill/commit/fa105b4caeaa2d0e9704a48f6caf8d846839c23e)) +- **frontend:** rewrote utils + ([ea1b2c2](https://github.com/windmill-labs/windmill/commit/ea1b2c29b95282df347ef9c5973917fa3880e843)) +- **frontend:** wip + ([33ebe2d](https://github.com/windmill-labs/windmill/commit/33ebe2da8e81476be62a2567d5012573a8a010b6)) + +## [1.69.1](https://github.com/windmill-labs/windmill/compare/v1.69.0...v1.69.1) (2023-02-24) + +### Bug Fixes + +- **deno:** remove mysql support waiting for deno fix + ([dd7e8c7](https://github.com/windmill-labs/windmill/commit/dd7e8c742c83f6a1d13e4343ca626c0b5efc06fb)) +- **deno:** remove mysql support waiting for deno fix + ([2f78132](https://github.com/windmill-labs/windmill/commit/2f78132e081bdf3d7468e022f0e981ebfa52cfb3)) +- **frontend:** containers and tab fixes v1 + ([27cac3f](https://github.com/windmill-labs/windmill/commit/27cac3ffe69c4dac160e9e55ffd1eb8ea348d487)) +- **frontend:** containers and tab fixes v1 + ([705703a](https://github.com/windmill-labs/windmill/commit/705703a5e2f2dc7ceb4c215221f72bf624799841)) +- **frontend:** containers and tab fixes v1 + ([fac31c6](https://github.com/windmill-labs/windmill/commit/fac31c6628b289ad6aae92434e312c4be281a4d2)) + +## [1.69.0](https://github.com/windmill-labs/windmill/compare/v1.68.0...v1.69.0) (2023-02-23) + +### Features + +- **frontend:** Duplicate component + ([#1228](https://github.com/windmill-labs/windmill/issues/1228)) + ([089a6b6](https://github.com/windmill-labs/windmill/commit/089a6b6ae52e8d28dd15e2f9a6ad900c5853d0a1)) +- **frontend:** Properly delete tab content + ([#1227](https://github.com/windmill-labs/windmill/issues/1227)) + ([857ee5f](https://github.com/windmill-labs/windmill/commit/857ee5f318466d12bf0d41515451798df087ab74)) +- **frontend:** Support deeply nested components + ([#1225](https://github.com/windmill-labs/windmill/issues/1225)) + ([6ad876e](https://github.com/windmill-labs/windmill/commit/6ad876ebb45a934b7a4dc980cf38a5228d7d11f1)) + +### Bug Fixes + +- **cli:** .wmillignore whitelist behavior + ([d543650](https://github.com/windmill-labs/windmill/commit/d543650b313c434e794ad800aefe4aeda83c0fed)) + +## [1.68.0](https://github.com/windmill-labs/windmill/compare/v1.67.4...v1.68.0) (2023-02-23) + +### Features + +- **frontend:** Add more app component CSS customisation + ([#1218](https://github.com/windmill-labs/windmill/issues/1218)) + ([6044e3b](https://github.com/windmill-labs/windmill/commit/6044e3b6ef92e89b8f15f38bc2d0986ec64105d5)) + +### Bug Fixes + +- **cli:** better ergonomics around workspace add + ([40c12e6](https://github.com/windmill-labs/windmill/commit/40c12e6139c7b42d7ab169bab2dd37f8b43bea06)) +- **cli:** better ergonomics around workspaces + ([3b7160e](https://github.com/windmill-labs/windmill/commit/3b7160e84aa454bdb5f343da99cfd97a6b319937)) + +## [1.67.4](https://github.com/windmill-labs/windmill/compare/v1.67.3...v1.67.4) (2023-02-23) + +### Bug Fixes + +- **backend:** workflow check for has_failure_module + ([e54dc3f](https://github.com/windmill-labs/windmill/commit/e54dc3ff97e4454a15b9efe25cc12f6c9e1e176b)) + +## [1.67.3](https://github.com/windmill-labs/windmill/compare/v1.67.2...v1.67.3) (2023-02-23) + +### Bug Fixes + +- **cli:** ignone non wmill looking files + ([ec57c59](https://github.com/windmill-labs/windmill/commit/ec57c5977f122b629a07e05bc3551662d518ce30)) + +## [1.67.2](https://github.com/windmill-labs/windmill/compare/v1.67.1...v1.67.2) (2023-02-23) + +### Bug Fixes + +- **cli:** ignone non wmill looking files + ([969e89f](https://github.com/windmill-labs/windmill/commit/969e89f8bbc10f6712920321b70ede35f19ab9ed)) + +## [1.67.1](https://github.com/windmill-labs/windmill/compare/v1.67.0...v1.67.1) (2023-02-22) + +### Bug Fixes + +- **cli:** coloring nits + ([3fa24ad](https://github.com/windmill-labs/windmill/commit/3fa24adad0a07ba2f469c545b28251b035efdf90)) + +## [1.67.0](https://github.com/windmill-labs/windmill/compare/v1.66.1...v1.67.0) (2023-02-22) + +### Features + +- **frontend:** Add app sub grids + ([#1208](https://github.com/windmill-labs/windmill/issues/1208)) + ([dbc59e9](https://github.com/windmill-labs/windmill/commit/dbc59e952143ee5813780ad13794cef4e036911c)) + +### Bug Fixes + +- **cli:** add --fail-conflicts to ci push + ([0085b46](https://github.com/windmill-labs/windmill/commit/0085b46c1e3b8267fcafcb06ce72b4d820e49df5)) + +## [1.66.1](https://github.com/windmill-labs/windmill/compare/v1.66.0...v1.66.1) (2023-02-22) + +### Bug Fixes + +- **cli:** delete workspace instead of archiving them + ([70dfc8b](https://github.com/windmill-labs/windmill/commit/70dfc8b8d0293d80da7db14caa1b9eb0ed67653d)) + +## [1.66.0](https://github.com/windmill-labs/windmill/compare/v1.65.0...v1.66.0) (2023-02-22) + +### Features + +- add delete flows + ([e81f7bd](https://github.com/windmill-labs/windmill/commit/e81f7bd7239b73710da2a4ddec0da7805c13da06)) +- CLI refactor v1 + ([e31d2ae](https://github.com/windmill-labs/windmill/commit/e31d2ae27f886e774ffc429eea80057f4f9f4213)) +- **frontend:** Add image app component + ([#1213](https://github.com/windmill-labs/windmill/issues/1213)) + ([a4b773a](https://github.com/windmill-labs/windmill/commit/a4b773af294554c5787f02ebda363c8d9a3eff1b)) + +## [1.65.0](https://github.com/windmill-labs/windmill/compare/v1.64.0...v1.65.0) (2023-02-21) + +### Features + +- **apps:** add asJson for customcss + ([71d6dad](https://github.com/windmill-labs/windmill/commit/71d6dad37cc239952ce7799609c02474b0b1fc81)) +- **apps:** add custom css for apps + ([7f00e1c](https://github.com/windmill-labs/windmill/commit/7f00e1c1a8f2e905b0677d82ba547f55dc23b3e0)) +- **backend:** Zip Workspace Export + ([#1201](https://github.com/windmill-labs/windmill/issues/1201)) + ([5d109b3](https://github.com/windmill-labs/windmill/commit/5d109b3cd4b7749788f9cb9fcbe1949c45eedf1f)) +- **frontend:** Add divider app component + ([#1209](https://github.com/windmill-labs/windmill/issues/1209)) + ([c33e79e](https://github.com/windmill-labs/windmill/commit/c33e79e0b8d5ba1103d87fdd47fcd0e1071e19de)) +- **frontend:** Add file input app component + ([#1211](https://github.com/windmill-labs/windmill/issues/1211)) + ([d4b6d69](https://github.com/windmill-labs/windmill/commit/d4b6d691264bf21e4e2c97548aaad9aa80678a6b)) +- **frontend:** Add icon app component + ([#1207](https://github.com/windmill-labs/windmill/issues/1207)) + ([e4791c2](https://github.com/windmill-labs/windmill/commit/e4791c2b7e3a0e6b90c37bc1200f9cd0ab3b6845)) + +## [1.64.0](https://github.com/windmill-labs/windmill/compare/v1.63.2...v1.64.0) (2023-02-16) + +### Features + +- **frontend:** Trigger settings drawer with URL hash + ([#1185](https://github.com/windmill-labs/windmill/issues/1185)) + ([8445697](https://github.com/windmill-labs/windmill/commit/8445697e31394ac11f3b8aa10af1546cc9c0041c)) + +## [1.63.2](https://github.com/windmill-labs/windmill/compare/v1.63.1...v1.63.2) (2023-02-15) + +### Bug Fixes + +- **psql:** update pg client + ([a2fbc57](https://github.com/windmill-labs/windmill/commit/a2fbc5702509bb259bae106baa9a6146360ec5dd)) + +## [1.63.1](https://github.com/windmill-labs/windmill/compare/v1.63.0...v1.63.1) (2023-02-14) + +### Bug Fixes + +- update hub sync script + ([03eb144](https://github.com/windmill-labs/windmill/commit/03eb1444c4a5dfbd170ba8d200784e530ca2f771)) + +## [1.63.0](https://github.com/windmill-labs/windmill/compare/v1.62.0...v1.63.0) (2023-02-14) + +### Features + +- add mem peak info + ([f584062](https://github.com/windmill-labs/windmill/commit/f584062f13aa7da8e767fd35de1aef7bbb67c3c8)) +- **frontend:** Minimal support for custom filenames + ([#1190](https://github.com/windmill-labs/windmill/issues/1190)) + ([b03b3be](https://github.com/windmill-labs/windmill/commit/b03b3be154efb0984f9623c27acc05617f125bc5)) +- **worker:** set oom_adj to 1000 to prioritize killing subprocess + ([265fbc5](https://github.com/windmill-labs/windmill/commit/265fbc5835d029d510a794e171392884cb20bdae)) + +### Bug Fixes + +- **python:** return none if argument is missing + ([3f2754b](https://github.com/windmill-labs/windmill/commit/3f2754b3305f6cb65373d532ff0db6020bf07e45)) +- Update references to the docs + ([#1191](https://github.com/windmill-labs/windmill/issues/1191)) + ([a574270](https://github.com/windmill-labs/windmill/commit/a574270bc259f423c984259cd7d9a6d91b77815c)) + +## [1.62.0](https://github.com/windmill-labs/windmill/compare/v1.61.1...v1.62.0) (2023-02-03) + +### Features + +- add INCLUDE_HEADERS env variable to pass value from request headers + ([0921ba0](https://github.com/windmill-labs/windmill/commit/0921ba008535e945f2ec3255728c2e8c1f4c36dc)) +- add WHITELIST_WORKSPACES and BLACKLIST_WORKSPACES + ([99568ea](https://github.com/windmill-labs/windmill/commit/99568eaa473d57123a7dde4007f8812e0053fb3f)) +- Add workspace webhook + ([#1158](https://github.com/windmill-labs/windmill/issues/1158)) + ([b9ac60f](https://github.com/windmill-labs/windmill/commit/b9ac60f8bb0662e364606c4b7b8a6e3c1e7e4041)) +- adding worker_busy + ([23007f7](https://github.com/windmill-labs/windmill/commit/23007f7a71630fc2040e1be39db83ba56689e3c4)) +- **cli:** 2-Way sync + ([#1071](https://github.com/windmill-labs/windmill/issues/1071)) + ([cdd1619](https://github.com/windmill-labs/windmill/commit/cdd16195aeaf32e1f1d0648f48e4843954d16d9c)) +- **frontend:** App initial loading animations + ([#1176](https://github.com/windmill-labs/windmill/issues/1176)) + ([3305481](https://github.com/windmill-labs/windmill/commit/3305481d5d4ce598ceb57256cea851869cdaf25e)) +- **python:** add ADDITIONAL_PYTHON_PATHS + ([14b32be](https://github.com/windmill-labs/windmill/commit/14b32be8b229372c57a167fd74cb958a96f0e8e6)) + +### Bug Fixes + +- **frontend:** Render popups above components in app editor + ([#1171](https://github.com/windmill-labs/windmill/issues/1171)) + ([bc8d1a3](https://github.com/windmill-labs/windmill/commit/bc8d1a375ec7886357ce0ef5971bb35013c94d61)) +- **frontend:** Various fixes and improvements + ([#1177](https://github.com/windmill-labs/windmill/issues/1177)) + ([9f5500c](https://github.com/windmill-labs/windmill/commit/9f5500c1965ea50796d3bf289c0f9e0c929427f4)) +- navigate to new script page before saving script + ([f171cd8](https://github.com/windmill-labs/windmill/commit/f171cd8b7c46677173572bac256cbb489a1b8526)) + +## [1.61.1](https://github.com/windmill-labs/windmill/compare/v1.61.0...v1.61.1) (2023-01-31) + +### Bug Fixes + +- **backend:** compile issue + ([df8cc1f](https://github.com/windmill-labs/windmill/commit/df8cc1f2482b3d8b1530cdaef1361303ff5cadff)) + +## [1.61.0](https://github.com/windmill-labs/windmill/compare/v1.60.0...v1.61.0) (2023-01-31) + +### Features + +- add openapi viewer + ([#1094](https://github.com/windmill-labs/windmill/issues/1094)) + ([1337811](https://github.com/windmill-labs/windmill/commit/1337811438d48e23133f68e9157bd185d5fe4a82)) +- add PIP_LOCAL_DEPENDENCIES + ([b7db4c7](https://github.com/windmill-labs/windmill/commit/b7db4c78c4629f1fd2dfd7a338f783b16f07b24d)) +- add QUEUE_LIMIT_WAIT_RESULT + ([51a8810](https://github.com/windmill-labs/windmill/commit/51a8810aa0a9ab7702df459dd270278d42bd3899)) +- add resource and resource type from json + ([080ecb0](https://github.com/windmill-labs/windmill/commit/080ecb04d7a08d035fe07f179975b52bc0f77297)) +- add sql as a valid type in Python + ([0172587](https://github.com/windmill-labs/windmill/commit/0172587b129ce54d96dc99336a1f56c66ebdbef5)) +- add sync webhook for flows + ([f377c84](https://github.com/windmill-labs/windmill/commit/f377c84f5a2148a2bbb7c16e93f13e1d85ceb17e)) +- **backend:** add queue_limit + configurable timeout + fix timeout cancel + ([eef3bab](https://github.com/windmill-labs/windmill/commit/eef3bab6e4d9f1af1435db868c707a692558ab74)) +- **deno:** add support for DENO_AUTH_TOKENS + ([832ddab](https://github.com/windmill-labs/windmill/commit/832ddabdf2239521368e5f96df144abce0db31c2)) +- **deno:** allow overriding deno sandboxing with DENO_FLAGS' + ([7f40373](https://github.com/windmill-labs/windmill/commit/7f40373fd64005d87972854a565c6cf521232982)) +- **frontend:** Add app inputs configurations + ([#1142](https://github.com/windmill-labs/windmill/issues/1142)) + ([3ed16b8](https://github.com/windmill-labs/windmill/commit/3ed16b88a42e4db6e12f8557c5bbaa2d832b1c17)) +- **frontend:** Add app preview lock + ([#1127](https://github.com/windmill-labs/windmill/issues/1127)) + ([6a88e8c](https://github.com/windmill-labs/windmill/commit/6a88e8c4f4d6fa5c393ce27b2040784a74a73b06)) +- **frontend:** Add copy button option to app text display component + ([#1090](https://github.com/windmill-labs/windmill/issues/1090)) + ([bdfc38d](https://github.com/windmill-labs/windmill/commit/bdfc38d954a3c5548fb7f9ee6f80f741eff8cb67)) +- **frontend:** Add default codes to app editor + ([#1099](https://github.com/windmill-labs/windmill/issues/1099)) + ([c50c740](https://github.com/windmill-labs/windmill/commit/c50c7406f267b480af2a01b47e3fcfa1d763db7a)) +- **frontend:** Add HTML result rendering + ([#1160](https://github.com/windmill-labs/windmill/issues/1160)) + ([c01bf70](https://github.com/windmill-labs/windmill/commit/c01bf70f62680a4b77812ac6eb64aca2b15d9a8d)) +- **frontend:** Add more integration icons + ([#1097](https://github.com/windmill-labs/windmill/issues/1097)) + ([2191e85](https://github.com/windmill-labs/windmill/commit/2191e852318f069489f77a4f1c44aadf248c7f53)) +- **frontend:** add plotly support + ([a4f8f9e](https://github.com/windmill-labs/windmill/commit/a4f8f9e1cf80395d5cd1229c8dd5dda244e2ba7f)) +- **frontend:** add selectedRowIndex to the table outputs + ([#1145](https://github.com/windmill-labs/windmill/issues/1145)) + ([f05f9e4](https://github.com/windmill-labs/windmill/commit/f05f9e4edb928e7a8e3e66a62de9c6487684a14b)) +- **frontend:** Add Supabase resource + ([#1107](https://github.com/windmill-labs/windmill/issues/1107)) + ([12b00a8](https://github.com/windmill-labs/windmill/commit/12b00a808d1f12827a7bc26518cc6f972bdde917)) +- **frontend:** add support for background scripts + add FormButtonCo… + ([#1124](https://github.com/windmill-labs/windmill/issues/1124)) + ([e969af9](https://github.com/windmill-labs/windmill/commit/e969af9e44d1b4409064080e8662552ee3e262e8)) +- **frontend:** Add surreal db logo + ([#1102](https://github.com/windmill-labs/windmill/issues/1102)) + ([d811675](https://github.com/windmill-labs/windmill/commit/d81167588227f2cc433aab64551d96d21a589c5b)) +- **frontend:** Add tooltip to app recompute + ([#1122](https://github.com/windmill-labs/windmill/issues/1122)) + ([4dfdf37](https://github.com/windmill-labs/windmill/commit/4dfdf374af358ef46ee8057373546719c6570067)) +- **frontend:** add vega-lite component + ([bd79938](https://github.com/windmill-labs/windmill/commit/bd79938bed6da3875a4a2dd72dad14dedbf25ddf)) +- **frontend:** Display error as an icon in order to avoid clutter wh… + ([#1143](https://github.com/windmill-labs/windmill/issues/1143)) + ([22b8fed](https://github.com/windmill-labs/windmill/commit/22b8fed9d904a37aae66f6d957f4987f6ca9955c)) +- **frontend:** Open debug runs from component + ([#1155](https://github.com/windmill-labs/windmill/issues/1155)) + ([73bc13b](https://github.com/windmill-labs/windmill/commit/73bc13bb7d4b1eb25a3a726ac9e6bb80120a495f)) +- **frontend:** Update app table component styles + ([#1100](https://github.com/windmill-labs/windmill/issues/1100)) + ([172b5db](https://github.com/windmill-labs/windmill/commit/172b5dba8f4c3aaf11569c72313ad74845c668a6)) +- **python:** add support for extra args in python + ([772c768](https://github.com/windmill-labs/windmill/commit/772c768cda094f208a5efb7aab03eee3a8f38f68)) + +### Bug Fixes + +- **frontend:** Add default value for text, number and date input + fix issues + with number input + add date input in the settings panel + ([#1135](https://github.com/windmill-labs/windmill/issues/1135)) + ([8f90602](https://github.com/windmill-labs/windmill/commit/8f906026b3203702c3b6a30bcac9fb2aca985c29)) +- **frontend:** Add highlight to selected workspace + ([#1159](https://github.com/windmill-labs/windmill/issues/1159)) + ([f221a6c](https://github.com/windmill-labs/windmill/commit/f221a6c17f145d0c42f7faf785c37f4037308973)) +- **frontend:** add missing condition to properly select first row + ([#1128](https://github.com/windmill-labs/windmill/issues/1128)) + ([3d873ed](https://github.com/windmill-labs/windmill/commit/3d873ed51c769005981a8d8dfb95faa3ca33bb83)) +- **frontend:** App form component display + ([#1096](https://github.com/windmill-labs/windmill/issues/1096)) + ([339742c](https://github.com/windmill-labs/windmill/commit/339742ca77dd0fda19d5a262617e42c341ef5871)) +- **frontend:** App script list panel overflow + ([#1101](https://github.com/windmill-labs/windmill/issues/1101)) + ([7bc59d9](https://github.com/windmill-labs/windmill/commit/7bc59d9d2650b623a2b481a727ffc495b4216f22)) +- **frontend:** App table action button cell + ([#1149](https://github.com/windmill-labs/windmill/issues/1149)) + ([e989662](https://github.com/windmill-labs/windmill/commit/e98966283dd9b57cc07da34876a90d19210c2927)) +- **frontend:** App table header z-index + ([#1120](https://github.com/windmill-labs/windmill/issues/1120)) + ([59c4cc2](https://github.com/windmill-labs/windmill/commit/59c4cc2058f86deea793b61de59e2936e50e5577)) +- **frontend:** Check if hiddenInlineScripts are undefined before iterating over + them ([#1134](https://github.com/windmill-labs/windmill/issues/1134)) + ([71a443e](https://github.com/windmill-labs/windmill/commit/71a443e3c56d2b8c951de6e3701a411ad1a0ce34)) +- **frontend:** fix first row selection + ([#1125](https://github.com/windmill-labs/windmill/issues/1125)) + ([6c9daf7](https://github.com/windmill-labs/windmill/commit/6c9daf70021859dcd7cef717bc3acdfa88cffd02)) +- **frontend:** Fix id generation when a second action + ([#1110](https://github.com/windmill-labs/windmill/issues/1110)) + ([4f86981](https://github.com/windmill-labs/windmill/commit/4f869811fee73826b2b10965241d2d8dba59dc2a)) +- **frontend:** Make sure AppSelect items are an array + ([#1144](https://github.com/windmill-labs/windmill/issues/1144)) + ([24b1fa0](https://github.com/windmill-labs/windmill/commit/24b1fa0ae327c984841f9ed8b163b3fccc6da258)) +- **frontend:** Make sure that old apps are rendering properly + ([#1132](https://github.com/windmill-labs/windmill/issues/1132)) + ([a78486d](https://github.com/windmill-labs/windmill/commit/a78486d7e08f76e22406063288b35e9030974d7a)) +- **frontend:** Playwright + ([#1108](https://github.com/windmill-labs/windmill/issues/1108)) + ([f0435f5](https://github.com/windmill-labs/windmill/commit/f0435f5f81941c5b49500003aa27956d627daadb)) +- **frontend:** Prepare app scripts code for export + ([#1123](https://github.com/windmill-labs/windmill/issues/1123)) + ([173093a](https://github.com/windmill-labs/windmill/commit/173093a40321f6ad35bf766a5554b21cea388771)) +- **frontend:** Prevent modal from hijacking all keypress event + ([#1136](https://github.com/windmill-labs/windmill/issues/1136)) + ([aa6de3b](https://github.com/windmill-labs/windmill/commit/aa6de3bb5746b9d99c8e3a52e6a9fff10d97bc6a)) +- **frontend:** Revert component input panel change + ([#1092](https://github.com/windmill-labs/windmill/issues/1092)) + ([0419e7e](https://github.com/windmill-labs/windmill/commit/0419e7e1c9239fd3cbc49acf82a73e9c01938153)) +- **frontend:** Runnable table overflow + ([#1119](https://github.com/windmill-labs/windmill/issues/1119)) + ([462adbe](https://github.com/windmill-labs/windmill/commit/462adbe42f823646413a5003fd71f3dd473c0728)) +- **frontend:** Select the first row by default, and remove the abilit… + ([#1121](https://github.com/windmill-labs/windmill/issues/1121)) + ([3c483f5](https://github.com/windmill-labs/windmill/commit/3c483f533759b9b4e589055dbddb31f294bea8fa)) +- **frontend:** Show app builder header always on top + ([#1118](https://github.com/windmill-labs/windmill/issues/1118)) + ([631a3da](https://github.com/windmill-labs/windmill/commit/631a3da17f05a3d29defdf96a50d7e96a9f8baad)) +- **frontend:** Update app scripts pane + ([#1146](https://github.com/windmill-labs/windmill/issues/1146)) + ([18f30c8](https://github.com/windmill-labs/windmill/commit/18f30c8286f8240158643ade8b0ef4607a80fbb0)) +- **frontend:** Use absolute path on connect images + ([#1095](https://github.com/windmill-labs/windmill/issues/1095)) + ([43e069e](https://github.com/windmill-labs/windmill/commit/43e069eb96c0af7d3a1fe1db4f4b69f8e31e7438)) +- improvements for error handling as first step of flow + ([b77c239](https://github.com/windmill-labs/windmill/commit/b77c239f307a37777acb083b0cdb5c0d214a9dd8)) + +## [1.60.0](https://github.com/windmill-labs/windmill/compare/v1.59.0...v1.60.0) (2023-01-11) + +### Features + +- add 'add user to workspace' + ([a14623f](https://github.com/windmill-labs/windmill/commit/a14623feaab4a36c01d558b775a42e587a74cdc9)) +- **frontend:** Add frost to color palette + ([#1084](https://github.com/windmill-labs/windmill/issues/1084)) + ([8e72007](https://github.com/windmill-labs/windmill/commit/8e7200736827e8f6e593f900124b1bd1bc0bd5f2)) + +### Bug Fixes + +- **frontend:** Keep pane resizer under open drawer + ([#1089](https://github.com/windmill-labs/windmill/issues/1089)) + ([cb25f88](https://github.com/windmill-labs/windmill/commit/cb25f883005b99b4ce98e8ae7b8253a8a2fedb5b)) + +## [1.59.0](https://github.com/windmill-labs/windmill/compare/v1.58.0...v1.59.0) (2023-01-09) + +### Features + +- add relative imports for python scripts + ([#1075](https://github.com/windmill-labs/windmill/issues/1075)) + ([5347cd4](https://github.com/windmill-labs/windmill/commit/5347cd46a996b4cf48a96fbb873e4d029ca4f75f)) + +### Bug Fixes + +- **frontend:** Iconed resource height issue + ([#1073](https://github.com/windmill-labs/windmill/issues/1073)) + ([a84eb9b](https://github.com/windmill-labs/windmill/commit/a84eb9b1f7e1b10c960ee1594ef476e7ba146f5e)) + +## [1.58.0](https://github.com/windmill-labs/windmill/compare/v1.57.1...v1.58.0) (2023-01-07) + +### Features + +- add archive/unarchive/delete workspace + ([6edf9b9](https://github.com/windmill-labs/windmill/commit/6edf9b9946d613b599cb91688c4986044caaba8d)) +- add hub support for apps + ([50453ca](https://github.com/windmill-labs/windmill/commit/50453ca690dfd936474ebbf000e36ae1006b188b)) +- add min/max constraint to number + slider component + ([0bcdcae](https://github.com/windmill-labs/windmill/commit/0bcdcaedcfdf7b7f76f703df3bf50d97dd389995)) +- add support for yaml format as a string format + ([5204e4a](https://github.com/windmill-labs/windmill/commit/5204e4a75d74e6bb4087dee7087390f7c0388e51)) +- **frontend:** Add integration icons + ([#1063](https://github.com/windmill-labs/windmill/issues/1063)) + ([45acb89](https://github.com/windmill-labs/windmill/commit/45acb89f87ad78c48a1ba6abf1bd1424088b41c4)) +- **frontend:** Toggle to hide optional inputs + ([#1060](https://github.com/windmill-labs/windmill/issues/1060)) + ([4d6a568](https://github.com/windmill-labs/windmill/commit/4d6a568820ceb6c064dc2871085b80412e18c379)) +- **frontend:** Update app auto-refresh button + ([#1062](https://github.com/windmill-labs/windmill/issues/1062)) + ([34e3331](https://github.com/windmill-labs/windmill/commit/34e33319192f6d747d84fc6559853410f5d72ec8)) + +### Bug Fixes + +- **frontend:** Remove popover hover styles + ([#1064](https://github.com/windmill-labs/windmill/issues/1064)) + ([76a860f](https://github.com/windmill-labs/windmill/commit/76a860fe538dadfc6691074384f92db1a331063d)) + +## [1.57.1](https://github.com/windmill-labs/windmill/compare/v1.57.0...v1.57.1) (2023-01-02) + +### Bug Fixes + +- preserver order changes for flows' schema + ([2c8e98a](https://github.com/windmill-labs/windmill/commit/2c8e98a9c7fe3fdd48c851c0575fdb1d87c953a9)) +- support setting undefined states + ([ab0aeb0](https://github.com/windmill-labs/windmill/commit/ab0aeb0df825fb5afefbefae6739179dbbbc5f30)) + +## [1.57.0](https://github.com/windmill-labs/windmill/compare/v1.56.1...v1.57.0) (2023-01-01) + +### Features + +- add a All Static Inputs module to the flow editor + ([3296deb](https://github.com/windmill-labs/windmill/commit/3296debfe7940fe833d489af0a4b6609c2d53411)) +- apps can be published publicly + ([be14aab](https://github.com/windmill-labs/windmill/commit/be14aab9b102ef81eccf689e00cd3cd8eae8f503)) +- **app:** Update sidebar menu + ([#1050](https://github.com/windmill-labs/windmill/issues/1050)) + ([faa046a](https://github.com/windmill-labs/windmill/commit/faa046a3fdc326084df93f8e57dd5c573164b91d)) +- **app:** Use consistent styles on settings pages + ([#1048](https://github.com/windmill-labs/windmill/issues/1048)) + ([681e2e8](https://github.com/windmill-labs/windmill/commit/681e2e824a39d9748f1aaa37f20001b5200f82bc)) +- **backend:** resume from owner directly in flow status viewer + ([#1042](https://github.com/windmill-labs/windmill/issues/1042)) + ([40195d4](https://github.com/windmill-labs/windmill/commit/40195d42f661d401cd9ce11ca9739f87c1a27afd)) +- **frontend:** Add customization props to radio + ([#1056](https://github.com/windmill-labs/windmill/issues/1056)) + ([0812f6e](https://github.com/windmill-labs/windmill/commit/0812f6efd8484e86a4f09631b28c71d17cd69627)) +- **frontend:** Fix initial component dimensions + Select select + add spinner + when buttons are clicked + ([#1044](https://github.com/windmill-labs/windmill/issues/1044)) + ([70e7a5d](https://github.com/windmill-labs/windmill/commit/70e7a5d07542e1ac936152e434146e056a80bad4)) +- **frontend:** Properly support resource + ([#1039](https://github.com/windmill-labs/windmill/issues/1039)) + ([65f4e86](https://github.com/windmill-labs/windmill/commit/65f4e86a22838bd34373ce808c77a1770eeaf295)) +- **frontend:** Update tooltip and home list dropdown + ([#1053](https://github.com/windmill-labs/windmill/issues/1053)) + ([9d30e5f](https://github.com/windmill-labs/windmill/commit/9d30e5fa57363c4cf715f845f5268856c4aa0fb3)) + +### Bug Fixes + +- **app:** Fix inconsistencies in list items and sidebar menus + ([#1051](https://github.com/windmill-labs/windmill/issues/1051)) + ([0f1b19c](https://github.com/windmill-labs/windmill/commit/0f1b19c7d3eea4f8106fed3188460678e5035812)) +- **frontend:** List item overflowing corners + ([#1055](https://github.com/windmill-labs/windmill/issues/1055)) + ([2fd730f](https://github.com/windmill-labs/windmill/commit/2fd730f8d2303b57f2da42354cd207dad2a410ce)) +- **frontend:** Minor fixes in editor + ([#1054](https://github.com/windmill-labs/windmill/issues/1054)) + ([adc84f0](https://github.com/windmill-labs/windmill/commit/adc84f06d97275b17bf77cb6c8d264ad28b0f6ce)) +- **frontend:** Static inputs overflow + ([#1057](https://github.com/windmill-labs/windmill/issues/1057)) + ([72aeba1](https://github.com/windmill-labs/windmill/commit/72aeba121cb694e8e96ad189b4acbfc2340bf520)) + +## [1.56.1](https://github.com/windmill-labs/windmill/compare/v1.56.0...v1.56.1) (2022-12-23) + +### Bug Fixes + +- **cli:** typo in cli deps + ([0614ec4](https://github.com/windmill-labs/windmill/commit/0614ec42baf3e8f1675d62ca0f143b831c2700a1)) + +## [1.56.0](https://github.com/windmill-labs/windmill/compare/v1.55.0...v1.56.0) (2022-12-23) + +### Features + +- add move to drawer for script and flows + ([f73dbd8](https://github.com/windmill-labs/windmill/commit/f73dbd8039b3c987ca94e5b56f0ecdea93cbd1b8)) +- add operator mode + ([3485b07](https://github.com/windmill-labs/windmill/commit/3485b07b2548b7ea8fbd2b6b31b91e2d36d072ef)) +- auto-invite from same domain + ([2bae50f](https://github.com/windmill-labs/windmill/commit/2bae50f3910a99a87efa402a9eef566320fe1f68)) +- **backend:** add SUPERADMIN_SECRET as an env set superadmin + ([c283112](https://github.com/windmill-labs/windmill/commit/c28311242d58af12a039b81a5e5c90688022ce8c)) +- **frontend:** Add an input field to edit inline script name + ([#1033](https://github.com/windmill-labs/windmill/issues/1033)) + ([95a0b9c](https://github.com/windmill-labs/windmill/commit/95a0b9ceae73e291a0def340e935658b6c2ac3a5)) +- **frontend:** Add app number input + ([#1010](https://github.com/windmill-labs/windmill/issues/1010)) + ([2fe927f](https://github.com/windmill-labs/windmill/commit/2fe927f7fdc1309c7bad8b90fb7e0cc41d364b3f)) +- **frontend:** Add form component + fix connection bug + ([#1012](https://github.com/windmill-labs/windmill/issues/1012)) + ([424c31c](https://github.com/windmill-labs/windmill/commit/424c31c54a2652b89f9b06499a5aaf1cc0f00ad9)) +- **frontend:** Add select component to app builder + ([#1021](https://github.com/windmill-labs/windmill/issues/1021)) + ([08071bb](https://github.com/windmill-labs/windmill/commit/08071bb66b4fc40e3b984ffb459e5d52d5816298)) +- **frontend:** Add the ability to lock components so they don't move around + ([#1035](https://github.com/windmill-labs/windmill/issues/1035)) + ([26a6de2](https://github.com/windmill-labs/windmill/commit/26a6de247c3566bfa524b8fa4f8fc212ca557874)) +- **frontend:** Align output panel UI + ([#1025](https://github.com/windmill-labs/windmill/issues/1025)) + ([0e871ca](https://github.com/windmill-labs/windmill/commit/0e871ca8432d4f0bc68543b4a3f3bf8f8af99669)) +- **frontend:** App builder password and date input + ([#1022](https://github.com/windmill-labs/windmill/issues/1022)) + ([4651c9d](https://github.com/windmill-labs/windmill/commit/4651c9d8cd644e59bfd4f57be0bcecc01962a536)) +- **frontend:** AppTable v2 + Inline script panel + ([#1023](https://github.com/windmill-labs/windmill/issues/1023)) + ([f6df3ae](https://github.com/windmill-labs/windmill/commit/f6df3ae36748a1271625c3f4b50ca66f604d79f7)) +- **frontend:** Fix component synchro + ([#1038](https://github.com/windmill-labs/windmill/issues/1038)) + ([cebbc5f](https://github.com/windmill-labs/windmill/commit/cebbc5fbd1b8b855c9b1bcab535cff5b9de8d778)) +- **frontend:** Fix inline script status + ([#1034](https://github.com/windmill-labs/windmill/issues/1034)) + ([be74311](https://github.com/windmill-labs/windmill/commit/be743117d155afb2a2f0fe33ff610e0f621409f7)) +- **frontend:** Fix UI + ([#1009](https://github.com/windmill-labs/windmill/issues/1009)) + ([0ceb4ab](https://github.com/windmill-labs/windmill/commit/0ceb4ab1a893fecf9e64497612e6040d0e7bc8cd)) +- **frontend:** Fork + Fix table + ([#1037](https://github.com/windmill-labs/windmill/issues/1037)) + ([ab13e8c](https://github.com/windmill-labs/windmill/commit/ab13e8cce44ded7e05a8dda3d4d4d1ac696bf739)) +- **frontend:** Small UI fixes + ([#1026](https://github.com/windmill-labs/windmill/issues/1026)) + ([ebca9f3](https://github.com/windmill-labs/windmill/commit/ebca9f39eab27dda65d0ee5de175a90363bfebae)) +- **frontend:** templatable editor with autocompletion + ([e228c64](https://github.com/windmill-labs/windmill/commit/e228c6448ead4a7aef433f4abdfe3c466a0f50f4)) +- implement usage tracker + quotas + ([fd87109](https://github.com/windmill-labs/windmill/commit/fd871093f0ea4b2def351857d7d8d7e4e79f9539)) +- introduce folders, deprecate items owned by groups + ([4329d25](https://github.com/windmill-labs/windmill/commit/4329d259887da71eb2b2a67f73947b0fbe9f3941)) +- introduce folders, deprecate items owned by groups + ([c1b0b64](https://github.com/windmill-labs/windmill/commit/c1b0b64e1728007b364d2a0acc58fc459e49e461)) +- Superadmins workspace + ([#1003](https://github.com/windmill-labs/windmill/issues/1003)) + ([4004de0](https://github.com/windmill-labs/windmill/commit/4004de06180868af4570668a2040bd711a461e0d)) + +### Bug Fixes + +- **frontend:** copy-to-clipnoard url with protocol + ([#1027](https://github.com/windmill-labs/windmill/issues/1027)) + ([f77fe7b](https://github.com/windmill-labs/windmill/commit/f77fe7b6b321c3d00a51a42a4118fd37f7c9d782)) +- **frontend:** Fix AppTable frontend search + ([#1013](https://github.com/windmill-labs/windmill/issues/1013)) + ([f7627b5](https://github.com/windmill-labs/windmill/commit/f7627b5f17a9f5a4528715eebb4d207f33609da2)) + +## [1.55.0](https://github.com/windmill-labs/windmill/compare/v1.54.0...v1.55.0) (2022-12-09) + +### Features + +- **frontend:** Add text input to app builder + ([#1008](https://github.com/windmill-labs/windmill/issues/1008)) + ([6198383](https://github.com/windmill-labs/windmill/commit/6198383138929237c1eb898954a1fd91bdded08a)) + +## [1.54.0](https://github.com/windmill-labs/windmill/compare/v1.53.0...v1.54.0) (2022-12-08) + +### Features + +- add lockable version to scripts inside flows + ([#972](https://github.com/windmill-labs/windmill/issues/972)) + ([799fa92](https://github.com/windmill-labs/windmill/commit/799fa925b39316f6f8232d01959c35c4d6fa9533)) +- **frontend:** Add support for object editor + fix wording + ([#1004](https://github.com/windmill-labs/windmill/issues/1004)) + ([a562dee](https://github.com/windmill-labs/windmill/commit/a562dee3cebfc07f72f0e952cb102c4c86022937)) +- implement flow as a flow step + ([8c1c508](https://github.com/windmill-labs/windmill/commit/8c1c5083585f4882aac3f05f71ad1a6414772082)) + +## [1.53.0](https://github.com/windmill-labs/windmill/compare/v1.52.0...v1.53.0) (2022-12-05) + +### Features + +- add include_header to pass request headers to script + ([31c317b](https://github.com/windmill-labs/windmill/commit/31c317b3581e24aa24fa41a708f080c1d1de7e0c)) +- **cli:** hub sync + ([#975](https://github.com/windmill-labs/windmill/issues/975)) + ([2265372](https://github.com/windmill-labs/windmill/commit/22653727a4106fa604796b3958efab94762041c2)) +- **frontend:** Add app preview + ([#993](https://github.com/windmill-labs/windmill/issues/993)) + ([c9ad638](https://github.com/windmill-labs/windmill/commit/c9ad63895891ab3bbaeab43a008573f5bd3681b5)) +- **frontend:** clarified UX for connect step + ([e4839e2](https://github.com/windmill-labs/windmill/commit/e4839e21ff5d60bec4499245742f2400168c70ad)) +- **frontend:** introduce mysql as a script language + ([#982](https://github.com/windmill-labs/windmill/issues/982)) + ([e089109](https://github.com/windmill-labs/windmill/commit/e089109b50bd014c7a4f0fd7f60c53e8be63fb95)) +- refactor favorite menu + ([c55fae5](https://github.com/windmill-labs/windmill/commit/c55fae54dd043eb1c01a15c8005e29166a4e992b)) + +### Bug Fixes + +- **cli:** Fix cli pull push + ([#985](https://github.com/windmill-labs/windmill/issues/985)) + ([1bac237](https://github.com/windmill-labs/windmill/commit/1bac23785cb6af255732b1a2551bf9ffa00e24e7)) +- **frontend:** Align hub flow list + fix drawer content everywhere + ([#991](https://github.com/windmill-labs/windmill/issues/991)) + ([9f59a16](https://github.com/windmill-labs/windmill/commit/9f59a160c39048447ffeefc5070c52e8692c8316)) +- **frontend:** Fix app InputValue sync + ([#994](https://github.com/windmill-labs/windmill/issues/994)) + ([e217fbf](https://github.com/windmill-labs/windmill/commit/e217fbf071fa834c4b4288f602125164bf1d93bf)) +- **frontend:** fix app preview + ([#979](https://github.com/windmill-labs/windmill/issues/979)) + ([129a0ad](https://github.com/windmill-labs/windmill/commit/129a0ad56b58840620fdc77e619928e04c67cd1f)) +- **frontend:** fix home + ([#981](https://github.com/windmill-labs/windmill/issues/981)) + ([fa64e83](https://github.com/windmill-labs/windmill/commit/fa64e83f7ea6bc7786a15db647319d2f2a322b5b)) +- **frontend:** fix home header + ([#977](https://github.com/windmill-labs/windmill/issues/977)) + ([e9fa0ad](https://github.com/windmill-labs/windmill/commit/e9fa0ad0b75d0678167e7a48f8406639e85986a9)) +- **frontend:** Fix home margins + ([#992](https://github.com/windmill-labs/windmill/issues/992)) + ([62d2a33](https://github.com/windmill-labs/windmill/commit/62d2a3343dc27317f33446918404373b7d8285f5)) +- **frontend:** Make context clickable + ([#984](https://github.com/windmill-labs/windmill/issues/984)) + ([9264f4b](https://github.com/windmill-labs/windmill/commit/9264f4b233858537bb344355c5be43be3ec9d8d9)) +- **frontend:** variables and resources uses tab navigation + ([90ce431](https://github.com/windmill-labs/windmill/commit/90ce4314181d8e5031c08d5fbb75b920c33b7f75)) + +## [1.52.0](https://github.com/windmill-labs/windmill/compare/v1.51.0...v1.52.0) (2022-12-02) + +### Features + +- add favorite/star + remove flows/scripts page in favor of unified home page + ([#968](https://github.com/windmill-labs/windmill/issues/968)) + ([f3f694e](https://github.com/windmill-labs/windmill/commit/f3f694e9251fc62d8e3e10497e8936c588b456ba)) +- **cli:** improved setup & allow workspace in base url & refactor + workspaces/remotes to unify + ([#966](https://github.com/windmill-labs/windmill/issues/966)) + ([d3a171c](https://github.com/windmill-labs/windmill/commit/d3a171c28355c5d452e6e9caa0aa741c1ff23875)) +- **cli:** Login via Frontend + ([#956](https://github.com/windmill-labs/windmill/issues/956)) + ([2c31a9c](https://github.com/windmill-labs/windmill/commit/2c31a9cbdf84ff2659313df799cbd79f9c167325)) +- **deno-client:** support mysql + ([#971](https://github.com/windmill-labs/windmill/issues/971)) + ([0e402f6](https://github.com/windmill-labs/windmill/commit/0e402f6a9dfd1b6d00f6d2a951740d7aea0a8b70)) +- **frontend:** Add actions to tables + ([#951](https://github.com/windmill-labs/windmill/issues/951)) + ([1069105](https://github.com/windmill-labs/windmill/commit/10691054510dd955a6f0d36c0186fdab9ce0facc)) +- **frontend:** Add Mailchimp resource instructions + ([#967](https://github.com/windmill-labs/windmill/issues/967)) + ([ba90e8c](https://github.com/windmill-labs/windmill/commit/ba90e8c1b8131e1b1e38322d165c04a53a8622b2)) +- **frontend:** flow status viewer include a graph + ([02a9c5c](https://github.com/windmill-labs/windmill/commit/02a9c5c4eac557486df6908536a8467d68b92eca)) +- **frontend:** rework script detail + ([#952](https://github.com/windmill-labs/windmill/issues/952)) + ([6c45fe7](https://github.com/windmill-labs/windmill/commit/6c45fe7344858761422916cc497018b35753e0ce)) +- **frontend:** Update app component list + ([#947](https://github.com/windmill-labs/windmill/issues/947)) + ([ec1cebc](https://github.com/windmill-labs/windmill/commit/ec1cebc7920350939e365322f77898b31cafd795)) +- overhaul scripts and flows page + ([4946093](https://github.com/windmill-labs/windmill/commit/494609364c9d6109c08c7531cf02223793325f88)) +- overhaul scripts and flows page + ([c26be86](https://github.com/windmill-labs/windmill/commit/c26be86cef9d6cad44ae7cbbb5e0fd5d147c5c52)) +- **python:** add support for parsing resource type in python + ([63d95cf](https://github.com/windmill-labs/windmill/commit/63d95cfbb31a2b599fa9deaee203e1c4c2f0715e)) +- refactor variable + resource linkage + OAuth visibility + ([37967a7](https://github.com/windmill-labs/windmill/commit/37967a795006c2eb4e8b218abb3d1b0525c17d5e)) +- unify resources under a single connect API + ([539d6be](https://github.com/windmill-labs/windmill/commit/539d6be9088ccb2d18b0d16ca020b23bffaa79b9)) + +### Bug Fixes + +- **backend:** support PIP_INDEX_URL + ([12f9677](https://github.com/windmill-labs/windmill/commit/12f967726b96cc04e5024134216727ddfcd5fe82)) +- **backend:** support PIP_INDEX_URL + ([afcb44a](https://github.com/windmill-labs/windmill/commit/afcb44a12707dc3b0839182479438d2b010362ca)) +- **frontend:** Fix pie animation + actions wrap + ([#953](https://github.com/windmill-labs/windmill/issues/953)) + ([ed7838d](https://github.com/windmill-labs/windmill/commit/ed7838d6bcf538525f6b3e4257bffe6d51318c8a)) +- **frontend:** psql demo expects integers as a key + ([#958](https://github.com/windmill-labs/windmill/issues/958)) + ([4d8a5c4](https://github.com/windmill-labs/windmill/commit/4d8a5c4fd927e421825a9d9d2dc5dcfaf8b3949a)) +- **frontend:** Refactor apps to support multiple breakpoints + ([#957](https://github.com/windmill-labs/windmill/issues/957)) + ([96666af](https://github.com/windmill-labs/windmill/commit/96666af3d9d6f68e4e5bb0f7a748614c9916f394)) + +## [1.51.0](https://github.com/windmill-labs/windmill/compare/v1.50.0...v1.51.0) (2022-11-26) + +### Features + +- Add notification on app save + ([#943](https://github.com/windmill-labs/windmill/issues/943)) + ([79cec36](https://github.com/windmill-labs/windmill/commit/79cec368ba643a88a554a88e4bc0500701e2fcc8)) +- **backend:** add configurable custom client + ([975a1db](https://github.com/windmill-labs/windmill/commit/975a1db10ea592038cef0c2677e66a8b6d6b8ee5)) +- **cli:** Run flows & scripts + ([#940](https://github.com/windmill-labs/windmill/issues/940)) + ([cdd3e2c](https://github.com/windmill-labs/windmill/commit/cdd3e2cfc11cd003246643528b950cd0aafe1140)) +- **frontend:** Add guard against script overwrite + ([#944](https://github.com/windmill-labs/windmill/issues/944)) + ([dd75b37](https://github.com/windmill-labs/windmill/commit/dd75b370afd3d7e6a112e0ec9a6444a82b5620e3)) +- **frontend:** Add inline script picker to apps + ([#945](https://github.com/windmill-labs/windmill/issues/945)) + ([ddab2df](https://github.com/windmill-labs/windmill/commit/ddab2dffd5459a3e35a368e09a64ebcbceefc87a)) +- **frontend:** flow UX overhaul II + go + python support for trigger scripts + ([#928](https://github.com/windmill-labs/windmill/issues/928)) + ([802abe7](https://github.com/windmill-labs/windmill/commit/802abe7f901fc93bee1be401a3166fa22b63d00c)) +- **frontend:** login page makeup + ([5028d86](https://github.com/windmill-labs/windmill/commit/5028d8603d08f13f4c9ae061b5aa9c6b4b5ea4f4)) +- **frontend:** login page makeup + ([ced2678](https://github.com/windmill-labs/windmill/commit/ced2678a21e2078973cfbe506586061f806c2dfe)) +- Update apps button component with colors + ([#936](https://github.com/windmill-labs/windmill/issues/936)) + ([4b2b346](https://github.com/windmill-labs/windmill/commit/4b2b3467d2bbb204acd5330c4c100d63acb4e40a)) + +### Bug Fixes + +- **backend:** bash flow lock & add flow lock tests + ([#933](https://github.com/windmill-labs/windmill/issues/933)) + ([4ddb3ec](https://github.com/windmill-labs/windmill/commit/4ddb3ec276ef9140e15a8604d796c3a2e6210311)) +- **deno-client:** pg 0.16.1 -> 0.17.0 + ([ac6454b](https://github.com/windmill-labs/windmill/commit/ac6454b3835562f70694ce2b935e4b229f9118c6)) +- **frontend:** add checkbox component + fix alignment + ([#941](https://github.com/windmill-labs/windmill/issues/941)) + ([43a1d7e](https://github.com/windmill-labs/windmill/commit/43a1d7ef2a1c9167262ea7d19cc0fb10d0493eed)) +- **frontend:** Cleanup dead code + ([#935](https://github.com/windmill-labs/windmill/issues/935)) + ([fa4840a](https://github.com/windmill-labs/windmill/commit/fa4840ad656b2cb592c644193f617b49e53211aa)) +- **frontend:** Fix context panel + delete component + ([#937](https://github.com/windmill-labs/windmill/issues/937)) + ([ab481b3](https://github.com/windmill-labs/windmill/commit/ab481b3096ae6390e0d08b23a6b18f0f988cf1bd)) +- **frontend:** prevent runnable to run if the script is not defined + ([#938](https://github.com/windmill-labs/windmill/issues/938)) + ([e64195e](https://github.com/windmill-labs/windmill/commit/e64195e42b940e552d9b89b040dff4a4d0f8be37)) +- **frontend:** properly refresh context panel + Adjust style in the flow editor + ([#934](https://github.com/windmill-labs/windmill/issues/934)) + ([b59a1de](https://github.com/windmill-labs/windmill/commit/b59a1de93baade3ad576300c07143fbd3f074054)) + +## [1.50.0](https://github.com/windmill-labs/windmill/compare/v1.49.1...v1.50.0) (2022-11-21) + +### Features + +- **deno,python:** get/set_shared_state + ([c8266fb](https://github.com/windmill-labs/windmill/commit/c8266fb8b3262d9e9ec5698f824b2e9df716a228)) +- **frontend:** overhaul the whole flow UX + ([d23e218](https://github.com/windmill-labs/windmill/commit/d23e218e1fd9b200aaa3fff12182f18e251da796)) + +### Bug Fixes + +- **caching:** preserve permissions + ([a352975](https://github.com/windmill-labs/windmill/commit/a3529759ad34db5c8234a7886aba1c3d07a644cf)) + +## [1.49.1](https://github.com/windmill-labs/windmill/compare/v1.49.0...v1.49.1) (2022-11-20) + +### Bug Fixes + +- **caching:** add a second caching mechanism by tarring the entire cache for + fast startup + ([7af345e](https://github.com/windmill-labs/windmill/commit/7af345e5e57c6fbc35db9069782432664232851a)) + +## [1.49.0](https://github.com/windmill-labs/windmill/compare/v1.48.2...v1.49.0) (2022-11-20) + +### Features + +- **go:** improve cold start of 200ms by building outside of nsjail + ([838a92a](https://github.com/windmill-labs/windmill/commit/838a92a0dbb75f4e7e32a7541800cbda4808cea7)) +- **python-client:** remove unecessary imports in wmill to speed-up imports + ([46fe9ad](https://github.com/windmill-labs/windmill/commit/46fe9ad52594d3a45b7917b91b37a83bc779bb1b)) + +## [1.48.2](https://github.com/windmill-labs/windmill/compare/v1.48.1...v1.48.2) (2022-11-19) + +### Bug Fixes + +- **go-client:** support setVariable, setResource, setState, getState + ([e33bd1e](https://github.com/windmill-labs/windmill/commit/e33bd1e6b25bb9e3a3fe6f2c93d8c686c200b253)) + +## [1.48.1](https://github.com/windmill-labs/windmill/compare/v1.48.0...v1.48.1) (2022-11-19) + +### Bug Fixes + +- **python-client:** get_state on empty state return None + ([968675d](https://github.com/windmill-labs/windmill/commit/968675d8d068b19413a8bca7d4cb80179646c114)) + +## [1.48.0](https://github.com/windmill-labs/windmill/compare/v1.47.3...v1.48.0) (2022-11-18) + +### Features + +- add slack_bot token on connecting workspace to slack + ([b3178d1](https://github.com/windmill-labs/windmill/commit/b3178d1b8aacfa90b8a68554a186f3b26f3190ba)) +- **backend:** sync cache features on all workers [enterprise] + ([#907](https://github.com/windmill-labs/windmill/issues/907)) + ([bd09884](https://github.com/windmill-labs/windmill/commit/bd09884955bbe04f41fbcce9b978a070145f23a3)) +- **python:** add Resource[resource_type] as a parsed parameter + ([9d17abb](https://github.com/windmill-labs/windmill/commit/9d17abbb12463c81de325eef875161cf86449b25)) +- supercache extended to all version + ([8846ca5](https://github.com/windmill-labs/windmill/commit/8846ca585699c2ec7b18b4479e895b296774ee95)) + +### Bug Fixes + +- **backend:** saving bash script does not require dep job + ([381b036](https://github.com/windmill-labs/windmill/commit/381b0368d72ad42501082c91a7c62964593ba3ad)) +- **frontend:** app editor v1 + ([#908](https://github.com/windmill-labs/windmill/issues/908)) + ([53a8c5e](https://github.com/windmill-labs/windmill/commit/53a8c5e04cc4f407c137b0d621003dbab1bfdc67)) +- **frontend:** Reduce the size of the separator + fix Auto scroll + ([#895](https://github.com/windmill-labs/windmill/issues/895)) + ([3f8295b](https://github.com/windmill-labs/windmill/commit/3f8295bb0c7d9e9c831e8dbcb7f1e8b944e45c66)) +- support flows to be triggered by slack commands + ([199a11a](https://github.com/windmill-labs/windmill/commit/199a11a8cf92691a3ac5aa7ebdc3157d10677139)) + +## [1.47.3](https://github.com/windmill-labs/windmill/compare/v1.47.2...v1.47.3) (2022-11-15) + +### Bug Fixes + +- **python-client:** fix transform_leaves + ([a649f77](https://github.com/windmill-labs/windmill/commit/a649f772a564eaffb5f6192a510f7112ed618300)) + +## [1.47.2](https://github.com/windmill-labs/windmill/compare/v1.47.1...v1.47.2) (2022-11-15) + +### Bug Fixes + +- **python-client:** fix get_state + ([b4fd470](https://github.com/windmill-labs/windmill/commit/b4fd4700251892116b0dff2940d98b7e473c79bf)) + +## [1.47.1](https://github.com/windmill-labs/windmill/compare/v1.47.0...v1.47.1) (2022-11-15) + +### Bug Fixes + +- **python-client:** fix set_resource + ([a6a5ada](https://github.com/windmill-labs/windmill/commit/a6a5adadf45f6334eaf17f59985c0e7870f25167)) + +## [1.47.0](https://github.com/windmill-labs/windmill/compare/v1.46.2...v1.47.0) (2022-11-15) + +### Features + +- **backend:** Flow lock + ([#868](https://github.com/windmill-labs/windmill/issues/868)) + ([47c9ff1](https://github.com/windmill-labs/windmill/commit/47c9ff1edc28b63a1a16ffce08d3751a4f8f5422)) +- **backend:** remove go.sum from go lockfile + ([#891](https://github.com/windmill-labs/windmill/issues/891)) + ([3357cff](https://github.com/windmill-labs/windmill/commit/3357cffb043254d8712a2afe2729533d5884d56f)) +- **clients:** rename internal state as state + setters for resources/variables + in python + ([32bca1f](https://github.com/windmill-labs/windmill/commit/32bca1fd4cd0714a9f18a508b0e0782f63ee25a8)) + +### Bug Fixes + +- **backend:** go use windmill cache dir even if nsjail disabled + ([a9abd28](https://github.com/windmill-labs/windmill/commit/a9abd288822731add05d00e3d3fc43d29e11c7cb)) +- **frontend:** add size prop to tabs + ([#894](https://github.com/windmill-labs/windmill/issues/894)) + ([e8d3a0e](https://github.com/windmill-labs/windmill/commit/e8d3a0efb1e23ae66d755489f96f09932544be9c)) +- **frontend:** App Editor v0 + ([#886](https://github.com/windmill-labs/windmill/issues/886)) + ([cc5f629](https://github.com/windmill-labs/windmill/commit/cc5f629a7b142a2bd0ce7ca8950e24f6cb5473ff)) +- **frontend:** Set settings as header and error handler as footer + ([#893](https://github.com/windmill-labs/windmill/issues/893)) + ([4dc05b9](https://github.com/windmill-labs/windmill/commit/4dc05b913e4d98dd37b032639831d20aa662e4e9)) + +## [1.46.2](https://github.com/windmill-labs/windmill/compare/v1.46.1...v1.46.2) (2022-11-12) + +### Bug Fixes + +- **ci:** sqlx offline data + ([76a6768](https://github.com/windmill-labs/windmill/commit/76a6768ed9ab223363f47c62cfcd8c51dd624b62)) + +## [1.46.1](https://github.com/windmill-labs/windmill/compare/v1.46.0...v1.46.1) (2022-11-12) + +### Bug Fixes + +- **backend:** apps backend v0 + ([#888](https://github.com/windmill-labs/windmill/issues/888)) + ([2d9e990](https://github.com/windmill-labs/windmill/commit/2d9e9909da5b82eda39eb99c870f073b869b6ff5)) + +## [1.46.0](https://github.com/windmill-labs/windmill/compare/v1.45.0...v1.46.0) (2022-11-12) + +### Features + +- **cli:** Relax push folder layout to accept one layer of organizational + structure ([#882](https://github.com/windmill-labs/windmill/issues/882)) + ([a658308](https://github.com/windmill-labs/windmill/commit/a658308b59d7ef51d1aa6cda7598947ed0ce7548)) +- **cli:** Tarball pull + ([#867](https://github.com/windmill-labs/windmill/issues/867)) + ([d375836](https://github.com/windmill-labs/windmill/commit/d375836989fd730acbb4a04218d143b9fef63e0d)) +- deprecate previous_result in favor of results per id + ([40183ce](https://github.com/windmill-labs/windmill/commit/40183ce4e42f648d9eb6e2765fb141e16eba908e)) +- **frontend:** Flow graph + ([#827](https://github.com/windmill-labs/windmill/issues/827)) + ([9bf0f6e](https://github.com/windmill-labs/windmill/commit/9bf0f6e70d7501737a61e4d62d116d44b1f136df)) +- publish arm64 image + ([#885](https://github.com/windmill-labs/windmill/issues/885)) + ([c3b2bab](https://github.com/windmill-labs/windmill/commit/c3b2bab5d1a7eee49c517c2c8c5e9108c3f32333)) + +## [1.45.0](https://github.com/windmill-labs/windmill/compare/v1.44.0...v1.45.0) (2022-11-06) + +### Features + +- **backend:** add global delete user endpoint + ([23a0c10](https://github.com/windmill-labs/windmill/commit/23a0c10b77a430b274e7023078f1a7a963e490d2)) +- **backend:** flow duration is now computed as the sum of every child + ([badc601](https://github.com/windmill-labs/windmill/commit/badc60193c2480f93056eee5be6548bcf49fc1fc)) +- **backend:** use result_by_id in branchone + ([#857](https://github.com/windmill-labs/windmill/issues/857)) + ([0170188](https://github.com/windmill-labs/windmill/commit/01701882dc168862219ac4e3cf53621e1937b013)) +- **frontend:** fill schema and test args from payload + ([cc65bf5](https://github.com/windmill-labs/windmill/commit/cc65bf5f48447cd52547a50a714ece38f5c445f7)) +- **frontend:** show runs using a time chart + ([b31c5c4](https://github.com/windmill-labs/windmill/commit/b31c5c435e9aa8268e5c4f5771bb444182f76a01)) +- support bash as 4th language + ([#865](https://github.com/windmill-labs/windmill/issues/865)) + ([3c09275](https://github.com/windmill-labs/windmill/commit/3c0927596078eb68a9066663fb5a3bd5202c1850)) + +### Bug Fixes + +- **backend:** improve csp + ([#861](https://github.com/windmill-labs/windmill/issues/861)) + ([3ba1870](https://github.com/windmill-labs/windmill/commit/3ba18700dea282837d1bb27f24ed50ad1c417063)) +- **backend:** tighten http security headers + ([#860](https://github.com/windmill-labs/windmill/issues/860)) + ([7040bbe](https://github.com/windmill-labs/windmill/commit/7040bbe4c92c522d0815bc93c36604accd321bd5)) +- **backend:** tighten security around cookies to avoid csrf + ([#859](https://github.com/windmill-labs/windmill/issues/859)) + ([cddec64](https://github.com/windmill-labs/windmill/commit/cddec6469e7f3a082504f181de3785a2759b0a16)) +- **frontend:** dispose monaco models onDestroy + ([83c79a4](https://github.com/windmill-labs/windmill/commit/83c79a47eefe63aee3ecb9e009323d561b8b662f)) +- **frontend:** fix remaining openModal bugs + ([49bebe2](https://github.com/windmill-labs/windmill/commit/49bebe20cc87b5ce078d04f7fad9003d2e26bbf6)) +- **frontend:** go editor nits + ([971988d](https://github.com/windmill-labs/windmill/commit/971988dfe222ebee4fa2a8b796f50f57f0a291a0)) +- **frontend:** reload websocket on lsp go import install + ([5b4c9d9](https://github.com/windmill-labs/windmill/commit/5b4c9d9eb044a68a278c069fd1932a0b8c19b5d1)) +- **frontend:** reset rows default to 1 + ([175a188](https://github.com/windmill-labs/windmill/commit/175a188f61f344c830d937e854cd4f4d77069fcb)) + +## [1.44.0](https://github.com/windmill-labs/windmill/compare/v1.43.2...v1.44.0) (2022-11-03) + +### Features + +- **backend:** Deno lock files + ([#851](https://github.com/windmill-labs/windmill/issues/851)) + ([5bbfb40](https://github.com/windmill-labs/windmill/commit/5bbfb40ee1114d83bf0a277fa991aa70d5be8a62)) +- implement allowed domains for self-hosted + ([513924b](https://github.com/windmill-labs/windmill/commit/513924b0437a1d80720ac5bd1f38c33f97839d28)) + +### Bug Fixes + +- **backend:** capture up all lockfile issues + ([35868ef](https://github.com/windmill-labs/windmill/commit/35868ef9bf1eac650cbb735807aebc5a604dd5d6)) +- implement require admin differently than unauthorized + ([14c296d](https://github.com/windmill-labs/windmill/commit/14c296dbb85131c355980cd416c26a88c4823978)) +- **python-client:** fix get_resource + ([20bc904](https://github.com/windmill-labs/windmill/commit/20bc904e5fa3b97192d9cf7b2b70bdbde0408913)) + +## [1.43.2](https://github.com/windmill-labs/windmill/compare/v1.43.1...v1.43.2) (2022-11-02) + +### Bug Fixes + +- **go-client:** use stable oapi codegen version + ([4707d1e](https://github.com/windmill-labs/windmill/commit/4707d1ecaafa10b9cf8737e18ab432b3855c0c7f)) + +## [1.43.1](https://github.com/windmill-labs/windmill/compare/v1.43.0...v1.43.1) (2022-11-02) + +### Bug Fixes + +- **backend:** extend default scope set for slack resource + ([#848](https://github.com/windmill-labs/windmill/issues/848)) + ([ffaf7ca](https://github.com/windmill-labs/windmill/commit/ffaf7cad4a76e1c520071877579485b4c757c65e)) +- **go-client:** fix openapi generation + ([1329493](https://github.com/windmill-labs/windmill/commit/1329493873fb18b373c879f3f153fdf2a5036405)) + +## [1.43.0](https://github.com/windmill-labs/windmill/compare/v1.42.1...v1.43.0) (2022-11-01) + +### Features + +- **backend:** add parallel option for forloop and branchall + ([#840](https://github.com/windmill-labs/windmill/issues/840)) + ([39937e6](https://github.com/windmill-labs/windmill/commit/39937e6a83c3b7ec9dd889b40c10004abb8938a7)) +- new wmill CLI [#831](https://github.com/windmill-labs/windmill/issues/831) + ([f5ea13a](https://github.com/windmill-labs/windmill/commit/f5ea13ab2b2f7f8735504099d0267c32ac8ca6f2)) + +## [1.42.1](https://github.com/windmill-labs/windmill/compare/v1.42.0...v1.42.1) (2022-10-30) + +### Bug Fixes + +- **deno-client:** add missing approver encoding to hmac api request + ([#829](https://github.com/windmill-labs/windmill/issues/829)) + ([eef7c7f](https://github.com/windmill-labs/windmill/commit/eef7c7ff9442b818a87f63439726efc89395cb07)) + +## [1.42.0](https://github.com/windmill-labs/windmill/compare/v1.41.0...v1.42.0) (2022-10-30) + +### Features + +- **frontend:** Flow editor branches + ([#727](https://github.com/windmill-labs/windmill/issues/727)) + ([054c142](https://github.com/windmill-labs/windmill/commit/054c142882d4dc7b097fb04def0595e79ab81b75)) +- **frontend:** result by id + ([6fcf984](https://github.com/windmill-labs/windmill/commit/6fcf984ea344331ee96fcb7b42b5ac7a91a6e00e)) +- **frontend:** Update progress bar + ([#770](https://github.com/windmill-labs/windmill/issues/770)) + ([17e766a](https://github.com/windmill-labs/windmill/commit/17e766aa6e252419e4395cca9c56e707fe9247b3)) +- payload capture of json to initialize flow input + ([#655](https://github.com/windmill-labs/windmill/issues/655)) + ([9a67607](https://github.com/windmill-labs/windmill/commit/9a67607b20896b2efa65863604d8cb791c9943b5)) +- **python:** type is automatically inferred from default parameters + ([84a3fbe](https://github.com/windmill-labs/windmill/commit/84a3fbe46b4efb321b3b676258b1fc59cd67b186)) + +### Bug Fixes + +- **backend:** fix error handler progress update + ([4bd74ad](https://github.com/windmill-labs/windmill/commit/4bd74ad7232755a3c2d911d5284282bb1fb4f430)) +- **deno-client:** automatically encode approver param + refactor: use URL class + to format urls ([#809](https://github.com/windmill-labs/windmill/issues/809)) + ([10e1de8](https://github.com/windmill-labs/windmill/commit/10e1de84760b6b7eec92397117c44a938b0bc358)) +- **frontend:** Add summary to the script editor + ([#825](https://github.com/windmill-labs/windmill/issues/825)) + ([79e8b1f](https://github.com/windmill-labs/windmill/commit/79e8b1ff75b76d6a5c2f80079255124014a2c813)) +- **frontend:** Fix input transforms + ([#813](https://github.com/windmill-labs/windmill/issues/813)) + ([53eede4](https://github.com/windmill-labs/windmill/commit/53eede4f02c01c9dce0c10e4439a3cc2687010ac)) +- **frontend:** Fix legacy input transforms + ([#814](https://github.com/windmill-labs/windmill/issues/814)) + ([b078bde](https://github.com/windmill-labs/windmill/commit/b078bde30528dbbadf41cfacaf46223317795a2e)) +- **frontend:** Fix overlay map indicator + ([#816](https://github.com/windmill-labs/windmill/issues/816)) + ([a65c4c3](https://github.com/windmill-labs/windmill/commit/a65c4c35709e199943499304d4b04ce4fbbd1a98)) + +## [1.41.0](https://github.com/windmill-labs/windmill/compare/v1.40.1...v1.41.0) (2022-10-24) + +### Features + +- add approver to approval step + ([a0b2c9e](https://github.com/windmill-labs/windmill/commit/a0b2c9e77dd77e5727b2921890b1298cbac780f9)) + +### Bug Fixes + +- approval pages now require no auth + ([3c91e42](https://github.com/windmill-labs/windmill/commit/3c91e42b9ec185d7ae17c76f82511f6caa4837de)) +- **deno-client:** add approver + ([17d9f38](https://github.com/windmill-labs/windmill/commit/17d9f38d307c6a8554e20b60aabe675e43df10fd)) + +## [1.40.1](https://github.com/windmill-labs/windmill/compare/v1.40.0...v1.40.1) (2022-10-22) + +### Bug Fixes + +- **deno-client:** fix build.sh to have reproducible builds + ([#793](https://github.com/windmill-labs/windmill/issues/793)) + ([a5dfd86](https://github.com/windmill-labs/windmill/commit/a5dfd865c3912bb8528c0048519ad4c134eceab2)) + +## [1.40.0](https://github.com/windmill-labs/windmill/compare/v1.39.0...v1.40.0) (2022-10-22) + +### Features + +- **backend:** propagate cancel instantly to all flow jobs if any + ([cb5ed9b](https://github.com/windmill-labs/windmill/commit/cb5ed9b9a1fdcaf5609ce20c59aeca2356ae1883)) +- **deno-client:** improve docs by extending function signatures + ([#791](https://github.com/windmill-labs/windmill/issues/791)) + ([4ab547b](https://github.com/windmill-labs/windmill/commit/4ab547bdf4e93793306b7f98bf0e237849aa391a)) +- support running and publishing go, python scripts to the hub + ([#779](https://github.com/windmill-labs/windmill/issues/779)) + ([8ec33c5](https://github.com/windmill-labs/windmill/commit/8ec33c5e165316e2f8f804575ea3369b8beefdbd)) + +### Bug Fixes + +- **backend:** avoid mem leak on interval + [#786](https://github.com/windmill-labs/windmill/issues/786) + ([ac84b76](https://github.com/windmill-labs/windmill/commit/ac84b76909e0d6dfa170cb58608344b1b6d2627f)) +- **frontend:** rework te new script page + ([6c68f26](https://github.com/windmill-labs/windmill/commit/6c68f264cbcf18a872775b37be40b4f09dee8e2b)) +- improve approval flow with approval page + ([884edd7](https://github.com/windmill-labs/windmill/commit/884edd77153100a26a72c28c52b76c9619bd7642)) +- only create a schedule after flow change if schedule is enabled + ([4ce3e07](https://github.com/windmill-labs/windmill/commit/4ce3e0795c000aeff6f729ed515091fb93f7ceb2)) + +## [1.39.0](https://github.com/windmill-labs/windmill/compare/v1.38.5...v1.39.0) (2022-10-20) + +### Features + +- add ids to modules + input_transform lowered to flowmodulevalue + ([#768](https://github.com/windmill-labs/windmill/issues/768)) + ([af9e1f4](https://github.com/windmill-labs/windmill/commit/af9e1f4479604df53c1bdc2488867a0033abdc70)) +- add result by id to fetch result from any node + ([#769](https://github.com/windmill-labs/windmill/issues/769)) + ([57600ab](https://github.com/windmill-labs/windmill/commit/57600ab873a78435c5b930465ac466f69711e540)) +- **backend:** add branch all + ([#751](https://github.com/windmill-labs/windmill/issues/751)) + ([a5aad94](https://github.com/windmill-labs/windmill/commit/a5aad947e6402a174b0d4703e227e2370618292f)) +- **backend:** atomic moving queue -> complete and delete + ([#771](https://github.com/windmill-labs/windmill/issues/771)) + ([45a6976](https://github.com/windmill-labs/windmill/commit/45a6976d52829f181805281d78a741653e41b25c)) +- **backend:** rework forloop flow job arg passing + reimplement branchone using + flows + ([b180569](https://github.com/windmill-labs/windmill/commit/b1805699c9af759375b96969f1f9a0fd71ca6508)) +- **benchmark:** Initial Benchmarking Tool + ([#731](https://github.com/windmill-labs/windmill/issues/731)) + ([846462c](https://github.com/windmill-labs/windmill/commit/846462c68bf1a57523582c5e821e58a1f8b3886e)) +- **frontend:** publish script of any lang to hub + ([1a93593](https://github.com/windmill-labs/windmill/commit/1a935935291bcb01bb8b7cc037949fb6b36afff0)) +- **frontend:** Update split panes + ([#741](https://github.com/windmill-labs/windmill/issues/741)) + ([8a774e0](https://github.com/windmill-labs/windmill/commit/8a774e0d042ed9a05b45cd8a85ba67c78eacc630)) +- **frontend:** Update workspace selector + ([#754](https://github.com/windmill-labs/windmill/issues/754)) + ([582fc9a](https://github.com/windmill-labs/windmill/commit/582fc9a2eda1e618a5a834bc79263e91a14ba26b)) +- InProgress forloop_jobs -> flow_jobs to unify with branchAll + ([9e0c2d7](https://github.com/windmill-labs/windmill/commit/9e0c2d759b6db2061905677172a6d46f0bde684e)) + +### Bug Fixes + +- **backend:** reschedule flow at first step end + ([#746](https://github.com/windmill-labs/windmill/issues/746)) + ([955cc41](https://github.com/windmill-labs/windmill/commit/955cc4104ae229544f83cf4d6ae9f3bda5df0e8a)) +- **deno-client:** error handling for getInternalState + ([5117430](https://github.com/windmill-labs/windmill/commit/5117430b16c2f741b09702058a26d52aaafdaebe)) +- **frontend:** Fix text styling + ([#753](https://github.com/windmill-labs/windmill/issues/753)) + ([99e60b1](https://github.com/windmill-labs/windmill/commit/99e60b1b7423787f4cf48f66bc77d949c4687667)) +- **frontend:** Style fix + ([#755](https://github.com/windmill-labs/windmill/issues/755)) + ([9edb8a8](https://github.com/windmill-labs/windmill/commit/9edb8a8e1ce5fbe58bb89c4cd810e1c1e2f4303b)) + +## [1.38.5](https://github.com/windmill-labs/windmill/compare/v1.38.4...v1.38.5) (2022-10-15) + +### Bug Fixes + +- **deno-client:** use proper base url + ([bb1750f](https://github.com/windmill-labs/windmill/commit/bb1750fd6dddaa1235deafe0a68467f3a631a8e9)) + +## [1.38.4](https://github.com/windmill-labs/windmill/compare/v1.38.3...v1.38.4) (2022-10-15) + +### Bug Fixes + +- refactor deno client to use another openapi generator + [#743](https://github.com/windmill-labs/windmill/issues/743) + ([350d31f](https://github.com/windmill-labs/windmill/commit/350d31fe068260820978b8a629a74da80384f037)) + +## [1.38.3](https://github.com/windmill-labs/windmill/compare/v1.38.2...v1.38.3) (2022-10-15) + +### Bug Fixes + +- **go-client:** go-client README + ([8d37e40](https://github.com/windmill-labs/windmill/commit/8d37e40fced961c15fc6cd2198c4e696952f392c)) + +## [1.38.2](https://github.com/windmill-labs/windmill/compare/v1.38.1...v1.38.2) (2022-10-15) + +### Bug Fixes + +- **go-client:** improve go-client error handling + ([467ff10](https://github.com/windmill-labs/windmill/commit/467ff105db34c7e2bd028d35dff18a08df599a4c)) +- **go-client:** improve go-client variable and resource handling + ([fffcb5e](https://github.com/windmill-labs/windmill/commit/fffcb5ec2a47efcb9ba8db6211314d67f38f5b24)) +- **go-client:** return error + ([1f7ef30](https://github.com/windmill-labs/windmill/commit/1f7ef3006f551a324b8b8f5e7d260d69287eb4cf)) +- **python-client:** provide backwards compatibility down to python3.7 + ([#738](https://github.com/windmill-labs/windmill/issues/738)) + ([#739](https://github.com/windmill-labs/windmill/issues/739)) + ([e4cd931](https://github.com/windmill-labs/windmill/commit/e4cd931ab5d212e5bd8ed32f5fa1a33b431d16a4)) + +## [1.38.1](https://github.com/windmill-labs/windmill/compare/v1.38.0...v1.38.1) (2022-10-14) + +### Bug Fixes + +- **go-client:** pass bearer token to requests + ([9d38d66](https://github.com/windmill-labs/windmill/commit/9d38d66d2b6571d9ae7cbdb71d105790273155ca)) + +## [1.38.0](https://github.com/windmill-labs/windmill/compare/v1.37.0...v1.38.0) (2022-10-14) + +### Features + +- **backend:** implement new OpenFlow module Branches + ([#692](https://github.com/windmill-labs/windmill/issues/692)) + ([cc07a6b](https://github.com/windmill-labs/windmill/commit/cc07a6b7e4572f239b11ff566d616bcf66952a1b)) +- **backend:** supercache for python heavy dependencies in alpha + ([7e35d99](https://github.com/windmill-labs/windmill/commit/7e35d9989aab74cd91f676c679b36e98033f1176)) +- **frontend:** Loading placeholder + ([#707](https://github.com/windmill-labs/windmill/issues/707)) + ([9acee22](https://github.com/windmill-labs/windmill/commit/9acee22b1fc0b4eb82a1b47bc62598fe5af076e1)) +- **frontend:** Typography update + ([#725](https://github.com/windmill-labs/windmill/issues/725)) + ([2c1cd7e](https://github.com/windmill-labs/windmill/commit/2c1cd7eea8250f02588bc151bab8faf07ee7133d)) +- secure suspended resume event + configurable timeout + ([#721](https://github.com/windmill-labs/windmill/issues/721)) + ([ff7fb0f](https://github.com/windmill-labs/windmill/commit/ff7fb0f6f361322fbd3a1024c1604907d71aa4c9)) +- support struct in Go as script parameters + [#705](https://github.com/windmill-labs/windmill/issues/705) + ([7bdbfec](https://github.com/windmill-labs/windmill/commit/7bdbfec71a9a02ebbf4117c0e16e7249a0e028e6)) + +### Bug Fixes + +- **deno:** approval endpoints generator + ([#728](https://github.com/windmill-labs/windmill/issues/728)) + ([af8a421](https://github.com/windmill-labs/windmill/commit/af8a4216f8c3960e8ae5f930d4303bda7eee5c2b)) +- **frontend:** Apply small text size to hljs + ([#706](https://github.com/windmill-labs/windmill/issues/706)) + ([8be31d6](https://github.com/windmill-labs/windmill/commit/8be31d608b928a0ba8d8c53cbfb87c4915e41c20)) +- **frontend:** do not alert on non internal nav for unconfirmed saves + ([e5fdbff](https://github.com/windmill-labs/windmill/commit/e5fdbff8ec42ba1f581b0b94ef4ace0380a91d8a)) +- **frontend:** do not alert on non internal nav for unconfirmed saves + ([24a2932](https://github.com/windmill-labs/windmill/commit/24a2932a7bddc13bddde760655bff44202e96d01)) +- **frontend:** fix viewscript for go + ([e840522](https://github.com/windmill-labs/windmill/commit/e840522822c905be8fcfdeadde23ce76293d7755)) +- **frontend:** go websockets + ([154796c](https://github.com/windmill-labs/windmill/commit/154796cdb692cf068afec53dc080c838df273ae6)) +- **frontend:** remove flowbite svelte dependency from shared Badge + ([#722](https://github.com/windmill-labs/windmill/issues/722)) + ([ca991d0](https://github.com/windmill-labs/windmill/commit/ca991d0fa10d2f8778512f67b1230b5922bbb980)) +- **frontend:** Update skeleton animation timings + ([#730](https://github.com/windmill-labs/windmill/issues/730)) + ([2e21fb4](https://github.com/windmill-labs/windmill/commit/2e21fb43d5edbf4f8e271bff8a6d6fa3736a79f7)) + +## [1.37.0](https://github.com/windmill-labs/windmill/compare/v1.36.0...v1.37.0) (2022-10-08) + +### Features + +- add go LSP ([#699](https://github.com/windmill-labs/windmill/issues/699)) + ([6cb3fbc](https://github.com/windmill-labs/windmill/commit/6cb3fbc8b71f5c30aa860d60be4b327a3f658d54)) +- **backend:** add WM_BASE_URL + ([612f727](https://github.com/windmill-labs/windmill/commit/612f7272a9cf19ed8b738da90b0234a349b32354)) +- **backend:** separate properly logs from result + ([6ebedfc](https://github.com/windmill-labs/windmill/commit/6ebedfc5fb8637919b2e409d14f4f06bde83fc58)) +- **frontend:** Add action bar to run details + ([#684](https://github.com/windmill-labs/windmill/issues/684)) + ([4e472f5](https://github.com/windmill-labs/windmill/commit/4e472f5a3950d4dc5959c1c6ec21345b4d6e4a7d)) +- **frontend:** add input transforms for flow loop + ([b1b418a](https://github.com/windmill-labs/windmill/commit/b1b418a36265f91cad4072dc66a8edfec6994465)) +- **frontend:** add prop picker to iterator + ([0c25d80](https://github.com/windmill-labs/windmill/commit/0c25d80578449458d5a481f206f8b6fdb675c04e)) +- **frontend:** add prop picker to iterator + ([ee15bd9](https://github.com/windmill-labs/windmill/commit/ee15bd9a9df9047105e5e86ca9f6c7f489782efd)) +- **frontend:** add variables and resources to the prop picker + ([84a6441](https://github.com/windmill-labs/windmill/commit/84a6441b9a9b8fc753006b71cde6595d76e5e2b6)) +- **frontend:** Button with popup + ([#639](https://github.com/windmill-labs/windmill/issues/639)) + ([fcb1c39](https://github.com/windmill-labs/windmill/commit/fcb1c39d96792e60b30e64fcd4b425df74494b13)) +- **frontend:** Discard changes confirmation modal + ([#653](https://github.com/windmill-labs/windmill/issues/653)) + ([0e23d2d](https://github.com/windmill-labs/windmill/commit/0e23d2d60479e1b2d5654cdb7cdf8dd3b345052b)) +- **frontend:** prop picker for stop condition + ([e772f03](https://github.com/windmill-labs/windmill/commit/e772f0377e1c85baf3657a3cbe4e5bc423bb210c)) +- **frontend:** remove step 2 for flows + ([ad0ffb5](https://github.com/windmill-labs/windmill/commit/ad0ffb5eb60b3d6a119209c048123a027fb969ae)) +- implement same_worker openflow attribute for running flow all in one go + + sharing folder `/shared` + ([#689](https://github.com/windmill-labs/windmill/issues/689)) + ([f4caa4f](https://github.com/windmill-labs/windmill/commit/f4caa4ffa666de68538d7fa218e4c25315307501)) +- individual retry + flow UX refactor + ([c207745](https://github.com/windmill-labs/windmill/commit/c207745fa7031c6106ef7796879252ef508f552a)) +- sleep for arbitrary number of seconds statically or with a javascript + expression ([#691](https://github.com/windmill-labs/windmill/issues/691)) + ([a084366](https://github.com/windmill-labs/windmill/commit/a08436622b1a6460fab71ee2c6acc42c0e96fd29)) + +### Bug Fixes + +- add step to running badge in flow viewer + ([895fe10](https://github.com/windmill-labs/windmill/commit/895fe106f8f1995acbdb48e24ac2c6592c7c7e12)) +- **backend:** go lock dependency with no requirements + ([22c4a3b](https://github.com/windmill-labs/windmill/commit/22c4a3b37574b7dfab7dde0420dd40235acec350)) +- **backend:** same_worker uses the same folder even within loops + ([2c5b32b](https://github.com/windmill-labs/windmill/commit/2c5b32bdb796e40b8f6ddcdb1b8b6479a5d188b5)) +- change command behavior for monacos + ([0a67d3f](https://github.com/windmill-labs/windmill/commit/0a67d3fb87c7270b6bbf6cd065e4ccc5a7db9dcc)) +- **frontend:** Align Settings button + add missing suspend shortcut + ([#694](https://github.com/windmill-labs/windmill/issues/694)) + ([b59d1f8](https://github.com/windmill-labs/windmill/commit/b59d1f8717bbbd45a910204c1756bc229bd51f58)) +- **frontend:** clear interval on job run + ([065dcc9](https://github.com/windmill-labs/windmill/commit/065dcc9196e9bb59e8fd1fe1a31c91003083cf1b)) +- **frontend:** Remove legacy tabs + ([#695](https://github.com/windmill-labs/windmill/issues/695)) + ([e424b6b](https://github.com/windmill-labs/windmill/commit/e424b6b9b9229588478cb8a580334a7191269d29)) +- **frontend:** split early stop + fix highlight code + ([5d46496](https://github.com/windmill-labs/windmill/commit/5d464963429700b87399e9d46cdb540a131a7352)) +- **frontend:** split early stop + fix highlight code + ([e8f2d38](https://github.com/windmill-labs/windmill/commit/e8f2d38f471d5b2daf704352ee9ae10989a2da29)) +- get info about kill reason + ([8accb59](https://github.com/windmill-labs/windmill/commit/8accb59a8c82e1eb8e038d38c8c8831dfe865791)) +- get info about kill reason + ([b31e72a](https://github.com/windmill-labs/windmill/commit/b31e72a620d00390e1373b618fe2aae4f81e9d00)) +- only display error handler span if toggled on + ([ce0a410](https://github.com/windmill-labs/windmill/commit/ce0a4108236e06036d06e18ece0a227f4471d9b3)) + +## [1.36.0](https://github.com/windmill-labs/windmill/compare/v1.35.0...v1.36.0) (2022-10-02) + +### Features + +- add iterator expression tooltip + ([#638](https://github.com/windmill-labs/windmill/issues/638)) + ([a494975](https://github.com/windmill-labs/windmill/commit/a494975e69da983aba795432da668644e13dc809)) +- add private registries pip + ([#636](https://github.com/windmill-labs/windmill/issues/636)) + ([ae3f86d](https://github.com/windmill-labs/windmill/commit/ae3f86db112407f7684209463e1201ccc3d2349d)) +- **backend:** add WM_FLOW_JOB_ID + ([d863b1e](https://github.com/windmill-labs/windmill/commit/d863b1ed909dfd3006a62085de957f4385e6e0a4)) +- **backend:** flow suspend resume + ([#522](https://github.com/windmill-labs/windmill/issues/522)) + ([126dd24](https://github.com/windmill-labs/windmill/commit/126dd24c710e3f5d261e6a3bb9e29d476e9d51eb)) +- **dev:** setup devcontainer + ([#549](https://github.com/windmill-labs/windmill/issues/549)) + ([b78f2d1](https://github.com/windmill-labs/windmill/commit/b78f2d1a91968e840e8fd75562b49f9d2a5ba1b6)) +- **front:** Add a confirmation modal + ([#634](https://github.com/windmill-labs/windmill/issues/634)) + ([876dc60](https://github.com/windmill-labs/windmill/commit/876dc6061007c751ce7facf2e31c6d74c54a9e31)) +- **front:** Confirmation modal when deleting a resource or a variable + ([#648](https://github.com/windmill-labs/windmill/issues/648)) + ([bbaba14](https://github.com/windmill-labs/windmill/commit/bbaba142ac1e49028d509103ecd42626d9a25477)) +- **frontend:** Add a split panel in the test tab + ([#619](https://github.com/windmill-labs/windmill/issues/619)) + ([5146c37](https://github.com/windmill-labs/windmill/commit/5146c37baf9be6406acd6efc0d00fcda48a8d082)) +- **frontend:** Add contextual actions to insert variables or resources + ([#629](https://github.com/windmill-labs/windmill/issues/629)) + ([13cfed6](https://github.com/windmill-labs/windmill/commit/13cfed6d895d6e3595bdfd89f54bf80da780c01f)) +- **frontend:** Add support for failure modules + ([#612](https://github.com/windmill-labs/windmill/issues/612)) + ([025d31f](https://github.com/windmill-labs/windmill/commit/025d31f843bbf80f38e0540f16b245bff555464b)) +- **frontend:** Add support for retries for flows + ([#607](https://github.com/windmill-labs/windmill/issues/607)) + ([0f33c26](https://github.com/windmill-labs/windmill/commit/0f33c26d54d23571d9d6bfab525be8145c221823)) +- **frontend:** Badge component and script page + ([#617](https://github.com/windmill-labs/windmill/issues/617)) + ([f4c8636](https://github.com/windmill-labs/windmill/commit/f4c8636209ecf4d26e2b107393160313990d9cbb)) +- **frontend:** Button component + ([#616](https://github.com/windmill-labs/windmill/issues/616)) + ([e8e4199](https://github.com/windmill-labs/windmill/commit/e8e4199c5ced73fc4532c48d1c68200e0efd4f1f)) +- **frontend:** Extract publish to hub button + ([#620](https://github.com/windmill-labs/windmill/issues/620)) + ([2d02558](https://github.com/windmill-labs/windmill/commit/2d0255824c23fb61936cd50ff5ea1d6c852aeabb)) +- **frontend:** Flow UX entire rework + ([#552](https://github.com/windmill-labs/windmill/issues/552)) + ([9fa4d01](https://github.com/windmill-labs/windmill/commit/9fa4d01e3b506e4ac2497f1b6897927204e05e95)) +- **frontend:** Landing rework + ([#630](https://github.com/windmill-labs/windmill/issues/630)) + ([941fe71](https://github.com/windmill-labs/windmill/commit/941fe7146e53434ab2b5e89bbdafa6a1dccb22fc)) +- **frontend:** merge logs and result tab in script editor + ([#622](https://github.com/windmill-labs/windmill/issues/622)) + ([bcb1136](https://github.com/windmill-labs/windmill/commit/bcb113682f5ef68475875706aef63af83a3f3f70)) +- **frontend:** Prop picker panel + ([#605](https://github.com/windmill-labs/windmill/issues/605)) + ([9ef6663](https://github.com/windmill-labs/windmill/commit/9ef6663dc528ab5b0e7bc54e5eafb3249080248a)) +- **frontend:** rich renderer improvements + ([2e101a0](https://github.com/windmill-labs/windmill/commit/2e101a0c3b1d3c25e33a7aed27fccf9f56ab60c2)) +- **frontend:** Script page action row + ([#626](https://github.com/windmill-labs/windmill/issues/626)) + ([b10b1cc](https://github.com/windmill-labs/windmill/commit/b10b1cc90a8ebc94b55138467e72007f585f8e89)) +- **front:** Rework how summaries are edited in the flow editor + ([#632](https://github.com/windmill-labs/windmill/issues/632)) + ([b0ac674](https://github.com/windmill-labs/windmill/commit/b0ac674f46303068a7c45a2fb3cd811f499e2fbd)) +- implement go support + ([#571](https://github.com/windmill-labs/windmill/issues/571)) + ([39918a9](https://github.com/windmill-labs/windmill/commit/39918a9bb149dcf64e26018622a2a4214aa9faf1)) +- is_trigger is just a type tag, soon to include failure and command + ([#523](https://github.com/windmill-labs/windmill/issues/523)) + ([e9abcff](https://github.com/windmill-labs/windmill/commit/e9abcffdd1e4087069dda3550ec29d8efbfda772)) +- **job:** run job by hash + ([#551](https://github.com/windmill-labs/windmill/issues/551)) + ([6f09405](https://github.com/windmill-labs/windmill/commit/6f09405c2daabca8418389d99582ef602f00ab72)) + +### Bug Fixes + +- **backend:** allow for now payload on resume GET + ([6fe5b8d](https://github.com/windmill-labs/windmill/commit/6fe5b8d6b7f674b0ff70dbc828f89f26a7f91335)) +- change string default input behavior for input arg + ([5406a70](https://github.com/windmill-labs/windmill/commit/5406a704079dce286c3c797bef3acb3d7a073b6c)) +- **frontend:** do only one request if job is completed [related to + [#649](https://github.com/windmill-labs/windmill/issues/649)] + ([#651](https://github.com/windmill-labs/windmill/issues/651)) + ([6b6f1b4](https://github.com/windmill-labs/windmill/commit/6b6f1b407fff38959ec5d93254b547ec99b8f9f9)) +- **frontend:** don't loop for completed jobs + [[#649](https://github.com/windmill-labs/windmill/issues/649)] + ([#650](https://github.com/windmill-labs/windmill/issues/650)) + ([9592c92](https://github.com/windmill-labs/windmill/commit/9592c92f70ce9b94e141031c663ccb0cf01ef7d7)) +- **frontend:** Fix buttons spacings + ([#627](https://github.com/windmill-labs/windmill/issues/627)) + ([d2e5168](https://github.com/windmill-labs/windmill/commit/d2e516822277948005fb5fd6596c7b9b9119ec7a)) +- **frontend:** Fix flow preview inputs display to avoid hiding results + ([#581](https://github.com/windmill-labs/windmill/issues/581)) + ([e2924d5](https://github.com/windmill-labs/windmill/commit/e2924d581e595906cc0cda5e86c0782289dbfe23)) +- **frontend:** Hide the editor panel when we are editing a PathScript + ([#631](https://github.com/windmill-labs/windmill/issues/631)) + ([deb0b47](https://github.com/windmill-labs/windmill/commit/deb0b47a5f0f7b450b65ebd7003a2bdf9f81c798)) +- **frontend:** increase the default size of the log and result panel for the + script editor + ([08edcb2](https://github.com/windmill-labs/windmill/commit/08edcb24cac2fb0a0f09f16e26943b0d8eb69c2c)) +- **frontend:** loading flows with for loops + flowStatusViewer treat single + jobs properly + ([40160c0](https://github.com/windmill-labs/windmill/commit/40160c03f17d0f8a8e56dfaa4ef2d73315718418)) +- **frontend:** rework the error handler script picker + ([eee7067](https://github.com/windmill-labs/windmill/commit/eee7067074e8560c2fd883e574e314b4fd87c637)) +- **frontend:** Support of suspend & stop expression + restore import/export + menu ([#580](https://github.com/windmill-labs/windmill/issues/580)) + ([a85302c](https://github.com/windmill-labs/windmill/commit/a85302c1c37eba9c8eb3de9cab18826dc60228cb)) +- **frontend:** variable editor now acceps including 3000 chars + show length + ([b9518d7](https://github.com/windmill-labs/windmill/commit/b9518d748e127e67e83aa3bdc962e8b2a36860a8)) +- **frontend:** various small fixes + ([e8e2efd](https://github.com/windmill-labs/windmill/commit/e8e2efd9bc0f4b3c3237020f0c2ef96d7918cfa2)) +- **frontend:** various small fixes + ([cb5db64](https://github.com/windmill-labs/windmill/commit/cb5db64320d76f0284a2e03c05bc887ad0063af4)) +- **frontend:** various small fixes + ([d394edf](https://github.com/windmill-labs/windmill/commit/d394edf44f2aeffd2468afa8f24e00bae3e17a7c)) +- **frontend:** workers as the last menu link + ([c0a55bf](https://github.com/windmill-labs/windmill/commit/c0a55bfdd4e287d0b736ea2a6c19b6ccfba19fa1)) +- **front:** Fix wording issues + ([#633](https://github.com/windmill-labs/windmill/issues/633)) + ([77ef514](https://github.com/windmill-labs/windmill/commit/77ef514029841eb967376b6472c78d33a2cca55c)) +- **go:** inner_main is in a separate file rather than wrapped + ([eabd835](https://github.com/windmill-labs/windmill/commit/eabd83580758121149b629285d8f4cb228c9a7ea)) +- **go:** make lines align with appended code + ([945a750](https://github.com/windmill-labs/windmill/commit/945a750c6b4a2d8d01793ba50e67a4a666041c96)) +- iterator input transform is made more generic + ([#524](https://github.com/windmill-labs/windmill/issues/524)) + ([110a25f](https://github.com/windmill-labs/windmill/commit/110a25f6f860f83bfcf32121fc80488bc6c05d60)) +- last ping is set when the job is started avoiding erronous restart + ([1bc1217](https://github.com/windmill-labs/windmill/commit/1bc12179c7a8c3f56016716e45320ceaf2e338e6)) +- prop picker values correspond to test values + ([#628](https://github.com/windmill-labs/windmill/issues/628)) + ([4e791b0](https://github.com/windmill-labs/windmill/commit/4e791b039d4f8752af8d40870a6922306be03207)) + +## [1.35.0](https://github.com/windmill-labs/windmill/compare/v1.34.0...v1.35.0) (2022-09-02) + +### Features + +- clean openflow spec v1 + ([#491](https://github.com/windmill-labs/windmill/issues/491)) + ([cf7209b](https://github.com/windmill-labs/windmill/commit/cf7209bdb92bc4f029224640ccdc5213e2c3cb98)) +- **frontend:** Add runs to landing page + fix responsive issues + ([#487](https://github.com/windmill-labs/windmill/issues/487)) + ([9b8f263](https://github.com/windmill-labs/windmill/commit/9b8f263319599b00d7af6350127dabceaccad37e)) +- **frontend:** App landing page + ([#486](https://github.com/windmill-labs/windmill/issues/486)) + ([5954789](https://github.com/windmill-labs/windmill/commit/5954789abb2749488bf0055e98d2b77d0b885056)) +- **frontend:** Menu + Tab components + ([#517](https://github.com/windmill-labs/windmill/issues/517)) + ([6bb80b8](https://github.com/windmill-labs/windmill/commit/6bb80b803d0fa43d40d9add30c12ec5d11cd8230)) +- **frontend:** Script editor + ([#518](https://github.com/windmill-labs/windmill/issues/518)) + ([a2265f7](https://github.com/windmill-labs/windmill/commit/a2265f7f41bb82be7e98c216ad5b73ced29959b2)) +- pass bearerToken as queryArg + ([3527716](https://github.com/windmill-labs/windmill/commit/35277160a6a5ff400e3a91a98fe97978a6007146)) + +### Bug Fixes + +- **front:** Display all the logs + ([#478](https://github.com/windmill-labs/windmill/issues/478)) + ([ab994e6](https://github.com/windmill-labs/windmill/commit/ab994e6d42e3bd24307f4c536862f86e966995db)) +- **front:** Display all the logs + ([#479](https://github.com/windmill-labs/windmill/issues/479)) + ([8a585c0](https://github.com/windmill-labs/windmill/commit/8a585c084a9c2bf49c39db848075e62a047f4a81)) +- **frontend:** Make sure the schema is infered when the component is mounted + ([#520](https://github.com/windmill-labs/windmill/issues/520)) + ([0deb31e](https://github.com/windmill-labs/windmill/commit/0deb31e6b6c6b72e73f97654bbdcd40f1a708878)) +- **front:** Fix display + ([#481](https://github.com/windmill-labs/windmill/issues/481)) + ([538dc8f](https://github.com/windmill-labs/windmill/commit/538dc8f4c2aa4b58f0e26ba3d62744bfd77e188a)) +- **front:** Fix inline preview + ([#476](https://github.com/windmill-labs/windmill/issues/476)) + ([cbe9676](https://github.com/windmill-labs/windmill/commit/cbe9676a1f8682b9b22337b54b42b03eff0e313d)) +- **front:** Fix not found error + add timeout + ([d8bb9dc](https://github.com/windmill-labs/windmill/commit/d8bb9dccffabe63836abe512041804ea827290e4)) +- **front:** Fix not found error + add timeout + ([#480](https://github.com/windmill-labs/windmill/issues/480)) + ([96e42dd](https://github.com/windmill-labs/windmill/commit/96e42dd0fd1b69e48c356dc67dd5b73625a9d0b5)) +- **front:** Fix scroll + ([#475](https://github.com/windmill-labs/windmill/issues/475)) + ([34dd4be](https://github.com/windmill-labs/windmill/commit/34dd4bef12a7094adc4c9163dd02f74ac02c3f17)) +- **front:** Set run button state to done when all jobs are loaded + ([#482](https://github.com/windmill-labs/windmill/issues/482)) + ([4c1cb1d](https://github.com/windmill-labs/windmill/commit/4c1cb1d379819ec3c571e8e5ca6b4a6df7c399e4)) +- **front:** Simplfiy how the job's results are read + ([#483](https://github.com/windmill-labs/windmill/issues/483)) + ([0ec77f2](https://github.com/windmill-labs/windmill/commit/0ec77f2e6f469c1daefa16b24dfeaec1b45a8389)) +- remove duplicate path + ([#473](https://github.com/windmill-labs/windmill/issues/473)) + ([bd98cad](https://github.com/windmill-labs/windmill/commit/bd98cad5c708eb0bed16c666c538275984863e12)) + +## [1.34.0](https://github.com/windmill-labs/windmill/compare/v1.33.0...v1.34.0) (2022-08-21) + +### Features + +- implicit types infered from default parameters + ([b9dfbfa](https://github.com/windmill-labs/windmill/commit/b9dfbfa2d8d86f0313d4f8b1829c27a1b1c1c380)) + +## [1.33.0](https://github.com/windmill-labs/windmill/compare/v1.32.0...v1.33.0) (2022-08-21) + +### Features + +- PostgreSQL parametrized statement handled as typescript template + ([1aa28c5](https://github.com/windmill-labs/windmill/commit/1aa28c55990b27901c698eea6812a51eaafc97bb)) + +## [1.32.0](https://github.com/windmill-labs/windmill/compare/v1.31.0...v1.32.0) (2022-08-21) + +### Features + +- **backend:** failure_module + ([#452](https://github.com/windmill-labs/windmill/issues/452)) + ([32d067f](https://github.com/windmill-labs/windmill/commit/32d067f8c078fd7940c2c4bab8dbb01de876503e)) +- **frontend:** Open/Close UI + ([#445](https://github.com/windmill-labs/windmill/issues/445)) + ([7e4aac9](https://github.com/windmill-labs/windmill/commit/7e4aac997175bf2ba479021742e5aa8abab4ff41)) +- private imports + ([a5343fa](https://github.com/windmill-labs/windmill/commit/a5343fa959a237120fc22d6a3c06da3b29a3f990)) +- rely on PG time rather than worker time + ([0057266](https://github.com/windmill-labs/windmill/commit/00572668f16183f7508b9966213cbcc9c106da51)) + +### Bug Fixes + +- **backend:** clear_schedule only clear non running jobs + ([0cd814c](https://github.com/windmill-labs/windmill/commit/0cd814cfec3ab088f7646b6b9f6970e48961e710)) +- **backend:** fixes forloop with 257 items only iterates once + ([#446](https://github.com/windmill-labs/windmill/issues/446)) + ([bae8573](https://github.com/windmill-labs/windmill/commit/bae85732ff7c70796c2defcd0430d64dedeb36f7)) +- **backend:** started_at info for completed_job is no more completed_at + ([77a6851](https://github.com/windmill-labs/windmill/commit/77a685144ddc65c8e5205688ce7e411a14f7915b)) +- cancel a flow now does the expected behavior + ([c0e9cd0](https://github.com/windmill-labs/windmill/commit/c0e9cd05641d28336cc26eee5167a397149d61f2)) +- **deno-client:** pg module now supports prepared statements + ([5900a03](https://github.com/windmill-labs/windmill/commit/5900a03c045861732bbf6f7bff1280f3c94b86ce)) +- **deno-client:** wrap the deno-postgres client and not the query statement + ([68aaf32](https://github.com/windmill-labs/windmill/commit/68aaf3267ce183e366696ebadc644580976ed7ce)) +- **frontend:** Fix loops pickable properties + ([#441](https://github.com/windmill-labs/windmill/issues/441)) + ([0681472](https://github.com/windmill-labs/windmill/commit/068147251c831d3ab8564ccb909ad72ef2e32e74)) +- **frontend:** input checks refresh when schema change + ([15f7cad](https://github.com/windmill-labs/windmill/commit/15f7cadc3d179993b70e1f7584d532528aaabb52)) +- **frontend:** link to schedule in runs discriminate isFlows + ([7d76e69](https://github.com/windmill-labs/windmill/commit/7d76e69be9753cc572ce7c085d0191a31471d9e9)) +- **frontend:** simplify flow preview + logic([#450](https://github.com/windmill-labs/windmill/issues/450)) + ([bc5a568](https://github.com/windmill-labs/windmill/commit/bc5a5688ce9c351ad745be225c11a977c1ad2afb)) +- handle 0 length for-loops in the backend + ([#440](https://github.com/windmill-labs/windmill/issues/440)) + ([561e13e](https://github.com/windmill-labs/windmill/commit/561e13e51ee7ffcf20bc524c22d756ea582d546e)) +- restart zombie jobs was restarting all jobs + ([da77d04](https://github.com/windmill-labs/windmill/commit/da77d040942c01b0011e76546dddd6aaa7786b8f)) + +## [1.31.0](https://github.com/windmill-labs/windmill/compare/v1.30.0...v1.31.0) (2022-08-17) + +### Features + +- allow to configure port via envar + ([#407](https://github.com/windmill-labs/windmill/issues/407)) + ([34be056](https://github.com/windmill-labs/windmill/commit/34be0564f89f942478c25e77fd77a515367a6afd)) +- db users: admin -> windmill_admin, app -> windmill_user + ([#404](https://github.com/windmill-labs/windmill/issues/404)) + ([1c40f01](https://github.com/windmill-labs/windmill/commit/1c40f01e5d8e3d854de4c30d9f5e4f731c220ce2)) +- **frontend:** Redesign of the Flow Editor + Arbitrary forloop + ([127b0b4](https://github.com/windmill-labs/windmill/commit/127b0b4e5e6a96f91d7e8234cc52d887afb637b0)) + +### Bug Fixes + +- **backend:** collecting result when for loop is not the last step + [#422](https://github.com/windmill-labs/windmill/issues/422) + ([e606118](https://github.com/windmill-labs/windmill/commit/e6061189438fb3a7e630d2e390075fc3eded984c)) +- **self-hosting:** add lsp and caddy to docke-compose + ([#432](https://github.com/windmill-labs/windmill/issues/432)) + ([1004518](https://github.com/windmill-labs/windmill/commit/100451878c26d2fa324c6195838accae959a5310)) +- set secure only for https + ([1275f5f](https://github.com/windmill-labs/windmill/commit/1275f5f7fb65e32a17d7d397d43d0b49ecd5cd0e)) +- users privileges + ([2bdb617](https://github.com/windmill-labs/windmill/commit/2bdb617b1f80104bd3314656603dccb0021e05cb)) + +## [1.30.0](https://github.com/windmill-labs/windmill/compare/v1.29.0...v1.30.0) (2022-08-13) + +### Features + +- add literal object type support + ([#401](https://github.com/windmill-labs/windmill/issues/401)) + ([845de82](https://github.com/windmill-labs/windmill/commit/845de8206214ed265aef895f0d13636e6e0e26ce)) +- support union type will null | undefined + ([#400](https://github.com/windmill-labs/windmill/issues/400)) + ([0384727](https://github.com/windmill-labs/windmill/commit/0384727a56347aa01a5fee06c82bd49eab2522fa)) +- support union types + ([#398](https://github.com/windmill-labs/windmill/issues/398)) + ([e68ea1b](https://github.com/windmill-labs/windmill/commit/e68ea1b8fc4f88e587121387ecac6858d04ebae2)) + +## [1.29.0](https://github.com/windmill-labs/windmill/compare/v1.28.1...v1.29.0) (2022-08-10) + +### Features + +- \_value, \_index => iter.value, iter.index + ([07f4a21](https://github.com/windmill-labs/windmill/commit/07f4a217d0c6b46fd3defaa0242d229a60c69463)) +- remove res1 wrapping + ([e76a981](https://github.com/windmill-labs/windmill/commit/e76a9816ee09e59d5c38bf0c19231bac8347148c)) + +### Bug Fixes + +- do not skip undefined values + ([8b68a87](https://github.com/windmill-labs/windmill/commit/8b68a87c523fe13a9f45786ee0fbb57b10efda13)) +- **python:** not filled field with default now call the default + function + ([33962c4](https://github.com/windmill-labs/windmill/commit/33962c44660fd20173a0ae14b00a66a985dd4fc7)) +- surface new \_iterator value + ([13b1904](https://github.com/windmill-labs/windmill/commit/13b1904a7ab5a6e7a7c82d2a2806648441759756)) +- update logs even if last new log was < 500ms + ([c69621f](https://github.com/windmill-labs/windmill/commit/c69621fa7a9a18223e7854f0824bd6fbcabdfe10)) + +## [1.28.1](https://github.com/windmill-labs/windmill/compare/v1.28.0...v1.28.1) (2022-08-05) + +### Bug Fixes + +- **frontend:** add toggl connect + ([#341](https://github.com/windmill-labs/windmill/issues/341)) + ([b94895f](https://github.com/windmill-labs/windmill/commit/b94895f24eb4ba1b67f499a98c6e6e8d9d006b14)) +- **frontend:** schedule args in flow + ([#343](https://github.com/windmill-labs/windmill/issues/343)) + ([350a25c](https://github.com/windmill-labs/windmill/commit/350a25c837b1367fa5568dd1de0196202d632bd0)) +- improve flow viewer with retrieving hub script + ([80e28db](https://github.com/windmill-labs/windmill/commit/80e28dbba3e77154c0017bd8e74d144e6aae13fb)) + +## [1.28.0](https://github.com/windmill-labs/windmill/compare/v1.27.2...v1.28.0) (2022-08-04) + +### Features + +- **frontend:** global flow preview + ([#329](https://github.com/windmill-labs/windmill/issues/329)) + ([615f69e](https://github.com/windmill-labs/windmill/commit/615f69e935e9c9c0b60edfb6dc2e82aebba623b9)) + +### Bug Fixes + +- **api:** add discord webhook manual instructions + ([a9a4b9b](https://github.com/windmill-labs/windmill/commit/a9a4b9b21d7b68a3e46c28ce13986d7a9ebd2cac)) +- **backend:** generalize oauth clients to take in extra params + ([6332910](https://github.com/windmill-labs/windmill/commit/6332910dd27f78d555f0ab040545e98dedbea89d)) +- **backend:** handle better some flow edge-cases + ([3bcd542](https://github.com/windmill-labs/windmill/commit/3bcd542130bc0cb45dfb1fa7681dd4b7beb95c7e)) +- **backend:** handle better some flow edge-cases + ([9885361](https://github.com/windmill-labs/windmill/commit/988536128bd04dab94cc686bc2db547e57894587)) +- **backend:** handle better some flow edge-cases + ([70de6e3](https://github.com/windmill-labs/windmill/commit/70de6e3972af81aec68b706dca93e16182a584bb)) +- **backend:** prometheus histogram for worker job timer + ([#312](https://github.com/windmill-labs/windmill/issues/312)) + ([4055586](https://github.com/windmill-labs/windmill/commit/40555868e6221620beca85ebafad2da67e56ec08)) +- **frontend:** add jpeg support + ([0e8552b](https://github.com/windmill-labs/windmill/commit/0e8552ba800f13add6b25a83a765dace8d4369e7)) +- **frontend:** loading template pick the language as well + ([82c7ddc](https://github.com/windmill-labs/windmill/commit/82c7ddc00e79a1cc5336a0a219f46d705c2c8d88)) +- **frontend:** Use the bracket notation when an identifier is not a valid JS + expression ([#327](https://github.com/windmill-labs/windmill/issues/327)) + ([05324bd](https://github.com/windmill-labs/windmill/commit/05324bd3562f6066cdc12d74c87033325d1c7ef1)) +- **oauth2:** remove discord oauth integration + ([986e76d](https://github.com/windmill-labs/windmill/commit/986e76dc8729a53d09cd83531d474f9b5fe88f35)) + +## [1.27.2](https://github.com/windmill-labs/windmill/compare/v1.27.1...v1.27.2) (2022-08-02) + +### Bug Fixes + +- **deno-client:** getResource can now fetch non-object values + ([b128388](https://github.com/windmill-labs/windmill/commit/b128388cc652d4cd369a88b93985a2c051003abd)) + +## [1.27.1](https://github.com/windmill-labs/windmill/compare/v1.27.0...v1.27.1) (2022-08-02) + +### Bug Fixes + +- migrate to new style radio button + ([893ee94](https://github.com/windmill-labs/windmill/commit/893ee941d72a7036f0ea272c49bbe5cd3eee64d5)) + +## [1.27.0](https://github.com/windmill-labs/windmill/compare/v1.26.3...v1.27.0) (2022-08-02) + +### Features + +- add primitive sql format + ([#320](https://github.com/windmill-labs/windmill/issues/320)) + ([9daff2a](https://github.com/windmill-labs/windmill/commit/9daff2a228791234a3dd70c0ee829e284daf1592)) + +### Bug Fixes + +- prefer `COPY` over `ADD` + ([#319](https://github.com/windmill-labs/windmill/issues/319)) + ([24a7e46](https://github.com/windmill-labs/windmill/commit/24a7e46fe99d5a1f7d5b22334fa5f6ce76e82d94)) +- typos ([#301](https://github.com/windmill-labs/windmill/issues/301)) + ([9e84b45](https://github.com/windmill-labs/windmill/commit/9e84b458b139e86eb51dba9c5b228f141ca649b3)) + +## [1.26.3](https://github.com/windmill-labs/windmill/compare/v1.26.2...v1.26.3) (2022-08-01) + +### Bug Fixes + +- displaying which group you are a member of that gave you access to item + ([1bd0269](https://github.com/windmill-labs/windmill/commit/1bd026924b8a3b01f7729b627f939d8af872a483)) +- refresh jobs result when hopping from flow to flow + ([c86abe6](https://github.com/windmill-labs/windmill/commit/c86abe6ae01efd519f67ead233ebddf39f1539c0)) + +## [1.26.2](https://github.com/windmill-labs/windmill/compare/v1.26.1...v1.26.2) (2022-07-31) + +### Bug Fixes + +- deno api generator now supports openflow + ([5b548a0](https://github.com/windmill-labs/windmill/commit/5b548a0e71669aad90343e70f3f1c9dc3a6d4baf)) + +## [1.26.1](https://github.com/windmill-labs/windmill/compare/v1.26.0...v1.26.1) (2022-07-31) + +### Bug Fixes + +- encoding state now supports unicode including emojis + ([6b61227](https://github.com/windmill-labs/windmill/commit/6b61227481422fe52384f6de8146388a8471ff60)) + +## [1.26.0](https://github.com/windmill-labs/windmill/compare/v1.25.0...v1.26.0) (2022-07-29) + +### Features + +- resource type picker in schema modal + proper initialization of raw javascript + editor when applicable + ([01bb107](https://github.com/windmill-labs/windmill/commit/01bb107a0f3e3899ec99718974b2484ab5978c92)) + +### Bug Fixes + +- forloop flows unsoundness fix part I + ([1b5ce32](https://github.com/windmill-labs/windmill/commit/1b5ce3243b364d02903072a9af5e15447622e9fb)) +- small bar mode and editor nits + ([4e3a02a](https://github.com/windmill-labs/windmill/commit/4e3a02a8e44e25e6b5402f732b9af6969d06dcc0)) + +## [1.25.0](https://github.com/windmill-labs/windmill/compare/v1.24.2...v1.25.0) (2022-07-29) + +### Features + +- base64 support in schema editor + ([2cb6e6e](https://github.com/windmill-labs/windmill/commit/2cb6e6e7021819a9aa9618436abf2f0fa5b3587b)) + +### Bug Fixes + +- update variable and resources now return error if nothing was updated + ([0faabdb](https://github.com/windmill-labs/windmill/commit/0faabdbc40b049258b074c6c20c1406ca14b8481)) + +## [1.24.2](https://github.com/windmill-labs/windmill/compare/v1.24.1...v1.24.2) (2022-07-28) + +### Bug Fixes + +- get_variable refresh_token bug + ([390e9b3](https://github.com/windmill-labs/windmill/commit/390e9b37fb201242ac6983c145c9de5b242f7a7b)) +- if :path is not a valid path, do not even attempt to fetch it + ([6dec447](https://github.com/windmill-labs/windmill/commit/6dec4479537164fe17bea7f88fd60b1d4f42e887)) +- monaco editor fixes + ([f255cc2](https://github.com/windmill-labs/windmill/commit/f255cc253fcf14850442e8d4bf64635287b88314)) + +## [1.24.1](https://github.com/windmill-labs/windmill/compare/v1.24.0...v1.24.1) (2022-07-27) + +### Bug Fixes + +- encrypt the refresh token + ([a051c21](https://github.com/windmill-labs/windmill/commit/a051c2121a63983f6925ce2e3a9b9deb01df2f04)) +- keep previous refresh token if no new ones were provided + ([3feef73](https://github.com/windmill-labs/windmill/commit/3feef738dc145603576649a91f0ddc0e82215841)) +- skip_failures is boolean not bool + ([4ca71c1](https://github.com/windmill-labs/windmill/commit/4ca71c1e5da0132724ab4c9771f5fdc590b866f8)) + +## [1.24.0](https://github.com/windmill-labs/windmill/compare/v1.23.0...v1.24.0) (2022-07-27) + +### Features + +- Add flow input and current step in the prop picker + ([#236](https://github.com/windmill-labs/windmill/issues/236)) + ([6fbeeae](https://github.com/windmill-labs/windmill/commit/6fbeeae84a207be46490361788dad12918c37c4e)) +- add google login v1 + ([fc918a2](https://github.com/windmill-labs/windmill/commit/fc918a24ccf0ad19b81a3ebf630d0f04b56094c8)) +- add schedule settable from pull flows + ([caecbfd](https://github.com/windmill-labs/windmill/commit/caecbfd0d9eaadc38372ce7238ed6d3baf9ba6e3)) +- prop picker functional for pull flows + ([010acfe](https://github.com/windmill-labs/windmill/commit/010acfe7e365a838078f1a989b54f1539c8bf2e6)) +- skip failures loop + ([#258](https://github.com/windmill-labs/windmill/issues/258)) + ([de3fe69](https://github.com/windmill-labs/windmill/commit/de3fe699089e2a28aa0032a57a9a03f35646b6ef)) + +### Bug Fixes + +- audit logs + ([ca4bed3](https://github.com/windmill-labs/windmill/commit/ca4bed34a65440cd790cae9cff19f40df22f92b8)) +- **frontend:** badge google logo for login + ([cfec7a9](https://github.com/windmill-labs/windmill/commit/cfec7a97b883dbf83bd9d0707bf015c2aaa4e517)) +- **frontend:** badge needs a little right margin + ([c846ed7](https://github.com/windmill-labs/windmill/commit/c846ed76c4102335a5a8aabceaa39d6b7906ef5a)) +- **frontend:** display number field in flows + ([a232895](https://github.com/windmill-labs/windmill/commit/a23289563deca70269bd73ec50f324db0b6df791)) +- **frontend:** fork script from hub + ([43cacc1](https://github.com/windmill-labs/windmill/commit/43cacc1a66b1e2322c0252c9d1ca954e893aaef8)) +- **frontend:** get refresh token for google services + ([2f0d8d5](https://github.com/windmill-labs/windmill/commit/2f0d8d5384fb4eea6a6d5e5e48fd242f8d0c40fa)) +- **frontend:** get refresh token for google services + ([8dfe688](https://github.com/windmill-labs/windmill/commit/8dfe688a6a2388cecb1460913a25ab49ec297b1b)) +- **frontend:** get refresh token for google services + ([a2c5dc1](https://github.com/windmill-labs/windmill/commit/a2c5dc18a38045cbefc7d4b86d786a3c8fcb3ca8)) +- import from JSON load schemas + ([88dd7b0](https://github.com/windmill-labs/windmill/commit/88dd7b0abbd1a0469fc949c8045f61ddc304701d)) +- multiple UI fixes + ([a334029](https://github.com/windmill-labs/windmill/commit/a33402978720470530baecf51c2d17ecafd13ab0)) +- multiple UI fixes + ([904f0f3](https://github.com/windmill-labs/windmill/commit/904f0f3e69034421d524a66e0c4697ff42d89efe)) + +## [1.23.0](https://github.com/windmill-labs/windmill/compare/v1.22.0...v1.23.0) (2022-07-25) + +### Features + +- add editor bar to inline scripts of flows + ([7a6a2c9](https://github.com/windmill-labs/windmill/commit/7a6a2c982daef9aa80e34aa6cbd4889a3c5ec807)) +- **backend:** do not require visibility on job to see job if in possesion of + uuid + ([b054229](https://github.com/windmill-labs/windmill/commit/b05422963b27d74de8bb6d3be18538d57a71cfe7)) +- **frontend:** deeper integration with the hub + ([bb58eba](https://github.com/windmill-labs/windmill/commit/bb58eba2b521aef67b91cfc23f3ddcc8a001e18f)) +- **frontend:** title everywhere + ([38987c6](https://github.com/windmill-labs/windmill/commit/38987c6068c4cc2d9accbc368a67362e74adcabf)) +- hub flows integration + ([62777b7](https://github.com/windmill-labs/windmill/commit/62777b7a7888b3456f7f864cbb1acd887b172adc)) + +### Bug Fixes + +- display websocket status in flow inline editor + ([9e9138e](https://github.com/windmill-labs/windmill/commit/9e9138e4eeaea962dbb149ad4c1450572f025bc5)) +- do not redirect to /user on /user namespace + ([d95128e](https://github.com/windmill-labs/windmill/commit/d95128e68190fa6f75871f579de906ce82619524)) +- **oauth2:** add google clients + ([bc650b0](https://github.com/windmill-labs/windmill/commit/bc650b0ade1d378f815ee01da480a63ddd4501f1)) +- static is undefined by default instead of being empty '' + ([fc65162](https://github.com/windmill-labs/windmill/commit/fc651629c7977b5221dbb101f515766b23af9274)) + +## [1.22.0](https://github.com/windmill-labs/windmill/compare/v1.21.1...v1.22.0) (2022-07-22) + +### Features + +- add delete schedule + ([f6d6934](https://github.com/windmill-labs/windmill/commit/f6d69345841f2ec0d06dc32b59840009982c55f2)) +- **backend:** check of no path conflict between flow and flow's primary + schedules + ([c346339](https://github.com/windmill-labs/windmill/commit/c34633989e41e215d6183e5c887db68d4cc228d3)) +- dynamic template for script inputs in flow + ([3c16621](https://github.com/windmill-labs/windmill/commit/3c16621f6b9c2bee1f2630411bd70d075d247974)) +- import and export flow from JSON + ([7862ff4](https://github.com/windmill-labs/windmill/commit/7862ff41e25447d7b34aa261187bb98ed3f3105b)) +- more visual cues about trigger scripts + ([36606ab](https://github.com/windmill-labs/windmill/commit/36606ab8b675d01b0d38e2dd883b6e42b0987a6c)) +- more visual cues about trigger scripts + ([154c2a9](https://github.com/windmill-labs/windmill/commit/154c2a91ca6a4d60b02a44dda5fa23974594018b)) +- rich rendering of flows + ([38ffcfe](https://github.com/windmill-labs/windmill/commit/38ffcfeb292c6e9df0c89a4ef5364cdb8e23ccdd)) + +### Bug Fixes + +- **deno-client:** make hack for patching openapi-generator more stable + ([08ab4d1](https://github.com/windmill-labs/windmill/commit/08ab4d171a286d94e439a89d97115ad2db8e25d9)) +- export json is converted to pull mode + ([666e0f6](https://github.com/windmill-labs/windmill/commit/666e0f68d0dd84fce35e6fe1804c90a3c5125057)) +- export json is converted to pull mode + rd fix + ([c7528d4](https://github.com/windmill-labs/windmill/commit/c7528d417f276fbdb96751cda547feec7ac6fbc8)) +- **frontend:** filter script by is_trigger and jobs by is_skipped + path fix + ([97292d1](https://github.com/windmill-labs/windmill/commit/97292d18fb7158471f1be6ffbd45a612b09a689f)) +- **frontend:** initFlow also reset schemaStore + ([5941467](https://github.com/windmill-labs/windmill/commit/5941467ea19938b4d11b56c6f10f529c87cb52a3)) +- **frontend:** remove unecessary step 1 of flows + ([f429074](https://github.com/windmill-labs/windmill/commit/f429074528770f5eaebcf1ce687b6431321e169a)) +- improve tooltip + ([4be5d37](https://github.com/windmill-labs/windmill/commit/4be5d37a5441555c83eefbea17e86a5df4946749)) +- improve tooltip + ([c84b1c9](https://github.com/windmill-labs/windmill/commit/c84b1c9a8c6a03b9689e3405fa87f3c54016914a)) +- placeholder undefined for arginput + ([4d01598](https://github.com/windmill-labs/windmill/commit/4d01598e24fca673b0dc83860e151c21ab403b7a)) + +## [1.21.1](https://github.com/windmill-labs/windmill/compare/v1.21.0...v1.21.1) (2022-07-19) + +### Bug Fixes + +- **deno-client:** make hack for patching openapi-generator more stable + ([2f4df43](https://github.com/windmill-labs/windmill/commit/2f4df43a1a798501449e82767d59f08e9cf95146)) +- **python-client:** sed openapi to avoid generator circular dependency + ([49f8050](https://github.com/windmill-labs/windmill/commit/49f8050aaf48c15fb79130a06ce754e285d17dd0)) + +## [1.21.0](https://github.com/windmill-labs/windmill/compare/v1.20.0...v1.21.0) (2022-07-19) + +### Features + +- add run_wait_result to mimic lambda ability + ([6ef3754](https://github.com/windmill-labs/windmill/commit/6ef3754759346b8261934a35bd3bf3983872390f)) + +### Bug Fixes + +- **backend:** clear env variables before running script + ([98a5959](https://github.com/windmill-labs/windmill/commit/98a5959fcca19c54715e78055cf8881496209ac0)) +- consistent exists/{resource} addition + usage in frontend + ([ca66d33](https://github.com/windmill-labs/windmill/commit/ca66d33a4297d2f3a105829650a544f4a89c4615)) +- **frontend:** validate username + ([9828e54](https://github.com/windmill-labs/windmill/commit/9828e545e9649bc2ac6af598118ef85580fd80f3)) +- list with is_skipped + deno-client fix + ([6939f9d](https://github.com/windmill-labs/windmill/commit/6939f9d76b1579f2932e08df3f67dc293c642fd0)) + +## [1.20.0](https://github.com/windmill-labs/windmill/compare/v1.19.3...v1.20.0) (2022-07-17) + +### Features + +- trigger scripts and have flows being triggered by checking new external events + regularly ([#200](https://github.com/windmill-labs/windmill/issues/200)) + ([af23b30](https://github.com/windmill-labs/windmill/commit/af23b30c37b4225d6b927644f9612d4861e2d06c)) + +### Bug Fixes + +- flow UI back and forth pull/push fix + ([8918eb6](https://github.com/windmill-labs/windmill/commit/8918eb6fdb904e23b5dc340db669f6039ed7abb6)) +- flow UI back and forth pull/push fix + ([0973859](https://github.com/windmill-labs/windmill/commit/097385981323d5f88a51eb8df0e1114e8cf62727)) +- **frontend:** chrome columns-2 fix for pull/push + ([8272b11](https://github.com/windmill-labs/windmill/commit/8272b1110757ee0ed0cee4a7a6de537fcec83de3)) +- **frontend:** createInlineScript only create trigger script if step = 0 + ([bd004cf](https://github.com/windmill-labs/windmill/commit/bd004cff0f5150eb043f5446f5697bea43b1508b)) +- HubPicker pick from trigger scripts when relevant + ([7e846c3](https://github.com/windmill-labs/windmill/commit/7e846c32a63d9fe2f46f50f7642918cc34459829)) + +## [1.19.3](https://github.com/windmill-labs/windmill/compare/v1.19.2...v1.19.3) (2022-07-15) + +### Bug Fixes + +- **deno-client:** do not create resource for createInternalPath + ([0967c1b](https://github.com/windmill-labs/windmill/commit/0967c1be65a9803e25f7701850be33121eb44d1b)) + +## [1.19.2](https://github.com/windmill-labs/windmill/compare/v1.19.1...v1.19.2) (2022-07-15) + +### Bug Fixes + +- **deno-client:** handle text/plain parse + ([18e33bb](https://github.com/windmill-labs/windmill/commit/18e33bb40739fd699323f2da87de8c9696c0ef6c)) + +## [1.19.1](https://github.com/windmill-labs/windmill/compare/v1.19.0...v1.19.1) (2022-07-14) + +### Bug Fixes + +- **backend:** create resource would fail if is_oauth was not set + ([cd621a6](https://github.com/windmill-labs/windmill/commit/cd621a6285d2aa0e554434998e931e96110464bd)) +- **deno-client:** handle text/plain serialize + ([98968ab](https://github.com/windmill-labs/windmill/commit/98968ab039fea89b7525fe7b852ba3d15dee831e)) + +## [1.19.0](https://github.com/windmill-labs/windmill/compare/v1.18.0...v1.19.0) (2022-07-14) + +### Features + +- add DISABLE_NSJAIL mode + ([1943585](https://github.com/windmill-labs/windmill/commit/19435851de0c18fc876a3bd00f3d9153f2719d9b)) + +### Bug Fixes + +- add new ca-certificates folders for nsjail + ([2eac1ef](https://github.com/windmill-labs/windmill/commit/2eac1ef363b209bb298dcbe7aafb7282ddd2b87a)) +- **frontend:** add arbitrary scopes to connect an app + ([372b14e](https://github.com/windmill-labs/windmill/commit/372b14e158bcb10bcfb07d231afeca5cc780661d)) +- write job arguments to file + ([#199](https://github.com/windmill-labs/windmill/issues/199)) + ([9a6db75](https://github.com/windmill-labs/windmill/commit/9a6db758c15915f5f0027b1d270d621f91b7ae30)) + +## [1.18.0](https://github.com/windmill-labs/windmill/compare/v1.17.1...v1.18.0) (2022-07-13) + +### Features + +- account part II, handle refresh tokens, clarify oauth UI + ([#196](https://github.com/windmill-labs/windmill/issues/196)) + ([8403fbb](https://github.com/windmill-labs/windmill/commit/8403fbbc02076bb37dc82b2d26685957b13d036b)) + +### Bug Fixes + +- **frontend:** fix path group refresh & create variable path reset + ([6a341f5](https://github.com/windmill-labs/windmill/commit/6a341f5dc343df3df6491f8026e87632979faace)) + +## [1.17.1](https://github.com/windmill-labs/windmill/compare/v1.17.0...v1.17.1) (2022-07-08) + +### Bug Fixes + +- **backend:** set error content-type to text + ([cf2dfd7](https://github.com/windmill-labs/windmill/commit/cf2dfd7fe74956d68bdc26dc47557ea6a0ed1ce4)) +- **deno-client:** fix stringify + ([5b89abe](https://github.com/windmill-labs/windmill/commit/5b89abe28283238a282da8920580a72f25e5a360)) +- **frontend:** change lsp behavior + ([d6e0817](https://github.com/windmill-labs/windmill/commit/d6e0817dc4fe54efd9346698c0ccb39057921d9b)) +- **frontend:** connect an app resource creation + ([e400dcc](https://github.com/windmill-labs/windmill/commit/e400dccedd88e3f5e3a9b0ec52fc9883d60c959b)) +- **frontend:** connect an app resource creation + ([68c5318](https://github.com/windmill-labs/windmill/commit/68c5318d16c85a01822570c113a4f33c539dc8bf)) +- **frontend:** current hash link + ([22eef8a](https://github.com/windmill-labs/windmill/commit/22eef8afab9143bb5b110db8c76e024604106051)) +- **frontend:** fix sendRequest + ([5da9819](https://github.com/windmill-labs/windmill/commit/5da9819ca5ce15ef4de9cf4a84affbd581383483)) +- **frontend:** reload editor when language changes for in-flow editor + ([72c7890](https://github.com/windmill-labs/windmill/commit/72c7890427736eeeb9a872bf0efd1acc906efd63)) +- **frontend:** sveltekit prerender enabled -> default + ([635873a](https://github.com/windmill-labs/windmill/commit/635873a96a586ad8e936526f4f4ebf679519e7fc)) +- in-flow script editor fixes + ([466f6b3](https://github.com/windmill-labs/windmill/commit/466f6b339acf70351814c32b8f31d80b8ff1c1b5)) +- in-flow script editor fixes + ([5853dfd](https://github.com/windmill-labs/windmill/commit/5853dfd85dca3c80b0edfb58b2866948af8011d5)) +- remove unnecessary v8 snapshot + ([d3904fd](https://github.com/windmill-labs/windmill/commit/d3904fd3ebde3a200ccc157a8532dfe1435ae16d)) + +## [1.17.0](https://github.com/windmill-labs/windmill/compare/v1.16.1...v1.17.0) (2022-07-05) + +### Features + +- in-flow editor mvp + ([330b373](https://github.com/windmill-labs/windmill/commit/330b373c24f21b4d9a9b2903e8f1c60ee784ea89)) + +## [1.16.1](https://github.com/windmill-labs/windmill/compare/v1.16.0...v1.16.1) (2022-07-05) + +### Bug Fixes + +- bump all backend deps by breaking cycling through not using oauth2 + ([e4a6378](https://github.com/windmill-labs/windmill/commit/e4a637860133e78cb1675173ccf3ff45e4b08c09)) +- oauth logins used incorrect scope + ([1dcba67](https://github.com/windmill-labs/windmill/commit/1dcba67a1f607faabcdfa6f7e94d280c66dd6470)) +- trace errors body + ([d092c62](https://github.com/windmill-labs/windmill/commit/d092c622c4efadb1e2799f7dbbe03f825f2b364d)) + +## [1.16.0](https://github.com/windmill-labs/windmill/compare/v1.15.1...v1.16.0) (2022-07-02) + +### Features + +- OAuth "Connect an App" + ([#155](https://github.com/windmill-labs/windmill/issues/155)) + ([3636866](https://github.com/windmill-labs/windmill/commit/3636866dda8b2e14d61c99a76f0a4e5fa6a37123)) + +### Bug Fixes + +- add gitlab to connects + ([d4e7c9e](https://github.com/windmill-labs/windmill/commit/d4e7c9e171cd02a7aa0846b43c127720260600b5)) +- diverse frontend fixes + +## [1.15.1](https://github.com/windmill-labs/windmill/compare/v1.15.0...v1.15.1) (2022-06-29) + +### Bug Fixes + +- databaseUrlFromResource uses proper database field + ([6954580](https://github.com/windmill-labs/windmill/commit/69545808012fa4f5080ec58cf3dff2961a327117)) + +## [1.15.0](https://github.com/windmill-labs/windmill/compare/v1.14.6...v1.15.0) (2022-06-29) + +### Features + +- Flows Property picker component + Dynamic type inference + ([#129](https://github.com/windmill-labs/windmill/issues/129)) + ([44b4acf](https://github.com/windmill-labs/windmill/commit/44b4acf4bcfa0c372a9938a9b97d31cceedd9ad9)) + +## [1.14.6](https://github.com/windmill-labs/windmill/compare/v1.14.5...v1.14.6) (2022-06-27) + +### Bug Fixes + +- add databaseUrlFromResource to deno + ([2659e9d](https://github.com/windmill-labs/windmill/commit/2659e9d62b88c2127c969becbc3a61ed2f118069)) + +## [1.14.5](https://github.com/windmill-labs/windmill/compare/v1.14.4...v1.14.5) (2022-06-27) + +### Bug Fixes + +- index.ts -> mod.ts + ([d41913a](https://github.com/windmill-labs/windmill/commit/d41913a440b2034de59437488edc85e38c956d5f)) +- insert getResource proper parenthesis + ([e07b5d4](https://github.com/windmill-labs/windmill/commit/e07b5d4f30ea79a99caac4fb63a9ab1f17eaaf74)) + +## [1.14.4](https://github.com/windmill-labs/windmill/compare/v1.14.3...v1.14.4) (2022-06-27) + +### Bug Fixes + +- windmill deno package index.ts -> mod.ts + ([8c0acac](https://github.com/windmill-labs/windmill/commit/8c0acac212d742acee8b7ff0cf6b93cce4187c19)) + +## [1.14.3](https://github.com/windmill-labs/windmill/compare/v1.14.2...v1.14.3) (2022-06-27) + +### Bug Fixes + +- internal state for script triggers v3 + ([31445d7](https://github.com/windmill-labs/windmill/commit/31445d7182a910eab9d699760f2a86ca23d556a4)) +- internal state for script triggers v3 + ([22c6347](https://github.com/windmill-labs/windmill/commit/22c6347d8a74d94dc18109390ff5c347a2732823)) +- internal state for script triggers v4 + ([63a7401](https://github.com/windmill-labs/windmill/commit/63a7401f248cc37951bbea4dcaedaa6497d6f0b1)) + +## [1.14.2](https://github.com/windmill-labs/windmill/compare/v1.14.1...v1.14.2) (2022-06-27) + +### Bug Fixes + +- internal state for script triggers v2 + ([f9eedc3](https://github.com/windmill-labs/windmill/commit/f9eedc31ed6e5d7e0a8a26633cca9965ac3b6a05)) + +## [1.14.1](https://github.com/windmill-labs/windmill/compare/v1.14.0...v1.14.1) (2022-06-27) + +### Bug Fixes + +- internal state for script triggers v1 + ([6321311](https://github.com/windmill-labs/windmill/commit/6321311112dfa3ef09447f41847b248c0e0dcb46)) + +## [1.14.0](https://github.com/windmill-labs/windmill/compare/v1.13.0...v1.14.0) (2022-06-27) + +### Features + +- add tesseract bin to worker image + ([6de9697](https://github.com/windmill-labs/windmill/commit/6de9697d955a06cfb9c64fdb501b4dfa1bb597ad)) +- deno run with --unstable + ([4947661](https://github.com/windmill-labs/windmill/commit/4947661b1d91867c022bb8a10a4be3e91f69352c)) +- internal state for script triggers mvp + ([dcdb989](https://github.com/windmill-labs/windmill/commit/dcdb989adb8350974289a0c8d2239b245a6e0d41)) + +### Bug Fixes + +- change default per page to 100 + ([fdf95a0](https://github.com/windmill-labs/windmill/commit/fdf95a065e83d733ab6a0f02edb4af16c0a1dfb9)) +- deno exit after result logging + ([6c622bc](https://github.com/windmill-labs/windmill/commit/6c622bcc32473361e1f7cb1ea7b0b508929bc1b8)) +- improve error handling + ([f98f642](https://github.com/windmill-labs/windmill/commit/f98f6429c1e646c0a836f2f73a03a803aa655583)) +- improve error handling + ([2efaf21](https://github.com/windmill-labs/windmill/commit/2efaf2191551c1406618c6d60bd37ca6eff84560)) +- schemaPicker does not display editor by default + ([fc0c38f](https://github.com/windmill-labs/windmill/commit/fc0c38ffad18a9ceda44cb8406736c14ba4eb4c2)) +- smart assistant reload + ([bb946ed](https://github.com/windmill-labs/windmill/commit/bb946ed5519f59adc559d6959c56e61403389c9d)) + +## [1.13.0](https://github.com/windmill-labs/windmill/compare/v1.12.0...v1.13.0) (2022-06-22) + +### Features + +- better type narrowing for list and array types + ([276319d](https://github.com/windmill-labs/windmill/commit/276319d99240dbca5bcc74a1142d99ca823c4da2)) + +### Bug Fixes + +- fix webhook path for flows + ([906f740](https://github.com/windmill-labs/windmill/commit/906f740a0ddce26743e4669af7a101613131a17c)) +- make email constraint case insensitive + ([6dc90a3](https://github.com/windmill-labs/windmill/commit/6dc90a390643fcf6116289596ca1c3149d326797)) + +## [1.12.0](https://github.com/windmill-labs/windmill/compare/v1.11.0...v1.12.0) (2022-06-14) + +### Bug Fixes + +- more flexible ResourceType MainArgSignature parser + ([359ef15](https://github.com/windmill-labs/windmill/commit/359ef15fa2a9024507a71f2c656373925fba3ebe)) +- rename ResourceType -> Resource + ([28b5671](https://github.com/windmill-labs/windmill/commit/28b56714023ea69a20f003e08f6c40de64202ac5)) + +## [1.11.0](https://github.com/windmill-labs/windmill/compare/v1.10.1...v1.11.0) (2022-06-13) + +### Features + +- add DISABLE_NUSER for older kernels + ([cce46f9](https://github.com/windmill-labs/windmill/commit/cce46f94404ac5c10407e430fff8cdec3bd7fb2d)) +- add ResourceType<'name'> as deno signature arg type + ([f1ee5f3](https://github.com/windmill-labs/windmill/commit/f1ee5f3130cb7b753ccc3ee62169c5e4a8ef7b8b)) + +### Bug Fixes + +- force c\_ prefix for adding resource type + ([9f235c4](https://github.com/windmill-labs/windmill/commit/9f235c404ed62b54a73451b9f9dbddd8f013120d)) +- **frontend:** loadItems not called in script picker + ([a59b927](https://github.com/windmill-labs/windmill/commit/a59b92706b24a07cc14288620a9bcdb9402bd134)) + +## [1.10.1](https://github.com/windmill-labs/windmill/compare/v1.10.0...v1.10.1) (2022-06-12) + +### Bug Fixes + +- python-client verify ssl + ([295e28f](https://github.com/windmill-labs/windmill/commit/295e28fd43ef07b739d2c7c85b0ae6819f7d7434)) + +## [1.10.0](https://github.com/windmill-labs/windmill/compare/v1.9.0...v1.10.0) (2022-06-11) + +### Features + +- alpha hub integration + frontend user store fixes + script client base_url fix + ([1a61d50](https://github.com/windmill-labs/windmill/commit/1a61d50076b295fe97e48c2a621dff30802152b1)) + +## [1.9.0](https://github.com/windmill-labs/windmill/compare/v1.8.6...v1.9.0) (2022-06-05) + +### Features + +- update postgres 13->14 in docker-compose + ([479a12f](https://github.com/windmill-labs/windmill/commit/479a12f33ca26bfd1b67bcdd24a64ca26cc6bebe)) + +### Bug Fixes + +- remove annoying transitions for scripts and flows + ([f2348b5](https://github.com/windmill-labs/windmill/commit/f2348b5526bb8197519685cb57049f74c6f3a11d)) + +### [1.8.6](https://github.com/windmill-labs/windmill/compare/v1.8.5...v1.8.6) (2022-05-18) + +### Bug Fixes + +- re-release + ([d31cd3c](https://github.com/windmill-labs/windmill/commit/d31cd3c52c1b46e821da261f22d0aec872b61fb2)) + +### [1.8.5](https://github.com/windmill-labs/windmill/compare/v1.8.4...v1.8.5) (2022-05-18) + +### Bug Fixes + +- language field broke flow too + ([33fed8e](https://github.com/windmill-labs/windmill/commit/33fed8e04d3abbde371535ecb6e7ba15d103db92)) + +### [1.8.4](https://github.com/windmill-labs/windmill/compare/v1.8.3...v1.8.4) (2022-05-18) + +### Bug Fixes + +- scripts run was broken due to 1.7 and 1.8 changes. This fix it + ([7564d2c](https://github.com/windmill-labs/windmill/commit/7564d2cb1e7f600ede22f333a02a537df381d829)) + +### [1.8.3](https://github.com/windmill-labs/windmill/compare/v1.8.2...v1.8.3) (2022-05-18) + +### Bug Fixes + +- clean exported deno-client api + ([605c2b4](https://github.com/windmill-labs/windmill/commit/605c2b4d11bf072332a38f0c3e24cf6cc9ec7e65)) + +### [1.8.2](https://github.com/windmill-labs/windmill/compare/v1.8.1...v1.8.2) (2022-05-18) + +### Bug Fixes + +- deno client + ([563ba3e](https://github.com/windmill-labs/windmill/commit/563ba3e7f763279a93f619933ac35a1dec3f727a)) +- deno lsp client + ([3eed59f](https://github.com/windmill-labs/windmill/commit/3eed59fcb1b172ab13f65c9a0caa0545f5ed91da)) +- deno lsp uses wss instead of ws + ([865d728](https://github.com/windmill-labs/windmill/commit/865d728224bed55fe4a2c1905ff2b8c15f4bbe17)) +- starting deno script is now async + ([7365a8e](https://github.com/windmill-labs/windmill/commit/7365a8e87bdb1f879eb92125a9e6378a1636637e)) + +### [1.8.1](https://github.com/windmill-labs/windmill/compare/v1.8.0...v1.8.1) (2022-05-17) + +### Bug Fixes + +- frontend dependencies update + ([f793bc4](https://github.com/windmill-labs/windmill/commit/f793bc46d98349a5fea56c7911b6e0720b2b117c)) + +## [1.8.0](https://github.com/windmill-labs/windmill/compare/v1.7.0...v1.8.0) (2022-05-17) + +### Features + +- Typescript support for scripts (alpha) + ([2e1d430](https://github.com/windmill-labs/windmill/commit/2e1d43033f3ad6dbe86338b7a41da7b1120a5ffc)) + +## [1.7.0](https://github.com/windmill-labs/windmill/compare/v1.6.1...v1.7.0) (2022-05-14) + +### Features + +- self host github oauth + ([#46](https://github.com/windmill-labs/windmill/issues/46)) + ([5b413d7](https://github.com/windmill-labs/windmill/commit/5b413d7e045d09dc5c5916cb22d82438ec6c92ad)) + +### Bug Fixes + +- better error message when saving script + ([02c8bea](https://github.com/windmill-labs/windmill/commit/02c8bea0840e492c31ccb8ddd1e5ae9676a534b1)) + +### [1.6.1](https://github.com/windmill-labs/windmill/compare/v1.6.0...v1.6.1) (2022-05-10) + +### Bug Fixes + +- also store and display "started at" for completed jobs + ([#33](https://github.com/windmill-labs/windmill/issues/33)) + ([2c28031](https://github.com/windmill-labs/windmill/commit/2c28031e44453740ad8c4b7e3c248173eab34b9c)) + +## 1.6.0 (2022-05-10) + +### Features + +- superadmin settings + ([7a51f84](https://www.github.com/windmill-labs/windmill/commit/7a51f842f01e17c4d230c060fa0de558553ad3ed)) +- user settings is now at workspace level + ([a130806](https://www.github.com/windmill-labs/windmill/commit/a130806e1929267ee40ca443e3dac6e1a5d80da3)) + +### Bug Fixes + +- display more than default 30 workspaces as superadmin + ([55b5695](https://www.github.com/windmill-labs/windmill/commit/55b5695673912ffe040d3011c020b1002b4e3268)) + ## [1.5.0](https://www.github.com/windmill-labs/windmill/v1.5.0) (2022-05-02) diff --git a/CLA.md b/CLA.md new file mode 100644 index 0000000000000..2fc3a5831b380 --- /dev/null +++ b/CLA.md @@ -0,0 +1,145 @@ +## Contributor Agreement + +## Individual Contributor Non-Exclusive License Agreement + +Thank you for your interest in contributing to Windmill Labs, Inc's Windmill +("We" or "Us"). + +The purpose of this contributor agreement ("Agreement") is to clarify and +document the rights granted by contributors to Us. + +### 1\. Definitions + +**"You"** means the individual Copyright owner who Submits a Contribution to Us. + +**"Legal Entity"** means an entity that is not a natural person. + +**"Affiliate"** means any other Legal Entity that controls, is controlled by, or +under common control with that Legal Entity. For the purposes of this +definition, "control" means (i) the power, direct or indirect, to cause the +direction or management of such Legal Entity, whether by contract or otherwise, +(ii) ownership of fifty percent (50%) or more of the outstanding shares or +securities that vote to elect the management or other persons who direct such +Legal Entity or (iii) beneficial ownership of such entity. + +**"Contribution"** means any original work of authorship, including any original +modifications or additions to an existing work of authorship, Submitted by You +to Us, in which You own the Copyright. + +**"Copyright"** means all rights protecting works of authorship, including +copyright, moral and neighboring rights, as appropriate, for the full term of +their existence. + +**"Material"** means the software or documentation made available by Us to third +parties. + +**"Submit"** means any act by which a Contribution is transferred to Us by You +by means of tangible or intangible media, including but not limited to +electronic mailing lists, source code control systems, and issue tracking +systems that are managed by, or on behalf of, Us, but excluding any transfer +that is conspicuously marked or otherwise designated in writing by You as "Not a +Contribution." + +**"Documentation"** means any non-software portion of a Contribution. + +### 2\. License grant + +#### 2.1 Copyright license to Us + +Subject to the terms and conditions of this Agreement, You hereby grant to Us a +worldwide, royalty-free, NON-exclusive, perpetual and irrevocable (except as +stated in Section 8.2) license, with the right to transfer an unlimited number +of non-exclusive licenses or to grant sublicenses to third parties, under the +Copyright covering the Contribution to use the Contribution by all means, +including, but not limited to: + +- publish the Contribution, +- modify the Contribution, +- prepare derivative works based upon or containing the Contribution and/or to + combine the Contribution with other Materials, +- reproduce the Contribution in original or modified form, +- distribute, to make the Contribution available to the public, display and + publicly perform the Contribution in original or modified form. + +#### 2.2 Moral rights + +Moral Rights remain unaffected to the extent they are recognized and not +waivable by applicable law. Notwithstanding, You may add your name to the +attribution mechanism customary used in the Materials you Contribute to, such as +the header of the source code files of Your Contribution, and We will respect +this attribution when using Your Contribution. + +### 3\. Patents + +#### 3.1 Patent license + +Subject to the terms and conditions of this Agreement You hereby grant to Us and +to recipients of Materials distributed by Us a worldwide, royalty-free, +non-exclusive, perpetual and irrevocable (except as stated in Section 3.2) +patent license, with the right to transfer an unlimited number of non-exclusive +licenses or to grant sublicenses to third parties, to make, have made, use, +sell, offer for sale, import and otherwise transfer the Contribution and the +Contribution in combination with any Material (and portions of such +combination). This license applies to all patents owned or controlled by You, +whether already acquired or hereafter acquired, that would be infringed by +making, having made, using, selling, offering for sale, importing or otherwise +transferring of Your Contribution(s) alone or by combination of Your +Contribution(s) with any Material. + +### 4. Disclaimer + +THE CONTRIBUTION IS PROVIDED "AS IS". MORE PARTICULARLY, ALL EXPRESS OR IMPLIED +WARRANTIES INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTY OF SATISFACTORY +QUALITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE EXPRESSLY +DISCLAIMED BY YOU TO US AND BY US TO YOU. TO THE EXTENT THAT ANY SUCH WARRANTIES +CANNOT BE DISCLAIMED, SUCH WARRANTY IS LIMITED IN DURATION AND EXTENT TO THE +MINIMUM PERIOD AND EXTENT PERMITTED BY LAW. + +### 5. Consequential damage waiver + +TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, IN NO EVENT WILL YOU OR WE BE +LIABLE FOR ANY LOSS OF PROFITS, LOSS OF ANTICIPATED SAVINGS, LOSS OF DATA, +INDIRECT, SPECIAL, INCIDENTAL, CONSEQUENTIAL AND EXEMPLARY DAMAGES ARISING OUT +OF THIS AGREEMENT REGARDLESS OF THE LEGAL OR EQUITABLE THEORY (CONTRACT, TORT OR +OTHERWISE) UPON WHICH THE CLAIM IS BASED. + +### 6. Approximation of disclaimer and damage waiver + +IF THE DISCLAIMER AND DAMAGE WAIVER MENTIONED IN SECTION 4. AND SECTION 5. +CANNOT BE GIVEN LEGAL EFFECT UNDER APPLICABLE LOCAL LAW, REVIEWING COURTS SHALL +APPLY LOCAL LAW THAT MOST CLOSELY APPROXIMATES AN ABSOLUTE WAIVER OF ALL CIVIL +OR CONTRACTUAL LIABILITY IN CONNECTION WITH THE CONTRIBUTION. + +### 7. Term + +7.1 This Agreement shall come into effect upon Your acceptance of the terms and +conditions. + +7.3 In the event of a termination of this Agreement Sections 4, 5, 6, 7 and 8 +shall survive such termination and shall remain in full force thereafter. For +the avoidance of doubt, Free and Open Source Software (sub)licenses that have +already been granted for Contributions at the date of the termination shall +remain in full force after the termination of this Agreement. + +### 8 Miscellaneous + +8.1 This Agreement and all disputes, claims, actions, suits or other proceedings +arising out of this agreement or relating in any way to it shall be governed by +the laws of France excluding its private international law provisions. + +8.2 This Agreement sets out the entire agreement between You and Us for Your +Contributions to Us and overrides all other agreements or understandings. + +8.3 In case of Your death, this agreement shall continue with Your heirs. In +case of more than one heir, all heirs must exercise their rights through a +commonly authorized person. + +8.4 If any provision of this Agreement is found void and unenforceable, such +provision will be replaced to the extent possible with a provision that comes +closest to the meaning of the original provision and that is enforceable. The +terms and conditions set forth in this Agreement shall apply notwithstanding any +failure of essential purpose of this Agreement or any limited remedy to the +maximum extent possible under law. + +8.5 You agree to notify Us of any facts or circumstances of which you become +aware that would make this Agreement inaccurate in any respect. diff --git a/Caddyfile b/Caddyfile index f694d3fc4173e..67925e6492865 100644 --- a/Caddyfile +++ b/Caddyfile @@ -1,4 +1,18 @@ -{$SITE_URL} { - bind {$ADDRESS} - reverse_proxy /* server:8000 +{ + layer4 { + :25 { + proxy { + to windmill_server:2525 + } + } + } +} + +{$BASE_URL} { + bind {$ADDRESS} + reverse_proxy /ws/* http://lsp:3001 + # reverse_proxy /ws_mp/* http://multiplayer:3002 + # reverse_proxy /api/srch/* http://windmill_indexer:8001 + reverse_proxy /* http://windmill_server:8000 + # tls /certs/cert.pem /certs/key.pem } diff --git a/Dockerfile b/Dockerfile index b484f5b9aa874..3bc5088aedf27 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,25 +1,27 @@ -FROM python:3.10-slim-buster as nsjail +ARG DEBIAN_IMAGE=debian:bookworm-slim +ARG RUST_IMAGE=rust:1.80-slim-bookworm +ARG PYTHON_IMAGE=python:3.11.10-slim-bookworm -WORKDIR /nsjail +FROM ${RUST_IMAGE} AS rust_base + +RUN apt-get update && apt-get install -y git libssl-dev pkg-config npm RUN apt-get -y update \ && apt-get install -y \ - bison=2:3.3.* \ - flex=2.6.* \ - g++=4:8.3.* \ - gcc=4:8.3.* \ - git=1:2.20.* \ - libprotobuf-dev=3.6.* \ - libnl-route-3-dev=3.4.* \ - make=4.2.* \ - pkg-config=0.29-6 \ - protobuf-compiler=3.6.* - -RUN git clone -b master --single-branch https://github.com/google/nsjail.git . \ - && git checkout dccf911fd2659e7b08ce9507c25b2b38ec2c5800 -RUN make - -FROM mhart/alpine-node:14 as frontend + curl nodejs + +RUN rustup component add rustfmt + +RUN CARGO_NET_GIT_FETCH_WITH_CLI=true cargo install cargo-chef --version ^0.1 +RUN cargo install sccache --version ^0.8 +ENV RUSTC_WRAPPER=sccache SCCACHE_DIR=/backend/sccache + +WORKDIR /windmill + +ENV SQLX_OFFLINE=true +# ENV CARGO_INCREMENTAL=1 + +FROM node:20-alpine as frontend # install dependencies WORKDIR /frontend @@ -29,71 +31,168 @@ RUN npm ci # Copy all local files into the image. COPY frontend . RUN mkdir /backend -COPY /backend/openapi.yaml /backend/openapi.yaml +COPY /backend/windmill-api/openapi.yaml /backend/windmill-api/openapi.yaml +COPY /openflow.openapi.yaml /openflow.openapi.yaml +COPY /backend/windmill-api/build_openapi.sh /backend/windmill-api/build_openapi.sh + +RUN cd /backend/windmill-api && . ./build_openapi.sh +COPY /backend/parsers/windmill-parser-wasm/pkg/ /backend/parsers/windmill-parser-wasm/pkg/ +COPY /typescript-client/docs/ /frontend/static/tsdocs/ + RUN npm run generate-backend-client +ENV NODE_OPTIONS "--max-old-space-size=8192" +ARG VITE_BASE_URL "" RUN npm run build -FROM rust:slim-buster as builder -RUN apt-get update && apt-get install -y git libssl-dev pkg-config +FROM rust_base AS planner -RUN USER=root cargo new --bin windmill -WORKDIR /windmill +COPY ./openflow.openapi.yaml /openflow.openapi.yaml +COPY ./backend ./ -COPY ./backend/Cargo.toml . -COPY ./backend/Cargo.lock . -COPY ./backend/.cargo/ .cargo/ +RUN --mount=type=cache,target=/usr/local/cargo/registry \ + --mount=type=cache,target=$SCCACHE_DIR,sharing=locked \ + CARGO_NET_GIT_FETCH_WITH_CLI=true cargo chef prepare --recipe-path recipe.json -RUN apt-get -y update \ - && apt-get install -y \ - curl +FROM rust_base AS builder +ARG features="" -ENV CARGO_INCREMENTAL=1 +COPY --from=planner /windmill/recipe.json recipe.json -RUN cargo build --release -RUN rm src/*.rs +RUN apt-get update && apt-get install -y libxml2-dev=2.9.* libxmlsec1-dev=1.2.* clang=1:14.0-55.* libclang-dev=1:14.0-55.* cmake=3.25.* && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists/* -RUN rm ./target/release/deps/windmill* -ENV SQLX_OFFLINE=true +RUN --mount=type=cache,target=/usr/local/cargo/registry \ + --mount=type=cache,target=$SCCACHE_DIR,sharing=locked \ + CARGO_NET_GIT_FETCH_WITH_CLI=true RUST_BACKTRACE=1 cargo chef cook --release --features "$features" --recipe-path recipe.json + +COPY ./openflow.openapi.yaml /openflow.openapi.yaml +COPY ./backend ./ -ADD ./backend ./ -ADD ./nsjail /nsjail +RUN mkdir -p /frontend -COPY --from=1 /frontend /frontend -ADD .git/ .git/ +COPY --from=frontend /frontend/build /frontend/build +COPY --from=frontend /backend/windmill-api/openapi-deref.yaml ./windmill-api/openapi-deref.yaml +COPY .git/ .git/ -RUN cargo build --release +RUN --mount=type=cache,target=/usr/local/cargo/registry \ + --mount=type=cache,target=$SCCACHE_DIR,sharing=locked \ + CARGO_NET_GIT_FETCH_WITH_CLI=true cargo build --release --features "$features" -FROM debian:buster-slim +FROM ${PYTHON_IMAGE} + +ARG TARGETPLATFORM +ARG POWERSHELL_VERSION=7.3.5 +ARG POWERSHELL_DEB_VERSION=7.3.5-1 +ARG KUBECTL_VERSION=1.28.7 +ARG HELM_VERSION=3.14.3 +ARG GO_VERSION=1.22.5 ARG APP=/usr/src/app +ARG WITH_POWERSHELL=true +ARG WITH_KUBECTL=true +ARG WITH_HELM=true +ARG WITH_GIT=true + +RUN pip install --upgrade pip==24.2 RUN apt-get update \ - && apt-get install -y ca-certificates tzdata libpq5 python3 python3-pip \ - make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev \ - libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev libxml2-dev \ - libxmlsec1-dev libffi-dev liblzma-dev mecab-ipadic-utf8 libgdbm-dev libc6-dev git libprotobuf-dev=3.6.* libnl-route-3-dev=3.4.* \ - libv8-dev \ + && apt-get install -y ca-certificates wget curl jq unzip build-essential unixodbc xmlsec1 software-properties-common \ + && apt-get clean \ && rm -rf /var/lib/apt/lists/* -ENV TZ=Etc/UTC +RUN if [ "$WITH_GIT" = "true" ]; then \ + apt-get update -y \ + && apt-get install -y git \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/*; \ + else echo 'Building the image without git'; fi; + +RUN if [ "$WITH_POWERSHELL" = "true" ]; then \ + if [ "$TARGETPLATFORM" = "linux/amd64" ]; then apt-get update -y && apt install libicu-dev -y && wget -O 'pwsh.deb' "https://github.com/PowerShell/PowerShell/releases/download/v${POWERSHELL_VERSION}/powershell_${POWERSHELL_DEB_VERSION}.deb_amd64.deb" && apt-get clean \ + && rm -rf /var/lib/apt/lists/* && \ + dpkg --install 'pwsh.deb' && \ + rm 'pwsh.deb'; \ + elif [ "$TARGETPLATFORM" = "linux/arm64" ]; then apt-get update -y && apt install libicu-dev -y && wget -O powershell.tar.gz "https://github.com/PowerShell/PowerShell/releases/download/v${POWERSHELL_VERSION}/powershell-${POWERSHELL_VERSION}-linux-arm64.tar.gz" && apt-get clean \ + && rm -rf /var/lib/apt/lists/* && \ + mkdir -p /opt/microsoft/powershell/7 && \ + tar zxf powershell.tar.gz -C /opt/microsoft/powershell/7 && \ + chmod +x /opt/microsoft/powershell/7/pwsh && \ + ln -s /opt/microsoft/powershell/7/pwsh /usr/bin/pwsh && \ + rm powershell.tar.gz; \ + else echo 'Could not install pwshell, not on amd64 or arm64'; fi; \ + else echo 'Building the image without powershell'; fi + +RUN if [ "$WITH_HELM" = "true" ]; then \ + arch="$(dpkg --print-architecture)"; arch="${arch##*-}"; \ + wget "https://get.helm.sh/helm-v${HELM_VERSION}-linux-$arch.tar.gz" && \ + tar -zxvf "helm-v${HELM_VERSION}-linux-$arch.tar.gz" && \ + mv linux-$arch/helm /usr/local/bin/helm &&\ + chmod +x /usr/local/bin/helm; \ + else echo 'Building the image without helm'; fi + +RUN if [ "$WITH_KUBECTL" = "true" ]; then \ + arch="$(dpkg --print-architecture)"; arch="${arch##*-}"; \ + curl -LO "https://dl.k8s.io/release/v${KUBECTL_VERSION}/bin/linux/$arch/kubectl" && \ + install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl; \ + else echo 'Building the image without kubectl'; fi + + +RUN set -eux; \ + arch="$(dpkg --print-architecture)"; arch="${arch##*-}"; \ + case "$arch" in \ + "amd64") \ + targz="go${GO_VERSION}.linux-amd64.tar.gz"; \ + ;; \ + "arm64") \ + targz="go${GO_VERSION}.linux-arm64.tar.gz"; \ + ;; \ + "armhf") \ + targz="go${GO_VERSION}.linux-armv6l.tar.gz"; \ + ;; \ + *) echo >&2 "error: unsupported architecture '$arch' (likely packaging update needed)"; exit 1 ;; \ + esac; \ + wget "https://golang.org/dl/$targz" -nv && tar -C /usr/local -xzf "$targz" && rm "$targz"; + +ENV PATH="${PATH}:/usr/local/go/bin" +ENV GO_PATH=/usr/local/go/bin/go + +RUN curl -sL https://deb.nodesource.com/setup_20.x | bash - +RUN apt-get -y update && apt-get install -y curl nodejs awscli && apt-get clean \ + && rm -rf /var/lib/apt/lists/* -ENV PYTHON_VERSION 3.10.4 +# go build is slower the first time it is ran, so we prewarm it in the build +RUN mkdir -p /tmp/gobuildwarm && cd /tmp/gobuildwarm && go mod init gobuildwarm && printf "package foo\nimport (\"fmt\")\nfunc main() { fmt.Println(42) }" > warm.go && go mod tidy && go build -x && rm -rf /tmp/gobuildwarm -RUN wget https://www.python.org/ftp/python/${PYTHON_VERSION}/Python-${PYTHON_VERSION}.tgz \ - && tar -xf Python-${PYTHON_VERSION}.tgz && cd Python-${PYTHON_VERSION}/ && ./configure --enable-optimizations \ - && make -j 4 && make install +ENV TZ=Etc/UTC -RUN python3 -m pip install pip-tools +RUN /usr/local/bin/python3 -m pip install pip-tools +COPY --from=builder /frontend/build /static_frontend COPY --from=builder /windmill/target/release/windmill ${APP}/windmill -COPY --from=nsjail /nsjail/nsjail /bin/nsjail +COPY --from=denoland/deno:1.46.3 --chmod=755 /usr/bin/deno /usr/bin/deno -RUN mkdir -p ${APP} +COPY --from=oven/bun:1.1.27 /usr/local/bin/bun /usr/bin/bun + +COPY --from=php:8.3.7-cli /usr/local/bin/php /usr/bin/php +COPY --from=composer:2.7.6 /usr/bin/composer /usr/bin/composer + +# add the docker client to call docker from a worker if enabled +COPY --from=docker:dind /usr/local/bin/docker /usr/local/bin/ + +ENV RUSTUP_HOME="/usr/local/rustup" +ENV CARGO_HOME="/usr/local/cargo" WORKDIR ${APP} +RUN ln -s ${APP}/windmill /usr/local/bin/windmill + +COPY ./frontend/src/lib/hubPaths.json ${APP}/hubPaths.json + +RUN windmill cache ${APP}/hubPaths.json && rm ${APP}/hubPaths.json && chmod -R 777 /tmp/windmill + EXPOSE 8000 -CMD ["./windmill"] +CMD ["windmill"] diff --git a/LICENSE b/LICENSE index 4824a1f07fe37..efd4abf0fe16a 100644 --- a/LICENSE +++ b/LICENSE @@ -1,12 +1,22 @@ - Source code in this repository is variously licensed under the Apache License -Version 2.0 (see file ./LICENSE-APACHE),or the AGPLv3 License (see file ./LICENSE-AGPL) +Version 2.0 (see file ./LICENSE-APACHE), or the AGPLv3 License (see file +./LICENSE-AGPL) + +Every file is under copyright (c) Windmill Labs, Inc 2022 unless otherwise +specified. Every file is under License AGPL unless otherwise specified or +belonging to one of the below cases: + +The files under backend/ are AGPLv3 Licensed, except any snippets of code under +the compile flag "enterprise". Those snippets and files are under a proprietary +and commercial license. The files under frontend/ are AGPLv3 Licensed, except +any snippets of code that require a positive license check to be activated. +Those snippets and files are under a proprietary and commercial license. Private +and public forks MUST not include any of the above proprietary and commercial +code. Windmill Labs, Inc. provide tools to clean the codebase from those +snippets upon demand. The files under python-client/ deno-client/ go-client/ powershell-client/ are +Apache 2.0 Licensed. -Every file is under copyright (c) Ruben Fiszel 2021 unless otherwise specified. -Every file is under License AGPL unless otherwise specified -or belonging to one of the below cases: +The openapi files, including the OpenFlow spec is Apache 2.0 Licensed. -The files under backend/ are AGPL Licensed. -The files under frontend/ are AGPL Licensed. -The files under python-client/ are Apache 2.0 Licensed. -The files under community/ are Apache 2.0 Licensed. +All third party components incorporated into the Windmill Software are licensed +under the original license provided by the owner of the applicable component. diff --git a/LICENSE-APACHE b/LICENSE-APACHE index e63c8fad02bb2..b271f17a843cd 100644 --- a/LICENSE-APACHE +++ b/LICENSE-APACHE @@ -186,7 +186,7 @@ same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright 2021 Ruben Fiszel + Copyright 2022 Windmill Labs, Inc Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/NOTICE b/NOTICE index 353e398e2d127..f97115143157d 100644 --- a/NOTICE +++ b/NOTICE @@ -1,6 +1,4 @@ -Ruben Fiszel - -Copyright (c) 2021 Ruben Fiszel +Copyright (c) 2022 Windmill Labs, Inc Source code in this repository is variously licensed under the Apache License Version 2.0 or the GNU Affero General Public License. Please see diff --git a/README.md b/README.md index a6666ece2c5f8..eb6c64ee2ae7d 100644 --- a/README.md +++ b/README.md @@ -1,95 +1,410 @@

- windmill.dev + windmill.dev

-

- Windmill.dev is an OSS developer platform to quickly build production-grade multi-steps automations and internal apps from minimal Python and Typescript scripts. + +

+Open-source developer infrastructure for internal tools (APIs, background jobs, workflows and UIs). Self-hostable alternative to Retool, Pipedream, Superblocks and a simplified Temporal with autogenerated UIs and custom UIs to trigger workflows and scripts as internal apps. + +

+Scripts are turned into sharable UIs automatically, and can be composed together into flows or used into richer apps built with low-code. Supported script languages supported are: Python, TypeScript, Go, Bash, SQL, and GraphQL.

+

+ + Package version + + + Docker Image CI + Package version +

+ +

+ + Commit activity + Discord Shield

---- +

+ Try it - Docs - Discord - Hub - Contributor's guide +

-**Join the alpha (personal workspaces are free forever)**: - +# Windmill - Developer platform for APIs, background jobs, workflows and UIs -**Documentation**: +Windmill is fully open-sourced (AGPLv3) and Windmill Labs offers +dedicated instance and commercial support and licenses. -**Discord**: +![Windmill Diagram](./imgs/stacks.svg) -**We are hiring**: Software Engineers, DevOps, Solutions Engineers, Growth: - +https://github.com/windmill-labs/windmill/assets/122811744/0b132cd1-ee67-4505-822f-0c7ee7104252 -You can show your support for the project by starring this repo. +- [Windmill - Developer platform for APIs, background jobs, workflows and UIs](#windmill---developer-platform-for-apis-background-jobs-workflows-and-uis) + - [Main Concepts](#main-concepts) + - [Show me some actual script code](#show-me-some-actual-script-code) + - [CLI](#cli) + - [Running scripts locally](#running-scripts-locally) + - [Stack](#stack) + - [Fastest Self-Hostable Workflow Engine](#fastest-self-hostable-workflow-engine) + - [Security](#security) + - [Sandboxing](#sandboxing) + - [Secrets, credentials and sensitive values](#secrets-credentials-and-sensitive-values) + - [Performance](#performance) + - [Architecture](#architecture) + - [How to self-host](#how-to-self-host) + - [Docker compose](#docker-compose) + - [Kubernetes (k8s) and Helm charts](#kubernetes-k8s-and-helm-charts) + - [Run from binaries](#run-from-binaries) + - [OAuth, SSO \& SMTP](#oauth-sso--smtp) + - [Commercial license](#commercial-license) + - [Integrations](#integrations) + - [Environment Variables](#environment-variables) + - [Run a local dev setup](#run-a-local-dev-setup) + - [only Frontend](#only-frontend) + - [Backend + Frontend](#backend--frontend) + - [Contributors](#contributors) + - [Copyright](#copyright) ---- +## Main Concepts -# Windmill +1. Define a minimal and generic script in Python, TypeScript, Go or Bash that + solves a specific task. The code can be defined in the + [provided Web IDE](https://www.windmill.dev/docs/code_editor) or + [synchronized with your own GitHub repo](https://www.windmill.dev/docs/advanced/cli/sync) + (e.g. through + [VS Code](https://www.windmill.dev/docs/cli_local_dev/vscode-extension) + extension): -

-Disclaimer: Windmill is in BETA. It is secure to run in production but the API might change, -especially concerning flows. -

+ ![Step 1](./imgs/windmill-editor.png) + +2. Your scripts parameters are automatically parsed and + [generate a frontend](https://www.windmill.dev/docs/core_concepts/auto_generated_uis). + +![Step 2](./imgs/windmill-run.png) + +![Step 3](./imgs/windmill-result.png) + +3. Make it [flow](https://www.windmill.dev/docs/flows/flow_editor)! You can + chain your scripts or scripts made by the community shared on + [WindmillHub](https://hub.windmill.dev). + + ![Step 3](./imgs/windmill-flow.png) + +4. Build [complex UIs](https://www.windmill.dev/docs/apps/app_editor) on top of + your scripts and flows. -![Windmill](./windmill.webp) + ![Step 4](./imgs/windmill-builder.png) -Windmill is fully open-sourced: +Scripts and flows can also be triggered by a +[cron schedule](https://www.windmill.dev/docs/core_concepts/scheduling) (e.g. +'_/5 _ \* \* \*') or through +[webhooks](https://www.windmill.dev/docs/core_concepts/webhooks). -- `community/` and `python-client/` are Apache 2.0 -- backend, frontend and everything else under AGPLv3. +You can build your entire infra on top of Windmill! -## Layout +## Show me some actual script code -- `backend/`: The whole Rust backend -- `frontend`: The whole Svelte fronten -- `community/`: Scripts and resource types created and curated by the community, - included in every workspace -- `lsp/`: The lsp asssistant for the monaco editor -- `nsjail/`: The nsjail configuration files for sandboxing of the scripts' - execution -- `python-client/`: The wmill python client used within scripts to interact with - the windmill platform +```typescript +//import any dependency from npm +import * as wmill from "windmill-client" +import * as cowsay from 'cowsay@1.5.0'; + +// fill the type, or use the +Resource type to get a type-safe reference to a resource +type Postgresql = { + host: string; + port: number; + user: string; + dbname: string; + sslmode: string; + password: string; +}; + +export async function main( + a: number, + b: "my" | "enum", + c: Postgresql, + d = "inferred type string from default arg", + e = { nested: "object" } + //f: wmill.Base64 +) { + const email = process.env["WM_EMAIL"]; + // variables are permissioned and by path + let variable = await wmill.getVariable("f/company-folder/my_secret"); + const lastTimeRun = await wmill.getState(); + // logs are printed and always inspectable + console.log(cowsay.say({ text: "hello " + email + " " + lastTimeRun })); + await wmill.setState(Date.now()); + + // return is serialized as JSON + return { foo: d, variable }; +} +``` + +## CLI + +We have a powerful CLI to interact with the windmill platform and sync your scripts from local files, GitHub repos and to run scripts and flows on the instance from local commands. See +[more details](https://www.windmill.dev/docs/advanced/cli). + +![CLI Screencast](./cli/vhs/output/setup.gif) + +### Running scripts locally + +You can run your script locally easily, you simply need to pass the right +environment variables for the `wmill` client library to fetch resources and +variables from your instance if necessary. See more: +. + +To develop & test locally scripts & flows, we recommend using the Windmill VS +Code extension: . ## Stack -- postgres as the database -- backend in Rust with the follwing highly-available and horizontally scalable - architecture: - - stateless API backend - - workers that pull jobs from a queue -- frontend in svelte -- scripts executions are sandboxed using google's nsjail -- javascript runtime is deno_core rust library (which itself uses the rusty_v8 - and hence V8 underneath) -- typescript runtime is deno -- python runtime is python3 +- Postgres as the database. +- Backend in Rust with the following highly-available and horizontally scalable. + Architecture: + - Stateless API backend. + - Workers that pull jobs from a queue in Postgres (and later, Kafka or Redis. + Upvote [#173](#https://github.com/windmill-labs/windmill/issues/173) if interested). +- Frontend in Svelte. +- Scripts executions are sandboxed using Google's + [nsjail](https://github.com/google/nsjail). +- Javascript runtime is the + [deno_core rust library](https://denolib.gitbook.io/guide/) (which itself uses + the [rusty_v8](https://github.com/denoland/rusty_v8) and hence V8 underneath). +- TypeScript runtime is Bun and deno. +- Python runtime is python3. +- Golang runtime is 1.19.1. + +## Fastest Self-Hostable Workflow Engine + +We have compared Windmill to other self-hostable workflow engines (Airflow, +Prefect & Temporal) and Windmill is the most performant solution for both +benchmarks: one flow composed of 40 lightweight tasks & one flow composed of 10 +long-running tasks. + +All methodology & results on our +[Benchmarks](https://www.windmill.dev/docs/misc/benchmarks/competitors#airflow-setup) +page. + +![Fastest workflow engine](./imgs/fastest.png) + +## Security + +### Sandboxing + +Windmill can use [nsjail](https://github.com/google/nsjail). It is production +multi-tenant grade secure. Do not take our word for it, take +[fly.io's one](https://fly.io/blog/sandboxing-and-workload-isolation/). + +### Secrets, credentials and sensitive values + +There is one encryption key per workspace to encrypt the credentials and secrets +stored in Windmill's K/V store. + +In addition, we strongly recommend that you encrypt the whole Postgres database. +That is what we do at . + +## Performance + +Once a job started, there is no overhead compared to running the same script on +the node with its corresponding runner (Deno/Go/Python/Bash). The added latency +from a job being pulled from the queue, started, and then having its result sent +back to the database is ~50ms. A typical lightweight deno job will take around +100ms total. ## Architecture -A detailed section about Windmill architecture is coming soon +

-### Development stack + -- caddy is the reverse proxy used for local development, see frontend's - Caddyfile and CaddyfileRemote +

## How to self-host -Complete instructions coming soon +We only provide docker-compose setup here. For more advanced setups, like +compiling from source or using without a postgres super user, see +[Self-Host documentation](https://www.windmill.dev/docs/advanced/self_host). -## Copyright +### Docker compose + +Windmill can be deployed using 3 files: +([docker-compose.yml](./docker-compose.yml), [Caddyfile](./Caddyfile) and a +[.env](./.env)) in a single command. + +Make sure Docker is started, and run: + +``` +curl https://raw.githubusercontent.com/windmill-labs/windmill/main/docker-compose.yml -o docker-compose.yml +curl https://raw.githubusercontent.com/windmill-labs/windmill/main/Caddyfile -o Caddyfile +curl https://raw.githubusercontent.com/windmill-labs/windmill/main/.env -o .env + +docker compose up -d +``` + +Go to http://localhost et voilà :) + +The default super-admin user is: admin@windmill.dev / changeme. + +From there, you can follow the setup app and create other users. + +More details in +[Self-Host Documention](https://www.windmill.dev/docs/advanced/self_host#docker). + +### Kubernetes (k8s) and Helm charts + +We publish helm charts at: +. + +### Run from binaries + +Each release includes the corresponding binaries for x86_64. You can simply +download the latest `windmill` binary using the following set of bash commands. + +```bash +BINARY_NAME='windmill-amd64' # or windmill-ee-amd64 for the enterprise edition +LATEST_RELEASE=$(curl -L -s -H 'Accept: application/json' https://github.com/windmill-labs/windmill/releases/latest) +LATEST_VERSION=$(echo $LATEST_RELEASE | sed -e 's/.*"tag_name":"\([^"]*\)".*/\1/') +ARTIFACT_URL="https://github.com/windmill-labs/windmill/releases/download/$LATEST_VERSION/$BINARY_NAME" +wget "$ARTIFACT_URL" -O windmill +``` + +### OAuth, SSO & SMTP + +Windmill Community Edition allows to configure the OAuth, SSO (including Google +Workspace SSO, Microsoft/Azure and Okta) directly from the UI in the superadmin +settings. Do note that there is a limit of 10 SSO users on the community +edition. + +[See documentation](https://www.windmill.dev/docs/misc/setup_oauth). -2021 [Ruben Fiszel](https://github.com/rubenfiszel) +### Commercial license -### Acknowledgement +To self-host Windmill, you must respect the terms of the +[AGPLv3 license](https://www.gnu.org/licenses/agpl-3.0.en.html) which you do not +need to worry about for personal uses. For business uses, you should be fine if +you do not re-expose Windmill in any way to your users and are comfortable with +AGPLv3. + +To +[re-expose any Windmill parts to your users](https://www.windmill.dev/docs/misc/white_labelling) +as a feature of your product, or to build a feature on top of Windmill, to +comply with AGPLv3 your product must be AGPLv3 or you must get a commercial +license. Contact us at if you have any doubts. + +In addition, a commercial license grants you a dedicated engineer to transition +your current infrastructure to Windmill, support with tight SLA, and our global +cache sync for high-performance/no dependency cache miss of cluster from 10+ +nodes to 200+ nodes. + +### Integrations + +In Windmill, integrations are referred to as +[resources and resource types](https://www.windmill.dev/docs/core_concepts/resources_and_types). +Each Resource has a Resource Type that defines the schema that the resource +needs to implement. + +On self-hosted instances, you might want to import all the approved resource +types from [WindmillHub](https://hub.windmill.dev). A setup script will prompt +you to have it being synced automatically everyday. + +## Environment Variables + +| Environment Variable name | Default | Description | Api Server/Worker/All | +| ------------------------- | ---------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------- | +| DATABASE_URL | | The Postgres database url. | All | +| WORKER_GROUP | default | The worker group the worker belongs to and get its configuration pulled from | Worker | +| MODE | standalone | The mode if the binary. Possible values: standalone, worker, server | All | +| METRICS_ADDR | None | (ee only) The socket addr at which to expose Prometheus metrics at the /metrics path. Set to "true" to expose it on port 8001 | All | +| JSON_FMT | false | Output the logs in json format instead of logfmt | All | +| BASE_URL | http://localhost:8000 | The base url that is exposed publicly to access your instance. Is overriden by the instance settings if any. | Server | +| SCRIPT_TOKEN_EXPIRY | 900 | The default duration period of the ephemeral-token generated at the beginning of a script | Worker | +| ZOMBIE_JOB_TIMEOUT | 30 | The timeout after which a job is considered to be zombie if the worker did not send pings about processing the job (every server check for zombie jobs every 30s) | Server | +| RESTART_ZOMBIE_JOBS | true | If true then a zombie job is restarted (in-place with the same uuid and some logs), if false the zombie job is failed | Server | +| SLEEP_QUEUE | 50 | The number of ms to sleep in between the last check for new jobs in the DB. It is multiplied by NUM_WORKERS such that in average, for one worker instance, there is one pull every SLEEP_QUEUE ms. | Worker | +| MAX_LOG_SIZE | 500000 | The maximum number of characters a job can emit (log + result) | Worker | +| DISABLE_NUSER | false | If Nsjail is enabled, disable the nsjail's `clone_newuser` setting | Worker | +| KEEP_JOB_DIR | false | Keep the job directory after the job is done. Useful for debugging. | Worker | +| LICENSE_KEY (EE only) | None | License key checked at startup for the Enterprise Edition of Windmill | Worker | +| S3_CACHE_BUCKET (EE only) | None | The S3 bucket to sync the cache of the workers to | Worker | +| SLACK_SIGNING_SECRET | None | The signing secret of your Slack app. See [Slack documentation](https://api.slack.com/authentication/verifying-requests-from-slack) | Server | +| COOKIE_DOMAIN | None | The domain of the cookie. If not set, the cookie will be set by the browser based on the full origin | Server | +| DENO_PATH | /usr/bin/deno | The path to the deno binary. | Worker | +| PYTHON_PATH | /usr/local/bin/python3 | The path to the python binary. | Worker | +| GO_PATH | /usr/bin/go | The path to the go binary. | Worker | +| GOPRIVATE | | The GOPRIVATE env variable to use private go modules | Worker | +| GOPROXY | | The GOPROXY env variable to use | Worker | +| NETRC | | The netrc content to use a private go registry | Worker | +| PIP_INDEX_URL | None | The index url to pass for pip. | Worker | +| PIP_EXTRA_INDEX_URL | None | The extra index url to pass to pip. | Worker | +| PIP_TRUSTED_HOST | None | The trusted host to pass to pip. | Worker | +| PATH | None | The path environment variable, usually inherited | Worker | +| HOME | None | The home directory to use for Go and Bash , usually inherited | Worker | +| DATABASE_CONNECTIONS | 50 (Server)/3 (Worker) | The max number of connections in the database connection pool | All | +| SUPERADMIN_SECRET | None | A token that would let the caller act as a virtual superadmin superadmin@windmill.dev | Server | +| TIMEOUT_WAIT_RESULT | 20 | The number of seconds to wait before timeout on the 'run_wait_result' endpoint | Worker | +| QUEUE_LIMIT_WAIT_RESULT | None | The number of max jobs in the queue before rejecting immediately the request in 'run_wait_result' endpoint. Takes precedence on the query arg. If none is specified, there are no limit. | Worker | +| DENO_AUTH_TOKENS | None | Custom DENO_AUTH_TOKENS to pass to worker to allow the use of private modules | Worker | +| DISABLE_RESPONSE_LOGS | false | Disable response logs | Server | + +## Run a local dev setup +See the [./frontend/README_DEV.md](./frontend/README_DEV.md) file for all +running options. + +### only Frontend +This will use the backend of but your own frontend +with hot-code reloading. Note that you will need to use a username / password login due to CSRF checks using a different auth provider. + +In the `frontend/` directory: + +1. install the dependencies with `npm install` (or `pnpm install` or `yarn`) +2. generate the windmill client: + ``` + npm run generate-backend-client + ## on mac use + npm run generate-backend-client-mac + ``` +3. Run your dev server with `npm run dev` +4. Et voilà, windmill should be available at `http://localhost/` + +### Backend + Frontend +See the [./frontend/README_DEV.md](./frontend/README_DEV.md) file for all +running options. +1. Create a Postgres Database for Windmill and create an admin role inside your + Postgres setup. + The easiest way to get a working db is to run + ``` + cargo install sqlx-cli + env DATABASE_URL= sqlx migrate run + ``` + This will also avoid compile time issue with sqlx's `query!` macro +2. Install [nsjail](https://github.com/google/nsjail) and have it accessible in + your PATH +3. Install deno and python3, have the bins at `/usr/bin/deno` and + `/usr/local/bin/python3` +4. Install [caddy](https://caddyserver.com) +5. Install the [lld linker](https://lld.llvm.org/) +6. Go to `frontend/`: + 1. `npm install`, `npm run generate-backend-client` then `npm run dev` + 2. You might need to set some extra heap space for the node runtime `export NODE_OPTIONS="--max-old-space-size=4096"` + 3. In another shell `npm run build` otherwise the backend will not find the `frontend/build` folder and will not compile. + 4. In another shell `sudo caddy run --config Caddyfile` +7. Go to `backend/`: + `env DATABASE_URL= RUST_LOG=info cargo run` +8. Et voilà, windmill should be available at `http://localhost/` + + + +## Contributors + + + + + +## Copyright -This project is inspired from a previous project called -[Delightool](https://github.com/windmill-labs/delightool-legacy) which was also -led by [Ruben](https://github.com/rubenfiszel) and with large contribution on -the frontend from [Malo Marrec](https://github.com/malomarrec) who gave his -blessing to Windmill. +Windmill Labs, Inc 2023 \ No newline at end of file diff --git a/backend/.cargo/config b/backend/.cargo/config deleted file mode 100644 index 33306abf17cb6..0000000000000 --- a/backend/.cargo/config +++ /dev/null @@ -1,3 +0,0 @@ -[build] -rustflags = ["--cfg", "tokio_unstable"] -incremental = true diff --git a/backend/.cargo/config.toml b/backend/.cargo/config.toml new file mode 100644 index 0000000000000..7d27c4a1e13af --- /dev/null +++ b/backend/.cargo/config.toml @@ -0,0 +1,14 @@ +[build] +incremental = true + +[target.x86_64-apple-darwin] +rustflags = [ + "-C", "link-arg=-undefined", + "-C", "link-arg=dynamic_lookup", +] + +[target.aarch64-apple-darwin] +rustflags = [ + "-C", "link-arg=-undefined", + "-C", "link-arg=dynamic_lookup", +] \ No newline at end of file diff --git a/backend/.devcontainer.json b/backend/.devcontainer.json new file mode 100644 index 0000000000000..270988cfc3c96 --- /dev/null +++ b/backend/.devcontainer.json @@ -0,0 +1,27 @@ +// For format details, see https://aka.ms/devcontainer.json. For config options, see the README at: +// https://github.com/microsoft/vscode-dev-containers/tree/v0.245.2/containers/docker-existing-docker-compose +// If you want to run as a non-root user in the container, see .devcontainer/docker-compose.yml. +{ + "name": "Backend Container", + "dockerComposeFile": [ + "../docker-compose.yml", + "../.devcontainer/docker-compose.yml" + ], + "customizations": { + "vscode": { + "extensions": [ + "rust-lang.rust-analyzer", + "yzhang.markdown-all-in-one" + ] + } + }, + "service": "windmill", + "workspaceFolder": "/workspace", + // Use 'forwardPorts' to make a list of ports inside the container available locally. + "forwardPorts": [ + 8000 + ], + // "postCreateCommand": "sudo apt-get update && sudo apt-get install -y lld python3 && cargo install sqlx-cli --no-default-features --features native-tls,postgres && (cd backend && sqlx migrate run) && cargo install deno --locked && rustup toolchain install nightly-2022-05-23 -c rust-src -c rustc-dev -c llvm-tools-preview", + "postCreateCommand": "cd backend && sqlx migrate run", + "remoteUser": "vscode" +} \ No newline at end of file diff --git a/backend/.gitattributes b/backend/.gitattributes new file mode 100644 index 0000000000000..ae5afde4107c4 --- /dev/null +++ b/backend/.gitattributes @@ -0,0 +1 @@ +sqlx-data.json -diff diff --git a/backend/.gitignore b/backend/.gitignore index 14ee5009d7bab..7900ae5fc215d 100644 --- a/backend/.gitignore +++ b/backend/.gitignore @@ -1,2 +1,8 @@ target/ .env +oauth.json +oauth2.json +windmill-api/openapi-deref.yaml +tracing.folded +heaptrack* +index/ diff --git a/backend/.sqlx/query-005b9255699e73600c579f74b529caf531b2312b6e405b4d35efd2f7ca663143.json b/backend/.sqlx/query-005b9255699e73600c579f74b529caf531b2312b6e405b4d35efd2f7ca663143.json new file mode 100644 index 0000000000000..a2133ab2302ed --- /dev/null +++ b/backend/.sqlx/query-005b9255699e73600c579f74b529caf531b2312b6e405b4d35efd2f7ca663143.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT email FROM password WHERE email = $1", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "email", + "type_info": "Varchar" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + false + ] + }, + "hash": "005b9255699e73600c579f74b529caf531b2312b6e405b4d35efd2f7ca663143" +} diff --git a/backend/.sqlx/query-006f03e979abdf8055b1c598bc9806337216a6abf74db4eb64b0acb918a0de08.json b/backend/.sqlx/query-006f03e979abdf8055b1c598bc9806337216a6abf74db4eb64b0acb918a0de08.json new file mode 100644 index 0000000000000..5e35428268e33 --- /dev/null +++ b/backend/.sqlx/query-006f03e979abdf8055b1c598bc9806337216a6abf74db4eb64b0acb918a0de08.json @@ -0,0 +1,16 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE usr SET disabled = $1 WHERE username = $2 AND workspace_id = $3", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Bool", + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "006f03e979abdf8055b1c598bc9806337216a6abf74db4eb64b0acb918a0de08" +} diff --git a/backend/.sqlx/query-00be497354f5375e9ccffb998d126a853da91d607ff9e57e10d0e5481e4d3848.json b/backend/.sqlx/query-00be497354f5375e9ccffb998d126a853da91d607ff9e57e10d0e5481e4d3848.json new file mode 100644 index 0000000000000..bc967dc2f6812 --- /dev/null +++ b/backend/.sqlx/query-00be497354f5375e9ccffb998d126a853da91d607ff9e57e10d0e5481e4d3848.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM usr WHERE workspace_id = $1 AND email = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "00be497354f5375e9ccffb998d126a853da91d607ff9e57e10d0e5481e4d3848" +} diff --git a/backend/.sqlx/query-00ce4ed3ca0eac7cb6283b047353a64b9e78c4beb423f04baef9a53fbf87e9f9.json b/backend/.sqlx/query-00ce4ed3ca0eac7cb6283b047353a64b9e78c4beb423f04baef9a53fbf87e9f9.json new file mode 100644 index 0000000000000..e4909fc4da132 --- /dev/null +++ b/backend/.sqlx/query-00ce4ed3ca0eac7cb6283b047353a64b9e78c4beb423f04baef9a53fbf87e9f9.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO alerts (alert_type, message) VALUES ('recovered_critical_error', $1)", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [] + }, + "hash": "00ce4ed3ca0eac7cb6283b047353a64b9e78c4beb423f04baef9a53fbf87e9f9" +} diff --git a/backend/.sqlx/query-00f68ea1ad2d5ab045b4a20ce3f4dd7850041e396e14890e37e1d0db276d3694.json b/backend/.sqlx/query-00f68ea1ad2d5ab045b4a20ce3f4dd7850041e396e14890e37e1d0db276d3694.json new file mode 100644 index 0000000000000..2f208d73fb978 --- /dev/null +++ b/backend/.sqlx/query-00f68ea1ad2d5ab045b4a20ce3f4dd7850041e396e14890e37e1d0db276d3694.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE resource SET workspace_id = $1 WHERE workspace_id = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Text" + ] + }, + "nullable": [] + }, + "hash": "00f68ea1ad2d5ab045b4a20ce3f4dd7850041e396e14890e37e1d0db276d3694" +} diff --git a/backend/.sqlx/query-01576057b71e32e20a1702b2c89c380eee422060a65b475d7cda8b199d70842e.json b/backend/.sqlx/query-01576057b71e32e20a1702b2c89c380eee422060a65b475d7cda8b199d70842e.json new file mode 100644 index 0000000000000..56ef01ba953bd --- /dev/null +++ b/backend/.sqlx/query-01576057b71e32e20a1702b2c89c380eee422060a65b475d7cda8b199d70842e.json @@ -0,0 +1,16 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE flow SET archived = $1 WHERE path = $2 AND workspace_id = $3", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Bool", + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "01576057b71e32e20a1702b2c89c380eee422060a65b475d7cda8b199d70842e" +} diff --git a/backend/.sqlx/query-019258392434b3c8dfabfe53d61ad766626fe4ad67f101c1a58c9c9524531621.json b/backend/.sqlx/query-019258392434b3c8dfabfe53d61ad766626fe4ad67f101c1a58c9c9524531621.json new file mode 100644 index 0000000000000..e66b0d7419ab3 --- /dev/null +++ b/backend/.sqlx/query-019258392434b3c8dfabfe53d61ad766626fe4ad67f101c1a58c9c9524531621.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT app.id FROM app\n WHERE app.path = $1 AND app.workspace_id = $2", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "id", + "type_info": "Int8" + } + ], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [ + false + ] + }, + "hash": "019258392434b3c8dfabfe53d61ad766626fe4ad67f101c1a58c9c9524531621" +} diff --git a/backend/.sqlx/query-025e5bf6aef56e9832239489daf21b4970d84529cf7ed7928ce2dcfec8b007f0.json b/backend/.sqlx/query-025e5bf6aef56e9832239489daf21b4970d84529cf7ed7928ce2dcfec8b007f0.json new file mode 100644 index 0000000000000..6823a71ae01f9 --- /dev/null +++ b/backend/.sqlx/query-025e5bf6aef56e9832239489daf21b4970d84529cf7ed7928ce2dcfec8b007f0.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM global_settings WHERE name = $1", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [] + }, + "hash": "025e5bf6aef56e9832239489daf21b4970d84529cf7ed7928ce2dcfec8b007f0" +} diff --git a/backend/.sqlx/query-029ed3dcba207c58aa6936e44bd825b2166f1846b1bb684522607d5ca31a0df3.json b/backend/.sqlx/query-029ed3dcba207c58aa6936e44bd825b2166f1846b1bb684522607d5ca31a0df3.json new file mode 100644 index 0000000000000..d9cf2bd0916d9 --- /dev/null +++ b/backend/.sqlx/query-029ed3dcba207c58aa6936e44bd825b2166f1846b1bb684522607d5ca31a0df3.json @@ -0,0 +1,17 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE queue SET flow_status = jsonb_set(COALESCE(flow_status, '{}'::jsonb), array[$1], jsonb_set(jsonb_set('{}'::jsonb, '{scheduled_for}', to_jsonb(now()::text)), '{name}', to_jsonb($4::text))) WHERE id = $2 AND workspace_id = $3", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Uuid", + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "029ed3dcba207c58aa6936e44bd825b2166f1846b1bb684522607d5ca31a0df3" +} diff --git a/backend/.sqlx/query-02b516dac764662194db1bc33e365c01f40bae70af3683f1f09748f6020f0d49.json b/backend/.sqlx/query-02b516dac764662194db1bc33e365c01f40bae70af3683f1f09748f6020f0d49.json new file mode 100644 index 0000000000000..99f3606bcd284 --- /dev/null +++ b/backend/.sqlx/query-02b516dac764662194db1bc33e365c01f40bae70af3683f1f09748f6020f0d49.json @@ -0,0 +1,26 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT tag, count(*) as count FROM queue WHERE\n scheduled_for <= now() - ('3 seconds')::interval AND running = false\n GROUP BY tag", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "tag", + "type_info": "Varchar" + }, + { + "ordinal": 1, + "name": "count", + "type_info": "Int8" + } + ], + "parameters": { + "Left": [] + }, + "nullable": [ + false, + null + ] + }, + "hash": "02b516dac764662194db1bc33e365c01f40bae70af3683f1f09748f6020f0d49" +} diff --git a/backend/.sqlx/query-02bb4ea17e83c79f870e2655d6d9c035af6d763b7ee9577280785ccf0220a123.json b/backend/.sqlx/query-02bb4ea17e83c79f870e2655d6d9c035af6d763b7ee9577280785ccf0220a123.json new file mode 100644 index 0000000000000..e8df1339ffdf4 --- /dev/null +++ b/backend/.sqlx/query-02bb4ea17e83c79f870e2655d6d9c035af6d763b7ee9577280785ccf0220a123.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT running FROM queue WHERE id = $1 AND workspace_id = $2", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "running", + "type_info": "Bool" + } + ], + "parameters": { + "Left": [ + "Uuid", + "Text" + ] + }, + "nullable": [ + false + ] + }, + "hash": "02bb4ea17e83c79f870e2655d6d9c035af6d763b7ee9577280785ccf0220a123" +} diff --git a/backend/.sqlx/query-02f1a6eeb27067dc438459238e7b016f5ccf9e3fe0ffbe88471f15aad8f74441.json b/backend/.sqlx/query-02f1a6eeb27067dc438459238e7b016f5ccf9e3fe0ffbe88471f15aad8f74441.json new file mode 100644 index 0000000000000..a27bc6365ac37 --- /dev/null +++ b/backend/.sqlx/query-02f1a6eeb27067dc438459238e7b016f5ccf9e3fe0ffbe88471f15aad8f74441.json @@ -0,0 +1,89 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT path, script_path, is_flow, route_path, workspace_id, is_async, requires_auth, edited_by, email, http_method as \"http_method: _\" FROM http_trigger WHERE workspace_id = $1", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "path", + "type_info": "Varchar" + }, + { + "ordinal": 1, + "name": "script_path", + "type_info": "Varchar" + }, + { + "ordinal": 2, + "name": "is_flow", + "type_info": "Bool" + }, + { + "ordinal": 3, + "name": "route_path", + "type_info": "Varchar" + }, + { + "ordinal": 4, + "name": "workspace_id", + "type_info": "Varchar" + }, + { + "ordinal": 5, + "name": "is_async", + "type_info": "Bool" + }, + { + "ordinal": 6, + "name": "requires_auth", + "type_info": "Bool" + }, + { + "ordinal": 7, + "name": "edited_by", + "type_info": "Varchar" + }, + { + "ordinal": 8, + "name": "email", + "type_info": "Varchar" + }, + { + "ordinal": 9, + "name": "http_method: _", + "type_info": { + "Custom": { + "name": "http_method", + "kind": { + "Enum": [ + "get", + "post", + "put", + "delete", + "patch" + ] + } + } + } + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + false, + false, + false, + false, + false, + false, + false, + false, + false, + false + ] + }, + "hash": "02f1a6eeb27067dc438459238e7b016f5ccf9e3fe0ffbe88471f15aad8f74441" +} diff --git a/backend/.sqlx/query-034583442e6f8ae38d6c4e4aac26f17c8d9d0e657f28276228fc90d3e22e1304.json b/backend/.sqlx/query-034583442e6f8ae38d6c4e4aac26f17c8d9d0e657f28276228fc90d3e22e1304.json new file mode 100644 index 0000000000000..e17ea413dbba7 --- /dev/null +++ b/backend/.sqlx/query-034583442e6f8ae38d6c4e4aac26f17c8d9d0e657f28276228fc90d3e22e1304.json @@ -0,0 +1,16 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE workspace_settings SET openai_resource_path = $1, code_completion_enabled = $2 WHERE workspace_id = $3", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Bool", + "Text" + ] + }, + "nullable": [] + }, + "hash": "034583442e6f8ae38d6c4e4aac26f17c8d9d0e657f28276228fc90d3e22e1304" +} diff --git a/backend/.sqlx/query-0355b53b1d45955ca56b2829372ce9c656d7f0ad7b8d0709161047f0d8cdc4f4.json b/backend/.sqlx/query-0355b53b1d45955ca56b2829372ce9c656d7f0ad7b8d0709161047f0d8cdc4f4.json new file mode 100644 index 0000000000000..2f2cb27400872 --- /dev/null +++ b/backend/.sqlx/query-0355b53b1d45955ca56b2829372ce9c656d7f0ad7b8d0709161047f0d8cdc4f4.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM queue WHERE workspace_id = $1 AND id = $2 RETURNING 1", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "?column?", + "type_info": "Int4" + } + ], + "parameters": { + "Left": [ + "Text", + "Uuid" + ] + }, + "nullable": [ + null + ] + }, + "hash": "0355b53b1d45955ca56b2829372ce9c656d7f0ad7b8d0709161047f0d8cdc4f4" +} diff --git a/backend/.sqlx/query-036af7b1cf6d731647fd718458944b9a9759bdb034e73f3065cde6a2f88c8dce.json b/backend/.sqlx/query-036af7b1cf6d731647fd718458944b9a9759bdb034e73f3065cde6a2f88c8dce.json new file mode 100644 index 0000000000000..6f17ee0e9d2b7 --- /dev/null +++ b/backend/.sqlx/query-036af7b1cf6d731647fd718458944b9a9759bdb034e73f3065cde6a2f88c8dce.json @@ -0,0 +1,16 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE queue SET permissioned_as = ('u/' || $1) WHERE permissioned_as = ('u/' || $2) AND workspace_id = $3", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "036af7b1cf6d731647fd718458944b9a9759bdb034e73f3065cde6a2f88c8dce" +} diff --git a/backend/.sqlx/query-03cb31686d34035f2dc64d4dff93265af0e44a7e2dabdf28fd9c9327b5b53118.json b/backend/.sqlx/query-03cb31686d34035f2dc64d4dff93265af0e44a7e2dabdf28fd9c9327b5b53118.json new file mode 100644 index 0000000000000..ba0686edb4cc9 --- /dev/null +++ b/backend/.sqlx/query-03cb31686d34035f2dc64d4dff93265af0e44a7e2dabdf28fd9c9327b5b53118.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE usr SET username = $1 WHERE email = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Text" + ] + }, + "nullable": [] + }, + "hash": "03cb31686d34035f2dc64d4dff93265af0e44a7e2dabdf28fd9c9327b5b53118" +} diff --git a/backend/.sqlx/query-03d4ec7a5feda9001e98c2e55f0788399ee41c9b128099937abb483f1d89a2c6.json b/backend/.sqlx/query-03d4ec7a5feda9001e98c2e55f0788399ee41c9b128099937abb483f1d89a2c6.json new file mode 100644 index 0000000000000..43cbd6431b4cb --- /dev/null +++ b/backend/.sqlx/query-03d4ec7a5feda9001e98c2e55f0788399ee41c9b128099937abb483f1d89a2c6.json @@ -0,0 +1,16 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE app SET policy = jsonb_set(policy, ARRAY['on_behalf_of'], to_jsonb('u/' || $1)) WHERE policy->>'on_behalf_of' = ('u/' || $2) AND workspace_id = $3", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "03d4ec7a5feda9001e98c2e55f0788399ee41c9b128099937abb483f1d89a2c6" +} diff --git a/backend/.sqlx/query-03d63d2e64b012f624d2731b5bcb8849c74a9474777be61edf0ed43ddda07ef3.json b/backend/.sqlx/query-03d63d2e64b012f624d2731b5bcb8849c74a9474777be61edf0ed43ddda07ef3.json new file mode 100644 index 0000000000000..39374fabd8428 --- /dev/null +++ b/backend/.sqlx/query-03d63d2e64b012f624d2731b5bcb8849c74a9474777be61edf0ed43ddda07ef3.json @@ -0,0 +1,59 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT * from resource_type WHERE name = $1 AND (workspace_id = $2 OR workspace_id = 'admins')", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "workspace_id", + "type_info": "Varchar" + }, + { + "ordinal": 1, + "name": "name", + "type_info": "Varchar" + }, + { + "ordinal": 2, + "name": "schema", + "type_info": "Jsonb" + }, + { + "ordinal": 3, + "name": "description", + "type_info": "Text" + }, + { + "ordinal": 4, + "name": "edited_at", + "type_info": "Timestamptz" + }, + { + "ordinal": 5, + "name": "created_by", + "type_info": "Varchar" + }, + { + "ordinal": 6, + "name": "format_extension", + "type_info": "Varchar" + } + ], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [ + false, + false, + true, + true, + true, + true, + true + ] + }, + "hash": "03d63d2e64b012f624d2731b5bcb8849c74a9474777be61edf0ed43ddda07ef3" +} diff --git a/backend/.sqlx/query-03e9c9d8dd74c75b4608b49cad79f0a9572c7e8b48d8e373c0342b75b843d123.json b/backend/.sqlx/query-03e9c9d8dd74c75b4608b49cad79f0a9572c7e8b48d8e373c0342b75b843d123.json new file mode 100644 index 0000000000000..cbda2f896ab0e --- /dev/null +++ b/backend/.sqlx/query-03e9c9d8dd74c75b4608b49cad79f0a9572c7e8b48d8e373c0342b75b843d123.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM usr_to_group WHERE usr = $1 AND workspace_id = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "03e9c9d8dd74c75b4608b49cad79f0a9572c7e8b48d8e373c0342b75b843d123" +} diff --git a/backend/.sqlx/query-04effcc6050250a02661323c880d493982dd1bfb63ca7373e035a98c268428e2.json b/backend/.sqlx/query-04effcc6050250a02661323c880d493982dd1bfb63ca7373e035a98c268428e2.json new file mode 100644 index 0000000000000..caf2c0b4c869a --- /dev/null +++ b/backend/.sqlx/query-04effcc6050250a02661323c880d493982dd1bfb63ca7373e035a98c268428e2.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT script_path FROM queue WHERE id = $1", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "script_path", + "type_info": "Varchar" + } + ], + "parameters": { + "Left": [ + "Uuid" + ] + }, + "nullable": [ + true + ] + }, + "hash": "04effcc6050250a02661323c880d493982dd1bfb63ca7373e035a98c268428e2" +} diff --git a/backend/.sqlx/query-050fb876e10ad13654dbbde4532f408ff1ac92ed0f5d31a3ef6c58313e1f8671.json b/backend/.sqlx/query-050fb876e10ad13654dbbde4532f408ff1ac92ed0f5d31a3ef6c58313e1f8671.json new file mode 100644 index 0000000000000..9b50ef2c693cc --- /dev/null +++ b/backend/.sqlx/query-050fb876e10ad13654dbbde4532f408ff1ac92ed0f5d31a3ef6c58313e1f8671.json @@ -0,0 +1,28 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT healthy, created_at FROM healthchecks WHERE check_type = 'min_alive_workers_' || $1 ORDER BY created_at DESC LIMIT 1", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "healthy", + "type_info": "Bool" + }, + { + "ordinal": 1, + "name": "created_at", + "type_info": "Timestamptz" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + false, + false + ] + }, + "hash": "050fb876e10ad13654dbbde4532f408ff1ac92ed0f5d31a3ef6c58313e1f8671" +} diff --git a/backend/.sqlx/query-051acd49542618e3be5654dce94567a02e87be23a4c0863e3b2d53b5c2cb6749.json b/backend/.sqlx/query-051acd49542618e3be5654dce94567a02e87be23a4c0863e3b2d53b5c2cb6749.json new file mode 100644 index 0000000000000..c7c7260ed43a2 --- /dev/null +++ b/backend/.sqlx/query-051acd49542618e3be5654dce94567a02e87be23a4c0863e3b2d53b5c2cb6749.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE schedule SET on_success = NULL, on_success_extra_args = NULL WHERE workspace_id = $1 RETURNING path", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "path", + "type_info": "Varchar" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + false + ] + }, + "hash": "051acd49542618e3be5654dce94567a02e87be23a4c0863e3b2d53b5c2cb6749" +} diff --git a/backend/.sqlx/query-062859f1d0e5cfba3115f4241115753b86a4ad239708851c998ff5620ebca5b8.json b/backend/.sqlx/query-062859f1d0e5cfba3115f4241115753b86a4ad239708851c998ff5620ebca5b8.json new file mode 100644 index 0000000000000..9803b76ceacf9 --- /dev/null +++ b/backend/.sqlx/query-062859f1d0e5cfba3115f4241115753b86a4ad239708851c998ff5620ebca5b8.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE queue SET last_ping = now() WHERE id = $1", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Uuid" + ] + }, + "nullable": [] + }, + "hash": "062859f1d0e5cfba3115f4241115753b86a4ad239708851c998ff5620ebca5b8" +} diff --git a/backend/.sqlx/query-0659bab15d4cccdb04c7a57e0e3bbb6bfebb8896601a27ddf5618d4eae678bc1.json b/backend/.sqlx/query-0659bab15d4cccdb04c7a57e0e3bbb6bfebb8896601a27ddf5618d4eae678bc1.json new file mode 100644 index 0000000000000..39826b865bea4 --- /dev/null +++ b/backend/.sqlx/query-0659bab15d4cccdb04c7a57e0e3bbb6bfebb8896601a27ddf5618d4eae678bc1.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE usr SET workspace_id = $1 WHERE workspace_id = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Text" + ] + }, + "nullable": [] + }, + "hash": "0659bab15d4cccdb04c7a57e0e3bbb6bfebb8896601a27ddf5618d4eae678bc1" +} diff --git a/backend/.sqlx/query-0721acae4f627df4687bb43b830a47faeee5c0a152cda8d62794c14dd200fac1.json b/backend/.sqlx/query-0721acae4f627df4687bb43b830a47faeee5c0a152cda8d62794c14dd200fac1.json new file mode 100644 index 0000000000000..fde6a8d8815bd --- /dev/null +++ b/backend/.sqlx/query-0721acae4f627df4687bb43b830a47faeee5c0a152cda8d62794c14dd200fac1.json @@ -0,0 +1,16 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE completed_job SET created_by = $1 WHERE created_by = $2 AND workspace_id = $3", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "0721acae4f627df4687bb43b830a47faeee5c0a152cda8d62794c14dd200fac1" +} diff --git a/backend/.sqlx/query-07834003a631acac03a52a128d3dfce162abdef0d94e5020b84fed424dfd1ae9.json b/backend/.sqlx/query-07834003a631acac03a52a128d3dfce162abdef0d94e5020b84fed424dfd1ae9.json new file mode 100644 index 0000000000000..71aa649df998d --- /dev/null +++ b/backend/.sqlx/query-07834003a631acac03a52a128d3dfce162abdef0d94e5020b84fed424dfd1ae9.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO email_to_igroup (email, igroup) VALUES ($1, $2)", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Varchar" + ] + }, + "nullable": [] + }, + "hash": "07834003a631acac03a52a128d3dfce162abdef0d94e5020b84fed424dfd1ae9" +} diff --git a/backend/.sqlx/query-0784bb86a503f02b9ef247a2b83a82ddfa49632552b223a9f4536a449b0a1eb8.json b/backend/.sqlx/query-0784bb86a503f02b9ef247a2b83a82ddfa49632552b223a9f4536a449b0a1eb8.json new file mode 100644 index 0000000000000..49742b66c0d48 --- /dev/null +++ b/backend/.sqlx/query-0784bb86a503f02b9ef247a2b83a82ddfa49632552b223a9f4536a449b0a1eb8.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT EXISTS(SELECT 1 FROM resource WHERE path = $1 AND workspace_id = $2)", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "exists", + "type_info": "Bool" + } + ], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [ + null + ] + }, + "hash": "0784bb86a503f02b9ef247a2b83a82ddfa49632552b223a9f4536a449b0a1eb8" +} diff --git a/backend/.sqlx/query-07b984faa14193f529ae589608289a9ffb0f3d4a0e48054393e1bb8b70b4e5e0.json b/backend/.sqlx/query-07b984faa14193f529ae589608289a9ffb0f3d4a0e48054393e1bb8b70b4e5e0.json new file mode 100644 index 0000000000000..e775d97e630f3 --- /dev/null +++ b/backend/.sqlx/query-07b984faa14193f529ae589608289a9ffb0f3d4a0e48054393e1bb8b70b4e5e0.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM flow WHERE workspace_id = $1", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [] + }, + "hash": "07b984faa14193f529ae589608289a9ffb0f3d4a0e48054393e1bb8b70b4e5e0" +} diff --git a/backend/.sqlx/query-07ce3bce5f71b13d8aaf51f7d8aef8e32ff9e3e9cf58daab1c02276a7f0bd163.json b/backend/.sqlx/query-07ce3bce5f71b13d8aaf51f7d8aef8e32ff9e3e9cf58daab1c02276a7f0bd163.json new file mode 100644 index 0000000000000..9c49f06dd270a --- /dev/null +++ b/backend/.sqlx/query-07ce3bce5f71b13d8aaf51f7d8aef8e32ff9e3e9cf58daab1c02276a7f0bd163.json @@ -0,0 +1,16 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE input SET created_by = $1 WHERE created_by = $2 AND workspace_id = $3", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "07ce3bce5f71b13d8aaf51f7d8aef8e32ff9e3e9cf58daab1c02276a7f0bd163" +} diff --git a/backend/.sqlx/query-07d03985bb2c58d52c1ffd6ab5a6d37457e7520642a5e70bb4000e4923720957.json b/backend/.sqlx/query-07d03985bb2c58d52c1ffd6ab5a6d37457e7520642a5e70bb4000e4923720957.json new file mode 100644 index 0000000000000..c8bc7af4d37b6 --- /dev/null +++ b/backend/.sqlx/query-07d03985bb2c58d52c1ffd6ab5a6d37457e7520642a5e70bb4000e4923720957.json @@ -0,0 +1,16 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE flow_version SET path = REGEXP_REPLACE(path,'u/' || $2 || '/(.*)','u/' || $1 || '/\\1') WHERE path LIKE ('u/' || $2 || '/%') AND workspace_id = $3", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "07d03985bb2c58d52c1ffd6ab5a6d37457e7520642a5e70bb4000e4923720957" +} diff --git a/backend/.sqlx/query-07f5290e90533eac50b890a0d7f4a5e73ac111c838f687fe8647636827aae8b5.json b/backend/.sqlx/query-07f5290e90533eac50b890a0d7f4a5e73ac111c838f687fe8647636827aae8b5.json new file mode 100644 index 0000000000000..811920b354ad2 --- /dev/null +++ b/backend/.sqlx/query-07f5290e90533eac50b890a0d7f4a5e73ac111c838f687fe8647636827aae8b5.json @@ -0,0 +1,26 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO flow_version (workspace_id, path, value, schema, created_by) \n VALUES ($1, $2, $3, $4::text::json, $5)\n RETURNING id", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "id", + "type_info": "Int8" + } + ], + "parameters": { + "Left": [ + "Varchar", + "Varchar", + "Jsonb", + "Text", + "Varchar" + ] + }, + "nullable": [ + false + ] + }, + "hash": "07f5290e90533eac50b890a0d7f4a5e73ac111c838f687fe8647636827aae8b5" +} diff --git a/backend/.sqlx/query-083218b582d927d98879b9cd8193d8294c1a0e6e50d5de5d5fe1c181391a38d8.json b/backend/.sqlx/query-083218b582d927d98879b9cd8193d8294c1a0e6e50d5de5d5fe1c181391a38d8.json new file mode 100644 index 0000000000000..8b0304cfc0452 --- /dev/null +++ b/backend/.sqlx/query-083218b582d927d98879b9cd8193d8294c1a0e6e50d5de5d5fe1c181391a38d8.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE schedule SET ws_error_handler_muted = false, on_failure = NULL, on_failure_extra_args = NULL, on_failure_times = NULL, on_failure_exact = NULL WHERE workspace_id = $1 RETURNING path", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "path", + "type_info": "Varchar" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + false + ] + }, + "hash": "083218b582d927d98879b9cd8193d8294c1a0e6e50d5de5d5fe1c181391a38d8" +} diff --git a/backend/.sqlx/query-08c943c4b9b76da43b8b754e5c66ab3b6397e7edc82666662a8ea466496290fb.json b/backend/.sqlx/query-08c943c4b9b76da43b8b754e5c66ab3b6397e7edc82666662a8ea466496290fb.json new file mode 100644 index 0000000000000..19fcb65125fc7 --- /dev/null +++ b/backend/.sqlx/query-08c943c4b9b76da43b8b754e5c66ab3b6397e7edc82666662a8ea466496290fb.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM account WHERE workspace_id = $1", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [] + }, + "hash": "08c943c4b9b76da43b8b754e5c66ab3b6397e7edc82666662a8ea466496290fb" +} diff --git a/backend/.sqlx/query-08e4a2dc49c75aa356f3cc75a4abd8fc61409776d641ddb592a4c731e61a0468.json b/backend/.sqlx/query-08e4a2dc49c75aa356f3cc75a4abd8fc61409776d641ddb592a4c731e61a0468.json new file mode 100644 index 0000000000000..9da12fd0b845b --- /dev/null +++ b/backend/.sqlx/query-08e4a2dc49c75aa356f3cc75a4abd8fc61409776d641ddb592a4c731e61a0468.json @@ -0,0 +1,26 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT login_type, COUNT(*) FROM password GROUP BY login_type", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "login_type", + "type_info": "Varchar" + }, + { + "ordinal": 1, + "name": "count", + "type_info": "Int8" + } + ], + "parameters": { + "Left": [] + }, + "nullable": [ + false, + null + ] + }, + "hash": "08e4a2dc49c75aa356f3cc75a4abd8fc61409776d641ddb592a4c731e61a0468" +} diff --git a/backend/.sqlx/query-097a576938eac385ddc2f16a00ddc69c3ca54f5a66923291730980eeeea1f8c1.json b/backend/.sqlx/query-097a576938eac385ddc2f16a00ddc69c3ca54f5a66923291730980eeeea1f8c1.json new file mode 100644 index 0000000000000..5793eec096802 --- /dev/null +++ b/backend/.sqlx/query-097a576938eac385ddc2f16a00ddc69c3ca54f5a66923291730980eeeea1f8c1.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM variable WHERE path = $1 AND workspace_id = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "097a576938eac385ddc2f16a00ddc69c3ca54f5a66923291730980eeeea1f8c1" +} diff --git a/backend/.sqlx/query-099e7c7a66968575f896e0c11ecd9cfe9a2ec315d6589e940be157a0563f81af.json b/backend/.sqlx/query-099e7c7a66968575f896e0c11ecd9cfe9a2ec315d6589e940be157a0563f81af.json new file mode 100644 index 0000000000000..59fb4a5dbace7 --- /dev/null +++ b/backend/.sqlx/query-099e7c7a66968575f896e0c11ecd9cfe9a2ec315d6589e940be157a0563f81af.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE queue SET last_ping = now() WHERE id = $1 AND workspace_id = $2 AND canceled = false", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Uuid", + "Text" + ] + }, + "nullable": [] + }, + "hash": "099e7c7a66968575f896e0c11ecd9cfe9a2ec315d6589e940be157a0563f81af" +} diff --git a/backend/.sqlx/query-09e2a19435068f9e9bfd5bcb44b4e283c71729f81550f6f7156ce4970345cc07.json b/backend/.sqlx/query-09e2a19435068f9e9bfd5bcb44b4e283c71729f81550f6f7156ce4970345cc07.json new file mode 100644 index 0000000000000..8ece28ff8f992 --- /dev/null +++ b/backend/.sqlx/query-09e2a19435068f9e9bfd5bcb44b4e283c71729f81550f6f7156ce4970345cc07.json @@ -0,0 +1,16 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE account SET refresh_error = $1 WHERE workspace_id = $2 AND id = $3", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Text", + "Int4" + ] + }, + "nullable": [] + }, + "hash": "09e2a19435068f9e9bfd5bcb44b4e283c71729f81550f6f7156ce4970345cc07" +} diff --git a/backend/.sqlx/query-0a1c95c4376b944661bab13271091cf3ea0afe68fb8e08e7aea239dc735c625c.json b/backend/.sqlx/query-0a1c95c4376b944661bab13271091cf3ea0afe68fb8e08e7aea239dc735c625c.json new file mode 100644 index 0000000000000..b8f224dbc20a7 --- /dev/null +++ b/backend/.sqlx/query-0a1c95c4376b944661bab13271091cf3ea0afe68fb8e08e7aea239dc735c625c.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO concurrency_key(key, job_id) VALUES ($1, $2)", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Uuid" + ] + }, + "nullable": [] + }, + "hash": "0a1c95c4376b944661bab13271091cf3ea0afe68fb8e08e7aea239dc735c625c" +} diff --git a/backend/.sqlx/query-0a686ca61444d7ad7484071727aa039a6ea6697e5a49a633b767c052aa3e0a18.json b/backend/.sqlx/query-0a686ca61444d7ad7484071727aa039a6ea6697e5a49a633b767c052aa3e0a18.json new file mode 100644 index 0000000000000..a4c8e3ea0c2d8 --- /dev/null +++ b/backend/.sqlx/query-0a686ca61444d7ad7484071727aa039a6ea6697e5a49a633b767c052aa3e0a18.json @@ -0,0 +1,83 @@ +{ + "db_name": "PostgreSQL", + "query": "WITH uuid_table as (\n select gen_random_uuid() as uuid from generate_series(1, $11)\n )\n INSERT INTO queue \n (id, script_hash, script_path, job_kind, language, args, tag, created_by, permissioned_as, email, scheduled_for, workspace_id, concurrent_limit, concurrency_time_window_s, timeout)\n (SELECT uuid, $1, $2, $3, $4, ('{ \"uuid\": \"' || uuid || '\" }')::jsonb, $5, $6, $7, $8, $9, $10, $12, $13, $14 FROM uuid_table) \n RETURNING id", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "id", + "type_info": "Uuid" + } + ], + "parameters": { + "Left": [ + "Int8", + "Varchar", + { + "Custom": { + "name": "job_kind", + "kind": { + "Enum": [ + "script", + "preview", + "flow", + "dependencies", + "flowpreview", + "script_hub", + "identity", + "flowdependencies", + "http", + "graphql", + "postgresql", + "noop", + "appdependencies", + "deploymentcallback", + "singlescriptflow" + ] + } + } + }, + { + "Custom": { + "name": "script_lang", + "kind": { + "Enum": [ + "python3", + "deno", + "go", + "bash", + "postgresql", + "nativets", + "bun", + "mysql", + "bigquery", + "snowflake", + "graphql", + "powershell", + "mssql", + "php", + "bunnative", + "rust", + "ansible" + ] + } + } + }, + "Varchar", + "Varchar", + "Varchar", + "Varchar", + "Timestamptz", + "Varchar", + "Int4", + "Int4", + "Int4", + "Int4" + ] + }, + "nullable": [ + false + ] + }, + "hash": "0a686ca61444d7ad7484071727aa039a6ea6697e5a49a633b767c052aa3e0a18" +} diff --git a/backend/.sqlx/query-0a9a191273c735c41d56ea46a39ffca075a0550eada87df7162c5037164ad6bf.json b/backend/.sqlx/query-0a9a191273c735c41d56ea46a39ffca075a0550eada87df7162c5037164ad6bf.json new file mode 100644 index 0000000000000..de6e87bffd8ff --- /dev/null +++ b/backend/.sqlx/query-0a9a191273c735c41d56ea46a39ffca075a0550eada87df7162c5037164ad6bf.json @@ -0,0 +1,16 @@ +{ + "db_name": "PostgreSQL", + "query": "\n INSERT INTO capture\n (workspace_id, path, created_by)\n VALUES ($1, $2, $3)\n ON CONFLICT (workspace_id, path)\n DO UPDATE SET created_at = now()\n ", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Varchar", + "Varchar" + ] + }, + "nullable": [] + }, + "hash": "0a9a191273c735c41d56ea46a39ffca075a0550eada87df7162c5037164ad6bf" +} diff --git a/backend/.sqlx/query-0aa47e68f9e21115d96a8a1117e95f800c8bfb9bd6872a657c7e7131a21563c8.json b/backend/.sqlx/query-0aa47e68f9e21115d96a8a1117e95f800c8bfb9bd6872a657c7e7131a21563c8.json new file mode 100644 index 0000000000000..fe02b79503a39 --- /dev/null +++ b/backend/.sqlx/query-0aa47e68f9e21115d96a8a1117e95f800c8bfb9bd6872a657c7e7131a21563c8.json @@ -0,0 +1,20 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT 1 FROM password WHERE email = 'admin@windmill.dev' AND password_hash = '$argon2id$v=19$m=4096,t=3,p=1$oLJo/lPn/gezXCuFOEyaNw$i0T2tCkw3xUFsrBIKZwr8jVNHlIfoxQe+HfDnLtd12I'", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "?column?", + "type_info": "Int4" + } + ], + "parameters": { + "Left": [] + }, + "nullable": [ + null + ] + }, + "hash": "0aa47e68f9e21115d96a8a1117e95f800c8bfb9bd6872a657c7e7131a21563c8" +} diff --git a/backend/.sqlx/query-0ad36c1598ff4ece0c325eaeb9a9177a87e1accd192402e21db5ae09c3498ab0.json b/backend/.sqlx/query-0ad36c1598ff4ece0c325eaeb9a9177a87e1accd192402e21db5ae09c3498ab0.json new file mode 100644 index 0000000000000..fc94db0309bd2 --- /dev/null +++ b/backend/.sqlx/query-0ad36c1598ff4ece0c325eaeb9a9177a87e1accd192402e21db5ae09c3498ab0.json @@ -0,0 +1,99 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO queue\n (workspace_id, id, running, parent_job, created_by, permissioned_as, scheduled_for, \n script_hash, script_path, raw_code, raw_lock, args, job_kind, schedule_path, raw_flow, flow_status, is_flow_step, language, started_at, same_worker, pre_run_error, email, visible_to_owner, root_job, tag, concurrent_limit, concurrency_time_window_s, timeout, flow_step_id, cache_ttl, priority, last_ping)\n VALUES ($1, $2, $3, $4, $5, $6, COALESCE($7, now()), $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, $18, CASE WHEN $3 THEN now() END, $19, $20, $21, $22, $23, $24, $25, $26, $27, $28, $29, $30, NULL) RETURNING id", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "id", + "type_info": "Uuid" + } + ], + "parameters": { + "Left": [ + "Varchar", + "Uuid", + "Bool", + "Uuid", + "Varchar", + "Varchar", + "Timestamptz", + "Int8", + "Varchar", + "Text", + "Text", + "Jsonb", + { + "Custom": { + "name": "job_kind", + "kind": { + "Enum": [ + "script", + "preview", + "flow", + "dependencies", + "flowpreview", + "script_hub", + "identity", + "flowdependencies", + "http", + "graphql", + "postgresql", + "noop", + "appdependencies", + "deploymentcallback", + "singlescriptflow" + ] + } + } + }, + "Varchar", + "Jsonb", + "Jsonb", + "Bool", + { + "Custom": { + "name": "script_lang", + "kind": { + "Enum": [ + "python3", + "deno", + "go", + "bash", + "postgresql", + "nativets", + "bun", + "mysql", + "bigquery", + "snowflake", + "graphql", + "powershell", + "mssql", + "php", + "bunnative", + "rust", + "ansible" + ] + } + } + }, + "Bool", + "Text", + "Varchar", + "Bool", + "Uuid", + "Varchar", + "Int4", + "Int4", + "Int4", + "Varchar", + "Int4", + "Int2" + ] + }, + "nullable": [ + false + ] + }, + "hash": "0ad36c1598ff4ece0c325eaeb9a9177a87e1accd192402e21db5ae09c3498ab0" +} diff --git a/backend/.sqlx/query-0ba594244a366a31d9bed97a2d7b031d42c23463599d267d1712d1af1d26b321.json b/backend/.sqlx/query-0ba594244a366a31d9bed97a2d7b031d42c23463599d267d1712d1af1d26b321.json new file mode 100644 index 0000000000000..bde380baec016 --- /dev/null +++ b/backend/.sqlx/query-0ba594244a366a31d9bed97a2d7b031d42c23463599d267d1712d1af1d26b321.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE audit SET workspace_id = $1 WHERE workspace_id = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Text" + ] + }, + "nullable": [] + }, + "hash": "0ba594244a366a31d9bed97a2d7b031d42c23463599d267d1712d1af1d26b321" +} diff --git a/backend/.sqlx/query-0be8c6f698a715d015126a7871a39fd7c25ad5269d3313ee1a32533b6d346446.json b/backend/.sqlx/query-0be8c6f698a715d015126a7871a39fd7c25ad5269d3313ee1a32533b6d346446.json new file mode 100644 index 0000000000000..27ee0f7d230bc --- /dev/null +++ b/backend/.sqlx/query-0be8c6f698a715d015126a7871a39fd7c25ad5269d3313ee1a32533b6d346446.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE concurrency_counter SET job_uuids = job_uuids - $2 WHERE concurrency_id = $1", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "0be8c6f698a715d015126a7871a39fd7c25ad5269d3313ee1a32533b6d346446" +} diff --git a/backend/.sqlx/query-0bfd22be1d6966c61c9a5fedc2522be8a17f06391b882337c74c1817c99b533d.json b/backend/.sqlx/query-0bfd22be1d6966c61c9a5fedc2522be8a17f06391b882337c74c1817c99b533d.json new file mode 100644 index 0000000000000..38bc687e7e7ee --- /dev/null +++ b/backend/.sqlx/query-0bfd22be1d6966c61c9a5fedc2522be8a17f06391b882337c74c1817c99b533d.json @@ -0,0 +1,24 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT name FROM folder WHERE workspace_id = $1 ORDER BY name desc LIMIT $2 OFFSET $3", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "name", + "type_info": "Varchar" + } + ], + "parameters": { + "Left": [ + "Text", + "Int8", + "Int8" + ] + }, + "nullable": [ + false + ] + }, + "hash": "0bfd22be1d6966c61c9a5fedc2522be8a17f06391b882337c74c1817c99b533d" +} diff --git a/backend/.sqlx/query-0c0b5d5d1e6ab2fed7532f94b50be3210e3845b61551691bbef81c2b6fb01121.json b/backend/.sqlx/query-0c0b5d5d1e6ab2fed7532f94b50be3210e3845b61551691bbef81c2b6fb01121.json new file mode 100644 index 0000000000000..9b37241475ac3 --- /dev/null +++ b/backend/.sqlx/query-0c0b5d5d1e6ab2fed7532f94b50be3210e3845b61551691bbef81c2b6fb01121.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE queue\n SET flow_status = JSONB_SET(flow_status, ARRAY['failure_module'], $1)\n WHERE id = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Jsonb", + "Uuid" + ] + }, + "nullable": [] + }, + "hash": "0c0b5d5d1e6ab2fed7532f94b50be3210e3845b61551691bbef81c2b6fb01121" +} diff --git a/backend/.sqlx/query-0c2e53960dc7786c848079b155e62994d4a861f1dbb9752c0a27428d83040e13.json b/backend/.sqlx/query-0c2e53960dc7786c848079b155e62994d4a861f1dbb9752c0a27428d83040e13.json new file mode 100644 index 0000000000000..5c335398786e6 --- /dev/null +++ b/backend/.sqlx/query-0c2e53960dc7786c848079b155e62994d4a861f1dbb9752c0a27428d83040e13.json @@ -0,0 +1,28 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT value, is_secret FROM variable WHERE path = $1", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "value", + "type_info": "Varchar" + }, + { + "ordinal": 1, + "name": "is_secret", + "type_info": "Bool" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + false, + false + ] + }, + "hash": "0c2e53960dc7786c848079b155e62994d4a861f1dbb9752c0a27428d83040e13" +} diff --git a/backend/.sqlx/query-0c3b687d97cb0bb2dfec369c013e7570ee9c3f473c6e92b1161ed71527385348.json b/backend/.sqlx/query-0c3b687d97cb0bb2dfec369c013e7570ee9c3f473c6e92b1161ed71527385348.json new file mode 100644 index 0000000000000..b0144e3ca2c42 --- /dev/null +++ b/backend/.sqlx/query-0c3b687d97cb0bb2dfec369c013e7570ee9c3f473c6e92b1161ed71527385348.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT EXISTS(SELECT 1 FROM flow WHERE path = $1 AND workspace_id = $2)", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "exists", + "type_info": "Bool" + } + ], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [ + null + ] + }, + "hash": "0c3b687d97cb0bb2dfec369c013e7570ee9c3f473c6e92b1161ed71527385348" +} diff --git a/backend/.sqlx/query-0c5faa1e3233ca15240f80c9ba805f839d9f1f7450d1ea1f2b8e9faf8533892d.json b/backend/.sqlx/query-0c5faa1e3233ca15240f80c9ba805f839d9f1f7450d1ea1f2b8e9faf8533892d.json new file mode 100644 index 0000000000000..44e6bd54da2f6 --- /dev/null +++ b/backend/.sqlx/query-0c5faa1e3233ca15240f80c9ba805f839d9f1f7450d1ea1f2b8e9faf8533892d.json @@ -0,0 +1,17 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM workspace_invite WHERE\n workspace_id = $1 AND email = $2 AND is_admin = $3 AND operator = $4", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Text", + "Bool", + "Bool" + ] + }, + "nullable": [] + }, + "hash": "0c5faa1e3233ca15240f80c9ba805f839d9f1f7450d1ea1f2b8e9faf8533892d" +} diff --git a/backend/.sqlx/query-0c9ad812013ff476a79ca8d6bb8b7a73d9492e07680732af9af09e223ade1f37.json b/backend/.sqlx/query-0c9ad812013ff476a79ca8d6bb8b7a73d9492e07680732af9af09e223ade1f37.json new file mode 100644 index 0000000000000..dd536593e39d6 --- /dev/null +++ b/backend/.sqlx/query-0c9ad812013ff476a79ca8d6bb8b7a73d9492e07680732af9af09e223ade1f37.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE workspace_settings SET auto_invite_domain = NULL, auto_invite_operator = NULL, auto_add = NULL WHERE workspace_id = $1", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [] + }, + "hash": "0c9ad812013ff476a79ca8d6bb8b7a73d9492e07680732af9af09e223ade1f37" +} diff --git a/backend/.sqlx/query-0cb84cbb9083d967cc8be1cccab5be61080c1003eef51eea41862b25c2b93de6.json b/backend/.sqlx/query-0cb84cbb9083d967cc8be1cccab5be61080c1003eef51eea41862b25c2b93de6.json new file mode 100644 index 0000000000000..35e2731f9a117 --- /dev/null +++ b/backend/.sqlx/query-0cb84cbb9083d967cc8be1cccab5be61080c1003eef51eea41862b25c2b93de6.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO metrics (id, value) VALUES ('telemetry', $1)", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Jsonb" + ] + }, + "nullable": [] + }, + "hash": "0cb84cbb9083d967cc8be1cccab5be61080c1003eef51eea41862b25c2b93de6" +} diff --git a/backend/.sqlx/query-0cc3618495d5d024b2a173c58a3a8bb2a9d69b7b6e7ed6b0d0064fa2ce9c2e31.json b/backend/.sqlx/query-0cc3618495d5d024b2a173c58a3a8bb2a9d69b7b6e7ed6b0d0064fa2ce9c2e31.json new file mode 100644 index 0000000000000..79e36950f6521 --- /dev/null +++ b/backend/.sqlx/query-0cc3618495d5d024b2a173c58a3a8bb2a9d69b7b6e7ed6b0d0064fa2ce9c2e31.json @@ -0,0 +1,20 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT value\n FROM global_settings\n WHERE name = 'openai_azure_base_path'", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "value", + "type_info": "Jsonb" + } + ], + "parameters": { + "Left": [] + }, + "nullable": [ + false + ] + }, + "hash": "0cc3618495d5d024b2a173c58a3a8bb2a9d69b7b6e7ed6b0d0064fa2ce9c2e31" +} diff --git a/backend/.sqlx/query-0cf42f7e76fe01e6a9a20499b2228d76a1919b8b4050afedb2459be083a4ad4d.json b/backend/.sqlx/query-0cf42f7e76fe01e6a9a20499b2228d76a1919b8b4050afedb2459be083a4ad4d.json new file mode 100644 index 0000000000000..b75a626b30da0 --- /dev/null +++ b/backend/.sqlx/query-0cf42f7e76fe01e6a9a20499b2228d76a1919b8b4050afedb2459be083a4ad4d.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT EXISTS(SELECT 1 FROM password WHERE email = $1)", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "exists", + "type_info": "Bool" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + null + ] + }, + "hash": "0cf42f7e76fe01e6a9a20499b2228d76a1919b8b4050afedb2459be083a4ad4d" +} diff --git a/backend/.sqlx/query-0d0c379b1cd2eec15869dd0b1a31886a95d53096fdcb1cdb1e0eb282b54105dc.json b/backend/.sqlx/query-0d0c379b1cd2eec15869dd0b1a31886a95d53096fdcb1cdb1e0eb282b54105dc.json new file mode 100644 index 0000000000000..a3ab0fa0a1557 --- /dev/null +++ b/backend/.sqlx/query-0d0c379b1cd2eec15869dd0b1a31886a95d53096fdcb1cdb1e0eb282b54105dc.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE workspace_key SET workspace_id = $1 WHERE workspace_id = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Text" + ] + }, + "nullable": [] + }, + "hash": "0d0c379b1cd2eec15869dd0b1a31886a95d53096fdcb1cdb1e0eb282b54105dc" +} diff --git a/backend/.sqlx/query-0d407b9e18a6ee7f4be4fb017e7ed278f2070a939ad8a0680cedd0216d53505a.json b/backend/.sqlx/query-0d407b9e18a6ee7f4be4fb017e7ed278f2070a939ad8a0680cedd0216d53505a.json new file mode 100644 index 0000000000000..5b0bcc44c83a8 --- /dev/null +++ b/backend/.sqlx/query-0d407b9e18a6ee7f4be4fb017e7ed278f2070a939ad8a0680cedd0216d53505a.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM config WHERE name = $1 RETURNING name", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "name", + "type_info": "Varchar" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + false + ] + }, + "hash": "0d407b9e18a6ee7f4be4fb017e7ed278f2070a939ad8a0680cedd0216d53505a" +} diff --git a/backend/.sqlx/query-0d6412bc3ebb1d58bdd9cbcef774dacf9016fa402af5c1b4e339b9a3d7163d5e.json b/backend/.sqlx/query-0d6412bc3ebb1d58bdd9cbcef774dacf9016fa402af5c1b4e339b9a3d7163d5e.json new file mode 100644 index 0000000000000..800789cb0b732 --- /dev/null +++ b/backend/.sqlx/query-0d6412bc3ebb1d58bdd9cbcef774dacf9016fa402af5c1b4e339b9a3d7163d5e.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT EXISTS (SELECT 1 FROM schedule WHERE path = $1 AND workspace_id = $2 AND path != script_path)", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "exists", + "type_info": "Bool" + } + ], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [ + null + ] + }, + "hash": "0d6412bc3ebb1d58bdd9cbcef774dacf9016fa402af5c1b4e339b9a3d7163d5e" +} diff --git a/backend/.sqlx/query-0d7ba88a9810e434aa00fd63bbf416cbe222f2c67ccc8aa92e651c2bea4c2d7b.json b/backend/.sqlx/query-0d7ba88a9810e434aa00fd63bbf416cbe222f2c67ccc8aa92e651c2bea4c2d7b.json new file mode 100644 index 0000000000000..eade62579bb9f --- /dev/null +++ b/backend/.sqlx/query-0d7ba88a9810e434aa00fd63bbf416cbe222f2c67ccc8aa92e651c2bea4c2d7b.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM workspace_invite WHERE workspace_id = $1 AND email = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "0d7ba88a9810e434aa00fd63bbf416cbe222f2c67ccc8aa92e651c2bea4c2d7b" +} diff --git a/backend/.sqlx/query-0dc502078eeb874262568c44078d492ac6c22b97dbf2ab0a1fd00eb3156f1745.json b/backend/.sqlx/query-0dc502078eeb874262568c44078d492ac6c22b97dbf2ab0a1fd00eb3156f1745.json new file mode 100644 index 0000000000000..ab4a9781bd1ef --- /dev/null +++ b/backend/.sqlx/query-0dc502078eeb874262568c44078d492ac6c22b97dbf2ab0a1fd00eb3156f1745.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM script WHERE workspace_id = $1", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [] + }, + "hash": "0dc502078eeb874262568c44078d492ac6c22b97dbf2ab0a1fd00eb3156f1745" +} diff --git a/backend/.sqlx/query-0dd3fe3ddf9cb72760687d2ee0950afdcce2d54721bfe8dba008b15e4b581956.json b/backend/.sqlx/query-0dd3fe3ddf9cb72760687d2ee0950afdcce2d54721bfe8dba008b15e4b581956.json new file mode 100644 index 0000000000000..af10226fa6814 --- /dev/null +++ b/backend/.sqlx/query-0dd3fe3ddf9cb72760687d2ee0950afdcce2d54721bfe8dba008b15e4b581956.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM account WHERE id = $1 AND workspace_id = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Int4", + "Text" + ] + }, + "nullable": [] + }, + "hash": "0dd3fe3ddf9cb72760687d2ee0950afdcce2d54721bfe8dba008b15e4b581956" +} diff --git a/backend/.sqlx/query-0e21323c27b282ab79da7bb3418e0730ada0f3ad9b4bc38941c8ccc39685a53d.json b/backend/.sqlx/query-0e21323c27b282ab79da7bb3418e0730ada0f3ad9b4bc38941c8ccc39685a53d.json new file mode 100644 index 0000000000000..1648b21f6d877 --- /dev/null +++ b/backend/.sqlx/query-0e21323c27b282ab79da7bb3418e0730ada0f3ad9b4bc38941c8ccc39685a53d.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM workspace_settings WHERE workspace_id = $1", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [] + }, + "hash": "0e21323c27b282ab79da7bb3418e0730ada0f3ad9b4bc38941c8ccc39685a53d" +} diff --git a/backend/.sqlx/query-0e52a588f3edeb8fb58d6d62247b8590e51171e2811c62737bdb81fb0ac8f182.json b/backend/.sqlx/query-0e52a588f3edeb8fb58d6d62247b8590e51171e2811c62737bdb81fb0ac8f182.json new file mode 100644 index 0000000000000..f23cf3f7108dd --- /dev/null +++ b/backend/.sqlx/query-0e52a588f3edeb8fb58d6d62247b8590e51171e2811c62737bdb81fb0ac8f182.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE worker_ping SET \n ping_at = now(), \n jobs_executed = 1, \n current_job_id = $1, \n current_job_workspace_id = 'admins' \n WHERE worker = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Uuid", + "Text" + ] + }, + "nullable": [] + }, + "hash": "0e52a588f3edeb8fb58d6d62247b8590e51171e2811c62737bdb81fb0ac8f182" +} diff --git a/backend/.sqlx/query-0e7d95f4913e5775651971d741a3b5c1ef5dfe079be5325abe2866d39a7fe5fb.json b/backend/.sqlx/query-0e7d95f4913e5775651971d741a3b5c1ef5dfe079be5325abe2866d39a7fe5fb.json new file mode 100644 index 0000000000000..9548fa6997384 --- /dev/null +++ b/backend/.sqlx/query-0e7d95f4913e5775651971d741a3b5c1ef5dfe079be5325abe2866d39a7fe5fb.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM script WHERE path = $1 AND workspace_id = $2 RETURNING path", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "path", + "type_info": "Varchar" + } + ], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [ + false + ] + }, + "hash": "0e7d95f4913e5775651971d741a3b5c1ef5dfe079be5325abe2866d39a7fe5fb" +} diff --git a/backend/.sqlx/query-0ef37117c369f03236e18f9dbb1f3d52776c8cb73f2507199c6ca16d4d2405ba.json b/backend/.sqlx/query-0ef37117c369f03236e18f9dbb1f3d52776c8cb73f2507199c6ca16d4d2405ba.json new file mode 100644 index 0000000000000..1394ed76a493c --- /dev/null +++ b/backend/.sqlx/query-0ef37117c369f03236e18f9dbb1f3d52776c8cb73f2507199c6ca16d4d2405ba.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT email FROM password WHERE ($2::text = '*' OR email LIKE CONCAT('%', $2::text)) AND NOT EXISTS (\n SELECT 1 FROM usr WHERE workspace_id = $1::text AND email = password.email\n )", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "email", + "type_info": "Varchar" + } + ], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [ + false + ] + }, + "hash": "0ef37117c369f03236e18f9dbb1f3d52776c8cb73f2507199c6ca16d4d2405ba" +} diff --git a/backend/.sqlx/query-108e4c505168381b51ad298b5294aa73e84d35bb68a5911985139bbf94c1d231.json b/backend/.sqlx/query-108e4c505168381b51ad298b5294aa73e84d35bb68a5911985139bbf94c1d231.json new file mode 100644 index 0000000000000..8f22fed492f69 --- /dev/null +++ b/backend/.sqlx/query-108e4c505168381b51ad298b5294aa73e84d35bb68a5911985139bbf94c1d231.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT extra_perms from resource WHERE path = $1 AND workspace_id = $2", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "extra_perms", + "type_info": "Jsonb" + } + ], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [ + false + ] + }, + "hash": "108e4c505168381b51ad298b5294aa73e84d35bb68a5911985139bbf94c1d231" +} diff --git a/backend/.sqlx/query-1182fe055306d7ea435d76b74d781e066915c8397e6bbc9e408ff3dda9fec27f.json b/backend/.sqlx/query-1182fe055306d7ea435d76b74d781e066915c8397e6bbc9e408ff3dda9fec27f.json new file mode 100644 index 0000000000000..767f5cba57bec --- /dev/null +++ b/backend/.sqlx/query-1182fe055306d7ea435d76b74d781e066915c8397e6bbc9e408ff3dda9fec27f.json @@ -0,0 +1,16 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE script SET ws_error_handler_muted = $3 WHERE workspace_id = $2 AND path = $1 AND created_at = (SELECT max(created_at) FROM script WHERE path = $1 AND workspace_id = $2)", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Text", + "Bool" + ] + }, + "nullable": [] + }, + "hash": "1182fe055306d7ea435d76b74d781e066915c8397e6bbc9e408ff3dda9fec27f" +} diff --git a/backend/.sqlx/query-122090a0f89e5248a0a0f199ebd24582fdb302883aebd2da187ac0084e767ea3.json b/backend/.sqlx/query-122090a0f89e5248a0a0f199ebd24582fdb302883aebd2da187ac0084e767ea3.json new file mode 100644 index 0000000000000..a329998c956de --- /dev/null +++ b/backend/.sqlx/query-122090a0f89e5248a0a0f199ebd24582fdb302883aebd2da187ac0084e767ea3.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT set_config('session.pgroups', $1, true)", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "set_config", + "type_info": "Text" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + null + ] + }, + "hash": "122090a0f89e5248a0a0f199ebd24582fdb302883aebd2da187ac0084e767ea3" +} diff --git a/backend/.sqlx/query-126be8832776644e0d2c5d004acb26f6d4820a6a1fc8e028c3550c438248a82b.json b/backend/.sqlx/query-126be8832776644e0d2c5d004acb26f6d4820a6a1fc8e028c3550c438248a82b.json new file mode 100644 index 0000000000000..ecc75e957a2a1 --- /dev/null +++ b/backend/.sqlx/query-126be8832776644e0d2c5d004acb26f6d4820a6a1fc8e028c3550c438248a82b.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE queue\n SET running = false\n , started_at = null\n , scheduled_for = $1\n , last_ping = null\n WHERE id = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Timestamptz", + "Uuid" + ] + }, + "nullable": [] + }, + "hash": "126be8832776644e0d2c5d004acb26f6d4820a6a1fc8e028c3550c438248a82b" +} diff --git a/backend/.sqlx/query-1289e7278d2a289bfaa53f00e0b6dceb195df0fb43a8ac03bc8b35939fc941dd.json b/backend/.sqlx/query-1289e7278d2a289bfaa53f00e0b6dceb195df0fb43a8ac03bc8b35939fc941dd.json new file mode 100644 index 0000000000000..fc01ba95e3580 --- /dev/null +++ b/backend/.sqlx/query-1289e7278d2a289bfaa53f00e0b6dceb195df0fb43a8ac03bc8b35939fc941dd.json @@ -0,0 +1,47 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT * FROM workspace LIMIT $1 OFFSET $2", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "id", + "type_info": "Varchar" + }, + { + "ordinal": 1, + "name": "name", + "type_info": "Varchar" + }, + { + "ordinal": 2, + "name": "owner", + "type_info": "Varchar" + }, + { + "ordinal": 3, + "name": "deleted", + "type_info": "Bool" + }, + { + "ordinal": 4, + "name": "premium", + "type_info": "Bool" + } + ], + "parameters": { + "Left": [ + "Int8", + "Int8" + ] + }, + "nullable": [ + false, + false, + false, + false, + false + ] + }, + "hash": "1289e7278d2a289bfaa53f00e0b6dceb195df0fb43a8ac03bc8b35939fc941dd" +} diff --git a/backend/.sqlx/query-12a0fd7d8d99fb73b01bc24774fe9a8da57b5204bb6b1207aed47143c17a20bc.json b/backend/.sqlx/query-12a0fd7d8d99fb73b01bc24774fe9a8da57b5204bb6b1207aed47143c17a20bc.json new file mode 100644 index 0000000000000..e60e67da63011 --- /dev/null +++ b/backend/.sqlx/query-12a0fd7d8d99fb73b01bc24774fe9a8da57b5204bb6b1207aed47143c17a20bc.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT COUNT(id) FROM queue WHERE running = true AND workspace_id = $1", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "count", + "type_info": "Int8" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + null + ] + }, + "hash": "12a0fd7d8d99fb73b01bc24774fe9a8da57b5204bb6b1207aed47143c17a20bc" +} diff --git a/backend/.sqlx/query-13358ffeb0917dd9dff9f8527a59dfee63bb704c3f712af179732dc281411917.json b/backend/.sqlx/query-13358ffeb0917dd9dff9f8527a59dfee63bb704c3f712af179732dc281411917.json new file mode 100644 index 0000000000000..d49a1b9d44514 --- /dev/null +++ b/backend/.sqlx/query-13358ffeb0917dd9dff9f8527a59dfee63bb704c3f712af179732dc281411917.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO flow \n (workspace_id, path, summary, description, archived, extra_perms, dependency_job, draft_only, tag, ws_error_handler_muted, dedicated_worker, timeout, visible_to_runner_only, concurrency_key, versions, value, schema, edited_by, edited_at) \n SELECT $1, path, summary, description, archived, extra_perms, dependency_job, draft_only, tag, ws_error_handler_muted, dedicated_worker, timeout, visible_to_runner_only, concurrency_key, versions, value, schema, edited_by, edited_at\n FROM flow WHERE workspace_id = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Text" + ] + }, + "nullable": [] + }, + "hash": "13358ffeb0917dd9dff9f8527a59dfee63bb704c3f712af179732dc281411917" +} diff --git a/backend/.sqlx/query-1438e8dc5738fc69bc6601eb11729610f671b7df0ab25da058e16c6654279d61.json b/backend/.sqlx/query-1438e8dc5738fc69bc6601eb11729610f671b7df0ab25da058e16c6654279d61.json new file mode 100644 index 0000000000000..452510a97ffd6 --- /dev/null +++ b/backend/.sqlx/query-1438e8dc5738fc69bc6601eb11729610f671b7df0ab25da058e16c6654279d61.json @@ -0,0 +1,24 @@ +{ + "db_name": "PostgreSQL", + "query": "\n SELECT flow_status->'user_states'->$1\n FROM queue\n WHERE id = $2 AND workspace_id = $3\n ", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "?column?", + "type_info": "Jsonb" + } + ], + "parameters": { + "Left": [ + "Text", + "Uuid", + "Text" + ] + }, + "nullable": [ + null + ] + }, + "hash": "1438e8dc5738fc69bc6601eb11729610f671b7df0ab25da058e16c6654279d61" +} diff --git a/backend/.sqlx/query-15105be6247457fc01b7d65767ccdde047d0f0c172c7a01eeabe3bd8206a3069.json b/backend/.sqlx/query-15105be6247457fc01b7d65767ccdde047d0f0c172c7a01eeabe3bd8206a3069.json new file mode 100644 index 0000000000000..543f8c634cdfd --- /dev/null +++ b/backend/.sqlx/query-15105be6247457fc01b7d65767ccdde047d0f0c172c7a01eeabe3bd8206a3069.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO windmill_migrations (name) VALUES ($1) ON CONFLICT DO NOTHING", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [] + }, + "hash": "15105be6247457fc01b7d65767ccdde047d0f0c172c7a01eeabe3bd8206a3069" +} diff --git a/backend/.sqlx/query-1587639f13a1a3ad97bd324df38661f3e846f1992704c86ddad74dea151b0ec4.json b/backend/.sqlx/query-1587639f13a1a3ad97bd324df38661f3e846f1992704c86ddad74dea151b0ec4.json new file mode 100644 index 0000000000000..0ed678d485d35 --- /dev/null +++ b/backend/.sqlx/query-1587639f13a1a3ad97bd324df38661f3e846f1992704c86ddad74dea151b0ec4.json @@ -0,0 +1,35 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT value, is_secret, path from variable WHERE variable.path = $1 AND variable.workspace_id = $2", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "value", + "type_info": "Varchar" + }, + { + "ordinal": 1, + "name": "is_secret", + "type_info": "Bool" + }, + { + "ordinal": 2, + "name": "path", + "type_info": "Varchar" + } + ], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [ + false, + false, + false + ] + }, + "hash": "1587639f13a1a3ad97bd324df38661f3e846f1992704c86ddad74dea151b0ec4" +} diff --git a/backend/.sqlx/query-15c29ab03fdeda346adc4db3fd0b9d9aee1a99f0c795afe203efe42b967569a5.json b/backend/.sqlx/query-15c29ab03fdeda346adc4db3fd0b9d9aee1a99f0c795afe203efe42b967569a5.json new file mode 100644 index 0000000000000..73ad9fc2eba41 --- /dev/null +++ b/backend/.sqlx/query-15c29ab03fdeda346adc4db3fd0b9d9aee1a99f0c795afe203efe42b967569a5.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE variable SET workspace_id = $1 WHERE workspace_id = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Text" + ] + }, + "nullable": [] + }, + "hash": "15c29ab03fdeda346adc4db3fd0b9d9aee1a99f0c795afe203efe42b967569a5" +} diff --git a/backend/.sqlx/query-15ef5759a2ccd7b7f9fd3f2ce0d54d01fe0a2c7e9692ac4ce29a86eb509e1a1d.json b/backend/.sqlx/query-15ef5759a2ccd7b7f9fd3f2ce0d54d01fe0a2c7e9692ac4ce29a86eb509e1a1d.json new file mode 100644 index 0000000000000..5552400f28f87 --- /dev/null +++ b/backend/.sqlx/query-15ef5759a2ccd7b7f9fd3f2ce0d54d01fe0a2c7e9692ac4ce29a86eb509e1a1d.json @@ -0,0 +1,17 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO token\n (token, label, super_admin, email)\n VALUES ($1, $2, $3, $4)", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Varchar", + "Bool", + "Varchar" + ] + }, + "nullable": [] + }, + "hash": "15ef5759a2ccd7b7f9fd3f2ce0d54d01fe0a2c7e9692ac4ce29a86eb509e1a1d" +} diff --git a/backend/.sqlx/query-163f00eb8b1a489d5f382cdba22a5744e88a8e6f1532d7cb02af560f5f5d49f7.json b/backend/.sqlx/query-163f00eb8b1a489d5f382cdba22a5744e88a8e6f1532d7cb02af560f5f5d49f7.json new file mode 100644 index 0000000000000..c0223f0eea423 --- /dev/null +++ b/backend/.sqlx/query-163f00eb8b1a489d5f382cdba22a5744e88a8e6f1532d7cb02af560f5f5d49f7.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT value from resource WHERE path = $1 AND workspace_id = $2", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "value", + "type_info": "Jsonb" + } + ], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [ + true + ] + }, + "hash": "163f00eb8b1a489d5f382cdba22a5744e88a8e6f1532d7cb02af560f5f5d49f7" +} diff --git a/backend/.sqlx/query-1680a97558ad79a2b692b4ed8d253177ce6515a061baf1afd0f4c360db84b403.json b/backend/.sqlx/query-1680a97558ad79a2b692b4ed8d253177ce6515a061baf1afd0f4c360db84b403.json new file mode 100644 index 0000000000000..3ed71f79fb520 --- /dev/null +++ b/backend/.sqlx/query-1680a97558ad79a2b692b4ed8d253177ce6515a061baf1afd0f4c360db84b403.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE app SET versions = array_append(versions, $1::bigint) WHERE id = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Int8", + "Int8" + ] + }, + "nullable": [] + }, + "hash": "1680a97558ad79a2b692b4ed8d253177ce6515a061baf1afd0f4c360db84b403" +} diff --git a/backend/.sqlx/query-16be0560028361d46bf3b842a5fa07472994d8942c684f5b75339fe71ea23cdd.json b/backend/.sqlx/query-16be0560028361d46bf3b842a5fa07472994d8942c684f5b75339fe71ea23cdd.json new file mode 100644 index 0000000000000..d273132682d17 --- /dev/null +++ b/backend/.sqlx/query-16be0560028361d46bf3b842a5fa07472994d8942c684f5b75339fe71ea23cdd.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT script_path FROM completed_job WHERE id = $1", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "script_path", + "type_info": "Varchar" + } + ], + "parameters": { + "Left": [ + "Uuid" + ] + }, + "nullable": [ + true + ] + }, + "hash": "16be0560028361d46bf3b842a5fa07472994d8942c684f5b75339fe71ea23cdd" +} diff --git a/backend/.sqlx/query-16c4fb122ceb30722f54c92db97427b0ddd36f495d549f8cd23d659d2c866a63.json b/backend/.sqlx/query-16c4fb122ceb30722f54c92db97427b0ddd36f495d549f8cd23d659d2c866a63.json new file mode 100644 index 0000000000000..00361e6e958ff --- /dev/null +++ b/backend/.sqlx/query-16c4fb122ceb30722f54c92db97427b0ddd36f495d549f8cd23d659d2c866a63.json @@ -0,0 +1,36 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT EXISTS(SELECT 1 FROM http_trigger WHERE route_path_key = $1 AND http_method = $2)", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "exists", + "type_info": "Bool" + } + ], + "parameters": { + "Left": [ + "Text", + { + "Custom": { + "name": "http_method", + "kind": { + "Enum": [ + "get", + "post", + "put", + "delete", + "patch" + ] + } + } + } + ] + }, + "nullable": [ + null + ] + }, + "hash": "16c4fb122ceb30722f54c92db97427b0ddd36f495d549f8cd23d659d2c866a63" +} diff --git a/backend/.sqlx/query-16c93e721e30b72197e6143e0ebe46931ce25efc5ea0c53e160fcd98a96f4306.json b/backend/.sqlx/query-16c93e721e30b72197e6143e0ebe46931ce25efc5ea0c53e160fcd98a96f4306.json new file mode 100644 index 0000000000000..004aa63aa33a4 --- /dev/null +++ b/backend/.sqlx/query-16c93e721e30b72197e6143e0ebe46931ce25efc5ea0c53e160fcd98a96f4306.json @@ -0,0 +1,12 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM password", + "describe": { + "columns": [], + "parameters": { + "Left": [] + }, + "nullable": [] + }, + "hash": "16c93e721e30b72197e6143e0ebe46931ce25efc5ea0c53e160fcd98a96f4306" +} diff --git a/backend/.sqlx/query-16e4b1bead9fc77fd98658b8cb8cc6d6bf1df758b30e99bd661da866062ef14f.json b/backend/.sqlx/query-16e4b1bead9fc77fd98658b8cb8cc6d6bf1df758b30e99bd661da866062ef14f.json new file mode 100644 index 0000000000000..1af42ff529ae1 --- /dev/null +++ b/backend/.sqlx/query-16e4b1bead9fc77fd98658b8cb8cc6d6bf1df758b30e99bd661da866062ef14f.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT hash FROM script WHERE path = $1 AND workspace_id = $2", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "hash", + "type_info": "Int8" + } + ], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [ + false + ] + }, + "hash": "16e4b1bead9fc77fd98658b8cb8cc6d6bf1df758b30e99bd661da866062ef14f" +} diff --git a/backend/.sqlx/query-170f620fbd99269d194d14d56f6a3863d9db5fe736a0a34325b824d9cec9b1a0.json b/backend/.sqlx/query-170f620fbd99269d194d14d56f6a3863d9db5fe736a0a34325b824d9cec9b1a0.json new file mode 100644 index 0000000000000..61fd7ed3ef40c --- /dev/null +++ b/backend/.sqlx/query-170f620fbd99269d194d14d56f6a3863d9db5fe736a0a34325b824d9cec9b1a0.json @@ -0,0 +1,25 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO completed_job AS cj\n ( workspace_id\n , id\n , parent_job\n , created_by\n , created_at\n , started_at\n , duration_ms\n , success\n , script_hash\n , script_path\n , args\n , result\n , raw_code\n , raw_lock\n , canceled\n , canceled_by\n , canceled_reason\n , job_kind\n , schedule_path\n , permissioned_as\n , flow_status\n , raw_flow\n , is_flow_step\n , is_skipped\n , language\n , email\n , visible_to_owner\n , mem_peak\n , tag\n , priority\n )\n SELECT workspace_id\n , id\n , parent_job\n , created_by\n , created_at\n , now()\n , 0\n , false\n , script_hash\n , script_path\n , args\n , $4\n , raw_code\n , raw_lock\n , true\n , $1\n , canceled_reason\n , job_kind\n , schedule_path\n , permissioned_as\n , flow_status\n , raw_flow\n , is_flow_step\n , false\n , language\n , email\n , visible_to_owner\n , mem_peak\n , tag\n , priority FROM queue \n WHERE id = any($2) AND running = false AND parent_job IS NULL AND workspace_id = $3 AND schedule_path IS NULL FOR UPDATE SKIP LOCKED\n ON CONFLICT (id) DO NOTHING RETURNING id", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "id", + "type_info": "Uuid" + } + ], + "parameters": { + "Left": [ + "Varchar", + "UuidArray", + "Text", + "Jsonb" + ] + }, + "nullable": [ + false + ] + }, + "hash": "170f620fbd99269d194d14d56f6a3863d9db5fe736a0a34325b824d9cec9b1a0" +} diff --git a/backend/.sqlx/query-1730f39fd1793d45fbb41b21389c61296a3ff7489ae12f52a19f9543173ac597.json b/backend/.sqlx/query-1730f39fd1793d45fbb41b21389c61296a3ff7489ae12f52a19f9543173ac597.json new file mode 100644 index 0000000000000..16a701fdffc1e --- /dev/null +++ b/backend/.sqlx/query-1730f39fd1793d45fbb41b21389c61296a3ff7489ae12f52a19f9543173ac597.json @@ -0,0 +1,154 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT * FROM workspace_settings WHERE workspace_id = $1", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "workspace_id", + "type_info": "Varchar" + }, + { + "ordinal": 1, + "name": "slack_team_id", + "type_info": "Varchar" + }, + { + "ordinal": 2, + "name": "slack_name", + "type_info": "Varchar" + }, + { + "ordinal": 3, + "name": "slack_command_script", + "type_info": "Varchar" + }, + { + "ordinal": 4, + "name": "slack_email", + "type_info": "Varchar" + }, + { + "ordinal": 5, + "name": "auto_invite_domain", + "type_info": "Varchar" + }, + { + "ordinal": 6, + "name": "auto_invite_operator", + "type_info": "Bool" + }, + { + "ordinal": 7, + "name": "customer_id", + "type_info": "Varchar" + }, + { + "ordinal": 8, + "name": "plan", + "type_info": "Varchar" + }, + { + "ordinal": 9, + "name": "webhook", + "type_info": "Text" + }, + { + "ordinal": 10, + "name": "deploy_to", + "type_info": "Varchar" + }, + { + "ordinal": 11, + "name": "error_handler", + "type_info": "Varchar" + }, + { + "ordinal": 12, + "name": "openai_resource_path", + "type_info": "Varchar" + }, + { + "ordinal": 13, + "name": "code_completion_enabled", + "type_info": "Bool" + }, + { + "ordinal": 14, + "name": "error_handler_extra_args", + "type_info": "Json" + }, + { + "ordinal": 15, + "name": "error_handler_muted_on_cancel", + "type_info": "Bool" + }, + { + "ordinal": 16, + "name": "large_file_storage", + "type_info": "Jsonb" + }, + { + "ordinal": 17, + "name": "git_sync", + "type_info": "Jsonb" + }, + { + "ordinal": 18, + "name": "default_app", + "type_info": "Varchar" + }, + { + "ordinal": 19, + "name": "auto_add", + "type_info": "Bool" + }, + { + "ordinal": 20, + "name": "automatic_billing", + "type_info": "Bool" + }, + { + "ordinal": 21, + "name": "default_scripts", + "type_info": "Jsonb" + }, + { + "ordinal": 22, + "name": "deploy_ui", + "type_info": "Jsonb" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + false, + true, + true, + true, + false, + true, + true, + true, + true, + true, + true, + true, + true, + false, + true, + false, + true, + true, + true, + true, + false, + true, + true + ] + }, + "hash": "1730f39fd1793d45fbb41b21389c61296a3ff7489ae12f52a19f9543173ac597" +} diff --git a/backend/.sqlx/query-17e3e2a3232865c33fa535b5d99455942e30f932c5b97f1e5b508128f39a288f.json b/backend/.sqlx/query-17e3e2a3232865c33fa535b5d99455942e30f932c5b97f1e5b508128f39a288f.json new file mode 100644 index 0000000000000..4000bbb9620d9 --- /dev/null +++ b/backend/.sqlx/query-17e3e2a3232865c33fa535b5d99455942e30f932c5b97f1e5b508128f39a288f.json @@ -0,0 +1,16 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE queue\n SET flow_status = JSONB_SET(\n JSONB_SET(flow_status, ARRAY['preprocessor_module'], $1), ARRAY['step'], $2)\n WHERE id = $3", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Jsonb", + "Jsonb", + "Uuid" + ] + }, + "nullable": [] + }, + "hash": "17e3e2a3232865c33fa535b5d99455942e30f932c5b97f1e5b508128f39a288f" +} diff --git a/backend/.sqlx/query-187a27d18f78f068319a0ec684f71a76c49dd09c5c74c2c777e35233c4f5a281.json b/backend/.sqlx/query-187a27d18f78f068319a0ec684f71a76c49dd09c5c74c2c777e35233c4f5a281.json new file mode 100644 index 0000000000000..a1dbb5aede92c --- /dev/null +++ b/backend/.sqlx/query-187a27d18f78f068319a0ec684f71a76c49dd09c5c74c2c777e35233c4f5a281.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT dependency_job FROM flow WHERE path = $1 AND workspace_id = $2", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "dependency_job", + "type_info": "Uuid" + } + ], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [ + true + ] + }, + "hash": "187a27d18f78f068319a0ec684f71a76c49dd09c5c74c2c777e35233c4f5a281" +} diff --git a/backend/.sqlx/query-188534f4b29f6461b1a6214d060f183c830b19a403ebb7b8be55a691675010c3.json b/backend/.sqlx/query-188534f4b29f6461b1a6214d060f183c830b19a403ebb7b8be55a691675010c3.json new file mode 100644 index 0000000000000..83139e3a860e0 --- /dev/null +++ b/backend/.sqlx/query-188534f4b29f6461b1a6214d060f183c830b19a403ebb7b8be55a691675010c3.json @@ -0,0 +1,106 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT\n -- slack_team_id, \n -- slack_name, \n -- slack_command_script, \n -- CASE WHEN slack_email = 'missing@email.xyz' THEN NULL ELSE slack_email END AS slack_email,\n auto_invite_domain IS NOT NULL AS \"auto_invite_enabled!\",\n CASE WHEN auto_invite_operator IS TRUE THEN 'operator' ELSE 'developer' END AS \"auto_invite_as!\", \n CASE WHEN auto_add IS TRUE THEN 'add' ELSE 'invite' END AS \"auto_invite_mode!\", \n webhook, \n deploy_to, \n error_handler, \n openai_resource_path, \n code_completion_enabled, \n error_handler_extra_args, \n error_handler_muted_on_cancel, \n large_file_storage, \n git_sync,\n default_app,\n default_scripts,\n workspace.name\n FROM workspace_settings\n LEFT JOIN workspace ON workspace.id = workspace_settings.workspace_id\n WHERE workspace_id = $1", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "auto_invite_enabled!", + "type_info": "Bool" + }, + { + "ordinal": 1, + "name": "auto_invite_as!", + "type_info": "Text" + }, + { + "ordinal": 2, + "name": "auto_invite_mode!", + "type_info": "Text" + }, + { + "ordinal": 3, + "name": "webhook", + "type_info": "Text" + }, + { + "ordinal": 4, + "name": "deploy_to", + "type_info": "Varchar" + }, + { + "ordinal": 5, + "name": "error_handler", + "type_info": "Varchar" + }, + { + "ordinal": 6, + "name": "openai_resource_path", + "type_info": "Varchar" + }, + { + "ordinal": 7, + "name": "code_completion_enabled", + "type_info": "Bool" + }, + { + "ordinal": 8, + "name": "error_handler_extra_args", + "type_info": "Json" + }, + { + "ordinal": 9, + "name": "error_handler_muted_on_cancel", + "type_info": "Bool" + }, + { + "ordinal": 10, + "name": "large_file_storage", + "type_info": "Jsonb" + }, + { + "ordinal": 11, + "name": "git_sync", + "type_info": "Jsonb" + }, + { + "ordinal": 12, + "name": "default_app", + "type_info": "Varchar" + }, + { + "ordinal": 13, + "name": "default_scripts", + "type_info": "Jsonb" + }, + { + "ordinal": 14, + "name": "name", + "type_info": "Varchar" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + null, + null, + null, + true, + true, + true, + true, + false, + true, + false, + true, + true, + true, + true, + false + ] + }, + "hash": "188534f4b29f6461b1a6214d060f183c830b19a403ebb7b8be55a691675010c3" +} diff --git a/backend/.sqlx/query-18ef1ffa6591dfac2ac77659d84b3d755f487e87f3f43ccc90fa7a6068c84b32.json b/backend/.sqlx/query-18ef1ffa6591dfac2ac77659d84b3d755f487e87f3f43ccc90fa7a6068c84b32.json new file mode 100644 index 0000000000000..c96dc85e4ac62 --- /dev/null +++ b/backend/.sqlx/query-18ef1ffa6591dfac2ac77659d84b3d755f487e87f3f43ccc90fa7a6068c84b32.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM capture WHERE workspace_id = $1", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [] + }, + "hash": "18ef1ffa6591dfac2ac77659d84b3d755f487e87f3f43ccc90fa7a6068c84b32" +} diff --git a/backend/.sqlx/query-19bc874a06658b549e13cfa080ac2133190ba448d6f7830c8f1f7c22e4d753b8.json b/backend/.sqlx/query-19bc874a06658b549e13cfa080ac2133190ba448d6f7830c8f1f7c22e4d753b8.json new file mode 100644 index 0000000000000..1fadd917d4214 --- /dev/null +++ b/backend/.sqlx/query-19bc874a06658b549e13cfa080ac2133190ba448d6f7830c8f1f7c22e4d753b8.json @@ -0,0 +1,20 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT value FROM global_settings WHERE name = 'slack'", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "value", + "type_info": "Jsonb" + } + ], + "parameters": { + "Left": [] + }, + "nullable": [ + false + ] + }, + "hash": "19bc874a06658b549e13cfa080ac2133190ba448d6f7830c8f1f7c22e4d753b8" +} diff --git a/backend/.sqlx/query-1a612eb0b64eddd2c5657ef73598c47886545796424f8612135b711e2b9ddb6c.json b/backend/.sqlx/query-1a612eb0b64eddd2c5657ef73598c47886545796424f8612135b711e2b9ddb6c.json new file mode 100644 index 0000000000000..e74be644c75a4 --- /dev/null +++ b/backend/.sqlx/query-1a612eb0b64eddd2c5657ef73598c47886545796424f8612135b711e2b9ddb6c.json @@ -0,0 +1,102 @@ +{ + "db_name": "PostgreSQL", + "query": "select tag, concurrency_key, concurrent_limit, concurrency_time_window_s, cache_ttl, language as \"language: ScriptLang\", dedicated_worker, priority, delete_after_use, timeout from script where hash = $1 AND workspace_id = $2", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "tag", + "type_info": "Varchar" + }, + { + "ordinal": 1, + "name": "concurrency_key", + "type_info": "Varchar" + }, + { + "ordinal": 2, + "name": "concurrent_limit", + "type_info": "Int4" + }, + { + "ordinal": 3, + "name": "concurrency_time_window_s", + "type_info": "Int4" + }, + { + "ordinal": 4, + "name": "cache_ttl", + "type_info": "Int4" + }, + { + "ordinal": 5, + "name": "language: ScriptLang", + "type_info": { + "Custom": { + "name": "script_lang", + "kind": { + "Enum": [ + "python3", + "deno", + "go", + "bash", + "postgresql", + "nativets", + "bun", + "mysql", + "bigquery", + "snowflake", + "graphql", + "powershell", + "mssql", + "php", + "bunnative", + "rust", + "ansible" + ] + } + } + } + }, + { + "ordinal": 6, + "name": "dedicated_worker", + "type_info": "Bool" + }, + { + "ordinal": 7, + "name": "priority", + "type_info": "Int2" + }, + { + "ordinal": 8, + "name": "delete_after_use", + "type_info": "Bool" + }, + { + "ordinal": 9, + "name": "timeout", + "type_info": "Int4" + } + ], + "parameters": { + "Left": [ + "Int8", + "Text" + ] + }, + "nullable": [ + true, + true, + true, + true, + true, + false, + true, + true, + true, + true + ] + }, + "hash": "1a612eb0b64eddd2c5657ef73598c47886545796424f8612135b711e2b9ddb6c" +} diff --git a/backend/.sqlx/query-1a8d9f265302f0f9175e02cc4b3f26fa0e9cbbaab89299e940eb4e94d8e62cf1.json b/backend/.sqlx/query-1a8d9f265302f0f9175e02cc4b3f26fa0e9cbbaab89299e940eb4e94d8e62cf1.json new file mode 100644 index 0000000000000..fd07a541e3125 --- /dev/null +++ b/backend/.sqlx/query-1a8d9f265302f0f9175e02cc4b3f26fa0e9cbbaab89299e940eb4e94d8e62cf1.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT count(path) FROM script WHERE path LIKE 'f/' || $1 || '%' AND archived IS false AND workspace_id = $2", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "count", + "type_info": "Int8" + } + ], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [ + null + ] + }, + "hash": "1a8d9f265302f0f9175e02cc4b3f26fa0e9cbbaab89299e940eb4e94d8e62cf1" +} diff --git a/backend/.sqlx/query-1af5ccc82048df95a791949e7b141861dbfd5c08daea615dde081e29f7459b9d.json b/backend/.sqlx/query-1af5ccc82048df95a791949e7b141861dbfd5c08daea615dde081e29f7459b9d.json new file mode 100644 index 0000000000000..9ab47f361b461 --- /dev/null +++ b/backend/.sqlx/query-1af5ccc82048df95a791949e7b141861dbfd5c08daea615dde081e29f7459b9d.json @@ -0,0 +1,24 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT id FROM queue WHERE schedule_path = $1 AND workspace_id = $2 AND id != $3 AND running = true", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "id", + "type_info": "Uuid" + } + ], + "parameters": { + "Left": [ + "Text", + "Text", + "Uuid" + ] + }, + "nullable": [ + false + ] + }, + "hash": "1af5ccc82048df95a791949e7b141861dbfd5c08daea615dde081e29f7459b9d" +} diff --git a/backend/.sqlx/query-1b31847d6187d6969deac5aa7b2feb169ef963449ac2d3ea06e1ed785f6d42e7.json b/backend/.sqlx/query-1b31847d6187d6969deac5aa7b2feb169ef963449ac2d3ea06e1ed785f6d42e7.json new file mode 100644 index 0000000000000..45b9819fae105 --- /dev/null +++ b/backend/.sqlx/query-1b31847d6187d6969deac5aa7b2feb169ef963449ac2d3ea06e1ed785f6d42e7.json @@ -0,0 +1,40 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT * from workspace_invite WHERE email = $1", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "workspace_id", + "type_info": "Varchar" + }, + { + "ordinal": 1, + "name": "email", + "type_info": "Varchar" + }, + { + "ordinal": 2, + "name": "is_admin", + "type_info": "Bool" + }, + { + "ordinal": 3, + "name": "operator", + "type_info": "Bool" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + false, + false, + false, + false + ] + }, + "hash": "1b31847d6187d6969deac5aa7b2feb169ef963449ac2d3ea06e1ed785f6d42e7" +} diff --git a/backend/.sqlx/query-1c1577b9963d907c4245a027fece57285ce64ac41a84681b32deb71e452334c1.json b/backend/.sqlx/query-1c1577b9963d907c4245a027fece57285ce64ac41a84681b32deb71e452334c1.json new file mode 100644 index 0000000000000..e1719ead57c67 --- /dev/null +++ b/backend/.sqlx/query-1c1577b9963d907c4245a027fece57285ce64ac41a84681b32deb71e452334c1.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT value FROM global_settings WHERE name = $1", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "value", + "type_info": "Jsonb" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + false + ] + }, + "hash": "1c1577b9963d907c4245a027fece57285ce64ac41a84681b32deb71e452334c1" +} diff --git a/backend/.sqlx/query-1c2254c15696d3dbc091488311676641ba3c6f1f1b5e006fc75427c9b231d323.json b/backend/.sqlx/query-1c2254c15696d3dbc091488311676641ba3c6f1f1b5e006fc75427c9b231d323.json new file mode 100644 index 0000000000000..110713fd0e562 --- /dev/null +++ b/backend/.sqlx/query-1c2254c15696d3dbc091488311676641ba3c6f1f1b5e006fc75427c9b231d323.json @@ -0,0 +1,16 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE completed_job SET script_path = REGEXP_REPLACE(script_path,'u/' || $2 || '/(.*)','u/' || $1 || '/\\1') WHERE script_path LIKE ('u/' || $2 || '/%') AND workspace_id = $3", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "1c2254c15696d3dbc091488311676641ba3c6f1f1b5e006fc75427c9b231d323" +} diff --git a/backend/.sqlx/query-1c28baaadd7d0c86a92bf9880a4ea33457bf8cff669e983431f1fd26ff275f83.json b/backend/.sqlx/query-1c28baaadd7d0c86a92bf9880a4ea33457bf8cff669e983431f1fd26ff275f83.json new file mode 100644 index 0000000000000..0cb39dcb9b927 --- /dev/null +++ b/backend/.sqlx/query-1c28baaadd7d0c86a92bf9880a4ea33457bf8cff669e983431f1fd26ff275f83.json @@ -0,0 +1,40 @@ +{ + "db_name": "PostgreSQL", + "query": "\n SELECT id, flow_status, suspend, script_path\n FROM queue\n WHERE id = $1\n ", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "id", + "type_info": "Uuid" + }, + { + "ordinal": 1, + "name": "flow_status", + "type_info": "Jsonb" + }, + { + "ordinal": 2, + "name": "suspend", + "type_info": "Int4" + }, + { + "ordinal": 3, + "name": "script_path", + "type_info": "Varchar" + } + ], + "parameters": { + "Left": [ + "Uuid" + ] + }, + "nullable": [ + false, + true, + false, + true + ] + }, + "hash": "1c28baaadd7d0c86a92bf9880a4ea33457bf8cff669e983431f1fd26ff275f83" +} diff --git a/backend/.sqlx/query-1c6a38f914b0d0c7d6fc6bb701d6f7727baaebcd67793f3c79b90be04df6708c.json b/backend/.sqlx/query-1c6a38f914b0d0c7d6fc6bb701d6f7727baaebcd67793f3c79b90be04df6708c.json new file mode 100644 index 0000000000000..9613b8f26400e --- /dev/null +++ b/backend/.sqlx/query-1c6a38f914b0d0c7d6fc6bb701d6f7727baaebcd67793f3c79b90be04df6708c.json @@ -0,0 +1,24 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE folder SET owners = array_append(owners::text[], $1) WHERE name = $2 AND workspace_id = $3 AND NOT $1 = ANY(owners) RETURNING name", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "name", + "type_info": "Varchar" + } + ], + "parameters": { + "Left": [ + "Text", + "Text", + "Text" + ] + }, + "nullable": [ + false + ] + }, + "hash": "1c6a38f914b0d0c7d6fc6bb701d6f7727baaebcd67793f3c79b90be04df6708c" +} diff --git a/backend/.sqlx/query-1d27895aa42ccbb542479b19baefd62790205b529ab0d8af36f18c470e8bb838.json b/backend/.sqlx/query-1d27895aa42ccbb542479b19baefd62790205b529ab0d8af36f18c470e8bb838.json new file mode 100644 index 0000000000000..be045d9e75f5d --- /dev/null +++ b/backend/.sqlx/query-1d27895aa42ccbb542479b19baefd62790205b529ab0d8af36f18c470e8bb838.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT restart_unless_cancelled FROM script WHERE hash = $1 AND workspace_id = $2", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "restart_unless_cancelled", + "type_info": "Bool" + } + ], + "parameters": { + "Left": [ + "Int8", + "Text" + ] + }, + "nullable": [ + true + ] + }, + "hash": "1d27895aa42ccbb542479b19baefd62790205b529ab0d8af36f18c470e8bb838" +} diff --git a/backend/.sqlx/query-1db82007445ff5f644bb607aa28f5747cb50d193475fff5fcfdde37d1bc74636.json b/backend/.sqlx/query-1db82007445ff5f644bb607aa28f5747cb50d193475fff5fcfdde37d1bc74636.json new file mode 100644 index 0000000000000..aaa1ae945b6c2 --- /dev/null +++ b/backend/.sqlx/query-1db82007445ff5f644bb607aa28f5747cb50d193475fff5fcfdde37d1bc74636.json @@ -0,0 +1,17 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE job_stats SET timestamps = array_append(timestamps, now()), timeseries_int = array_append(timeseries_int, $4) WHERE workspace_id = $1 AND job_id = $2 AND metric_id = $3", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Uuid", + "Text", + "Int4" + ] + }, + "nullable": [] + }, + "hash": "1db82007445ff5f644bb607aa28f5747cb50d193475fff5fcfdde37d1bc74636" +} diff --git a/backend/.sqlx/query-1e43e6040ac95b586d4d73999025f4a3e79c87fc1c5b43e787fd8e19c555b44b.json b/backend/.sqlx/query-1e43e6040ac95b586d4d73999025f4a3e79c87fc1c5b43e787fd8e19c555b44b.json new file mode 100644 index 0000000000000..b64ace475a728 --- /dev/null +++ b/backend/.sqlx/query-1e43e6040ac95b586d4d73999025f4a3e79c87fc1c5b43e787fd8e19c555b44b.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE queue\n SET last_ping = null\n WHERE id = $1", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Uuid" + ] + }, + "nullable": [] + }, + "hash": "1e43e6040ac95b586d4d73999025f4a3e79c87fc1c5b43e787fd8e19c555b44b" +} diff --git a/backend/.sqlx/query-1e659916501e668913e591eb7282d3881fa44468ed5330a501daa0d61c84cb71.json b/backend/.sqlx/query-1e659916501e668913e591eb7282d3881fa44468ed5330a501daa0d61c84cb71.json new file mode 100644 index 0000000000000..2cb0d351daab6 --- /dev/null +++ b/backend/.sqlx/query-1e659916501e668913e591eb7282d3881fa44468ed5330a501daa0d61c84cb71.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE workspace_settings SET automatic_billing = false WHERE workspace_id = $1", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [] + }, + "hash": "1e659916501e668913e591eb7282d3881fa44468ed5330a501daa0d61c84cb71" +} diff --git a/backend/.sqlx/query-1eaf8d677d520c7f2f303a731de6b6d939918e41ad0d1c748d80db3fd33cb9d3.json b/backend/.sqlx/query-1eaf8d677d520c7f2f303a731de6b6d939918e41ad0d1c748d80db3fd33cb9d3.json new file mode 100644 index 0000000000000..d7c226997e363 --- /dev/null +++ b/backend/.sqlx/query-1eaf8d677d520c7f2f303a731de6b6d939918e41ad0d1c748d80db3fd33cb9d3.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM app WHERE workspace_id = $1", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [] + }, + "hash": "1eaf8d677d520c7f2f303a731de6b6d939918e41ad0d1c748d80db3fd33cb9d3" +} diff --git a/backend/.sqlx/query-1f003a8a6a9402f5f7021b032281a9aa70a8f89777e95e0415877ffa90ecd87c.json b/backend/.sqlx/query-1f003a8a6a9402f5f7021b032281a9aa70a8f89777e95e0415877ffa90ecd87c.json new file mode 100644 index 0000000000000..a7f4cfa7b3c1e --- /dev/null +++ b/backend/.sqlx/query-1f003a8a6a9402f5f7021b032281a9aa70a8f89777e95e0415877ffa90ecd87c.json @@ -0,0 +1,16 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE resource SET extra_perms = extra_perms - ('u/' || $2) || jsonb_build_object(('u/' || $1), extra_perms->('u/' || $2)) WHERE extra_perms ? ('u/' || $2) AND workspace_id = $3", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "1f003a8a6a9402f5f7021b032281a9aa70a8f89777e95e0415877ffa90ecd87c" +} diff --git a/backend/.sqlx/query-1f93b533fa6fee0db4340445da3fac8e6773bc1db1f88cd60fd3c1e8c9781eb0.json b/backend/.sqlx/query-1f93b533fa6fee0db4340445da3fac8e6773bc1db1f88cd60fd3c1e8c9781eb0.json new file mode 100644 index 0000000000000..abb52bb3c0915 --- /dev/null +++ b/backend/.sqlx/query-1f93b533fa6fee0db4340445da3fac8e6773bc1db1f88cd60fd3c1e8c9781eb0.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE queue SET suspend = $1 WHERE id = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Int4", + "Uuid" + ] + }, + "nullable": [] + }, + "hash": "1f93b533fa6fee0db4340445da3fac8e6773bc1db1f88cd60fd3c1e8c9781eb0" +} diff --git a/backend/.sqlx/query-1f9e5d943e597ad9ed4e77088666b89d70db73de0b92f390a976fe3ce88dc4c5.json b/backend/.sqlx/query-1f9e5d943e597ad9ed4e77088666b89d70db73de0b92f390a976fe3ce88dc4c5.json new file mode 100644 index 0000000000000..46550295c2597 --- /dev/null +++ b/backend/.sqlx/query-1f9e5d943e597ad9ed4e77088666b89d70db73de0b92f390a976fe3ce88dc4c5.json @@ -0,0 +1,16 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE token SET scopes = array(select regexp_replace(unnest(scopes), 'run:([^/]+)/u/' || $2 || '/(.+)', 'run:\\1/u/' || $1 || '/\\2')) WHERE EXISTS (SELECT 1 FROM UNNEST(scopes) scope WHERE scope LIKE ('run:%/u/' || $2 || '/%')) AND workspace_id = $3", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "1f9e5d943e597ad9ed4e77088666b89d70db73de0b92f390a976fe3ce88dc4c5" +} diff --git a/backend/.sqlx/query-1ff36e74e19b824228397994cd9a10fc9be22a69e37b990da1319365c018fb14.json b/backend/.sqlx/query-1ff36e74e19b824228397994cd9a10fc9be22a69e37b990da1319365c018fb14.json new file mode 100644 index 0000000000000..17da65bf51459 --- /dev/null +++ b/backend/.sqlx/query-1ff36e74e19b824228397994cd9a10fc9be22a69e37b990da1319365c018fb14.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM parallel_monitor_lock WHERE parent_flow_id = $1 and job_id = $2 RETURNING last_ping", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "last_ping", + "type_info": "Timestamptz" + } + ], + "parameters": { + "Left": [ + "Uuid", + "Uuid" + ] + }, + "nullable": [ + true + ] + }, + "hash": "1ff36e74e19b824228397994cd9a10fc9be22a69e37b990da1319365c018fb14" +} diff --git a/backend/.sqlx/query-20597f46f2793b30f926bbd18e41f4860b7a7839879b932916ea20f2d98f43f9.json b/backend/.sqlx/query-20597f46f2793b30f926bbd18e41f4860b7a7839879b932916ea20f2d98f43f9.json new file mode 100644 index 0000000000000..4700ff349c6d1 --- /dev/null +++ b/backend/.sqlx/query-20597f46f2793b30f926bbd18e41f4860b7a7839879b932916ea20f2d98f43f9.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM resource WHERE workspace_id = $1", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [] + }, + "hash": "20597f46f2793b30f926bbd18e41f4860b7a7839879b932916ea20f2d98f43f9" +} diff --git a/backend/.sqlx/query-20e8a8343adc4a3a28a1c4908a13047cddafc4480cf028d3455fd17347cace73.json b/backend/.sqlx/query-20e8a8343adc4a3a28a1c4908a13047cddafc4480cf028d3455fd17347cace73.json new file mode 100644 index 0000000000000..c462ffcacf6f3 --- /dev/null +++ b/backend/.sqlx/query-20e8a8343adc4a3a28a1c4908a13047cddafc4480cf028d3455fd17347cace73.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT id FROM app WHERE path = $1 AND workspace_id = $2", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "id", + "type_info": "Int8" + } + ], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [ + false + ] + }, + "hash": "20e8a8343adc4a3a28a1c4908a13047cddafc4480cf028d3455fd17347cace73" +} diff --git a/backend/.sqlx/query-20fcdcd2674a52ee9bd8d1de518d6bce075f20bcd5d2328f183d8a59331f6bb1.json b/backend/.sqlx/query-20fcdcd2674a52ee9bd8d1de518d6bce075f20bcd5d2328f183d8a59331f6bb1.json new file mode 100644 index 0000000000000..824335990f82f --- /dev/null +++ b/backend/.sqlx/query-20fcdcd2674a52ee9bd8d1de518d6bce075f20bcd5d2328f183d8a59331f6bb1.json @@ -0,0 +1,18 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO resource\n (workspace_id, path, value, resource_type, created_by, edited_at)\n VALUES ($1, $2, $3, $4, $5, now()) ON CONFLICT (workspace_id, path) DO UPDATE SET value = $3, edited_at = now()", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Varchar", + "Jsonb", + "Varchar", + "Varchar" + ] + }, + "nullable": [] + }, + "hash": "20fcdcd2674a52ee9bd8d1de518d6bce075f20bcd5d2328f183d8a59331f6bb1" +} diff --git a/backend/.sqlx/query-2133e06ac9f7de884dbd36d51bca9a427bde64a9e278658bc0777e23abde4cd5.json b/backend/.sqlx/query-2133e06ac9f7de884dbd36d51bca9a427bde64a9e278658bc0777e23abde4cd5.json new file mode 100644 index 0000000000000..e2bad68513d1a --- /dev/null +++ b/backend/.sqlx/query-2133e06ac9f7de884dbd36d51bca9a427bde64a9e278658bc0777e23abde4cd5.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE resource_type SET workspace_id = $1 WHERE workspace_id = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Text" + ] + }, + "nullable": [] + }, + "hash": "2133e06ac9f7de884dbd36d51bca9a427bde64a9e278658bc0777e23abde4cd5" +} diff --git a/backend/.sqlx/query-215e0d320a304c8cb9ef12e7ea98a4eafb2456c123f9b6b96bb4ba2409166e5a.json b/backend/.sqlx/query-215e0d320a304c8cb9ef12e7ea98a4eafb2456c123f9b6b96bb4ba2409166e5a.json new file mode 100644 index 0000000000000..0889a223e6df3 --- /dev/null +++ b/backend/.sqlx/query-215e0d320a304c8cb9ef12e7ea98a4eafb2456c123f9b6b96bb4ba2409166e5a.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE queue SET running = false, started_at = null WHERE id = $1 AND canceled = false", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Uuid" + ] + }, + "nullable": [] + }, + "hash": "215e0d320a304c8cb9ef12e7ea98a4eafb2456c123f9b6b96bb4ba2409166e5a" +} diff --git a/backend/.sqlx/query-21cd7cbab7799baf5c381427d9b373c0bb144715eddfe54e3b01f6049d7966a2.json b/backend/.sqlx/query-21cd7cbab7799baf5c381427d9b373c0bb144715eddfe54e3b01f6049d7966a2.json new file mode 100644 index 0000000000000..2b438c849a6a5 --- /dev/null +++ b/backend/.sqlx/query-21cd7cbab7799baf5c381427d9b373c0bb144715eddfe54e3b01f6049d7966a2.json @@ -0,0 +1,34 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT workspace.id, workspace.name, usr.username\n FROM workspace, usr WHERE usr.workspace_id = workspace.id AND usr.email = $1 AND deleted = false", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "id", + "type_info": "Varchar" + }, + { + "ordinal": 1, + "name": "name", + "type_info": "Varchar" + }, + { + "ordinal": 2, + "name": "username", + "type_info": "Varchar" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + false, + false, + false + ] + }, + "hash": "21cd7cbab7799baf5c381427d9b373c0bb144715eddfe54e3b01f6049d7966a2" +} diff --git a/backend/.sqlx/query-22e14fc3bb5d8cf3006f0002e8522b8cc0b2fece43f03c0f025e7acefa0d4f32.json b/backend/.sqlx/query-22e14fc3bb5d8cf3006f0002e8522b8cc0b2fece43f03c0f025e7acefa0d4f32.json new file mode 100644 index 0000000000000..d421a5b416837 --- /dev/null +++ b/backend/.sqlx/query-22e14fc3bb5d8cf3006f0002e8522b8cc0b2fece43f03c0f025e7acefa0d4f32.json @@ -0,0 +1,29 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM favorite WHERE workspace_id = $1 AND usr = $2 AND path = $3 AND favorite_kind = $4", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Text", + "Text", + { + "Custom": { + "name": "favorite_kind", + "kind": { + "Enum": [ + "app", + "script", + "flow", + "raw_app" + ] + } + } + } + ] + }, + "nullable": [] + }, + "hash": "22e14fc3bb5d8cf3006f0002e8522b8cc0b2fece43f03c0f025e7acefa0d4f32" +} diff --git a/backend/.sqlx/query-22ff7c00b2d3e93ea9e147fc9a5bac1d55858f89039ae5baecdc9ceca668adab.json b/backend/.sqlx/query-22ff7c00b2d3e93ea9e147fc9a5bac1d55858f89039ae5baecdc9ceca668adab.json new file mode 100644 index 0000000000000..c1c3292d9a3b4 --- /dev/null +++ b/backend/.sqlx/query-22ff7c00b2d3e93ea9e147fc9a5bac1d55858f89039ae5baecdc9ceca668adab.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE email_to_igroup SET email = $1 WHERE email = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Text" + ] + }, + "nullable": [] + }, + "hash": "22ff7c00b2d3e93ea9e147fc9a5bac1d55858f89039ae5baecdc9ceca668adab" +} diff --git a/backend/.sqlx/query-230d58732a08164268ca10d248a93cced646632a76864b693ed2325d85b36c45.json b/backend/.sqlx/query-230d58732a08164268ca10d248a93cced646632a76864b693ed2325d85b36c45.json new file mode 100644 index 0000000000000..37d4e7d370faf --- /dev/null +++ b/backend/.sqlx/query-230d58732a08164268ca10d248a93cced646632a76864b693ed2325d85b36c45.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT canceled FROM queue WHERE id = $1", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "canceled", + "type_info": "Bool" + } + ], + "parameters": { + "Left": [ + "Uuid" + ] + }, + "nullable": [ + false + ] + }, + "hash": "230d58732a08164268ca10d248a93cced646632a76864b693ed2325d85b36c45" +} diff --git a/backend/.sqlx/query-234a278f20cb73f8ce10d2bfb67af58e5dd888581467c976e76f140b2c00f6d7.json b/backend/.sqlx/query-234a278f20cb73f8ce10d2bfb67af58e5dd888581467c976e76f140b2c00f6d7.json new file mode 100644 index 0000000000000..b62dba4bbec79 --- /dev/null +++ b/backend/.sqlx/query-234a278f20cb73f8ce10d2bfb67af58e5dd888581467c976e76f140b2c00f6d7.json @@ -0,0 +1,18 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO instance_group (name, summary, id, scim_display_name, external_id) VALUES ($1, $2, $3, $4, $5)", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Varchar", + "Varchar", + "Varchar", + "Varchar" + ] + }, + "nullable": [] + }, + "hash": "234a278f20cb73f8ce10d2bfb67af58e5dd888581467c976e76f140b2c00f6d7" +} diff --git a/backend/.sqlx/query-2352e293e172304a10ab3500b17848e8199b690b1834c382fa9d5c6ae163ec2c.json b/backend/.sqlx/query-2352e293e172304a10ab3500b17848e8199b690b1834c382fa9d5c6ae163ec2c.json new file mode 100644 index 0000000000000..4285bc879acc7 --- /dev/null +++ b/backend/.sqlx/query-2352e293e172304a10ab3500b17848e8199b690b1834c382fa9d5c6ae163ec2c.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE concurrency_key SET ended_at = now() WHERE job_id = $1", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Uuid" + ] + }, + "nullable": [] + }, + "hash": "2352e293e172304a10ab3500b17848e8199b690b1834c382fa9d5c6ae163ec2c" +} diff --git a/backend/.sqlx/query-23e100a803d89cdce24486adc6de0904a68a011157f50ec57e39afb582e48d64.json b/backend/.sqlx/query-23e100a803d89cdce24486adc6de0904a68a011157f50ec57e39afb582e48d64.json new file mode 100644 index 0000000000000..243a14febb95f --- /dev/null +++ b/backend/.sqlx/query-23e100a803d89cdce24486adc6de0904a68a011157f50ec57e39afb582e48d64.json @@ -0,0 +1,16 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE draft SET value = to_json(jsonb_set(to_jsonb(value), ARRAY['path'], to_jsonb(REGEXP_REPLACE(value->>'path','u/' || $2 || '/(.*)','u/' || $1 || '/\\1')))) WHERE value->>'path' LIKE ('u/' || $2 || '/%') AND workspace_id = $3", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "23e100a803d89cdce24486adc6de0904a68a011157f50ec57e39afb582e48d64" +} diff --git a/backend/.sqlx/query-25155e44372aecbb38d042bfc2772ed0c01a0bb974488530cd713b834f537f4a.json b/backend/.sqlx/query-25155e44372aecbb38d042bfc2772ed0c01a0bb974488530cd713b834f537f4a.json new file mode 100644 index 0000000000000..f459a72957288 --- /dev/null +++ b/backend/.sqlx/query-25155e44372aecbb38d042bfc2772ed0c01a0bb974488530cd713b834f537f4a.json @@ -0,0 +1,16 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO flow\n (workspace_id, path, summary, description, archived, extra_perms, dependency_job, draft_only, tag, ws_error_handler_muted, dedicated_worker, timeout, visible_to_runner_only, concurrency_key, versions, value, schema, edited_by, edited_at) \n SELECT workspace_id, REGEXP_REPLACE(path,'u/' || $2 || '/(.*)','u/' || $1 || '/\\1'), summary, description, archived, extra_perms, dependency_job, draft_only, tag, ws_error_handler_muted, dedicated_worker, timeout, visible_to_runner_only, concurrency_key, versions, value, schema, edited_by, edited_at\n FROM flow \n WHERE path LIKE ('u/' || $2 || '/%') AND workspace_id = $3", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "25155e44372aecbb38d042bfc2772ed0c01a0bb974488530cd713b834f537f4a" +} diff --git a/backend/.sqlx/query-26106be4d94c159cc8d9eb37a3b94927c5d3d43c18cdb5e98e979e761ed6ed0e.json b/backend/.sqlx/query-26106be4d94c159cc8d9eb37a3b94927c5d3d43c18cdb5e98e979e761ed6ed0e.json new file mode 100644 index 0000000000000..fa5e4bff4c5d5 --- /dev/null +++ b/backend/.sqlx/query-26106be4d94c159cc8d9eb37a3b94927c5d3d43c18cdb5e98e979e761ed6ed0e.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE queue\n SET flow_status = JSONB_SET(flow_status, ARRAY['step'], $1)\n WHERE id = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Jsonb", + "Uuid" + ] + }, + "nullable": [] + }, + "hash": "26106be4d94c159cc8d9eb37a3b94927c5d3d43c18cdb5e98e979e761ed6ed0e" +} diff --git a/backend/.sqlx/query-262c7b21e77a8d2943fefb9cabe1e60c7c3b4e3ce7ed6b2b3eb78dd99b7d8fcf.json b/backend/.sqlx/query-262c7b21e77a8d2943fefb9cabe1e60c7c3b4e3ce7ed6b2b3eb78dd99b7d8fcf.json new file mode 100644 index 0000000000000..0025d31dc84a8 --- /dev/null +++ b/backend/.sqlx/query-262c7b21e77a8d2943fefb9cabe1e60c7c3b4e3ce7ed6b2b3eb78dd99b7d8fcf.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE queue\n SET last_ping = now()\n WHERE id = $1 AND last_ping < now()", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Uuid" + ] + }, + "nullable": [] + }, + "hash": "262c7b21e77a8d2943fefb9cabe1e60c7c3b4e3ce7ed6b2b3eb78dd99b7d8fcf" +} diff --git a/backend/.sqlx/query-266741894b9a6ed650cf999b6e5b7c797424f8291517d3abf096fe45548a0273.json b/backend/.sqlx/query-266741894b9a6ed650cf999b6e5b7c797424f8291517d3abf096fe45548a0273.json new file mode 100644 index 0000000000000..41879871e17d3 --- /dev/null +++ b/backend/.sqlx/query-266741894b9a6ed650cf999b6e5b7c797424f8291517d3abf096fe45548a0273.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT git_sync FROM workspace_settings WHERE workspace_id = $1", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "git_sync", + "type_info": "Jsonb" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + true + ] + }, + "hash": "266741894b9a6ed650cf999b6e5b7c797424f8291517d3abf096fe45548a0273" +} diff --git a/backend/.sqlx/query-2685d46490744f3f98718ca79a9a8f7c14628e09483b90831d151f99f561a983.json b/backend/.sqlx/query-2685d46490744f3f98718ca79a9a8f7c14628e09483b90831d151f99f561a983.json new file mode 100644 index 0000000000000..7fc3c6d7ab740 --- /dev/null +++ b/backend/.sqlx/query-2685d46490744f3f98718ca79a9a8f7c14628e09483b90831d151f99f561a983.json @@ -0,0 +1,20 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT now()", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "now", + "type_info": "Timestamptz" + } + ], + "parameters": { + "Left": [] + }, + "nullable": [ + null + ] + }, + "hash": "2685d46490744f3f98718ca79a9a8f7c14628e09483b90831d151f99f561a983" +} diff --git a/backend/.sqlx/query-26b3e1f531909a2d841cfed49bb76be8aaa74ec3d32596c76a2041769478e61e.json b/backend/.sqlx/query-26b3e1f531909a2d841cfed49bb76be8aaa74ec3d32596c76a2041769478e61e.json new file mode 100644 index 0000000000000..64d01d5058a97 --- /dev/null +++ b/backend/.sqlx/query-26b3e1f531909a2d841cfed49bb76be8aaa74ec3d32596c76a2041769478e61e.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE workspace_settings SET deploy_ui = NULL WHERE workspace_id = $1", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [] + }, + "hash": "26b3e1f531909a2d841cfed49bb76be8aaa74ec3d32596c76a2041769478e61e" +} diff --git a/backend/.sqlx/query-26c1c56290d2ef5dae9d19796560c89f99fc4d18a9ea6bc9527563fd38b134b2.json b/backend/.sqlx/query-26c1c56290d2ef5dae9d19796560c89f99fc4d18a9ea6bc9527563fd38b134b2.json new file mode 100644 index 0000000000000..6ea84c309ee7c --- /dev/null +++ b/backend/.sqlx/query-26c1c56290d2ef5dae9d19796560c89f99fc4d18a9ea6bc9527563fd38b134b2.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE usr_to_group SET workspace_id = $1 WHERE workspace_id = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Text" + ] + }, + "nullable": [] + }, + "hash": "26c1c56290d2ef5dae9d19796560c89f99fc4d18a9ea6bc9527563fd38b134b2" +} diff --git a/backend/.sqlx/query-273d275be89516b135d7846d179c84ba0d684a620e9e5c0c87f82bdc9cd57dbe.json b/backend/.sqlx/query-273d275be89516b135d7846d179c84ba0d684a620e9e5c0c87f82bdc9cd57dbe.json new file mode 100644 index 0000000000000..98bdbe1ce5bdf --- /dev/null +++ b/backend/.sqlx/query-273d275be89516b135d7846d179c84ba0d684a620e9e5c0c87f82bdc9cd57dbe.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT id FROM queue WHERE id = ANY($1) AND schedule_path IS NULL", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "id", + "type_info": "Uuid" + } + ], + "parameters": { + "Left": [ + "UuidArray" + ] + }, + "nullable": [ + false + ] + }, + "hash": "273d275be89516b135d7846d179c84ba0d684a620e9e5c0c87f82bdc9cd57dbe" +} diff --git a/backend/.sqlx/query-28a878c59b6d52f42d315eabb34c96133b69542b01232295c26cc9e093c372f9.json b/backend/.sqlx/query-28a878c59b6d52f42d315eabb34c96133b69542b01232295c26cc9e093c372f9.json new file mode 100644 index 0000000000000..fcdf2ac38ddad --- /dev/null +++ b/backend/.sqlx/query-28a878c59b6d52f42d315eabb34c96133b69542b01232295c26cc9e093c372f9.json @@ -0,0 +1,29 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT coalesce(COUNT(*) FILTER(WHERE suspend = 0 AND running = false), 0) as \"database_length!\", coalesce(COUNT(*) FILTER(WHERE suspend > 0), 0) as \"suspended!\" FROM queue WHERE (workspace_id = $1 OR $2) AND scheduled_for <= now()", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "database_length!", + "type_info": "Int8" + }, + { + "ordinal": 1, + "name": "suspended!", + "type_info": "Int8" + } + ], + "parameters": { + "Left": [ + "Text", + "Bool" + ] + }, + "nullable": [ + null, + null + ] + }, + "hash": "28a878c59b6d52f42d315eabb34c96133b69542b01232295c26cc9e093c372f9" +} diff --git a/backend/.sqlx/query-28c042adef65c3055edc324fbbd2f267285d3566cbec58404983323d410ace27.json b/backend/.sqlx/query-28c042adef65c3055edc324fbbd2f267285d3566cbec58404983323d410ace27.json new file mode 100644 index 0000000000000..2f1578ed0c7f1 --- /dev/null +++ b/backend/.sqlx/query-28c042adef65c3055edc324fbbd2f267285d3566cbec58404983323d410ace27.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT super_admin FROM password WHERE email = $1", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "super_admin", + "type_info": "Bool" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + false + ] + }, + "hash": "28c042adef65c3055edc324fbbd2f267285d3566cbec58404983323d410ace27" +} diff --git a/backend/.sqlx/query-28c1afcce0446817543fc47dde29b1137b2550bac4a2b6e81c72c74a84bb84fb.json b/backend/.sqlx/query-28c1afcce0446817543fc47dde29b1137b2550bac4a2b6e81c72c74a84bb84fb.json new file mode 100644 index 0000000000000..df5d972d6f31d --- /dev/null +++ b/backend/.sqlx/query-28c1afcce0446817543fc47dde29b1137b2550bac4a2b6e81c72c74a84bb84fb.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE workspace_settings SET slack_command_script = $1 WHERE workspace_id = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Text" + ] + }, + "nullable": [] + }, + "hash": "28c1afcce0446817543fc47dde29b1137b2550bac4a2b6e81c72c74a84bb84fb" +} diff --git a/backend/.sqlx/query-293054a4d6a2b00228a5029a81c026e8891576c7e87cdab41d7fcc3afc32d583.json b/backend/.sqlx/query-293054a4d6a2b00228a5029a81c026e8891576c7e87cdab41d7fcc3afc32d583.json new file mode 100644 index 0000000000000..291b3f360181a --- /dev/null +++ b/backend/.sqlx/query-293054a4d6a2b00228a5029a81c026e8891576c7e87cdab41d7fcc3afc32d583.json @@ -0,0 +1,24 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT COUNT(*) FROM queue LEFT JOIN concurrency_key ON concurrency_key.job_id = queue.id\n WHERE key = $1 AND running = false AND canceled = false AND scheduled_for >= $2 AND scheduled_for < $3", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "count", + "type_info": "Int8" + } + ], + "parameters": { + "Left": [ + "Text", + "Timestamptz", + "Timestamptz" + ] + }, + "nullable": [ + null + ] + }, + "hash": "293054a4d6a2b00228a5029a81c026e8891576c7e87cdab41d7fcc3afc32d583" +} diff --git a/backend/.sqlx/query-29785ae8f0cd2dbadc9fd294dc2d6eb396df0d8c5ce23184d5a20a1bdd6f3993.json b/backend/.sqlx/query-29785ae8f0cd2dbadc9fd294dc2d6eb396df0d8c5ce23184d5a20a1bdd6f3993.json new file mode 100644 index 0000000000000..bb406e8a4d902 --- /dev/null +++ b/backend/.sqlx/query-29785ae8f0cd2dbadc9fd294dc2d6eb396df0d8c5ce23184d5a20a1bdd6f3993.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM usr_to_group WHERE usr = $1", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [] + }, + "hash": "29785ae8f0cd2dbadc9fd294dc2d6eb396df0d8c5ce23184d5a20a1bdd6f3993" +} diff --git a/backend/.sqlx/query-29fbc3a8c35845a997cd548ed417b9cc3c82d815d99b3d435adcfbb5a9246124.json b/backend/.sqlx/query-29fbc3a8c35845a997cd548ed417b9cc3c82d815d99b3d435adcfbb5a9246124.json new file mode 100644 index 0000000000000..72f3f1f46959d --- /dev/null +++ b/backend/.sqlx/query-29fbc3a8c35845a997cd548ed417b9cc3c82d815d99b3d435adcfbb5a9246124.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT set_config('session.folders_read', $1, true)", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "set_config", + "type_info": "Text" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + null + ] + }, + "hash": "29fbc3a8c35845a997cd548ed417b9cc3c82d815d99b3d435adcfbb5a9246124" +} diff --git a/backend/.sqlx/query-29fce7e56bb4a874b4c1e3a6454273203aab7344abd03df4d86e4c5f5b9a394a.json b/backend/.sqlx/query-29fce7e56bb4a874b4c1e3a6454273203aab7344abd03df4d86e4c5f5b9a394a.json new file mode 100644 index 0000000000000..a761d91385bc8 --- /dev/null +++ b/backend/.sqlx/query-29fce7e56bb4a874b4c1e3a6454273203aab7344abd03df4d86e4c5f5b9a394a.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT value FROM app_version WHERE id = $1", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "value", + "type_info": "Json" + } + ], + "parameters": { + "Left": [ + "Int8" + ] + }, + "nullable": [ + false + ] + }, + "hash": "29fce7e56bb4a874b4c1e3a6454273203aab7344abd03df4d86e4c5f5b9a394a" +} diff --git a/backend/.sqlx/query-2a3992b5e9abcfbb032d10e142d98efa969dae26a7242eb7ac12593ed5421ef3.json b/backend/.sqlx/query-2a3992b5e9abcfbb032d10e142d98efa969dae26a7242eb7ac12593ed5421ef3.json new file mode 100644 index 0000000000000..326e45bf2427c --- /dev/null +++ b/backend/.sqlx/query-2a3992b5e9abcfbb032d10e142d98efa969dae26a7242eb7ac12593ed5421ef3.json @@ -0,0 +1,24 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO app_version\n (app_id, value, created_by)\n VALUES ($1, $2::text::json, $3) RETURNING id", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "id", + "type_info": "Int8" + } + ], + "parameters": { + "Left": [ + "Int8", + "Text", + "Varchar" + ] + }, + "nullable": [ + false + ] + }, + "hash": "2a3992b5e9abcfbb032d10e142d98efa969dae26a7242eb7ac12593ed5421ef3" +} diff --git a/backend/.sqlx/query-2a4be8334db7d39f3d954193a8b0169cc4a4a07e081d2fa61d8764879d6a8ff5.json b/backend/.sqlx/query-2a4be8334db7d39f3d954193a8b0169cc4a4a07e081d2fa61d8764879d6a8ff5.json new file mode 100644 index 0000000000000..fcc59b373defc --- /dev/null +++ b/backend/.sqlx/query-2a4be8334db7d39f3d954193a8b0169cc4a4a07e081d2fa61d8764879d6a8ff5.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE script SET archived = true WHERE hash = $1 AND workspace_id = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Int8", + "Text" + ] + }, + "nullable": [] + }, + "hash": "2a4be8334db7d39f3d954193a8b0169cc4a4a07e081d2fa61d8764879d6a8ff5" +} diff --git a/backend/.sqlx/query-2bbcc383ed79afa3392af417b0cabb32d14a0a26dc36085fb2eaa62e769aca8e.json b/backend/.sqlx/query-2bbcc383ed79afa3392af417b0cabb32d14a0a26dc36085fb2eaa62e769aca8e.json new file mode 100644 index 0000000000000..f7f167db244bb --- /dev/null +++ b/backend/.sqlx/query-2bbcc383ed79afa3392af417b0cabb32d14a0a26dc36085fb2eaa62e769aca8e.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM concurrency_key WHERE key = $1", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [] + }, + "hash": "2bbcc383ed79afa3392af417b0cabb32d14a0a26dc36085fb2eaa62e769aca8e" +} diff --git a/backend/.sqlx/query-2be66f23536223549db9b50025932b6b1bad90b8fa47d97acb7d75aa3c37ef86.json b/backend/.sqlx/query-2be66f23536223549db9b50025932b6b1bad90b8fa47d97acb7d75aa3c37ef86.json new file mode 100644 index 0000000000000..204cd6df90d6d --- /dev/null +++ b/backend/.sqlx/query-2be66f23536223549db9b50025932b6b1bad90b8fa47d97acb7d75aa3c37ef86.json @@ -0,0 +1,21 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO variable\n (workspace_id, path, value, is_secret, description, account, is_oauth, expires_at)\n VALUES ($1, $2, $3, $4, $5, $6, $7, $8)", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Varchar", + "Varchar", + "Bool", + "Varchar", + "Int4", + "Bool", + "Timestamptz" + ] + }, + "nullable": [] + }, + "hash": "2be66f23536223549db9b50025932b6b1bad90b8fa47d97acb7d75aa3c37ef86" +} diff --git a/backend/.sqlx/query-2bfb918104568288bb57e64d1cf914c14cd493f96005017c299a805c48aef092.json b/backend/.sqlx/query-2bfb918104568288bb57e64d1cf914c14cd493f96005017c299a805c48aef092.json new file mode 100644 index 0000000000000..42d0fefc9f745 --- /dev/null +++ b/backend/.sqlx/query-2bfb918104568288bb57e64d1cf914c14cd493f96005017c299a805c48aef092.json @@ -0,0 +1,24 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT CASE WHEN pg_column_size(args) < 40000 OR $3 THEN args ELSE '\"WINDMILL_TOO_BIG\"'::jsonb END as args FROM completed_job WHERE id = $1 AND workspace_id = $2 UNION ALL SELECT CASE WHEN pg_column_size(args) < 40000 OR $3 THEN args ELSE '\"WINDMILL_TOO_BIG\"'::jsonb END as args FROM input WHERE id = $1 AND workspace_id = $2", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "args", + "type_info": "Jsonb" + } + ], + "parameters": { + "Left": [ + "Uuid", + "Text", + "Bool" + ] + }, + "nullable": [ + null + ] + }, + "hash": "2bfb918104568288bb57e64d1cf914c14cd493f96005017c299a805c48aef092" +} diff --git a/backend/.sqlx/query-2c0c9312b8b326a3759566059d01c79efee28920a1a5afe2df92043526c1de82.json b/backend/.sqlx/query-2c0c9312b8b326a3759566059d01c79efee28920a1a5afe2df92043526c1de82.json new file mode 100644 index 0000000000000..b68a435417244 --- /dev/null +++ b/backend/.sqlx/query-2c0c9312b8b326a3759566059d01c79efee28920a1a5afe2df92043526c1de82.json @@ -0,0 +1,20 @@ +{ + "db_name": "PostgreSQL", + "query": "\n INSERT INTO resume_job\n (id, resume_id, job, flow, value, approver, approved)\n VALUES ($1, $2, $3, $4, $5, $6, $7)\n ", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Uuid", + "Int4", + "Uuid", + "Uuid", + "Jsonb", + "Varchar", + "Bool" + ] + }, + "nullable": [] + }, + "hash": "2c0c9312b8b326a3759566059d01c79efee28920a1a5afe2df92043526c1de82" +} diff --git a/backend/.sqlx/query-2d4d4564108376ab310cb4a50fa2fa84fefbb3df8bb1bc9996c40a86d464b8a1.json b/backend/.sqlx/query-2d4d4564108376ab310cb4a50fa2fa84fefbb3df8bb1bc9996c40a86d464b8a1.json new file mode 100644 index 0000000000000..8c26257ef8fe6 --- /dev/null +++ b/backend/.sqlx/query-2d4d4564108376ab310cb4a50fa2fa84fefbb3df8bb1bc9996c40a86d464b8a1.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE workspace_settings SET automatic_billing = TRUE WHERE workspace_id = $1", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [] + }, + "hash": "2d4d4564108376ab310cb4a50fa2fa84fefbb3df8bb1bc9996c40a86d464b8a1" +} diff --git a/backend/.sqlx/query-2e1d1c59bfc53d58962251822c85cf9a26e3b2888702e5e9d5fc1b082901df09.json b/backend/.sqlx/query-2e1d1c59bfc53d58962251822c85cf9a26e3b2888702e5e9d5fc1b082901df09.json new file mode 100644 index 0000000000000..6bbccc1faee40 --- /dev/null +++ b/backend/.sqlx/query-2e1d1c59bfc53d58962251822c85cf9a26e3b2888702e5e9d5fc1b082901df09.json @@ -0,0 +1,16 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO workspace_invite\n (workspace_id, email, is_admin, operator)\n SELECT $1::text, email, false, $3 FROM password WHERE ($2::text = '*' OR email LIKE CONCAT('%', $2::text)) AND NOT EXISTS (\n SELECT 1 FROM usr WHERE workspace_id = $1::text AND email = password.email\n )\n ON CONFLICT DO NOTHING", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Text", + "Bool" + ] + }, + "nullable": [] + }, + "hash": "2e1d1c59bfc53d58962251822c85cf9a26e3b2888702e5e9d5fc1b082901df09" +} diff --git a/backend/.sqlx/query-2e9b3e718440f3c5269e9217a13076c565f3add98b6768b5476bd3afed11ea31.json b/backend/.sqlx/query-2e9b3e718440f3c5269e9217a13076c565f3add98b6768b5476bd3afed11ea31.json new file mode 100644 index 0000000000000..70c5674cdfafd --- /dev/null +++ b/backend/.sqlx/query-2e9b3e718440f3c5269e9217a13076c565f3add98b6768b5476bd3afed11ea31.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO usage (id, is_workspace, month_, usage)\n VALUES ($1, FALSE, EXTRACT(YEAR FROM current_date) * 12 + EXTRACT(MONTH FROM current_date), 1)\n ON CONFLICT (id, is_workspace, month_) DO UPDATE SET usage = usage.usage + 1 \n RETURNING usage.usage", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "usage", + "type_info": "Int4" + } + ], + "parameters": { + "Left": [ + "Varchar" + ] + }, + "nullable": [ + false + ] + }, + "hash": "2e9b3e718440f3c5269e9217a13076c565f3add98b6768b5476bd3afed11ea31" +} diff --git a/backend/.sqlx/query-2ee6d24b95cdda151585dcff19f8e7c931785fc21f7bbe9c3a82671943ced0ea.json b/backend/.sqlx/query-2ee6d24b95cdda151585dcff19f8e7c931785fc21f7bbe9c3a82671943ced0ea.json new file mode 100644 index 0000000000000..6acb31666c7d1 --- /dev/null +++ b/backend/.sqlx/query-2ee6d24b95cdda151585dcff19f8e7c931785fc21f7bbe9c3a82671943ced0ea.json @@ -0,0 +1,16 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE schedule SET enabled = false, error = $1 WHERE workspace_id = $2 AND path = $3", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "2ee6d24b95cdda151585dcff19f8e7c931785fc21f7bbe9c3a82671943ced0ea" +} diff --git a/backend/.sqlx/query-2f0de5417088df098a200a67197155e10e909bd02c91082341dd73bb1d6d62e1.json b/backend/.sqlx/query-2f0de5417088df098a200a67197155e10e909bd02c91082341dd73bb1d6d62e1.json new file mode 100644 index 0000000000000..85f3b49b2d854 --- /dev/null +++ b/backend/.sqlx/query-2f0de5417088df098a200a67197155e10e909bd02c91082341dd73bb1d6d62e1.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE usr_to_group SET usr = $1 WHERE usr = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Text" + ] + }, + "nullable": [] + }, + "hash": "2f0de5417088df098a200a67197155e10e909bd02c91082341dd73bb1d6d62e1" +} diff --git a/backend/.sqlx/query-2f998f9044412da6ad785f158ead132f219dd0f96003414d75ccb1953a3827ac.json b/backend/.sqlx/query-2f998f9044412da6ad785f158ead132f219dd0f96003414d75ccb1953a3827ac.json new file mode 100644 index 0000000000000..215c6510eec84 --- /dev/null +++ b/backend/.sqlx/query-2f998f9044412da6ad785f158ead132f219dd0f96003414d75ccb1953a3827ac.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO group_ SELECT $1, name, summary, extra_perms FROM group_ WHERE workspace_id = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Text" + ] + }, + "nullable": [] + }, + "hash": "2f998f9044412da6ad785f158ead132f219dd0f96003414d75ccb1953a3827ac" +} diff --git a/backend/.sqlx/query-2ff397ad0aeabdc15776025f75c2d1390ce5ac700b0bf71481d31747c8f2e870.json b/backend/.sqlx/query-2ff397ad0aeabdc15776025f75c2d1390ce5ac700b0bf71481d31747c8f2e870.json new file mode 100644 index 0000000000000..2bb714a885b5d --- /dev/null +++ b/backend/.sqlx/query-2ff397ad0aeabdc15776025f75c2d1390ce5ac700b0bf71481d31747c8f2e870.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE workspace_settings SET large_file_storage = NULL WHERE workspace_id = $1", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [] + }, + "hash": "2ff397ad0aeabdc15776025f75c2d1390ce5ac700b0bf71481d31747c8f2e870" +} diff --git a/backend/.sqlx/query-31a6e8a73fa568e28b8ca6e35a38b663e0b07d15a212b81883ad9c327d99a7c4.json b/backend/.sqlx/query-31a6e8a73fa568e28b8ca6e35a38b663e0b07d15a212b81883ad9c327d99a7c4.json new file mode 100644 index 0000000000000..4ba2dbb1b8ad9 --- /dev/null +++ b/backend/.sqlx/query-31a6e8a73fa568e28b8ca6e35a38b663e0b07d15a212b81883ad9c327d99a7c4.json @@ -0,0 +1,18 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO usr\n (workspace_id, email, username, is_admin, operator)\n VALUES ($1, $2, $3, $4, $5)", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Varchar", + "Varchar", + "Bool", + "Bool" + ] + }, + "nullable": [] + }, + "hash": "31a6e8a73fa568e28b8ca6e35a38b663e0b07d15a212b81883ad9c327d99a7c4" +} diff --git a/backend/.sqlx/query-31fe5d2965f7b25dea785f8be529a9b2c4c83c910fd7e2a08f4d95ae195ab3ed.json b/backend/.sqlx/query-31fe5d2965f7b25dea785f8be529a9b2c4c83c910fd7e2a08f4d95ae195ab3ed.json new file mode 100644 index 0000000000000..85c0412f3bc79 --- /dev/null +++ b/backend/.sqlx/query-31fe5d2965f7b25dea785f8be529a9b2c4c83c910fd7e2a08f4d95ae195ab3ed.json @@ -0,0 +1,24 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE schedule SET on_success = $1, on_success_extra_args = $2 WHERE workspace_id = $3 RETURNING path", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "path", + "type_info": "Varchar" + } + ], + "parameters": { + "Left": [ + "Varchar", + "Json", + "Text" + ] + }, + "nullable": [ + false + ] + }, + "hash": "31fe5d2965f7b25dea785f8be529a9b2c4c83c910fd7e2a08f4d95ae195ab3ed" +} diff --git a/backend/.sqlx/query-32ab08ef55f665b1944001ca6ad661940d59e211f60437437b5d53a6ee6a79a4.json b/backend/.sqlx/query-32ab08ef55f665b1944001ca6ad661940d59e211f60437437b5d53a6ee6a79a4.json new file mode 100644 index 0000000000000..31c24d6ea529a --- /dev/null +++ b/backend/.sqlx/query-32ab08ef55f665b1944001ca6ad661940d59e211f60437437b5d53a6ee6a79a4.json @@ -0,0 +1,16 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE token SET owner = ('u/' || $1) WHERE owner = ('u/' || $2) AND workspace_id = $3", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "32ab08ef55f665b1944001ca6ad661940d59e211f60437437b5d53a6ee6a79a4" +} diff --git a/backend/.sqlx/query-33c1793e55b1127d88d2509aadd0eb04e042463200f237b4c2cb176612fa16fe.json b/backend/.sqlx/query-33c1793e55b1127d88d2509aadd0eb04e042463200f237b4c2cb176612fa16fe.json new file mode 100644 index 0000000000000..8728e35a0c817 --- /dev/null +++ b/backend/.sqlx/query-33c1793e55b1127d88d2509aadd0eb04e042463200f237b4c2cb176612fa16fe.json @@ -0,0 +1,21 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO log_file (hostname, mode, worker_group, log_ts, file_path, ok_lines, err_lines, json_fmt) VALUES ($1, $2::text::LOG_MODE, $3, $4, $5, $6, $7, $8)", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Text", + "Varchar", + "Timestamp", + "Varchar", + "Int8", + "Int8", + "Bool" + ] + }, + "nullable": [] + }, + "hash": "33c1793e55b1127d88d2509aadd0eb04e042463200f237b4c2cb176612fa16fe" +} diff --git a/backend/.sqlx/query-33d69b3915ddfde40323ace65c14e39fa4bbc8b5dd50a34e165765eaea1f4966.json b/backend/.sqlx/query-33d69b3915ddfde40323ace65c14e39fa4bbc8b5dd50a34e165765eaea1f4966.json new file mode 100644 index 0000000000000..259095bfdc286 --- /dev/null +++ b/backend/.sqlx/query-33d69b3915ddfde40323ace65c14e39fa4bbc8b5dd50a34e165765eaea1f4966.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE workspace_settings SET webhook = NULL WHERE workspace_id = $1", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [] + }, + "hash": "33d69b3915ddfde40323ace65c14e39fa4bbc8b5dd50a34e165765eaea1f4966" +} diff --git a/backend/.sqlx/query-34ad8a2a5bd89b9b8e25847a7e5e94ef99e35a178ad6328c1bcde2a6d6f88cb5.json b/backend/.sqlx/query-34ad8a2a5bd89b9b8e25847a7e5e94ef99e35a178ad6328c1bcde2a6d6f88cb5.json new file mode 100644 index 0000000000000..43d0f596aec7d --- /dev/null +++ b/backend/.sqlx/query-34ad8a2a5bd89b9b8e25847a7e5e94ef99e35a178ad6328c1bcde2a6d6f88cb5.json @@ -0,0 +1,19 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO token\n (token, email, label, expiration, super_admin, scopes)\n VALUES ($1, $2, $3, $4, $5, $6)", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Varchar", + "Varchar", + "Timestamptz", + "Bool", + "TextArray" + ] + }, + "nullable": [] + }, + "hash": "34ad8a2a5bd89b9b8e25847a7e5e94ef99e35a178ad6328c1bcde2a6d6f88cb5" +} diff --git a/backend/.sqlx/query-34dee810f99ef41727ab3231a1746be80d60050f8cbaf779d391c4e08eb0c438.json b/backend/.sqlx/query-34dee810f99ef41727ab3231a1746be80d60050f8cbaf779d391c4e08eb0c438.json new file mode 100644 index 0000000000000..2b8c9373e6708 --- /dev/null +++ b/backend/.sqlx/query-34dee810f99ef41727ab3231a1746be80d60050f8cbaf779d391c4e08eb0c438.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE flow_version SET value = $1 WHERE id = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Jsonb", + "Int8" + ] + }, + "nullable": [] + }, + "hash": "34dee810f99ef41727ab3231a1746be80d60050f8cbaf779d391c4e08eb0c438" +} diff --git a/backend/.sqlx/query-354f88b23d20f92c6b6d5bdd8d6c69b08c6a86116cbfd0ecad8f112f7f49d8d1.json b/backend/.sqlx/query-354f88b23d20f92c6b6d5bdd8d6c69b08c6a86116cbfd0ecad8f112f7f49d8d1.json new file mode 100644 index 0000000000000..4b03b16262156 --- /dev/null +++ b/backend/.sqlx/query-354f88b23d20f92c6b6d5bdd8d6c69b08c6a86116cbfd0ecad8f112f7f49d8d1.json @@ -0,0 +1,26 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT SUBSTRING(name, 9) as \"name!\", (config.config->'min_alive_workers_alert_threshold')::INT as \"threshold!\" \n FROM config \n WHERE name LIKE 'worker__%' AND config->'min_alive_workers_alert_threshold' IS NOT NULL", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "name!", + "type_info": "Text" + }, + { + "ordinal": 1, + "name": "threshold!", + "type_info": "Int4" + } + ], + "parameters": { + "Left": [] + }, + "nullable": [ + null, + null + ] + }, + "hash": "354f88b23d20f92c6b6d5bdd8d6c69b08c6a86116cbfd0ecad8f112f7f49d8d1" +} diff --git a/backend/.sqlx/query-355dcb2cbebd13f0e3bdd4929b9e431b0e6d72716d1c4f9ab6af6adce5b5e4b3.json b/backend/.sqlx/query-355dcb2cbebd13f0e3bdd4929b9e431b0e6d72716d1c4f9ab6af6adce5b5e4b3.json new file mode 100644 index 0000000000000..130820e1ca3c0 --- /dev/null +++ b/backend/.sqlx/query-355dcb2cbebd13f0e3bdd4929b9e431b0e6d72716d1c4f9ab6af6adce5b5e4b3.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT EXISTS(SELECT 1 FROM resource_type WHERE name = $1 AND workspace_id = $2)", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "exists", + "type_info": "Bool" + } + ], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [ + null + ] + }, + "hash": "355dcb2cbebd13f0e3bdd4929b9e431b0e6d72716d1c4f9ab6af6adce5b5e4b3" +} diff --git a/backend/.sqlx/query-35e0f5488724e9bb7595748754bbdd7c5c8d643bbbfa9b39f5b3d5d4684eab3a.json b/backend/.sqlx/query-35e0f5488724e9bb7595748754bbdd7c5c8d643bbbfa9b39f5b3d5d4684eab3a.json new file mode 100644 index 0000000000000..147f7b1ba1791 --- /dev/null +++ b/backend/.sqlx/query-35e0f5488724e9bb7595748754bbdd7c5c8d643bbbfa9b39f5b3d5d4684eab3a.json @@ -0,0 +1,16 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE schedule SET script_path = REGEXP_REPLACE(script_path,'u/' || $2 || '/(.*)','u/' || $1 || '/\\1') WHERE script_path LIKE ('u/' || $2 || '/%') AND workspace_id = $3", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "35e0f5488724e9bb7595748754bbdd7c5c8d643bbbfa9b39f5b3d5d4684eab3a" +} diff --git a/backend/.sqlx/query-360d13c0a776e794063c99acad935a424f79017f3769e1150faa87cbb91367a8.json b/backend/.sqlx/query-360d13c0a776e794063c99acad935a424f79017f3769e1150faa87cbb91367a8.json new file mode 100644 index 0000000000000..c25a47f0751b3 --- /dev/null +++ b/backend/.sqlx/query-360d13c0a776e794063c99acad935a424f79017f3769e1150faa87cbb91367a8.json @@ -0,0 +1,28 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT value, created_at FROM metrics WHERE id = $1 ORDER BY created_at DESC LIMIT 1", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "value", + "type_info": "Jsonb" + }, + { + "ordinal": 1, + "name": "created_at", + "type_info": "Timestamptz" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + false, + false + ] + }, + "hash": "360d13c0a776e794063c99acad935a424f79017f3769e1150faa87cbb91367a8" +} diff --git a/backend/.sqlx/query-362419eb262c83d6a98a0200b116e831ada60399fe5f55a56d930cc69aff2675.json b/backend/.sqlx/query-362419eb262c83d6a98a0200b116e831ada60399fe5f55a56d930cc69aff2675.json new file mode 100644 index 0000000000000..183062aa6d13a --- /dev/null +++ b/backend/.sqlx/query-362419eb262c83d6a98a0200b116e831ada60399fe5f55a56d930cc69aff2675.json @@ -0,0 +1,29 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT s.hash as hash, dm.deployment_msg as deployment_msg \n FROM script s LEFT JOIN deployment_metadata dm ON s.hash = dm.script_hash\n WHERE s.workspace_id = $1 AND s.path = $2\n ORDER by created_at DESC", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "hash", + "type_info": "Int8" + }, + { + "ordinal": 1, + "name": "deployment_msg", + "type_info": "Text" + } + ], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [ + false, + true + ] + }, + "hash": "362419eb262c83d6a98a0200b116e831ada60399fe5f55a56d930cc69aff2675" +} diff --git a/backend/.sqlx/query-366609f7e7fbd73ea807128b931eff2f1ab763fa630c8531f590fed2110c03d9.json b/backend/.sqlx/query-366609f7e7fbd73ea807128b931eff2f1ab763fa630c8531f590fed2110c03d9.json new file mode 100644 index 0000000000000..e9ec98136bdd9 --- /dev/null +++ b/backend/.sqlx/query-366609f7e7fbd73ea807128b931eff2f1ab763fa630c8531f590fed2110c03d9.json @@ -0,0 +1,28 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO draft\n (workspace_id, path, value, typ)\n VALUES ($1, $2, $3::text::json, $4)\n ON CONFLICT (workspace_id, path, typ) DO UPDATE SET value = $3::text::json", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Varchar", + "Text", + { + "Custom": { + "name": "draft_type", + "kind": { + "Enum": [ + "script", + "flow", + "app" + ] + } + } + } + ] + }, + "nullable": [] + }, + "hash": "366609f7e7fbd73ea807128b931eff2f1ab763fa630c8531f590fed2110c03d9" +} diff --git a/backend/.sqlx/query-36918406736022663b0d33467e2140e86fe8fc8d1f20dc76b8ae70b9a3b5833e.json b/backend/.sqlx/query-36918406736022663b0d33467e2140e86fe8fc8d1f20dc76b8ae70b9a3b5833e.json new file mode 100644 index 0000000000000..1cd4a69e7bb89 --- /dev/null +++ b/backend/.sqlx/query-36918406736022663b0d33467e2140e86fe8fc8d1f20dc76b8ae70b9a3b5833e.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE workspace_settings SET default_app = NULL WHERE workspace_id = $1", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [] + }, + "hash": "36918406736022663b0d33467e2140e86fe8fc8d1f20dc76b8ae70b9a3b5833e" +} diff --git a/backend/.sqlx/query-37164e9a4bbb3fd283dc604be8dbf2ca7a1cd830d63f27c87266be2111edbdc4.json b/backend/.sqlx/query-37164e9a4bbb3fd283dc604be8dbf2ca7a1cd830d63f27c87266be2111edbdc4.json new file mode 100644 index 0000000000000..856c461685bd5 --- /dev/null +++ b/backend/.sqlx/query-37164e9a4bbb3fd283dc604be8dbf2ca7a1cd830d63f27c87266be2111edbdc4.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM job_logs WHERE job_id = $1", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Uuid" + ] + }, + "nullable": [] + }, + "hash": "37164e9a4bbb3fd283dc604be8dbf2ca7a1cd830d63f27c87266be2111edbdc4" +} diff --git a/backend/.sqlx/query-372b0a81d37b6874727c1aa4dc1bec17f9475a5f446e8987ab7359f55b96436e.json b/backend/.sqlx/query-372b0a81d37b6874727c1aa4dc1bec17f9475a5f446e8987ab7359f55b96436e.json new file mode 100644 index 0000000000000..3ca0c64a3e300 --- /dev/null +++ b/backend/.sqlx/query-372b0a81d37b6874727c1aa4dc1bec17f9475a5f446e8987ab7359f55b96436e.json @@ -0,0 +1,16 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE flow SET value = $1 WHERE path = $2 AND workspace_id = $3", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Jsonb", + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "372b0a81d37b6874727c1aa4dc1bec17f9475a5f446e8987ab7359f55b96436e" +} diff --git a/backend/.sqlx/query-37643190d597726871e0d92f2cbe80052d20327c5e12bc27de91886818d081e0.json b/backend/.sqlx/query-37643190d597726871e0d92f2cbe80052d20327c5e12bc27de91886818d081e0.json new file mode 100644 index 0000000000000..236e7451d3497 --- /dev/null +++ b/backend/.sqlx/query-37643190d597726871e0d92f2cbe80052d20327c5e12bc27de91886818d081e0.json @@ -0,0 +1,24 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT group_ FROM usr_to_group where usr = $1 AND workspace_id = $2 UNION ALL SELECT igroup FROM email_to_igroup WHERE email = $3", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "group_", + "type_info": "Varchar" + } + ], + "parameters": { + "Left": [ + "Text", + "Text", + "Text" + ] + }, + "nullable": [ + null + ] + }, + "hash": "37643190d597726871e0d92f2cbe80052d20327c5e12bc27de91886818d081e0" +} diff --git a/backend/.sqlx/query-383b8adaadc6e23952ca8942fe7dbaa7c74ce0cfa1b945b7514e19a70f7a6f1c.json b/backend/.sqlx/query-383b8adaadc6e23952ca8942fe7dbaa7c74ce0cfa1b945b7514e19a70f7a6f1c.json new file mode 100644 index 0000000000000..db96fe600990b --- /dev/null +++ b/backend/.sqlx/query-383b8adaadc6e23952ca8942fe7dbaa7c74ce0cfa1b945b7514e19a70f7a6f1c.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO instance_group (name, summary) VALUES ($1, $2) ON CONFLICT DO NOTHING", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Varchar" + ] + }, + "nullable": [] + }, + "hash": "383b8adaadc6e23952ca8942fe7dbaa7c74ce0cfa1b945b7514e19a70f7a6f1c" +} diff --git a/backend/.sqlx/query-38846b12201990f8e776b256ac419b24ffec46fa02d710544a3074745be9455f.json b/backend/.sqlx/query-38846b12201990f8e776b256ac419b24ffec46fa02d710544a3074745be9455f.json new file mode 100644 index 0000000000000..f94429e4f9e61 --- /dev/null +++ b/backend/.sqlx/query-38846b12201990f8e776b256ac419b24ffec46fa02d710544a3074745be9455f.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE queue SET suspend = 0 WHERE parent_job = $1 AND suspend = $2 AND (flow_status->'step')::int = 0", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Uuid", + "Int4" + ] + }, + "nullable": [] + }, + "hash": "38846b12201990f8e776b256ac419b24ffec46fa02d710544a3074745be9455f" +} diff --git a/backend/.sqlx/query-388b3705f641621b0c2f4496e36cb7aa5a75b7e40fa312eff6590e54b02635a2.json b/backend/.sqlx/query-388b3705f641621b0c2f4496e36cb7aa5a75b7e40fa312eff6590e54b02635a2.json new file mode 100644 index 0000000000000..48f8d1e10cfbb --- /dev/null +++ b/backend/.sqlx/query-388b3705f641621b0c2f4496e36cb7aa5a75b7e40fa312eff6590e54b02635a2.json @@ -0,0 +1,20 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT EXISTS(SELECT 1 FROM metrics WHERE id = 'license_key_renewal' AND created_at > NOW() - INTERVAL '24 hours')", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "exists", + "type_info": "Bool" + } + ], + "parameters": { + "Left": [] + }, + "nullable": [ + null + ] + }, + "hash": "388b3705f641621b0c2f4496e36cb7aa5a75b7e40fa312eff6590e54b02635a2" +} diff --git a/backend/.sqlx/query-388d6fd335a3f8a405b2d465892cf21a68d4b50ace25ef88c4cdf5b347c3d5eb.json b/backend/.sqlx/query-388d6fd335a3f8a405b2d465892cf21a68d4b50ace25ef88c4cdf5b347c3d5eb.json new file mode 100644 index 0000000000000..5965bc591a1e3 --- /dev/null +++ b/backend/.sqlx/query-388d6fd335a3f8a405b2d465892cf21a68d4b50ace25ef88c4cdf5b347c3d5eb.json @@ -0,0 +1,25 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT EXISTS(SELECT 1 FROM group_ WHERE (group_.extra_perms ->> CONCAT('u/', $1::text))::boolean AND name = $2 AND workspace_id = $4) OR exists(\n SELECT 1 FROM group_ g, jsonb_each_text(g.extra_perms) f \n WHERE $2 = g.name AND $4 = g.workspace_id AND SPLIT_PART(key, '/', 1) = 'g' AND key = ANY($3::text[])\n AND value::boolean)", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "?column?", + "type_info": "Bool" + } + ], + "parameters": { + "Left": [ + "Text", + "Text", + "TextArray", + "Text" + ] + }, + "nullable": [ + null + ] + }, + "hash": "388d6fd335a3f8a405b2d465892cf21a68d4b50ace25ef88c4cdf5b347c3d5eb" +} diff --git a/backend/.sqlx/query-38a3fbc28e827d08a928d441274c5eb28780abc8adffcc7175f6c8d4ff8849ca.json b/backend/.sqlx/query-38a3fbc28e827d08a928d441274c5eb28780abc8adffcc7175f6c8d4ff8849ca.json new file mode 100644 index 0000000000000..a3929e5e4be65 --- /dev/null +++ b/backend/.sqlx/query-38a3fbc28e827d08a928d441274c5eb28780abc8adffcc7175f6c8d4ff8849ca.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE concurrency_counter SET job_uuids = job_uuids - $2 WHERE concurrency_id = $1 RETURNING (SELECT COUNT(*) FROM jsonb_object_keys(job_uuids))", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "count", + "type_info": "Int8" + } + ], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [ + null + ] + }, + "hash": "38a3fbc28e827d08a928d441274c5eb28780abc8adffcc7175f6c8d4ff8849ca" +} diff --git a/backend/.sqlx/query-39154d865946cb99219ae0139dcc758523610d1260ff59aace18abaf4869edd3.json b/backend/.sqlx/query-39154d865946cb99219ae0139dcc758523610d1260ff59aace18abaf4869edd3.json new file mode 100644 index 0000000000000..0d58c996c38db --- /dev/null +++ b/backend/.sqlx/query-39154d865946cb99219ae0139dcc758523610d1260ff59aace18abaf4869edd3.json @@ -0,0 +1,12 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM email_to_igroup", + "describe": { + "columns": [], + "parameters": { + "Left": [] + }, + "nullable": [] + }, + "hash": "39154d865946cb99219ae0139dcc758523610d1260ff59aace18abaf4869edd3" +} diff --git a/backend/.sqlx/query-399a8337a2488fa2ce3da2ef3281a34f8f96ee0d833c2fe3c22a0aa43e306f09.json b/backend/.sqlx/query-399a8337a2488fa2ce3da2ef3281a34f8f96ee0d833c2fe3c22a0aa43e306f09.json new file mode 100644 index 0000000000000..51198fb924807 --- /dev/null +++ b/backend/.sqlx/query-399a8337a2488fa2ce3da2ef3281a34f8f96ee0d833c2fe3c22a0aa43e306f09.json @@ -0,0 +1,20 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM pip_resolution_cache WHERE expiration <= now() RETURNING hash", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "hash", + "type_info": "Varchar" + } + ], + "parameters": { + "Left": [] + }, + "nullable": [ + false + ] + }, + "hash": "399a8337a2488fa2ce3da2ef3281a34f8f96ee0d833c2fe3c22a0aa43e306f09" +} diff --git a/backend/.sqlx/query-39a72ff9bd2ab9bdf59a73ea32821645ce8b1bbcaccee13fb4f2c0eed28a6096.json b/backend/.sqlx/query-39a72ff9bd2ab9bdf59a73ea32821645ce8b1bbcaccee13fb4f2c0eed28a6096.json new file mode 100644 index 0000000000000..60bb866c1c959 --- /dev/null +++ b/backend/.sqlx/query-39a72ff9bd2ab9bdf59a73ea32821645ce8b1bbcaccee13fb4f2c0eed28a6096.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM draft WHERE path = $1 AND workspace_id = $2 AND typ = 'app'", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "39a72ff9bd2ab9bdf59a73ea32821645ce8b1bbcaccee13fb4f2c0eed28a6096" +} diff --git a/backend/.sqlx/query-39bae7dff750565183ac3893b51a8846d7db2f130a6795b54ef94acc232dec8b.json b/backend/.sqlx/query-39bae7dff750565183ac3893b51a8846d7db2f130a6795b54ef94acc232dec8b.json new file mode 100644 index 0000000000000..f342597ad43e5 --- /dev/null +++ b/backend/.sqlx/query-39bae7dff750565183ac3893b51a8846d7db2f130a6795b54ef94acc232dec8b.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT EXISTS(SELECT 1 FROM resource_type WHERE name = $1 AND (workspace_id = $2 OR workspace_id = 'admins'))", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "exists", + "type_info": "Bool" + } + ], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [ + null + ] + }, + "hash": "39bae7dff750565183ac3893b51a8846d7db2f130a6795b54ef94acc232dec8b" +} diff --git a/backend/.sqlx/query-39f1b99319f48acb95fd4247f70baaf7a38062aa8b4f70fac10215edbbd2d41c.json b/backend/.sqlx/query-39f1b99319f48acb95fd4247f70baaf7a38062aa8b4f70fac10215edbbd2d41c.json new file mode 100644 index 0000000000000..1718d6c0f4637 --- /dev/null +++ b/backend/.sqlx/query-39f1b99319f48acb95fd4247f70baaf7a38062aa8b4f70fac10215edbbd2d41c.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM schedule WHERE workspace_id = $1", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [] + }, + "hash": "39f1b99319f48acb95fd4247f70baaf7a38062aa8b4f70fac10215edbbd2d41c" +} diff --git a/backend/.sqlx/query-3a534b4fc36171efaa7c647f48320b59bbc414cfb92e960c174dd63fc180e187.json b/backend/.sqlx/query-3a534b4fc36171efaa7c647f48320b59bbc414cfb92e960c174dd63fc180e187.json new file mode 100644 index 0000000000000..11d343ba4d337 --- /dev/null +++ b/backend/.sqlx/query-3a534b4fc36171efaa7c647f48320b59bbc414cfb92e960c174dd63fc180e187.json @@ -0,0 +1,29 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT tag, dedicated_worker from flow WHERE path = $1 and workspace_id = $2", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "tag", + "type_info": "Varchar" + }, + { + "ordinal": 1, + "name": "dedicated_worker", + "type_info": "Bool" + } + ], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [ + true, + true + ] + }, + "hash": "3a534b4fc36171efaa7c647f48320b59bbc414cfb92e960c174dd63fc180e187" +} diff --git a/backend/.sqlx/query-3a637063e1d256639b0e900606b641ab71cc1b5049a104e0699e81484a61ae63.json b/backend/.sqlx/query-3a637063e1d256639b0e900606b641ab71cc1b5049a104e0699e81484a61ae63.json new file mode 100644 index 0000000000000..ee0079608faa2 --- /dev/null +++ b/backend/.sqlx/query-3a637063e1d256639b0e900606b641ab71cc1b5049a104e0699e81484a61ae63.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT key FROM workspace_key WHERE workspace_id = $1", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "key", + "type_info": "Varchar" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + false + ] + }, + "hash": "3a637063e1d256639b0e900606b641ab71cc1b5049a104e0699e81484a61ae63" +} diff --git a/backend/.sqlx/query-3b4b62161a5197f37850c8c4197ea026d8e94a3cb9cdcfa5fde19343acf81ecc.json b/backend/.sqlx/query-3b4b62161a5197f37850c8c4197ea026d8e94a3cb9cdcfa5fde19343acf81ecc.json new file mode 100644 index 0000000000000..367aae4a3161f --- /dev/null +++ b/backend/.sqlx/query-3b4b62161a5197f37850c8c4197ea026d8e94a3cb9cdcfa5fde19343acf81ecc.json @@ -0,0 +1,17 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE queue SET flow_status = JSONB_SET(flow_status, ARRAY['modules', $1::TEXT, 'flow_jobs_success', $3::TEXT], $4) WHERE id = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Uuid", + "Text", + "Jsonb" + ] + }, + "nullable": [] + }, + "hash": "3b4b62161a5197f37850c8c4197ea026d8e94a3cb9cdcfa5fde19343acf81ecc" +} diff --git a/backend/.sqlx/query-3b746f73abbaea3570b9c79af21d4d0f60232098d69b71c21fd3da985f7a5905.json b/backend/.sqlx/query-3b746f73abbaea3570b9c79af21d4d0f60232098d69b71c21fd3da985f7a5905.json new file mode 100644 index 0000000000000..3f0749f7bfa3e --- /dev/null +++ b/backend/.sqlx/query-3b746f73abbaea3570b9c79af21d4d0f60232098d69b71c21fd3da985f7a5905.json @@ -0,0 +1,54 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT label, concat(substring(token for 10)) as token_prefix, expiration, created_at, last_used_at, scopes FROM token WHERE email = $1\n ORDER BY created_at DESC LIMIT $2 OFFSET $3", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "label", + "type_info": "Varchar" + }, + { + "ordinal": 1, + "name": "token_prefix", + "type_info": "Text" + }, + { + "ordinal": 2, + "name": "expiration", + "type_info": "Timestamptz" + }, + { + "ordinal": 3, + "name": "created_at", + "type_info": "Timestamptz" + }, + { + "ordinal": 4, + "name": "last_used_at", + "type_info": "Timestamptz" + }, + { + "ordinal": 5, + "name": "scopes", + "type_info": "TextArray" + } + ], + "parameters": { + "Left": [ + "Text", + "Int8", + "Int8" + ] + }, + "nullable": [ + true, + null, + true, + false, + false, + true + ] + }, + "hash": "3b746f73abbaea3570b9c79af21d4d0f60232098d69b71c21fd3da985f7a5905" +} diff --git a/backend/.sqlx/query-3baafb31f22d4de32bd11185f96939c0e5def7bbee4a7f25ca208a667d0dc612.json b/backend/.sqlx/query-3baafb31f22d4de32bd11185f96939c0e5def7bbee4a7f25ca208a667d0dc612.json new file mode 100644 index 0000000000000..4cd30a2201fe9 --- /dev/null +++ b/backend/.sqlx/query-3baafb31f22d4de32bd11185f96939c0e5def7bbee4a7f25ca208a667d0dc612.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT EXISTS(SELECT 1 FROM usr WHERE username = $1 and email != $2 UNION SELECT 1 FROM password WHERE username = $1 UNION SELECT 1 FROM pending_user WHERE username = $1)", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "exists", + "type_info": "Bool" + } + ], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [ + null + ] + }, + "hash": "3baafb31f22d4de32bd11185f96939c0e5def7bbee4a7f25ca208a667d0dc612" +} diff --git a/backend/.sqlx/query-3cd8dd59567bcd1d2b6babfbb995be97cd20a0f299a7fd8fa163dc3af388603d.json b/backend/.sqlx/query-3cd8dd59567bcd1d2b6babfbb995be97cd20a0f299a7fd8fa163dc3af388603d.json new file mode 100644 index 0000000000000..e6df52c0df802 --- /dev/null +++ b/backend/.sqlx/query-3cd8dd59567bcd1d2b6babfbb995be97cd20a0f299a7fd8fa163dc3af388603d.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM folder WHERE workspace_id = $1", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [] + }, + "hash": "3cd8dd59567bcd1d2b6babfbb995be97cd20a0f299a7fd8fa163dc3af388603d" +} diff --git a/backend/.sqlx/query-3d04f6c1a77c9a0bcc999913d6df253b58b82c09fe23a6ab99b5af78d4604732.json b/backend/.sqlx/query-3d04f6c1a77c9a0bcc999913d6df253b58b82c09fe23a6ab99b5af78d4604732.json new file mode 100644 index 0000000000000..8b563979a91d1 --- /dev/null +++ b/backend/.sqlx/query-3d04f6c1a77c9a0bcc999913d6df253b58b82c09fe23a6ab99b5af78d4604732.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM draft WHERE path = $1 AND workspace_id = $2 AND typ = 'script'", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "3d04f6c1a77c9a0bcc999913d6df253b58b82c09fe23a6ab99b5af78d4604732" +} diff --git a/backend/.sqlx/query-3d363466d79075df3f74f946eff43ca89faefca3bcdf2c533425ca3868b0369a.json b/backend/.sqlx/query-3d363466d79075df3f74f946eff43ca89faefca3bcdf2c533425ca3868b0369a.json new file mode 100644 index 0000000000000..e2db39e4c3d74 --- /dev/null +++ b/backend/.sqlx/query-3d363466d79075df3f74f946eff43ca89faefca3bcdf2c533425ca3868b0369a.json @@ -0,0 +1,65 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT * FROM usr where username = $1 AND workspace_id = $2", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "workspace_id", + "type_info": "Varchar" + }, + { + "ordinal": 1, + "name": "username", + "type_info": "Varchar" + }, + { + "ordinal": 2, + "name": "email", + "type_info": "Varchar" + }, + { + "ordinal": 3, + "name": "is_admin", + "type_info": "Bool" + }, + { + "ordinal": 4, + "name": "created_at", + "type_info": "Timestamptz" + }, + { + "ordinal": 5, + "name": "operator", + "type_info": "Bool" + }, + { + "ordinal": 6, + "name": "disabled", + "type_info": "Bool" + }, + { + "ordinal": 7, + "name": "role", + "type_info": "Varchar" + } + ], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [ + false, + false, + false, + false, + false, + false, + false, + true + ] + }, + "hash": "3d363466d79075df3f74f946eff43ca89faefca3bcdf2c533425ca3868b0369a" +} diff --git a/backend/.sqlx/query-3d60b4f2cbedb61affeff94fd77b7c86493c30a4d3d648d0660a3281824156b9.json b/backend/.sqlx/query-3d60b4f2cbedb61affeff94fd77b7c86493c30a4d3d648d0660a3281824156b9.json new file mode 100644 index 0000000000000..4c17792a7b3e5 --- /dev/null +++ b/backend/.sqlx/query-3d60b4f2cbedb61affeff94fd77b7c86493c30a4d3d648d0660a3281824156b9.json @@ -0,0 +1,20 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT COUNT(*) FROM global_settings WHERE name = 'base_url'", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "count", + "type_info": "Int8" + } + ], + "parameters": { + "Left": [] + }, + "nullable": [ + null + ] + }, + "hash": "3d60b4f2cbedb61affeff94fd77b7c86493c30a4d3d648d0660a3281824156b9" +} diff --git a/backend/.sqlx/query-3da0cf7edc975cb365c36d167df34d9d30d3e86f231bb9d1d3cc3bad6a50dfff.json b/backend/.sqlx/query-3da0cf7edc975cb365c36d167df34d9d30d3e86f231bb9d1d3cc3bad6a50dfff.json new file mode 100644 index 0000000000000..df93a90efcbe0 --- /dev/null +++ b/backend/.sqlx/query-3da0cf7edc975cb365c36d167df34d9d30d3e86f231bb9d1d3cc3bad6a50dfff.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "\n SELECT parent_job\n FROM queue\n WHERE id = $1 AND workspace_id = $2\n UNION ALL\n SELECT parent_job\n FROM completed_job\n WHERE id = $1 AND workspace_id = $2\n ", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "parent_job", + "type_info": "Uuid" + } + ], + "parameters": { + "Left": [ + "Uuid", + "Text" + ] + }, + "nullable": [ + null + ] + }, + "hash": "3da0cf7edc975cb365c36d167df34d9d30d3e86f231bb9d1d3cc3bad6a50dfff" +} diff --git a/backend/.sqlx/query-3da14e6c89a33871e4bd40524e2fd9222aa707ee76de6ce348337c3e403eb955.json b/backend/.sqlx/query-3da14e6c89a33871e4bd40524e2fd9222aa707ee76de6ce348337c3e403eb955.json new file mode 100644 index 0000000000000..3c2cee1de4084 --- /dev/null +++ b/backend/.sqlx/query-3da14e6c89a33871e4bd40524e2fd9222aa707ee76de6ce348337c3e403eb955.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM usr WHERE email = $1 AND workspace_id = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "3da14e6c89a33871e4bd40524e2fd9222aa707ee76de6ce348337c3e403eb955" +} diff --git a/backend/.sqlx/query-3e3d12a51cb524fbd3d6949e150cb608acfbe8c8eade1939e813086380c205e0.json b/backend/.sqlx/query-3e3d12a51cb524fbd3d6949e150cb608acfbe8c8eade1939e813086380c205e0.json new file mode 100644 index 0000000000000..d6fd72a8b524e --- /dev/null +++ b/backend/.sqlx/query-3e3d12a51cb524fbd3d6949e150cb608acfbe8c8eade1939e813086380c205e0.json @@ -0,0 +1,24 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO concurrency_counter(concurrency_id, job_uuids) VALUES ($1, $2)\n ON CONFLICT (concurrency_id) \n DO UPDATE SET job_uuids = jsonb_set(concurrency_counter.job_uuids, array[$3], '{}')\n RETURNING (SELECT COUNT(*) FROM jsonb_object_keys(job_uuids))", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "count", + "type_info": "Int8" + } + ], + "parameters": { + "Left": [ + "Varchar", + "Jsonb", + "Text" + ] + }, + "nullable": [ + null + ] + }, + "hash": "3e3d12a51cb524fbd3d6949e150cb608acfbe8c8eade1939e813086380c205e0" +} diff --git a/backend/.sqlx/query-3e5b152b7c34628b694fddbc020eb20084483c0b981690ba85f95e515194aa40.json b/backend/.sqlx/query-3e5b152b7c34628b694fddbc020eb20084483c0b981690ba85f95e515194aa40.json new file mode 100644 index 0000000000000..500ab6b7e5dac --- /dev/null +++ b/backend/.sqlx/query-3e5b152b7c34628b694fddbc020eb20084483c0b981690ba85f95e515194aa40.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT workspace.id as id FROM workspace, usr WHERE usr.workspace_id = workspace.id AND usr.email = $1 AND deleted = false", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "id", + "type_info": "Varchar" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + false + ] + }, + "hash": "3e5b152b7c34628b694fddbc020eb20084483c0b981690ba85f95e515194aa40" +} diff --git a/backend/.sqlx/query-3fdfcab1a54c166b1d8d43215d61268a251160db4630f0342522091668f36af0.json b/backend/.sqlx/query-3fdfcab1a54c166b1d8d43215d61268a251160db4630f0342522091668f36af0.json new file mode 100644 index 0000000000000..be7e8608de991 --- /dev/null +++ b/backend/.sqlx/query-3fdfcab1a54c166b1d8d43215d61268a251160db4630f0342522091668f36af0.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT usr.username \n FROM usr_to_group LEFT JOIN usr ON usr_to_group.usr = usr.username AND usr_to_group.workspace_id = $2\n WHERE group_ = $1 AND usr.workspace_id = $2 AND usr_to_group.workspace_id = $2", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "username", + "type_info": "Varchar" + } + ], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [ + false + ] + }, + "hash": "3fdfcab1a54c166b1d8d43215d61268a251160db4630f0342522091668f36af0" +} diff --git a/backend/.sqlx/query-3fedf12ee5d44e8af9c3864cc70a8f607dccc015ce2d5150c56c68074cd0f84d.json b/backend/.sqlx/query-3fedf12ee5d44e8af9c3864cc70a8f607dccc015ce2d5150c56c68074cd0f84d.json new file mode 100644 index 0000000000000..1d91cd4031d06 --- /dev/null +++ b/backend/.sqlx/query-3fedf12ee5d44e8af9c3864cc70a8f607dccc015ce2d5150c56c68074cd0f84d.json @@ -0,0 +1,35 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT tag, dedicated_worker, flow_version.value->>'preprocessor_module' IS NOT NULL as has_preprocessor \n FROM flow \n LEFT JOIN flow_version\n ON flow_version.id = flow.versions[array_upper(flow.versions, 1)]\n WHERE flow.path = $1 and flow.workspace_id = $2", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "tag", + "type_info": "Varchar" + }, + { + "ordinal": 1, + "name": "dedicated_worker", + "type_info": "Bool" + }, + { + "ordinal": 2, + "name": "has_preprocessor", + "type_info": "Bool" + } + ], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [ + true, + true, + null + ] + }, + "hash": "3fedf12ee5d44e8af9c3864cc70a8f607dccc015ce2d5150c56c68074cd0f84d" +} diff --git a/backend/.sqlx/query-4115a8e75ad5ed74f737f24aa64edc68e71b29ddc32a00a754678ea4f2c167e5.json b/backend/.sqlx/query-4115a8e75ad5ed74f737f24aa64edc68e71b29ddc32a00a754678ea4f2c167e5.json new file mode 100644 index 0000000000000..06eaac04ff2bb --- /dev/null +++ b/backend/.sqlx/query-4115a8e75ad5ed74f737f24aa64edc68e71b29ddc32a00a754678ea4f2c167e5.json @@ -0,0 +1,54 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT label, concat(substring(token for 10)) as token_prefix, expiration, created_at, last_used_at, scopes FROM token WHERE email = $1 AND label != 'ephemeral-script'\n ORDER BY created_at DESC LIMIT $2 OFFSET $3", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "label", + "type_info": "Varchar" + }, + { + "ordinal": 1, + "name": "token_prefix", + "type_info": "Text" + }, + { + "ordinal": 2, + "name": "expiration", + "type_info": "Timestamptz" + }, + { + "ordinal": 3, + "name": "created_at", + "type_info": "Timestamptz" + }, + { + "ordinal": 4, + "name": "last_used_at", + "type_info": "Timestamptz" + }, + { + "ordinal": 5, + "name": "scopes", + "type_info": "TextArray" + } + ], + "parameters": { + "Left": [ + "Text", + "Int8", + "Int8" + ] + }, + "nullable": [ + true, + null, + true, + false, + false, + true + ] + }, + "hash": "4115a8e75ad5ed74f737f24aa64edc68e71b29ddc32a00a754678ea4f2c167e5" +} diff --git a/backend/.sqlx/query-41f2c271514ee254739c3a097871526adcecdd8729f28c15e0db8cd28eaa8cf0.json b/backend/.sqlx/query-41f2c271514ee254739c3a097871526adcecdd8729f28c15e0db8cd28eaa8cf0.json new file mode 100644 index 0000000000000..cf134912fb88c --- /dev/null +++ b/backend/.sqlx/query-41f2c271514ee254739c3a097871526adcecdd8729f28c15e0db8cd28eaa8cf0.json @@ -0,0 +1,101 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT resource.*, (now() > account.expires_at) as is_expired, account.refresh_token != '' as is_refreshed,\n account.refresh_error,\n variable.path IS NOT NULL as is_linked,\n variable.is_oauth as \"is_oauth?\",\n variable.account\n FROM resource\n LEFT JOIN variable ON variable.path = resource.path AND variable.workspace_id = $2\n LEFT JOIN account ON variable.account = account.id AND account.workspace_id = $2\n WHERE resource.path = $1 AND resource.workspace_id = $2", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "workspace_id", + "type_info": "Varchar" + }, + { + "ordinal": 1, + "name": "path", + "type_info": "Varchar" + }, + { + "ordinal": 2, + "name": "value", + "type_info": "Jsonb" + }, + { + "ordinal": 3, + "name": "description", + "type_info": "Text" + }, + { + "ordinal": 4, + "name": "resource_type", + "type_info": "Varchar" + }, + { + "ordinal": 5, + "name": "extra_perms", + "type_info": "Jsonb" + }, + { + "ordinal": 6, + "name": "edited_at", + "type_info": "Timestamptz" + }, + { + "ordinal": 7, + "name": "created_by", + "type_info": "Varchar" + }, + { + "ordinal": 8, + "name": "is_expired", + "type_info": "Bool" + }, + { + "ordinal": 9, + "name": "is_refreshed", + "type_info": "Bool" + }, + { + "ordinal": 10, + "name": "refresh_error", + "type_info": "Text" + }, + { + "ordinal": 11, + "name": "is_linked", + "type_info": "Bool" + }, + { + "ordinal": 12, + "name": "is_oauth?", + "type_info": "Bool" + }, + { + "ordinal": 13, + "name": "account", + "type_info": "Int4" + } + ], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [ + false, + false, + true, + true, + false, + false, + true, + true, + null, + null, + true, + null, + false, + true + ] + }, + "hash": "41f2c271514ee254739c3a097871526adcecdd8729f28c15e0db8cd28eaa8cf0" +} diff --git a/backend/.sqlx/query-41f68f4ce5bed783cf69e42da115e9ad2c9fcbd75f55817b2114c04207f66e4a.json b/backend/.sqlx/query-41f68f4ce5bed783cf69e42da115e9ad2c9fcbd75f55817b2114c04207f66e4a.json new file mode 100644 index 0000000000000..9397f52b83d48 --- /dev/null +++ b/backend/.sqlx/query-41f68f4ce5bed783cf69e42da115e9ad2c9fcbd75f55817b2114c04207f66e4a.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO metrics (id, value)\n VALUES ($1, to_jsonb((SELECT EXTRACT(EPOCH FROM now() - scheduled_for)\n FROM queue WHERE tag = $2 AND running = false AND scheduled_for <= now() - ('3 seconds')::interval\n ORDER BY priority DESC NULLS LAST, scheduled_for LIMIT 1)))", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Text" + ] + }, + "nullable": [] + }, + "hash": "41f68f4ce5bed783cf69e42da115e9ad2c9fcbd75f55817b2114c04207f66e4a" +} diff --git a/backend/.sqlx/query-42543450a5c1b988b258fb1e0c00cd0a53a0395bc60e35817ff149c4f27a19fb.json b/backend/.sqlx/query-42543450a5c1b988b258fb1e0c00cd0a53a0395bc60e35817ff149c4f27a19fb.json new file mode 100644 index 0000000000000..89287ed48d2ea --- /dev/null +++ b/backend/.sqlx/query-42543450a5c1b988b258fb1e0c00cd0a53a0395bc60e35817ff149c4f27a19fb.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE completed_job\n SET logs = '##DELETED##', args = '{}'::jsonb, result = '{}'::jsonb\n WHERE id = ANY($1)", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "UuidArray" + ] + }, + "nullable": [] + }, + "hash": "42543450a5c1b988b258fb1e0c00cd0a53a0395bc60e35817ff149c4f27a19fb" +} diff --git a/backend/.sqlx/query-42df4b40b3bbf14010f07e29892776992bfeb383d590e379244ad23703e536a4.json b/backend/.sqlx/query-42df4b40b3bbf14010f07e29892776992bfeb383d590e379244ad23703e536a4.json new file mode 100644 index 0000000000000..695b4d296998b --- /dev/null +++ b/backend/.sqlx/query-42df4b40b3bbf14010f07e29892776992bfeb383d590e379244ad23703e536a4.json @@ -0,0 +1,19 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO resource\n (workspace_id, path, value, description, resource_type, created_by, edited_at)\n VALUES ($1, $2, $3, $4, $5, $6, now()) ON CONFLICT (workspace_id, path) DO UPDATE SET value = $3, edited_at = now()", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Varchar", + "Jsonb", + "Text", + "Varchar", + "Varchar" + ] + }, + "nullable": [] + }, + "hash": "42df4b40b3bbf14010f07e29892776992bfeb383d590e379244ad23703e536a4" +} diff --git a/backend/.sqlx/query-42e1b5634a9e51247115fa73f85a97b1467c913d012cac9c45bb6a349082dc71.json b/backend/.sqlx/query-42e1b5634a9e51247115fa73f85a97b1467c913d012cac9c45bb6a349082dc71.json new file mode 100644 index 0000000000000..a2f6ce30a29a9 --- /dev/null +++ b/backend/.sqlx/query-42e1b5634a9e51247115fa73f85a97b1467c913d012cac9c45bb6a349082dc71.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT distinct(path) FROM flow WHERE workspace_id = $1", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "path", + "type_info": "Varchar" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + false + ] + }, + "hash": "42e1b5634a9e51247115fa73f85a97b1467c913d012cac9c45bb6a349082dc71" +} diff --git a/backend/.sqlx/query-43b376a2eff086a32cd76e54361ce3631feee1565935d2a6ddbecc17950758d1.json b/backend/.sqlx/query-43b376a2eff086a32cd76e54361ce3631feee1565935d2a6ddbecc17950758d1.json new file mode 100644 index 0000000000000..5b9eeaa79063e --- /dev/null +++ b/backend/.sqlx/query-43b376a2eff086a32cd76e54361ce3631feee1565935d2a6ddbecc17950758d1.json @@ -0,0 +1,17 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO workspace_settings\n (workspace_id, slack_team_id, slack_name, slack_email)\n VALUES ($1, $2, $3, $4) ON CONFLICT (workspace_id) DO UPDATE SET slack_team_id = $2, slack_name = $3, slack_email = $4", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Varchar", + "Varchar", + "Varchar" + ] + }, + "nullable": [] + }, + "hash": "43b376a2eff086a32cd76e54361ce3631feee1565935d2a6ddbecc17950758d1" +} diff --git a/backend/.sqlx/query-4422b7183ede17a9cbde4afae41be4da5447020e39398deedbcca9121492834a.json b/backend/.sqlx/query-4422b7183ede17a9cbde4afae41be4da5447020e39398deedbcca9121492834a.json new file mode 100644 index 0000000000000..3e8ba47b9997a --- /dev/null +++ b/backend/.sqlx/query-4422b7183ede17a9cbde4afae41be4da5447020e39398deedbcca9121492834a.json @@ -0,0 +1,192 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT schedule.*, t.jobs FROM schedule, LATERAL ( SELECT ARRAY (SELECT json_build_object('id', id, 'success', success, 'duration_ms', duration_ms) FROM completed_job WHERE\n completed_job.schedule_path = schedule.path AND completed_job.workspace_id = $1 AND parent_job IS NULL AND is_skipped = False ORDER BY started_at DESC LIMIT 20) AS jobs ) t\n WHERE schedule.workspace_id = $1 ORDER BY schedule.edited_at desc LIMIT $2 OFFSET $3", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "workspace_id", + "type_info": "Varchar" + }, + { + "ordinal": 1, + "name": "path", + "type_info": "Varchar" + }, + { + "ordinal": 2, + "name": "edited_by", + "type_info": "Varchar" + }, + { + "ordinal": 3, + "name": "edited_at", + "type_info": "Timestamptz" + }, + { + "ordinal": 4, + "name": "schedule", + "type_info": "Varchar" + }, + { + "ordinal": 5, + "name": "enabled", + "type_info": "Bool" + }, + { + "ordinal": 6, + "name": "script_path", + "type_info": "Varchar" + }, + { + "ordinal": 7, + "name": "args", + "type_info": "Jsonb" + }, + { + "ordinal": 8, + "name": "extra_perms", + "type_info": "Jsonb" + }, + { + "ordinal": 9, + "name": "is_flow", + "type_info": "Bool" + }, + { + "ordinal": 10, + "name": "email", + "type_info": "Varchar" + }, + { + "ordinal": 11, + "name": "error", + "type_info": "Text" + }, + { + "ordinal": 12, + "name": "timezone", + "type_info": "Varchar" + }, + { + "ordinal": 13, + "name": "on_failure", + "type_info": "Varchar" + }, + { + "ordinal": 14, + "name": "on_recovery", + "type_info": "Varchar" + }, + { + "ordinal": 15, + "name": "on_failure_times", + "type_info": "Int4" + }, + { + "ordinal": 16, + "name": "on_failure_exact", + "type_info": "Bool" + }, + { + "ordinal": 17, + "name": "on_failure_extra_args", + "type_info": "Json" + }, + { + "ordinal": 18, + "name": "on_recovery_times", + "type_info": "Int4" + }, + { + "ordinal": 19, + "name": "on_recovery_extra_args", + "type_info": "Json" + }, + { + "ordinal": 20, + "name": "ws_error_handler_muted", + "type_info": "Bool" + }, + { + "ordinal": 21, + "name": "retry", + "type_info": "Jsonb" + }, + { + "ordinal": 22, + "name": "summary", + "type_info": "Varchar" + }, + { + "ordinal": 23, + "name": "no_flow_overlap", + "type_info": "Bool" + }, + { + "ordinal": 24, + "name": "tag", + "type_info": "Varchar" + }, + { + "ordinal": 25, + "name": "paused_until", + "type_info": "Timestamptz" + }, + { + "ordinal": 26, + "name": "on_success", + "type_info": "Varchar" + }, + { + "ordinal": 27, + "name": "on_success_extra_args", + "type_info": "Json" + }, + { + "ordinal": 28, + "name": "jobs", + "type_info": "JsonArray" + } + ], + "parameters": { + "Left": [ + "Text", + "Int8", + "Int8" + ] + }, + "nullable": [ + false, + false, + false, + false, + false, + false, + false, + true, + false, + false, + false, + true, + false, + true, + true, + true, + true, + true, + true, + true, + false, + true, + true, + false, + true, + true, + true, + true, + null + ] + }, + "hash": "4422b7183ede17a9cbde4afae41be4da5447020e39398deedbcca9121492834a" +} diff --git a/backend/.sqlx/query-44dd7a66ecc9564ad5727970b5f60a1717eda8924999741be522ffb74cc173fa.json b/backend/.sqlx/query-44dd7a66ecc9564ad5727970b5f60a1717eda8924999741be522ffb74cc173fa.json new file mode 100644 index 0000000000000..9f97b97a88583 --- /dev/null +++ b/backend/.sqlx/query-44dd7a66ecc9564ad5727970b5f60a1717eda8924999741be522ffb74cc173fa.json @@ -0,0 +1,26 @@ +{ + "db_name": "PostgreSQL", + "query": "WITH queue_metrics as (\n SELECT id, value, created_at\n FROM metrics\n WHERE id LIKE 'queue_%'\n AND created_at > now() - interval '14 day'\n )\n SELECT id, array_agg(json_build_object('value', value, 'created_at', created_at) ORDER BY created_at ASC) as \"values!\"\n FROM queue_metrics\n GROUP BY id\n ORDER BY id ASC", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "id", + "type_info": "Varchar" + }, + { + "ordinal": 1, + "name": "values!", + "type_info": "JsonArray" + } + ], + "parameters": { + "Left": [] + }, + "nullable": [ + false, + null + ] + }, + "hash": "44dd7a66ecc9564ad5727970b5f60a1717eda8924999741be522ffb74cc173fa" +} diff --git a/backend/.sqlx/query-44ded7852b72f50099ff6508a7d13cab73c92ba1d07f2304a3bd3f890fcf3b19.json b/backend/.sqlx/query-44ded7852b72f50099ff6508a7d13cab73c92ba1d07f2304a3bd3f890fcf3b19.json new file mode 100644 index 0000000000000..b1baa255ccbdc --- /dev/null +++ b/backend/.sqlx/query-44ded7852b72f50099ff6508a7d13cab73c92ba1d07f2304a3bd3f890fcf3b19.json @@ -0,0 +1,17 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO group_ (workspace_id, name, summary, extra_perms) VALUES ($1, $2, $3, $4) ON CONFLICT DO NOTHING", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Varchar", + "Text", + "Jsonb" + ] + }, + "nullable": [] + }, + "hash": "44ded7852b72f50099ff6508a7d13cab73c92ba1d07f2304a3bd3f890fcf3b19" +} diff --git a/backend/.sqlx/query-4502ed44e69b0501ef187be9cc2de22c4dc5dafb13ef56c297ea62464e74c323.json b/backend/.sqlx/query-4502ed44e69b0501ef187be9cc2de22c4dc5dafb13ef56c297ea62464e74c323.json new file mode 100644 index 0000000000000..c17b642f5b9f5 --- /dev/null +++ b/backend/.sqlx/query-4502ed44e69b0501ef187be9cc2de22c4dc5dafb13ef56c297ea62464e74c323.json @@ -0,0 +1,16 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE flow_version SET path = $1 WHERE path = $2 AND workspace_id = $3", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "4502ed44e69b0501ef187be9cc2de22c4dc5dafb13ef56c297ea62464e74c323" +} diff --git a/backend/.sqlx/query-4507c3907bf49f93f6c17956d9cf9495f4538b20ce0299acde7578386db4278c.json b/backend/.sqlx/query-4507c3907bf49f93f6c17956d9cf9495f4538b20ce0299acde7578386db4278c.json new file mode 100644 index 0000000000000..dc57aefcdc19b --- /dev/null +++ b/backend/.sqlx/query-4507c3907bf49f93f6c17956d9cf9495f4538b20ce0299acde7578386db4278c.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO parallel_monitor_lock (parent_flow_id, job_id)\n VALUES ($1, $2)", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Uuid", + "Uuid" + ] + }, + "nullable": [] + }, + "hash": "4507c3907bf49f93f6c17956d9cf9495f4538b20ce0299acde7578386db4278c" +} diff --git a/backend/.sqlx/query-45e4d13f5806122faecdb1d9ab18159555b652869a036b006f4a151e999b17b7.json b/backend/.sqlx/query-45e4d13f5806122faecdb1d9ab18159555b652869a036b006f4a151e999b17b7.json new file mode 100644 index 0000000000000..259b328558e2d --- /dev/null +++ b/backend/.sqlx/query-45e4d13f5806122faecdb1d9ab18159555b652869a036b006f4a151e999b17b7.json @@ -0,0 +1,64 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT * FROM resource WHERE workspace_id = $1 AND resource_type != 'state' AND resource_type != 'cache'", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "workspace_id", + "type_info": "Varchar" + }, + { + "ordinal": 1, + "name": "path", + "type_info": "Varchar" + }, + { + "ordinal": 2, + "name": "value", + "type_info": "Jsonb" + }, + { + "ordinal": 3, + "name": "description", + "type_info": "Text" + }, + { + "ordinal": 4, + "name": "resource_type", + "type_info": "Varchar" + }, + { + "ordinal": 5, + "name": "extra_perms", + "type_info": "Jsonb" + }, + { + "ordinal": 6, + "name": "edited_at", + "type_info": "Timestamptz" + }, + { + "ordinal": 7, + "name": "created_by", + "type_info": "Varchar" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + false, + false, + true, + true, + false, + false, + true, + true + ] + }, + "hash": "45e4d13f5806122faecdb1d9ab18159555b652869a036b006f4a151e999b17b7" +} diff --git a/backend/.sqlx/query-4613382f7b031a2b667f86d9af995065a99a63c407fd58aa293fb269e032121d.json b/backend/.sqlx/query-4613382f7b031a2b667f86d9af995065a99a63c407fd58aa293fb269e032121d.json new file mode 100644 index 0000000000000..f23f6eb075390 --- /dev/null +++ b/backend/.sqlx/query-4613382f7b031a2b667f86d9af995065a99a63c407fd58aa293fb269e032121d.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT 1 FROM schedule WHERE path = $1 AND workspace_id = $2", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "?column?", + "type_info": "Int4" + } + ], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [ + null + ] + }, + "hash": "4613382f7b031a2b667f86d9af995065a99a63c407fd58aa293fb269e032121d" +} diff --git a/backend/.sqlx/query-467c563cdc81dd57a01735a9f535d1096bdfd6c539d8c31462f8f2bd711ab0fa.json b/backend/.sqlx/query-467c563cdc81dd57a01735a9f535d1096bdfd6c539d8c31462f8f2bd711ab0fa.json new file mode 100644 index 0000000000000..0b47ce7a7df92 --- /dev/null +++ b/backend/.sqlx/query-467c563cdc81dd57a01735a9f535d1096bdfd6c539d8c31462f8f2bd711ab0fa.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM job_logs WHERE job_id = ANY($1)", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "UuidArray" + ] + }, + "nullable": [] + }, + "hash": "467c563cdc81dd57a01735a9f535d1096bdfd6c539d8c31462f8f2bd711ab0fa" +} diff --git a/backend/.sqlx/query-46b44de4ea6eb15258c1cb9bbd21cab7fc350b46e8899d59759945eae02a6d40.json b/backend/.sqlx/query-46b44de4ea6eb15258c1cb9bbd21cab7fc350b46e8899d59759945eae02a6d40.json new file mode 100644 index 0000000000000..72f8a2f814c86 --- /dev/null +++ b/backend/.sqlx/query-46b44de4ea6eb15258c1cb9bbd21cab7fc350b46e8899d59759945eae02a6d40.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "\n SELECT EXISTS (SELECT 1 FROM resume_job WHERE id = $1)\n ", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "exists", + "type_info": "Bool" + } + ], + "parameters": { + "Left": [ + "Uuid" + ] + }, + "nullable": [ + null + ] + }, + "hash": "46b44de4ea6eb15258c1cb9bbd21cab7fc350b46e8899d59759945eae02a6d40" +} diff --git a/backend/.sqlx/query-480a20b0dc7b8c577620a5582e1ec5b101150b91de5a898618d525dd7b76e45a.json b/backend/.sqlx/query-480a20b0dc7b8c577620a5582e1ec5b101150b91de5a898618d525dd7b76e45a.json new file mode 100644 index 0000000000000..6223b016523e8 --- /dev/null +++ b/backend/.sqlx/query-480a20b0dc7b8c577620a5582e1ec5b101150b91de5a898618d525dd7b76e45a.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT name from resource_type WHERE (workspace_id = $1 OR workspace_id = 'admins') ORDER BY name", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "name", + "type_info": "Varchar" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + false + ] + }, + "hash": "480a20b0dc7b8c577620a5582e1ec5b101150b91de5a898618d525dd7b76e45a" +} diff --git a/backend/.sqlx/query-4815068e6d833e918613d324b5d694c479d039576cabb88d5be8894f171c3b4e.json b/backend/.sqlx/query-4815068e6d833e918613d324b5d694c479d039576cabb88d5be8894f171c3b4e.json new file mode 100644 index 0000000000000..a0d216b019a5e --- /dev/null +++ b/backend/.sqlx/query-4815068e6d833e918613d324b5d694c479d039576cabb88d5be8894f171c3b4e.json @@ -0,0 +1,16 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO workspace\n (id, name, owner)\n VALUES ($1, $2, $3)", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Varchar", + "Varchar" + ] + }, + "nullable": [] + }, + "hash": "4815068e6d833e918613d324b5d694c479d039576cabb88d5be8894f171c3b4e" +} diff --git a/backend/.sqlx/query-4887db074e9058bc0c1887428d6b2a897fe4b30c83f2aa5e9464c156f08f1c3a.json b/backend/.sqlx/query-4887db074e9058bc0c1887428d6b2a897fe4b30c83f2aa5e9464c156f08f1c3a.json new file mode 100644 index 0000000000000..2988f2c0e5580 --- /dev/null +++ b/backend/.sqlx/query-4887db074e9058bc0c1887428d6b2a897fe4b30c83f2aa5e9464c156f08f1c3a.json @@ -0,0 +1,38 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT worker, worker_instance, vcpus, memory FROM worker_ping WHERE ping_at > NOW() - INTERVAL '2 minutes'", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "worker", + "type_info": "Varchar" + }, + { + "ordinal": 1, + "name": "worker_instance", + "type_info": "Varchar" + }, + { + "ordinal": 2, + "name": "vcpus", + "type_info": "Int8" + }, + { + "ordinal": 3, + "name": "memory", + "type_info": "Int8" + } + ], + "parameters": { + "Left": [] + }, + "nullable": [ + false, + false, + true, + true + ] + }, + "hash": "4887db074e9058bc0c1887428d6b2a897fe4b30c83f2aa5e9464c156f08f1c3a" +} diff --git a/backend/.sqlx/query-493be465bf70411f933de8dd4da1c5b410fd5c79a0c17172e7882e292c1378b5.json b/backend/.sqlx/query-493be465bf70411f933de8dd4da1c5b410fd5c79a0c17172e7882e292c1378b5.json new file mode 100644 index 0000000000000..88b605b4eae4e --- /dev/null +++ b/backend/.sqlx/query-493be465bf70411f933de8dd4da1c5b410fd5c79a0c17172e7882e292c1378b5.json @@ -0,0 +1,16 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE variable SET path = $1 WHERE path = $2 AND workspace_id = $3", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "493be465bf70411f933de8dd4da1c5b410fd5c79a0c17172e7882e292c1378b5" +} diff --git a/backend/.sqlx/query-4968e9edac534657c808b891cbf93c8c0a57f93b7b445171b1cc3f4428ee6e53.json b/backend/.sqlx/query-4968e9edac534657c808b891cbf93c8c0a57f93b7b445171b1cc3f4428ee6e53.json new file mode 100644 index 0000000000000..08bc20e88bad5 --- /dev/null +++ b/backend/.sqlx/query-4968e9edac534657c808b891cbf93c8c0a57f93b7b445171b1cc3f4428ee6e53.json @@ -0,0 +1,18 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO deployment_metadata (workspace_id, path, flow_version, callback_job_ids, deployment_msg) VALUES ($1, $2, $3, $4, $5)", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Varchar", + "Int8", + "UuidArray", + "Text" + ] + }, + "nullable": [] + }, + "hash": "4968e9edac534657c808b891cbf93c8c0a57f93b7b445171b1cc3f4428ee6e53" +} diff --git a/backend/.sqlx/query-49a8fe5c538d8fc26f6d8ece5b30dd02a128f571039714e61525e2bb86591d93.json b/backend/.sqlx/query-49a8fe5c538d8fc26f6d8ece5b30dd02a128f571039714e61525e2bb86591d93.json new file mode 100644 index 0000000000000..b67bf27a83738 --- /dev/null +++ b/backend/.sqlx/query-49a8fe5c538d8fc26f6d8ece5b30dd02a128f571039714e61525e2bb86591d93.json @@ -0,0 +1,46 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT premium, usage.usage as \"usage?\", workspace_settings.customer_id, workspace_settings.plan, workspace_settings.automatic_billing FROM workspace LEFT JOIN workspace_settings ON workspace_settings.workspace_id = $1 LEFT JOIN usage ON usage.id = $1 AND month_ = EXTRACT(YEAR FROM current_date) * 12 + EXTRACT(MONTH FROM current_date) AND usage.is_workspace IS true WHERE workspace.id = $1", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "premium", + "type_info": "Bool" + }, + { + "ordinal": 1, + "name": "usage?", + "type_info": "Int4" + }, + { + "ordinal": 2, + "name": "customer_id", + "type_info": "Varchar" + }, + { + "ordinal": 3, + "name": "plan", + "type_info": "Varchar" + }, + { + "ordinal": 4, + "name": "automatic_billing", + "type_info": "Bool" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + false, + false, + true, + true, + false + ] + }, + "hash": "49a8fe5c538d8fc26f6d8ece5b30dd02a128f571039714e61525e2bb86591d93" +} diff --git a/backend/.sqlx/query-4a0211a4964e4d9943982be146c44ecbc5c7d8a6e93946304fe3d6994296abc8.json b/backend/.sqlx/query-4a0211a4964e4d9943982be146c44ecbc5c7d8a6e93946304fe3d6994296abc8.json new file mode 100644 index 0000000000000..4bab94030b890 --- /dev/null +++ b/backend/.sqlx/query-4a0211a4964e4d9943982be146c44ecbc5c7d8a6e93946304fe3d6994296abc8.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM flow WHERE path = $1 AND workspace_id = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "4a0211a4964e4d9943982be146c44ecbc5c7d8a6e93946304fe3d6994296abc8" +} diff --git a/backend/.sqlx/query-4a585c1f92628b8763930764befdf38ce2ea7df71b013bd960796cc8230797e6.json b/backend/.sqlx/query-4a585c1f92628b8763930764befdf38ce2ea7df71b013bd960796cc8230797e6.json new file mode 100644 index 0000000000000..cd2a67b1a4ee2 --- /dev/null +++ b/backend/.sqlx/query-4a585c1f92628b8763930764befdf38ce2ea7df71b013bd960796cc8230797e6.json @@ -0,0 +1,16 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE app SET extra_perms = extra_perms - ('u/' || $2) || jsonb_build_object(('u/' || $1), extra_perms->('u/' || $2)) WHERE extra_perms ? ('u/' || $2) AND workspace_id = $3", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "4a585c1f92628b8763930764befdf38ce2ea7df71b013bd960796cc8230797e6" +} diff --git a/backend/.sqlx/query-4a764cdcb847b71183425a7a0e863708ef7fe2c88b28d0667988a47b9e995c0e.json b/backend/.sqlx/query-4a764cdcb847b71183425a7a0e863708ef7fe2c88b28d0667988a47b9e995c0e.json new file mode 100644 index 0000000000000..9fde573b4d1c5 --- /dev/null +++ b/backend/.sqlx/query-4a764cdcb847b71183425a7a0e863708ef7fe2c88b28d0667988a47b9e995c0e.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT flow_version.value \n FROM flow \n LEFT JOIN flow_version \n ON flow_version.id = flow.versions[array_upper(flow.versions, 1)]\n WHERE flow.path = $1 AND flow.workspace_id = $2", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "value", + "type_info": "Jsonb" + } + ], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [ + false + ] + }, + "hash": "4a764cdcb847b71183425a7a0e863708ef7fe2c88b28d0667988a47b9e995c0e" +} diff --git a/backend/.sqlx/query-4ab6d6584029aacdc1e39fcbf39767a49717246179c0652b10aac9078b4e2ae7.json b/backend/.sqlx/query-4ab6d6584029aacdc1e39fcbf39767a49717246179c0652b10aac9078b4e2ae7.json new file mode 100644 index 0000000000000..01c2a70c9560a --- /dev/null +++ b/backend/.sqlx/query-4ab6d6584029aacdc1e39fcbf39767a49717246179c0652b10aac9078b4e2ae7.json @@ -0,0 +1,28 @@ +{ + "db_name": "PostgreSQL", + "query": "\n SELECT usr.email, usage.executions\n FROM usr\n , LATERAL (\n SELECT COALESCE(SUM(duration_ms + 1000)/1000 , 0)::BIGINT executions\n FROM completed_job\n WHERE workspace_id = $1\n AND job_kind NOT IN ('flow', 'flowpreview')\n AND email = usr.email\n AND now() - '1 week'::interval < created_at \n ) usage\n WHERE workspace_id = $1\n ", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "email", + "type_info": "Varchar" + }, + { + "ordinal": 1, + "name": "executions", + "type_info": "Int8" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + false, + null + ] + }, + "hash": "4ab6d6584029aacdc1e39fcbf39767a49717246179c0652b10aac9078b4e2ae7" +} diff --git a/backend/.sqlx/query-4c0067c2135a259aea5cc2db60f7375a9a33671be8ef406427d90f67a98c9c9f.json b/backend/.sqlx/query-4c0067c2135a259aea5cc2db60f7375a9a33671be8ef406427d90f67a98c9c9f.json new file mode 100644 index 0000000000000..32295ea1e12aa --- /dev/null +++ b/backend/.sqlx/query-4c0067c2135a259aea5cc2db60f7375a9a33671be8ef406427d90f67a98c9c9f.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO alerts (alert_type, message) VALUES ('critical_error', $1)", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [] + }, + "hash": "4c0067c2135a259aea5cc2db60f7375a9a33671be8ef406427d90f67a98c9c9f" +} diff --git a/backend/.sqlx/query-4c5276bbf6aaad004a58aaff6b2abd7e78903a0354dd041fcc0cc7cca2b60cc1.json b/backend/.sqlx/query-4c5276bbf6aaad004a58aaff6b2abd7e78903a0354dd041fcc0cc7cca2b60cc1.json new file mode 100644 index 0000000000000..85cd242a5a8fb --- /dev/null +++ b/backend/.sqlx/query-4c5276bbf6aaad004a58aaff6b2abd7e78903a0354dd041fcc0cc7cca2b60cc1.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM token WHERE workspace_id = $1", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [] + }, + "hash": "4c5276bbf6aaad004a58aaff6b2abd7e78903a0354dd041fcc0cc7cca2b60cc1" +} diff --git a/backend/.sqlx/query-4c970f10d345bcdcf956dcbfa22b6e80888e511fb4787cb1a7976878abed1d30.json b/backend/.sqlx/query-4c970f10d345bcdcf956dcbfa22b6e80888e511fb4787cb1a7976878abed1d30.json new file mode 100644 index 0000000000000..26894a04eff09 --- /dev/null +++ b/backend/.sqlx/query-4c970f10d345bcdcf956dcbfa22b6e80888e511fb4787cb1a7976878abed1d30.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT premium FROM workspace WHERE workspace.id = $1", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "premium", + "type_info": "Bool" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + false + ] + }, + "hash": "4c970f10d345bcdcf956dcbfa22b6e80888e511fb4787cb1a7976878abed1d30" +} diff --git a/backend/.sqlx/query-4c97fcc93b31c4b3262419d6ee183773a95de3b6694a398cb80d288bef4f130f.json b/backend/.sqlx/query-4c97fcc93b31c4b3262419d6ee183773a95de3b6694a398cb80d288bef4f130f.json new file mode 100644 index 0000000000000..53a59847e7b93 --- /dev/null +++ b/backend/.sqlx/query-4c97fcc93b31c4b3262419d6ee183773a95de3b6694a398cb80d288bef4f130f.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE completed_job SET args = '{\"reason\":\"PREPROCESSOR_ARGS_ARE_DISCARDED\"}'::jsonb WHERE id = $1", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Uuid" + ] + }, + "nullable": [] + }, + "hash": "4c97fcc93b31c4b3262419d6ee183773a95de3b6694a398cb80d288bef4f130f" +} diff --git a/backend/.sqlx/query-4cdb9b9d562f3c692e5597598db937511bc8431c3652746684ee803172053885.json b/backend/.sqlx/query-4cdb9b9d562f3c692e5597598db937511bc8431c3652746684ee803172053885.json new file mode 100644 index 0000000000000..48a2a5451da12 --- /dev/null +++ b/backend/.sqlx/query-4cdb9b9d562f3c692e5597598db937511bc8431c3652746684ee803172053885.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT id FROM queue WHERE parent_job = $1 AND workspace_id = $2", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "id", + "type_info": "Uuid" + } + ], + "parameters": { + "Left": [ + "Uuid", + "Text" + ] + }, + "nullable": [ + false + ] + }, + "hash": "4cdb9b9d562f3c692e5597598db937511bc8431c3652746684ee803172053885" +} diff --git a/backend/.sqlx/query-4cfa57b2a836242d55071ef237855b21bbc487b80bda7fd6250ac12e93938577.json b/backend/.sqlx/query-4cfa57b2a836242d55071ef237855b21bbc487b80bda7fd6250ac12e93938577.json new file mode 100644 index 0000000000000..5ac1cd561e1a1 --- /dev/null +++ b/backend/.sqlx/query-4cfa57b2a836242d55071ef237855b21bbc487b80bda7fd6250ac12e93938577.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO healthchecks (check_type, healthy) \n SELECT 'min_alive_workers_' || $1, true \n WHERE NOT EXISTS (\n SELECT 1 FROM healthchecks \n WHERE check_type = 'min_alive_workers_' || $1 AND created_at > NOW() - INTERVAL '2 minutes'\n )\n RETURNING id", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "id", + "type_info": "Int8" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + false + ] + }, + "hash": "4cfa57b2a836242d55071ef237855b21bbc487b80bda7fd6250ac12e93938577" +} diff --git a/backend/.sqlx/query-4d8640e84fccf1a0b799d8396a51e69345137e68d5096c70ba0a4332075d97ea.json b/backend/.sqlx/query-4d8640e84fccf1a0b799d8396a51e69345137e68d5096c70ba0a4332075d97ea.json new file mode 100644 index 0000000000000..b66edc6d73a55 --- /dev/null +++ b/backend/.sqlx/query-4d8640e84fccf1a0b799d8396a51e69345137e68d5096c70ba0a4332075d97ea.json @@ -0,0 +1,38 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE http_trigger \n SET route_path = $1, route_path_key = $2, script_path = $3, path = $4, is_flow = $5, http_method = $6, edited_by = $7, email = $8, is_async = $9, requires_auth = $10, edited_at = now() \n WHERE workspace_id = $11 AND path = $12", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Varchar", + "Varchar", + "Varchar", + "Bool", + { + "Custom": { + "name": "http_method", + "kind": { + "Enum": [ + "get", + "post", + "put", + "delete", + "patch" + ] + } + } + }, + "Varchar", + "Varchar", + "Bool", + "Bool", + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "4d8640e84fccf1a0b799d8396a51e69345137e68d5096c70ba0a4332075d97ea" +} diff --git a/backend/.sqlx/query-4e6e4ecaa7a874b07b6599b6b7b3f307eb201534aa25d8a2049d1949f4ec9e77.json b/backend/.sqlx/query-4e6e4ecaa7a874b07b6599b6b7b3f307eb201534aa25d8a2049d1949f4ec9e77.json new file mode 100644 index 0000000000000..afb8a2aadac6c --- /dev/null +++ b/backend/.sqlx/query-4e6e4ecaa7a874b07b6599b6b7b3f307eb201534aa25d8a2049d1949f4ec9e77.json @@ -0,0 +1,20 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT value FROM metrics WHERE id = 'email_trigger_usage' AND created_at > NOW() - INTERVAL '1 day' ORDER BY created_at DESC LIMIT 1", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "value", + "type_info": "Jsonb" + } + ], + "parameters": { + "Left": [] + }, + "nullable": [ + false + ] + }, + "hash": "4e6e4ecaa7a874b07b6599b6b7b3f307eb201534aa25d8a2049d1949f4ec9e77" +} diff --git a/backend/.sqlx/query-4fb3881cdbb4b9e93e28f460a9b3715bdc6a52b76c89f3a3913023b13c4e085c.json b/backend/.sqlx/query-4fb3881cdbb4b9e93e28f460a9b3715bdc6a52b76c89f3a3913023b13c4e085c.json new file mode 100644 index 0000000000000..9709a354cfa8d --- /dev/null +++ b/backend/.sqlx/query-4fb3881cdbb4b9e93e28f460a9b3715bdc6a52b76c89f3a3913023b13c4e085c.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO pip_resolution_cache (hash, lockfile, expiration) VALUES ($1, $2, now() + ('3 days')::interval) ON CONFLICT (hash) DO UPDATE SET lockfile = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Text" + ] + }, + "nullable": [] + }, + "hash": "4fb3881cdbb4b9e93e28f460a9b3715bdc6a52b76c89f3a3913023b13c4e085c" +} diff --git a/backend/.sqlx/query-4fb3a4712d88afed40082d8d8bd63b5dedad61caa68e0e470252083d80df605f.json b/backend/.sqlx/query-4fb3a4712d88afed40082d8d8bd63b5dedad61caa68e0e470252083d80df605f.json new file mode 100644 index 0000000000000..90bdd1c9b81d1 --- /dev/null +++ b/backend/.sqlx/query-4fb3a4712d88afed40082d8d8bd63b5dedad61caa68e0e470252083d80df605f.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE queue SET suspend = 0 WHERE id = $1", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Uuid" + ] + }, + "nullable": [] + }, + "hash": "4fb3a4712d88afed40082d8d8bd63b5dedad61caa68e0e470252083d80df605f" +} diff --git a/backend/.sqlx/query-4fb95eae1c871241efe2ef79615ce03cba0e4a12aad3274e4829d98e38ca1491.json b/backend/.sqlx/query-4fb95eae1c871241efe2ef79615ce03cba0e4a12aad3274e4829d98e38ca1491.json new file mode 100644 index 0000000000000..d954f2c26cab2 --- /dev/null +++ b/backend/.sqlx/query-4fb95eae1c871241efe2ef79615ce03cba0e4a12aad3274e4829d98e38ca1491.json @@ -0,0 +1,108 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT workspace_id, path, route_path, route_path_key, script_path, is_flow, http_method as \"http_method: _\", edited_by, email, edited_at, extra_perms, is_async, requires_auth\n FROM http_trigger\n WHERE workspace_id = $1 AND path = $2", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "workspace_id", + "type_info": "Varchar" + }, + { + "ordinal": 1, + "name": "path", + "type_info": "Varchar" + }, + { + "ordinal": 2, + "name": "route_path", + "type_info": "Varchar" + }, + { + "ordinal": 3, + "name": "route_path_key", + "type_info": "Varchar" + }, + { + "ordinal": 4, + "name": "script_path", + "type_info": "Varchar" + }, + { + "ordinal": 5, + "name": "is_flow", + "type_info": "Bool" + }, + { + "ordinal": 6, + "name": "http_method: _", + "type_info": { + "Custom": { + "name": "http_method", + "kind": { + "Enum": [ + "get", + "post", + "put", + "delete", + "patch" + ] + } + } + } + }, + { + "ordinal": 7, + "name": "edited_by", + "type_info": "Varchar" + }, + { + "ordinal": 8, + "name": "email", + "type_info": "Varchar" + }, + { + "ordinal": 9, + "name": "edited_at", + "type_info": "Timestamptz" + }, + { + "ordinal": 10, + "name": "extra_perms", + "type_info": "Jsonb" + }, + { + "ordinal": 11, + "name": "is_async", + "type_info": "Bool" + }, + { + "ordinal": 12, + "name": "requires_auth", + "type_info": "Bool" + } + ], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [ + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false + ] + }, + "hash": "4fb95eae1c871241efe2ef79615ce03cba0e4a12aad3274e4829d98e38ca1491" +} diff --git a/backend/.sqlx/query-50d1d62e1a0044168ec485c7f69bfb88ad4ecf200b33cd99f92da969628fb9f4.json b/backend/.sqlx/query-50d1d62e1a0044168ec485c7f69bfb88ad4ecf200b33cd99f92da969628fb9f4.json new file mode 100644 index 0000000000000..3c61626f1d1fd --- /dev/null +++ b/backend/.sqlx/query-50d1d62e1a0044168ec485c7f69bfb88ad4ecf200b33cd99f92da969628fb9f4.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT key FROM workspace_key WHERE workspace_id = $1 AND kind = 'cloud'", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "key", + "type_info": "Varchar" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + false + ] + }, + "hash": "50d1d62e1a0044168ec485c7f69bfb88ad4ecf200b33cd99f92da969628fb9f4" +} diff --git a/backend/.sqlx/query-514c5feb8a29a2a6b577553d8577a46bcbb196c62d046a0568c573ce96ff3c43.json b/backend/.sqlx/query-514c5feb8a29a2a6b577553d8577a46bcbb196c62d046a0568c573ce96ff3c43.json new file mode 100644 index 0000000000000..48bdbc6cb9eb1 --- /dev/null +++ b/backend/.sqlx/query-514c5feb8a29a2a6b577553d8577a46bcbb196c62d046a0568c573ce96ff3c43.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM usr_to_group WHERE group_ = $1 AND workspace_id = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "514c5feb8a29a2a6b577553d8577a46bcbb196c62d046a0568c573ce96ff3c43" +} diff --git a/backend/.sqlx/query-51a7e36ba1cc1616a19485eb5930cf90df758e85a8cac6037d044d5bd7440681.json b/backend/.sqlx/query-51a7e36ba1cc1616a19485eb5930cf90df758e85a8cac6037d044d5bd7440681.json new file mode 100644 index 0000000000000..d2775c1c94078 --- /dev/null +++ b/backend/.sqlx/query-51a7e36ba1cc1616a19485eb5930cf90df758e85a8cac6037d044d5bd7440681.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT EXISTS(SELECT name FROM windmill_migrations WHERE name = $1)", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "exists", + "type_info": "Bool" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + null + ] + }, + "hash": "51a7e36ba1cc1616a19485eb5930cf90df758e85a8cac6037d044d5bd7440681" +} diff --git a/backend/.sqlx/query-51d253d3cba9e2a36c291f6f9cf7023834484e89d91f0267d9dcaaafe406c64c.json b/backend/.sqlx/query-51d253d3cba9e2a36c291f6f9cf7023834484e89d91f0267d9dcaaafe406c64c.json new file mode 100644 index 0000000000000..a035385cef944 --- /dev/null +++ b/backend/.sqlx/query-51d253d3cba9e2a36c291f6f9cf7023834484e89d91f0267d9dcaaafe406c64c.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE workspace_settings SET git_sync = NULL WHERE workspace_id = $1", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [] + }, + "hash": "51d253d3cba9e2a36c291f6f9cf7023834484e89d91f0267d9dcaaafe406c64c" +} diff --git a/backend/.sqlx/query-51dbf8e3814c2d63df1958db12d5bacbb4bbe3bb4725eece43fb82944212f21d.json b/backend/.sqlx/query-51dbf8e3814c2d63df1958db12d5bacbb4bbe3bb4725eece43fb82944212f21d.json new file mode 100644 index 0000000000000..451324ca6b203 --- /dev/null +++ b/backend/.sqlx/query-51dbf8e3814c2d63df1958db12d5bacbb4bbe3bb4725eece43fb82944212f21d.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT name FROM instance_group WHERE id = $1", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "name", + "type_info": "Varchar" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + false + ] + }, + "hash": "51dbf8e3814c2d63df1958db12d5bacbb4bbe3bb4725eece43fb82944212f21d" +} diff --git a/backend/.sqlx/query-526bfaccaafbe2e6f70dd5e6cd21c0c60d4ec155f79d067a8b74cf24eebad88c.json b/backend/.sqlx/query-526bfaccaafbe2e6f70dd5e6cd21c0c60d4ec155f79d067a8b74cf24eebad88c.json new file mode 100644 index 0000000000000..08e38953ab78a --- /dev/null +++ b/backend/.sqlx/query-526bfaccaafbe2e6f70dd5e6cd21c0c60d4ec155f79d067a8b74cf24eebad88c.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT versions[array_upper(versions, 1)] FROM flow WHERE path = $1 AND workspace_id = $2", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "versions", + "type_info": "Int8" + } + ], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [ + null + ] + }, + "hash": "526bfaccaafbe2e6f70dd5e6cd21c0c60d4ec155f79d067a8b74cf24eebad88c" +} diff --git a/backend/.sqlx/query-528cdbb75f1c5135170a58fce3fda464be138272487639d0ffbbbe6961ec5c37.json b/backend/.sqlx/query-528cdbb75f1c5135170a58fce3fda464be138272487639d0ffbbbe6961ec5c37.json new file mode 100644 index 0000000000000..e998bea512506 --- /dev/null +++ b/backend/.sqlx/query-528cdbb75f1c5135170a58fce3fda464be138272487639d0ffbbbe6961ec5c37.json @@ -0,0 +1,18 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE job_logs SET logs = $1, log_offset = $2, \n log_file_index = array_append(coalesce(log_file_index, array[]::text[]), $3) \n WHERE workspace_id = $4 AND job_id = $5", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Int4", + "Text", + "Text", + "Uuid" + ] + }, + "nullable": [] + }, + "hash": "528cdbb75f1c5135170a58fce3fda464be138272487639d0ffbbbe6961ec5c37" +} diff --git a/backend/.sqlx/query-5395887680e4ff458a962d99614085e45a723964b7937cfe9943019e5c49df90.json b/backend/.sqlx/query-5395887680e4ff458a962d99614085e45a723964b7937cfe9943019e5c49df90.json new file mode 100644 index 0000000000000..be281c2cdc761 --- /dev/null +++ b/backend/.sqlx/query-5395887680e4ff458a962d99614085e45a723964b7937cfe9943019e5c49df90.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE app SET workspace_id = $1 WHERE workspace_id = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Text" + ] + }, + "nullable": [] + }, + "hash": "5395887680e4ff458a962d99614085e45a723964b7937cfe9943019e5c49df90" +} diff --git a/backend/.sqlx/query-53a70f4bd6ded970841c6064352c69b019ff84059d9c06a0536eda45d468397c.json b/backend/.sqlx/query-53a70f4bd6ded970841c6064352c69b019ff84059d9c06a0536eda45d468397c.json new file mode 100644 index 0000000000000..fc68835cdd0e3 --- /dev/null +++ b/backend/.sqlx/query-53a70f4bd6ded970841c6064352c69b019ff84059d9c06a0536eda45d468397c.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM draft WHERE workspace_id = $1", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [] + }, + "hash": "53a70f4bd6ded970841c6064352c69b019ff84059d9c06a0536eda45d468397c" +} diff --git a/backend/.sqlx/query-53e7243abd724816fb8d09c63b7ffa65f1cd622a989f5cefedbbf3c143b387c4.json b/backend/.sqlx/query-53e7243abd724816fb8d09c63b7ffa65f1cd622a989f5cefedbbf3c143b387c4.json new file mode 100644 index 0000000000000..95c51c2a44d33 --- /dev/null +++ b/backend/.sqlx/query-53e7243abd724816fb8d09c63b7ffa65f1cd622a989f5cefedbbf3c143b387c4.json @@ -0,0 +1,46 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT workspace_id as workspace, path, summary, description, schema FROM script as o WHERE created_at = (select max(created_at) from script where o.path = path and workspace_id = $1) and workspace_id = $1", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "workspace", + "type_info": "Varchar" + }, + { + "ordinal": 1, + "name": "path", + "type_info": "Varchar" + }, + { + "ordinal": 2, + "name": "summary", + "type_info": "Text" + }, + { + "ordinal": 3, + "name": "description", + "type_info": "Text" + }, + { + "ordinal": 4, + "name": "schema", + "type_info": "Json" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + false, + false, + false, + false, + true + ] + }, + "hash": "53e7243abd724816fb8d09c63b7ffa65f1cd622a989f5cefedbbf3c143b387c4" +} diff --git a/backend/.sqlx/query-53ff0e14c35a3e84585a699e55093546db5c5f0ad0c5f92f34aaf2cdd125d130.json b/backend/.sqlx/query-53ff0e14c35a3e84585a699e55093546db5c5f0ad0c5f92f34aaf2cdd125d130.json new file mode 100644 index 0000000000000..ba39c470627ff --- /dev/null +++ b/backend/.sqlx/query-53ff0e14c35a3e84585a699e55093546db5c5f0ad0c5f92f34aaf2cdd125d130.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE queue\n SET suspend = $1, suspend_until = now() + interval '14 day', running = true\n WHERE id = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Int4", + "Uuid" + ] + }, + "nullable": [] + }, + "hash": "53ff0e14c35a3e84585a699e55093546db5c5f0ad0c5f92f34aaf2cdd125d130" +} diff --git a/backend/.sqlx/query-5422a53e642c491b02be5d17fe9d7389a42a84c21fea9876c84a5ba719b6ede5.json b/backend/.sqlx/query-5422a53e642c491b02be5d17fe9d7389a42a84c21fea9876c84a5ba719b6ede5.json new file mode 100644 index 0000000000000..7217822bfac51 --- /dev/null +++ b/backend/.sqlx/query-5422a53e642c491b02be5d17fe9d7389a42a84c21fea9876c84a5ba719b6ede5.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE draft SET workspace_id = $1 WHERE workspace_id = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Text" + ] + }, + "nullable": [] + }, + "hash": "5422a53e642c491b02be5d17fe9d7389a42a84c21fea9876c84a5ba719b6ede5" +} diff --git a/backend/.sqlx/query-543b8f6e4850c15439e9bed8432db071c361867f9603d962b6edec6c18160491.json b/backend/.sqlx/query-543b8f6e4850c15439e9bed8432db071c361867f9603d962b6edec6c18160491.json new file mode 100644 index 0000000000000..eb59d3ccdd342 --- /dev/null +++ b/backend/.sqlx/query-543b8f6e4850c15439e9bed8432db071c361867f9603d962b6edec6c18160491.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE token SET workspace_id = $1 WHERE workspace_id = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Text" + ] + }, + "nullable": [] + }, + "hash": "543b8f6e4850c15439e9bed8432db071c361867f9603d962b6edec6c18160491" +} diff --git a/backend/.sqlx/query-54756c6c39888feb2206b056df1c84c3bb44adc490309954359845c06b6e607c.json b/backend/.sqlx/query-54756c6c39888feb2206b056df1c84c3bb44adc490309954359845c06b6e607c.json new file mode 100644 index 0000000000000..39355ffc0c618 --- /dev/null +++ b/backend/.sqlx/query-54756c6c39888feb2206b056df1c84c3bb44adc490309954359845c06b6e607c.json @@ -0,0 +1,18 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO token\n (token, email, label, expiration, super_admin)\n VALUES ($1, $2, $3, $4, $5)", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Varchar", + "Varchar", + "Timestamptz", + "Bool" + ] + }, + "nullable": [] + }, + "hash": "54756c6c39888feb2206b056df1c84c3bb44adc490309954359845c06b6e607c" +} diff --git a/backend/.sqlx/query-54bb09f68de5615a75b2174032e5fcebc314eeeccbcc609ba154fd062fe0f2fd.json b/backend/.sqlx/query-54bb09f68de5615a75b2174032e5fcebc314eeeccbcc609ba154fd062fe0f2fd.json new file mode 100644 index 0000000000000..96b27171ce838 --- /dev/null +++ b/backend/.sqlx/query-54bb09f68de5615a75b2174032e5fcebc314eeeccbcc609ba154fd062fe0f2fd.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM deployment_metadata WHERE path = $1 AND workspace_id = $2 AND script_hash IS NOT NULL", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "54bb09f68de5615a75b2174032e5fcebc314eeeccbcc609ba154fd062fe0f2fd" +} diff --git a/backend/.sqlx/query-54c6be1469a80d88fd6d5c30772bb6698610189bac63c2caee3f4d52b0851f31.json b/backend/.sqlx/query-54c6be1469a80d88fd6d5c30772bb6698610189bac63c2caee3f4d52b0851f31.json new file mode 100644 index 0000000000000..c8759a01937a5 --- /dev/null +++ b/backend/.sqlx/query-54c6be1469a80d88fd6d5c30772bb6698610189bac63c2caee3f4d52b0851f31.json @@ -0,0 +1,20 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO password(email, verified, password_hash, login_type, super_admin, name, company, username)\n VALUES ($1, $2, $3, 'password', $4, $5, $6, $7)", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Bool", + "Varchar", + "Bool", + "Varchar", + "Varchar", + "Varchar" + ] + }, + "nullable": [] + }, + "hash": "54c6be1469a80d88fd6d5c30772bb6698610189bac63c2caee3f4d52b0851f31" +} diff --git a/backend/.sqlx/query-55a2f170823f1d1abce76287d8817a6cf34de92b9b4079c00b75423a9ff835b9.json b/backend/.sqlx/query-55a2f170823f1d1abce76287d8817a6cf34de92b9b4079c00b75423a9ff835b9.json new file mode 100644 index 0000000000000..7b7dd7fe29add --- /dev/null +++ b/backend/.sqlx/query-55a2f170823f1d1abce76287d8817a6cf34de92b9b4079c00b75423a9ff835b9.json @@ -0,0 +1,20 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO variable\n (workspace_id, path, value, is_secret, description, account, is_oauth)\n VALUES ($1, $2, $3, $4, $5, $6, $7)\n ON CONFLICT (workspace_id, path) DO UPDATE SET value = $3", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Varchar", + "Varchar", + "Bool", + "Varchar", + "Int4", + "Bool" + ] + }, + "nullable": [] + }, + "hash": "55a2f170823f1d1abce76287d8817a6cf34de92b9b4079c00b75423a9ff835b9" +} diff --git a/backend/.sqlx/query-55cb03040bc2a8c53dd7fbb42bbdcc40f463cbc52d94ed9315cf9a547d4c89f2.json b/backend/.sqlx/query-55cb03040bc2a8c53dd7fbb42bbdcc40f463cbc52d94ed9315cf9a547d4c89f2.json new file mode 100644 index 0000000000000..5f4f137cd975a --- /dev/null +++ b/backend/.sqlx/query-55cb03040bc2a8c53dd7fbb42bbdcc40f463cbc52d94ed9315cf9a547d4c89f2.json @@ -0,0 +1,154 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT * FROM workspace_settings WHERE slack_team_id = $1 AND slack_command_script IS NOT NULL", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "workspace_id", + "type_info": "Varchar" + }, + { + "ordinal": 1, + "name": "slack_team_id", + "type_info": "Varchar" + }, + { + "ordinal": 2, + "name": "slack_name", + "type_info": "Varchar" + }, + { + "ordinal": 3, + "name": "slack_command_script", + "type_info": "Varchar" + }, + { + "ordinal": 4, + "name": "slack_email", + "type_info": "Varchar" + }, + { + "ordinal": 5, + "name": "auto_invite_domain", + "type_info": "Varchar" + }, + { + "ordinal": 6, + "name": "auto_invite_operator", + "type_info": "Bool" + }, + { + "ordinal": 7, + "name": "customer_id", + "type_info": "Varchar" + }, + { + "ordinal": 8, + "name": "plan", + "type_info": "Varchar" + }, + { + "ordinal": 9, + "name": "webhook", + "type_info": "Text" + }, + { + "ordinal": 10, + "name": "deploy_to", + "type_info": "Varchar" + }, + { + "ordinal": 11, + "name": "error_handler", + "type_info": "Varchar" + }, + { + "ordinal": 12, + "name": "openai_resource_path", + "type_info": "Varchar" + }, + { + "ordinal": 13, + "name": "code_completion_enabled", + "type_info": "Bool" + }, + { + "ordinal": 14, + "name": "error_handler_extra_args", + "type_info": "Json" + }, + { + "ordinal": 15, + "name": "error_handler_muted_on_cancel", + "type_info": "Bool" + }, + { + "ordinal": 16, + "name": "large_file_storage", + "type_info": "Jsonb" + }, + { + "ordinal": 17, + "name": "git_sync", + "type_info": "Jsonb" + }, + { + "ordinal": 18, + "name": "default_app", + "type_info": "Varchar" + }, + { + "ordinal": 19, + "name": "auto_add", + "type_info": "Bool" + }, + { + "ordinal": 20, + "name": "automatic_billing", + "type_info": "Bool" + }, + { + "ordinal": 21, + "name": "default_scripts", + "type_info": "Jsonb" + }, + { + "ordinal": 22, + "name": "deploy_ui", + "type_info": "Jsonb" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + false, + true, + true, + true, + false, + true, + true, + true, + true, + true, + true, + true, + true, + false, + true, + false, + true, + true, + true, + true, + false, + true, + true + ] + }, + "hash": "55cb03040bc2a8c53dd7fbb42bbdcc40f463cbc52d94ed9315cf9a547d4c89f2" +} diff --git a/backend/.sqlx/query-55cf43cb9219b43f8e9f94b23b62846cd0b1ef5f64d20b0d975d0058730f427b.json b/backend/.sqlx/query-55cf43cb9219b43f8e9f94b23b62846cd0b1ef5f64d20b0d975d0058730f427b.json new file mode 100644 index 0000000000000..e68f25d6abd8a --- /dev/null +++ b/backend/.sqlx/query-55cf43cb9219b43f8e9f94b23b62846cd0b1ef5f64d20b0d975d0058730f427b.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT job FROM token WHERE token = $1", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "job", + "type_info": "Uuid" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + true + ] + }, + "hash": "55cf43cb9219b43f8e9f94b23b62846cd0b1ef5f64d20b0d975d0058730f427b" +} diff --git a/backend/.sqlx/query-55d44f569f8ebfccddf975e1a330ef0dc286f4138efe923832371cdbac7157b0.json b/backend/.sqlx/query-55d44f569f8ebfccddf975e1a330ef0dc286f4138efe923832371cdbac7157b0.json new file mode 100644 index 0000000000000..ca0a92206717a --- /dev/null +++ b/backend/.sqlx/query-55d44f569f8ebfccddf975e1a330ef0dc286f4138efe923832371cdbac7157b0.json @@ -0,0 +1,36 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE http_trigger SET script_path = $1, path = $2, is_flow = $3, http_method = $4, edited_by = $5, email = $6, is_async = $7, requires_auth = $8, edited_at = now() \n WHERE workspace_id = $9 AND path = $10", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Varchar", + "Bool", + { + "Custom": { + "name": "http_method", + "kind": { + "Enum": [ + "get", + "post", + "put", + "delete", + "patch" + ] + } + } + }, + "Varchar", + "Varchar", + "Bool", + "Bool", + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "55d44f569f8ebfccddf975e1a330ef0dc286f4138efe923832371cdbac7157b0" +} diff --git a/backend/.sqlx/query-565db14b889f69dfbda5db400a33223fd20548fb106d2a5e5669c0e23ecaa0eb.json b/backend/.sqlx/query-565db14b889f69dfbda5db400a33223fd20548fb106d2a5e5669c0e23ecaa0eb.json new file mode 100644 index 0000000000000..af526daf8f4f4 --- /dev/null +++ b/backend/.sqlx/query-565db14b889f69dfbda5db400a33223fd20548fb106d2a5e5669c0e23ecaa0eb.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT name FROM instance_group WHERE name = $1", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "name", + "type_info": "Varchar" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + false + ] + }, + "hash": "565db14b889f69dfbda5db400a33223fd20548fb106d2a5e5669c0e23ecaa0eb" +} diff --git a/backend/.sqlx/query-567ded2a717af9370a80c00bdb50d965fba9a3422c58e67ed2ed06dd107ae139.json b/backend/.sqlx/query-567ded2a717af9370a80c00bdb50d965fba9a3422c58e67ed2ed06dd107ae139.json new file mode 100644 index 0000000000000..4bebcfa03809a --- /dev/null +++ b/backend/.sqlx/query-567ded2a717af9370a80c00bdb50d965fba9a3422c58e67ed2ed06dd107ae139.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM script WHERE hash = $1 AND workspace_id = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Int8", + "Text" + ] + }, + "nullable": [] + }, + "hash": "567ded2a717af9370a80c00bdb50d965fba9a3422c58e67ed2ed06dd107ae139" +} diff --git a/backend/.sqlx/query-56eafd6d3c72f7114e3d6764184825e2671283fc70abba9a036e88699430af0f.json b/backend/.sqlx/query-56eafd6d3c72f7114e3d6764184825e2671283fc70abba9a036e88699430af0f.json new file mode 100644 index 0000000000000..9f22b4df19759 --- /dev/null +++ b/backend/.sqlx/query-56eafd6d3c72f7114e3d6764184825e2671283fc70abba9a036e88699430af0f.json @@ -0,0 +1,12 @@ +{ + "db_name": "PostgreSQL", + "query": "CREATE INDEX CONCURRENTLY labeled_jobs_on_jobs ON completed_job USING GIN ((result -> 'wm_labels')) WHERE result ? 'wm_labels'", + "describe": { + "columns": [], + "parameters": { + "Left": [] + }, + "nullable": [] + }, + "hash": "56eafd6d3c72f7114e3d6764184825e2671283fc70abba9a036e88699430af0f" +} diff --git a/backend/.sqlx/query-57111a97ff906fd79ecd8a571212cc4fea9cb9c16fe950f082ad5469bfeefc82.json b/backend/.sqlx/query-57111a97ff906fd79ecd8a571212cc4fea9cb9c16fe950f082ad5469bfeefc82.json new file mode 100644 index 0000000000000..388f66a43484d --- /dev/null +++ b/backend/.sqlx/query-57111a97ff906fd79ecd8a571212cc4fea9cb9c16fe950f082ad5469bfeefc82.json @@ -0,0 +1,41 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT created_by, CONCAT(coalesce(queue.logs, ''), coalesce(job_logs.logs, '')) as logs, job_logs.log_offset, job_logs.log_file_index\n FROM queue \n LEFT JOIN job_logs ON job_logs.job_id = queue.id \n WHERE queue.id = $1 AND queue.workspace_id = $2", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "created_by", + "type_info": "Varchar" + }, + { + "ordinal": 1, + "name": "logs", + "type_info": "Text" + }, + { + "ordinal": 2, + "name": "log_offset", + "type_info": "Int4" + }, + { + "ordinal": 3, + "name": "log_file_index", + "type_info": "TextArray" + } + ], + "parameters": { + "Left": [ + "Uuid", + "Text" + ] + }, + "nullable": [ + false, + null, + false, + true + ] + }, + "hash": "57111a97ff906fd79ecd8a571212cc4fea9cb9c16fe950f082ad5469bfeefc82" +} diff --git a/backend/.sqlx/query-574d9a2bb6eceb62f3d2c2be3f18b29ef8bba3d6da1b1e21f2ca307ccbebee89.json b/backend/.sqlx/query-574d9a2bb6eceb62f3d2c2be3f18b29ef8bba3d6da1b1e21f2ca307ccbebee89.json new file mode 100644 index 0000000000000..dd673ef52ce36 --- /dev/null +++ b/backend/.sqlx/query-574d9a2bb6eceb62f3d2c2be3f18b29ef8bba3d6da1b1e21f2ca307ccbebee89.json @@ -0,0 +1,16 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE instance_group SET scim_display_name = $1, name = $2 where id = $3", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Varchar", + "Text" + ] + }, + "nullable": [] + }, + "hash": "574d9a2bb6eceb62f3d2c2be3f18b29ef8bba3d6da1b1e21f2ca307ccbebee89" +} diff --git a/backend/.sqlx/query-576b00c515ee7cbf628b1881596d8a03c1c506b309e39a0048a3a8fe18f37070.json b/backend/.sqlx/query-576b00c515ee7cbf628b1881596d8a03c1c506b309e39a0048a3a8fe18f37070.json new file mode 100644 index 0000000000000..04efb0446f887 --- /dev/null +++ b/backend/.sqlx/query-576b00c515ee7cbf628b1881596d8a03c1c506b309e39a0048a3a8fe18f37070.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE schedule SET error = NULL WHERE workspace_id = $1 AND path = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "576b00c515ee7cbf628b1881596d8a03c1c506b309e39a0048a3a8fe18f37070" +} diff --git a/backend/.sqlx/query-5850e0c1f7dee98455027a4c0db6ccea0af2c58aee656ef43964b515de054888.json b/backend/.sqlx/query-5850e0c1f7dee98455027a4c0db6ccea0af2c58aee656ef43964b515de054888.json new file mode 100644 index 0000000000000..18c6fb225a415 --- /dev/null +++ b/backend/.sqlx/query-5850e0c1f7dee98455027a4c0db6ccea0af2c58aee656ef43964b515de054888.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT EXISTS(SELECT 1 FROM app WHERE path = $1 AND workspace_id = $2)", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "exists", + "type_info": "Bool" + } + ], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [ + null + ] + }, + "hash": "5850e0c1f7dee98455027a4c0db6ccea0af2c58aee656ef43964b515de054888" +} diff --git a/backend/.sqlx/query-5876d8271adcb75752d518fc52ac192e162469a504338b4a0a37e8bcec114385.json b/backend/.sqlx/query-5876d8271adcb75752d518fc52ac192e162469a504338b4a0a37e8bcec114385.json new file mode 100644 index 0000000000000..0d3b712e9ecf9 --- /dev/null +++ b/backend/.sqlx/query-5876d8271adcb75752d518fc52ac192e162469a504338b4a0a37e8bcec114385.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE folder SET workspace_id = $1 WHERE workspace_id = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Text" + ] + }, + "nullable": [] + }, + "hash": "5876d8271adcb75752d518fc52ac192e162469a504338b4a0a37e8bcec114385" +} diff --git a/backend/.sqlx/query-58aa2e6de6cb9724750dae7405d664080e8d810278ff0dd52a2b8bfb7270fe44.json b/backend/.sqlx/query-58aa2e6de6cb9724750dae7405d664080e8d810278ff0dd52a2b8bfb7270fe44.json new file mode 100644 index 0000000000000..a607cf1065dcb --- /dev/null +++ b/backend/.sqlx/query-58aa2e6de6cb9724750dae7405d664080e8d810278ff0dd52a2b8bfb7270fe44.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM workspace_env WHERE workspace_id = $1 AND name = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "58aa2e6de6cb9724750dae7405d664080e8d810278ff0dd52a2b8bfb7270fe44" +} diff --git a/backend/.sqlx/query-598d4be56bb8c5174b279c183fffa96f763e48316fb7420f2aad733562cab582.json b/backend/.sqlx/query-598d4be56bb8c5174b279c183fffa96f763e48316fb7420f2aad733562cab582.json new file mode 100644 index 0000000000000..9fbc1ed77471d --- /dev/null +++ b/backend/.sqlx/query-598d4be56bb8c5174b279c183fffa96f763e48316fb7420f2aad733562cab582.json @@ -0,0 +1,68 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT email, password_hash, login_type, super_admin, verified, name, company, first_time_user, username FROM password", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "email", + "type_info": "Varchar" + }, + { + "ordinal": 1, + "name": "password_hash", + "type_info": "Varchar" + }, + { + "ordinal": 2, + "name": "login_type", + "type_info": "Varchar" + }, + { + "ordinal": 3, + "name": "super_admin", + "type_info": "Bool" + }, + { + "ordinal": 4, + "name": "verified", + "type_info": "Bool" + }, + { + "ordinal": 5, + "name": "name", + "type_info": "Varchar" + }, + { + "ordinal": 6, + "name": "company", + "type_info": "Varchar" + }, + { + "ordinal": 7, + "name": "first_time_user", + "type_info": "Bool" + }, + { + "ordinal": 8, + "name": "username", + "type_info": "Varchar" + } + ], + "parameters": { + "Left": [] + }, + "nullable": [ + false, + true, + false, + false, + false, + true, + true, + false, + true + ] + }, + "hash": "598d4be56bb8c5174b279c183fffa96f763e48316fb7420f2aad733562cab582" +} diff --git a/backend/.sqlx/query-59f6de54d604c7f724ae886928b2f8bf71a5c80991207d2576fb965e5ac60f15.json b/backend/.sqlx/query-59f6de54d604c7f724ae886928b2f8bf71a5c80991207d2576fb965e5ac60f15.json new file mode 100644 index 0000000000000..8cb16fd6ebf43 --- /dev/null +++ b/backend/.sqlx/query-59f6de54d604c7f724ae886928b2f8bf71a5c80991207d2576fb965e5ac60f15.json @@ -0,0 +1,16 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE favorite SET usr = $1 WHERE usr = $2 AND workspace_id = $3", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "59f6de54d604c7f724ae886928b2f8bf71a5c80991207d2576fb965e5ac60f15" +} diff --git a/backend/.sqlx/query-5a0333e29280c0814d62473b5e5e7b187c4d8cbf2caeb645bfef82f6880467a7.json b/backend/.sqlx/query-5a0333e29280c0814d62473b5e5e7b187c4d8cbf2caeb645bfef82f6880467a7.json new file mode 100644 index 0000000000000..66f8f90aaff23 --- /dev/null +++ b/backend/.sqlx/query-5a0333e29280c0814d62473b5e5e7b187c4d8cbf2caeb645bfef82f6880467a7.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT data FROM raw_app\n WHERE path = $1 AND workspace_id = $2", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "data", + "type_info": "Text" + } + ], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [ + false + ] + }, + "hash": "5a0333e29280c0814d62473b5e5e7b187c4d8cbf2caeb645bfef82f6880467a7" +} diff --git a/backend/.sqlx/query-5b7a1d16d8109a65479ab33d411c60d14ea91d870fdff8606d7aa4ad39f0ba00.json b/backend/.sqlx/query-5b7a1d16d8109a65479ab33d411c60d14ea91d870fdff8606d7aa4ad39f0ba00.json new file mode 100644 index 0000000000000..82f052da9fe5e --- /dev/null +++ b/backend/.sqlx/query-5b7a1d16d8109a65479ab33d411c60d14ea91d870fdff8606d7aa4ad39f0ba00.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT email FROM usr WHERE username = $1 AND workspace_id = $2", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "email", + "type_info": "Varchar" + } + ], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [ + false + ] + }, + "hash": "5b7a1d16d8109a65479ab33d411c60d14ea91d870fdff8606d7aa4ad39f0ba00" +} diff --git a/backend/.sqlx/query-5b9b58612ca0f703a5d154a76fab82ac2329aef965fa937bfab2810b6e1336a4.json b/backend/.sqlx/query-5b9b58612ca0f703a5d154a76fab82ac2329aef965fa937bfab2810b6e1336a4.json new file mode 100644 index 0000000000000..d2762af5f1497 --- /dev/null +++ b/backend/.sqlx/query-5b9b58612ca0f703a5d154a76fab82ac2329aef965fa937bfab2810b6e1336a4.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM group_ WHERE name = $1 AND workspace_id = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "5b9b58612ca0f703a5d154a76fab82ac2329aef965fa937bfab2810b6e1336a4" +} diff --git a/backend/.sqlx/query-5ba4b87528ad49f17d72b53c3db30f5ca4b3b0b0afbd5d9721c8b5d692af601b.json b/backend/.sqlx/query-5ba4b87528ad49f17d72b53c3db30f5ca4b3b0b0afbd5d9721c8b5d692af601b.json new file mode 100644 index 0000000000000..f8b5b54892425 --- /dev/null +++ b/backend/.sqlx/query-5ba4b87528ad49f17d72b53c3db30f5ca4b3b0b0afbd5d9721c8b5d692af601b.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT COUNT(id) FROM queue WHERE email = $1", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "count", + "type_info": "Int8" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + null + ] + }, + "hash": "5ba4b87528ad49f17d72b53c3db30f5ca4b3b0b0afbd5d9721c8b5d692af601b" +} diff --git a/backend/.sqlx/query-5bdf8d82eed7e14cb3feb2ca597aac374c160428329526715d840fc46fdb0501.json b/backend/.sqlx/query-5bdf8d82eed7e14cb3feb2ca597aac374c160428329526715d840fc46fdb0501.json new file mode 100644 index 0000000000000..3a8d17ec64bd8 --- /dev/null +++ b/backend/.sqlx/query-5bdf8d82eed7e14cb3feb2ca597aac374c160428329526715d840fc46fdb0501.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT large_file_storage->'secondary_storage'->$2 FROM workspace_settings WHERE workspace_id = $1", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "?column?", + "type_info": "Jsonb" + } + ], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [ + null + ] + }, + "hash": "5bdf8d82eed7e14cb3feb2ca597aac374c160428329526715d840fc46fdb0501" +} diff --git a/backend/.sqlx/query-5d1ec728380ea8baf64df54743e73008ee9a58e6f39a5bf31a2ed099727f5c04.json b/backend/.sqlx/query-5d1ec728380ea8baf64df54743e73008ee9a58e6f39a5bf31a2ed099727f5c04.json new file mode 100644 index 0000000000000..8a4fb840b1adb --- /dev/null +++ b/backend/.sqlx/query-5d1ec728380ea8baf64df54743e73008ee9a58e6f39a5bf31a2ed099727f5c04.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT EXISTS(SELECT 1 FROM worker_ping WHERE custom_tags @> $1 AND ping_at > now() - interval '1 minute')", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "exists", + "type_info": "Bool" + } + ], + "parameters": { + "Left": [ + "TextArray" + ] + }, + "nullable": [ + null + ] + }, + "hash": "5d1ec728380ea8baf64df54743e73008ee9a58e6f39a5bf31a2ed099727f5c04" +} diff --git a/backend/.sqlx/query-5d3c05e6f3a13cc748bb17913b56d7e85afad258c5c8b17114737eacc268a454.json b/backend/.sqlx/query-5d3c05e6f3a13cc748bb17913b56d7e85afad258c5c8b17114737eacc268a454.json new file mode 100644 index 0000000000000..b15975902b94c --- /dev/null +++ b/backend/.sqlx/query-5d3c05e6f3a13cc748bb17913b56d7e85afad258c5c8b17114737eacc268a454.json @@ -0,0 +1,16 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE app SET versions = array_append(versions, $1::bigint) WHERE path = $2 AND workspace_id = $3", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Int8", + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "5d3c05e6f3a13cc748bb17913b56d7e85afad258c5c8b17114737eacc268a454" +} diff --git a/backend/.sqlx/query-5d6adbe21b9f8dd984d1bfc750fb81763d8650c1316bb0b20816f1a5d61a678c.json b/backend/.sqlx/query-5d6adbe21b9f8dd984d1bfc750fb81763d8650c1316bb0b20816f1a5d61a678c.json new file mode 100644 index 0000000000000..78dea070eae50 --- /dev/null +++ b/backend/.sqlx/query-5d6adbe21b9f8dd984d1bfc750fb81763d8650c1316bb0b20816f1a5d61a678c.json @@ -0,0 +1,64 @@ +{ + "db_name": "PostgreSQL", + "query": "\n SELECT *\n FROM usr\n WHERE workspace_id = $1\n ", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "workspace_id", + "type_info": "Varchar" + }, + { + "ordinal": 1, + "name": "username", + "type_info": "Varchar" + }, + { + "ordinal": 2, + "name": "email", + "type_info": "Varchar" + }, + { + "ordinal": 3, + "name": "is_admin", + "type_info": "Bool" + }, + { + "ordinal": 4, + "name": "created_at", + "type_info": "Timestamptz" + }, + { + "ordinal": 5, + "name": "operator", + "type_info": "Bool" + }, + { + "ordinal": 6, + "name": "disabled", + "type_info": "Bool" + }, + { + "ordinal": 7, + "name": "role", + "type_info": "Varchar" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + false, + false, + false, + false, + false, + false, + false, + true + ] + }, + "hash": "5d6adbe21b9f8dd984d1bfc750fb81763d8650c1316bb0b20816f1a5d61a678c" +} diff --git a/backend/.sqlx/query-5d79c4817696d0ba0d2062eef27ff3856fc4a732adf5796e9b06c826406584dc.json b/backend/.sqlx/query-5d79c4817696d0ba0d2062eef27ff3856fc4a732adf5796e9b06c826406584dc.json new file mode 100644 index 0000000000000..9bdc6fac55b9c --- /dev/null +++ b/backend/.sqlx/query-5d79c4817696d0ba0d2062eef27ff3856fc4a732adf5796e9b06c826406584dc.json @@ -0,0 +1,16 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE completed_job SET permissioned_as = ('u/' || $1) WHERE permissioned_as = ('u/' || $2) AND workspace_id = $3", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "5d79c4817696d0ba0d2062eef27ff3856fc4a732adf5796e9b06c826406584dc" +} diff --git a/backend/.sqlx/query-5dfa6932d7c6d5006fe352da3041680b2ee1ebe9258355a0db24ce4fd26f23de.json b/backend/.sqlx/query-5dfa6932d7c6d5006fe352da3041680b2ee1ebe9258355a0db24ce4fd26f23de.json new file mode 100644 index 0000000000000..0416e38fb15f6 --- /dev/null +++ b/backend/.sqlx/query-5dfa6932d7c6d5006fe352da3041680b2ee1ebe9258355a0db24ce4fd26f23de.json @@ -0,0 +1,25 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE queue SET canceled = true, canceled_by = $1, canceled_reason = $2, scheduled_for = now(), suspend = 0 WHERE id = $3 AND workspace_id = $4 AND (canceled = false OR canceled_reason != $2) RETURNING id", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "id", + "type_info": "Uuid" + } + ], + "parameters": { + "Left": [ + "Varchar", + "Text", + "Uuid", + "Text" + ] + }, + "nullable": [ + false + ] + }, + "hash": "5dfa6932d7c6d5006fe352da3041680b2ee1ebe9258355a0db24ce4fd26f23de" +} diff --git a/backend/.sqlx/query-5e4e0740e1cff4b2a7c620da3758604a47f81b505fa9a713efa3519b050b546a.json b/backend/.sqlx/query-5e4e0740e1cff4b2a7c620da3758604a47f81b505fa9a713efa3519b050b546a.json new file mode 100644 index 0000000000000..129074f3fbd06 --- /dev/null +++ b/backend/.sqlx/query-5e4e0740e1cff4b2a7c620da3758604a47f81b505fa9a713efa3519b050b546a.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT large_file_storage FROM workspace_settings WHERE workspace_id = $1", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "large_file_storage", + "type_info": "Jsonb" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + true + ] + }, + "hash": "5e4e0740e1cff4b2a7c620da3758604a47f81b505fa9a713efa3519b050b546a" +} diff --git a/backend/.sqlx/query-5eb1e072a6cc6ace25a5806b5adfdc0ae5c89c556daf491f39e629951a912c6c.json b/backend/.sqlx/query-5eb1e072a6cc6ace25a5806b5adfdc0ae5c89c556daf491f39e629951a912c6c.json new file mode 100644 index 0000000000000..2785225571bd6 --- /dev/null +++ b/backend/.sqlx/query-5eb1e072a6cc6ace25a5806b5adfdc0ae5c89c556daf491f39e629951a912c6c.json @@ -0,0 +1,16 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE resource SET created_by = $1 WHERE created_by = $2 AND workspace_id = $3", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "5eb1e072a6cc6ace25a5806b5adfdc0ae5c89c556daf491f39e629951a912c6c" +} diff --git a/backend/.sqlx/query-5eff32a37ad4e8b499a82c1874061f6456ded4aca6b33964e138b935cb016eff.json b/backend/.sqlx/query-5eff32a37ad4e8b499a82c1874061f6456ded4aca6b33964e138b935cb016eff.json new file mode 100644 index 0000000000000..757a1b3bb68da --- /dev/null +++ b/backend/.sqlx/query-5eff32a37ad4e8b499a82c1874061f6456ded4aca6b33964e138b935cb016eff.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT key FROM concurrency_key WHERE job_id = $1", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "key", + "type_info": "Varchar" + } + ], + "parameters": { + "Left": [ + "Uuid" + ] + }, + "nullable": [ + false + ] + }, + "hash": "5eff32a37ad4e8b499a82c1874061f6456ded4aca6b33964e138b935cb016eff" +} diff --git a/backend/.sqlx/query-5f22a7c9170f035779782591b4bfb1d462d5c796f08c7481c42154f9bfacf388.json b/backend/.sqlx/query-5f22a7c9170f035779782591b4bfb1d462d5c796f08c7481c42154f9bfacf388.json new file mode 100644 index 0000000000000..1aea7e585cf3d --- /dev/null +++ b/backend/.sqlx/query-5f22a7c9170f035779782591b4bfb1d462d5c796f08c7481c42154f9bfacf388.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO healthchecks (check_type, healthy) \n SELECT 'min_alive_workers_' || $1, false\n WHERE NOT EXISTS (\n SELECT 1 FROM healthchecks \n WHERE check_type = 'min_alive_workers_' || $1 AND created_at > NOW() - INTERVAL '2 minutes'\n )\n RETURNING id", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "id", + "type_info": "Int8" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + false + ] + }, + "hash": "5f22a7c9170f035779782591b4bfb1d462d5c796f08c7481c42154f9bfacf388" +} diff --git a/backend/.sqlx/query-5f3f1f1ca72b0392f227d22adef9ef795049e60a823e8ce754a3f9d91ef1b6bb.json b/backend/.sqlx/query-5f3f1f1ca72b0392f227d22adef9ef795049e60a823e8ce754a3f9d91ef1b6bb.json new file mode 100644 index 0000000000000..d099fc8b2acb8 --- /dev/null +++ b/backend/.sqlx/query-5f3f1f1ca72b0392f227d22adef9ef795049e60a823e8ce754a3f9d91ef1b6bb.json @@ -0,0 +1,20 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO folder (workspace_id, name, display_name, owners, extra_perms, summary, created_by, edited_at) VALUES ($1, $2, $3, $4, $5, $6, $7, now())", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Varchar", + "Varchar", + "VarcharArray", + "Jsonb", + "Text", + "Varchar" + ] + }, + "nullable": [] + }, + "hash": "5f3f1f1ca72b0392f227d22adef9ef795049e60a823e8ce754a3f9d91ef1b6bb" +} diff --git a/backend/.sqlx/query-5ff7df54c7908a7de494ddae5fc7bb9be8106a79e0683cd34459585bbd920ce4.json b/backend/.sqlx/query-5ff7df54c7908a7de494ddae5fc7bb9be8106a79e0683cd34459585bbd920ce4.json new file mode 100644 index 0000000000000..45bca31fd0f35 --- /dev/null +++ b/backend/.sqlx/query-5ff7df54c7908a7de494ddae5fc7bb9be8106a79e0683cd34459585bbd920ce4.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT flow_version.value->>'concurrency_key'\n FROM flow \n LEFT JOIN flow_version\n ON flow_version.id = flow.versions[array_upper(flow.versions, 1)]\n WHERE flow.path = $1 AND flow.workspace_id = $2", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "?column?", + "type_info": "Text" + } + ], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [ + null + ] + }, + "hash": "5ff7df54c7908a7de494ddae5fc7bb9be8106a79e0683cd34459585bbd920ce4" +} diff --git a/backend/.sqlx/query-6032ab9ab230c48a44f684e70ebc3277a2543cd3b52a3123b0585f6c9071552c.json b/backend/.sqlx/query-6032ab9ab230c48a44f684e70ebc3277a2543cd3b52a3123b0585f6c9071552c.json new file mode 100644 index 0000000000000..aa8142ab1aef0 --- /dev/null +++ b/backend/.sqlx/query-6032ab9ab230c48a44f684e70ebc3277a2543cd3b52a3123b0585f6c9071552c.json @@ -0,0 +1,46 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT name, id, scim_display_name, array_remove(array_agg(email_to_igroup.email), null) as emails, external_id FROM email_to_igroup RIGHT JOIN instance_group ON instance_group.name = email_to_igroup.igroup WHERE id = $1 group by name, id", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "name", + "type_info": "Varchar" + }, + { + "ordinal": 1, + "name": "id", + "type_info": "Varchar" + }, + { + "ordinal": 2, + "name": "scim_display_name", + "type_info": "Varchar" + }, + { + "ordinal": 3, + "name": "emails", + "type_info": "VarcharArray" + }, + { + "ordinal": 4, + "name": "external_id", + "type_info": "Varchar" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + false, + true, + true, + null, + true + ] + }, + "hash": "6032ab9ab230c48a44f684e70ebc3277a2543cd3b52a3123b0585f6c9071552c" +} diff --git a/backend/.sqlx/query-60b3a59805d463a61eed68072d1ea032b00fc9bd7a6db22f530f67eb9730fa3b.json b/backend/.sqlx/query-60b3a59805d463a61eed68072d1ea032b00fc9bd7a6db22f530f67eb9730fa3b.json new file mode 100644 index 0000000000000..70ae06505c636 --- /dev/null +++ b/backend/.sqlx/query-60b3a59805d463a61eed68072d1ea032b00fc9bd7a6db22f530f67eb9730fa3b.json @@ -0,0 +1,65 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT * FROM usr WHERE username = $1 AND workspace_id = $2", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "workspace_id", + "type_info": "Varchar" + }, + { + "ordinal": 1, + "name": "username", + "type_info": "Varchar" + }, + { + "ordinal": 2, + "name": "email", + "type_info": "Varchar" + }, + { + "ordinal": 3, + "name": "is_admin", + "type_info": "Bool" + }, + { + "ordinal": 4, + "name": "created_at", + "type_info": "Timestamptz" + }, + { + "ordinal": 5, + "name": "operator", + "type_info": "Bool" + }, + { + "ordinal": 6, + "name": "disabled", + "type_info": "Bool" + }, + { + "ordinal": 7, + "name": "role", + "type_info": "Varchar" + } + ], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [ + false, + false, + false, + false, + false, + false, + false, + true + ] + }, + "hash": "60b3a59805d463a61eed68072d1ea032b00fc9bd7a6db22f530f67eb9730fa3b" +} diff --git a/backend/.sqlx/query-60cd5ea09b2eba9df97ab011dd8575940a9dd5e244f3e877d3802fc88087234b.json b/backend/.sqlx/query-60cd5ea09b2eba9df97ab011dd8575940a9dd5e244f3e877d3802fc88087234b.json new file mode 100644 index 0000000000000..ec835ce212d2d --- /dev/null +++ b/backend/.sqlx/query-60cd5ea09b2eba9df97ab011dd8575940a9dd5e244f3e877d3802fc88087234b.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM input WHERE workspace_id = $1", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [] + }, + "hash": "60cd5ea09b2eba9df97ab011dd8575940a9dd5e244f3e877d3802fc88087234b" +} diff --git a/backend/.sqlx/query-611e3cd49d38a37db8912397c4eddd7cd50a4782101e971175d0c5c798593a40.json b/backend/.sqlx/query-611e3cd49d38a37db8912397c4eddd7cd50a4782101e971175d0c5c798593a40.json new file mode 100644 index 0000000000000..679b05d29d16a --- /dev/null +++ b/backend/.sqlx/query-611e3cd49d38a37db8912397c4eddd7cd50a4782101e971175d0c5c798593a40.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT id FROM queue WHERE workspace_id = $1 and root_job = $2", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "id", + "type_info": "Uuid" + } + ], + "parameters": { + "Left": [ + "Text", + "Uuid" + ] + }, + "nullable": [ + false + ] + }, + "hash": "611e3cd49d38a37db8912397c4eddd7cd50a4782101e971175d0c5c798593a40" +} diff --git a/backend/.sqlx/query-61656548991bf6d44c839373cb3e29d3ca1170a2ac0d3dce0b5df0e8677a4874.json b/backend/.sqlx/query-61656548991bf6d44c839373cb3e29d3ca1170a2ac0d3dce0b5df0e8677a4874.json new file mode 100644 index 0000000000000..1cb035f45616a --- /dev/null +++ b/backend/.sqlx/query-61656548991bf6d44c839373cb3e29d3ca1170a2ac0d3dce0b5df0e8677a4874.json @@ -0,0 +1,16 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE queue\n SET flow_status = JSONB_SET(flow_status, ARRAY['modules', $1::TEXT], $2)\n WHERE id = $3", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Jsonb", + "Uuid" + ] + }, + "nullable": [] + }, + "hash": "61656548991bf6d44c839373cb3e29d3ca1170a2ac0d3dce0b5df0e8677a4874" +} diff --git a/backend/.sqlx/query-6199e8be5cb13db71108e555ea20f0b76dc38476670f9fc0667b057d2766d42e.json b/backend/.sqlx/query-6199e8be5cb13db71108e555ea20f0b76dc38476670f9fc0667b057d2766d42e.json new file mode 100644 index 0000000000000..2313dd087c75d --- /dev/null +++ b/backend/.sqlx/query-6199e8be5cb13db71108e555ea20f0b76dc38476670f9fc0667b057d2766d42e.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT set_config('session.groups', $1, true)", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "set_config", + "type_info": "Text" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + null + ] + }, + "hash": "6199e8be5cb13db71108e555ea20f0b76dc38476670f9fc0667b057d2766d42e" +} diff --git a/backend/.sqlx/query-61c7c3dfa84e7f683a2251a72fe954ac9a23791e676ac69a9909ea0b9d4903e8.json b/backend/.sqlx/query-61c7c3dfa84e7f683a2251a72fe954ac9a23791e676ac69a9909ea0b9d4903e8.json new file mode 100644 index 0000000000000..f1387a4dd236d --- /dev/null +++ b/backend/.sqlx/query-61c7c3dfa84e7f683a2251a72fe954ac9a23791e676ac69a9909ea0b9d4903e8.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT default_scripts FROM workspace_settings WHERE workspace_id = $1", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "default_scripts", + "type_info": "Jsonb" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + true + ] + }, + "hash": "61c7c3dfa84e7f683a2251a72fe954ac9a23791e676ac69a9909ea0b9d4903e8" +} diff --git a/backend/.sqlx/query-621e9a2a53187dac3ebed62f0d645b692815f1594bf302dbebd5f80d5d22b98e.json b/backend/.sqlx/query-621e9a2a53187dac3ebed62f0d645b692815f1594bf302dbebd5f80d5d22b98e.json new file mode 100644 index 0000000000000..6a66bb6f22f20 --- /dev/null +++ b/backend/.sqlx/query-621e9a2a53187dac3ebed62f0d645b692815f1594bf302dbebd5f80d5d22b98e.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO usage (id, is_workspace, month_, usage)\n VALUES ($1, TRUE, EXTRACT(YEAR FROM current_date) * 12 + EXTRACT(MONTH FROM current_date), 1)\n ON CONFLICT (id, is_workspace, month_) DO UPDATE SET usage = usage.usage + 1 \n RETURNING usage.usage", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "usage", + "type_info": "Int4" + } + ], + "parameters": { + "Left": [ + "Varchar" + ] + }, + "nullable": [ + false + ] + }, + "hash": "621e9a2a53187dac3ebed62f0d645b692815f1594bf302dbebd5f80d5d22b98e" +} diff --git a/backend/.sqlx/query-6239e15d2389e24e290d86bb96e3ade1656cd403000a34a19a942993b60ff612.json b/backend/.sqlx/query-6239e15d2389e24e290d86bb96e3ade1656cd403000a34a19a942993b60ff612.json new file mode 100644 index 0000000000000..19ca4025d8b8d --- /dev/null +++ b/backend/.sqlx/query-6239e15d2389e24e290d86bb96e3ade1656cd403000a34a19a942993b60ff612.json @@ -0,0 +1,16 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE queue SET schedule_path = REGEXP_REPLACE(schedule_path,'u/' || $2 || '/(.*)','u/' || $1 || '/\\1') WHERE schedule_path LIKE ('u/' || $2 || '/%') AND workspace_id = $3", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "6239e15d2389e24e290d86bb96e3ade1656cd403000a34a19a942993b60ff612" +} diff --git a/backend/.sqlx/query-62432110a09e68593ac52b3174c8bfa8736d5c7c1d8c7d6bed68f0dd9e06db7b.json b/backend/.sqlx/query-62432110a09e68593ac52b3174c8bfa8736d5c7c1d8c7d6bed68f0dd9e06db7b.json new file mode 100644 index 0000000000000..93307d65492d0 --- /dev/null +++ b/backend/.sqlx/query-62432110a09e68593ac52b3174c8bfa8736d5c7c1d8c7d6bed68f0dd9e06db7b.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT EXISTS(SELECT 1 FROM usr WHERE username = $1 AND workspace_id = $2)", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "exists", + "type_info": "Bool" + } + ], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [ + null + ] + }, + "hash": "62432110a09e68593ac52b3174c8bfa8736d5c7c1d8c7d6bed68f0dd9e06db7b" +} diff --git a/backend/.sqlx/query-6268eabd561502a44e273d6391102278974623f7a7bcad6891d7abadf4d3ea03.json b/backend/.sqlx/query-6268eabd561502a44e273d6391102278974623f7a7bcad6891d7abadf4d3ea03.json new file mode 100644 index 0000000000000..fe7c2cf5c3542 --- /dev/null +++ b/backend/.sqlx/query-6268eabd561502a44e273d6391102278974623f7a7bcad6891d7abadf4d3ea03.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE workspace_settings SET openai_resource_path = NULL, code_completion_enabled = $1 WHERE workspace_id = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Bool", + "Text" + ] + }, + "nullable": [] + }, + "hash": "6268eabd561502a44e273d6391102278974623f7a7bcad6891d7abadf4d3ea03" +} diff --git a/backend/.sqlx/query-631d4637e4137a0680ffa56e4639c009214eeaee8fd27a0d3050998b354c45ff.json b/backend/.sqlx/query-631d4637e4137a0680ffa56e4639c009214eeaee8fd27a0d3050998b354c45ff.json new file mode 100644 index 0000000000000..d38bf2297340d --- /dev/null +++ b/backend/.sqlx/query-631d4637e4137a0680ffa56e4639c009214eeaee8fd27a0d3050998b354c45ff.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE queue\n SET last_ping = null\n WHERE id = $1 AND last_ping = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Uuid", + "Timestamptz" + ] + }, + "nullable": [] + }, + "hash": "631d4637e4137a0680ffa56e4639c009214eeaee8fd27a0d3050998b354c45ff" +} diff --git a/backend/.sqlx/query-64920b845c0ce81fb99497c03b249bb6cb06581079b5fc5bea5ddd8e7a895b79.json b/backend/.sqlx/query-64920b845c0ce81fb99497c03b249bb6cb06581079b5fc5bea5ddd8e7a895b79.json new file mode 100644 index 0000000000000..d201c1c08e341 --- /dev/null +++ b/backend/.sqlx/query-64920b845c0ce81fb99497c03b249bb6cb06581079b5fc5bea5ddd8e7a895b79.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "select path from script where hash = $1 AND workspace_id = $2", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "path", + "type_info": "Varchar" + } + ], + "parameters": { + "Left": [ + "Int8", + "Text" + ] + }, + "nullable": [ + false + ] + }, + "hash": "64920b845c0ce81fb99497c03b249bb6cb06581079b5fc5bea5ddd8e7a895b79" +} diff --git a/backend/.sqlx/query-64a3b92ce4366518423bc536efe33415b43b325d7380e0c7062c392c7ba51e59.json b/backend/.sqlx/query-64a3b92ce4366518423bc536efe33415b43b325d7380e0c7062c392c7ba51e59.json new file mode 100644 index 0000000000000..8912828eb279f --- /dev/null +++ b/backend/.sqlx/query-64a3b92ce4366518423bc536efe33415b43b325d7380e0c7062c392c7ba51e59.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM job_perms WHERE job_id = $1", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Uuid" + ] + }, + "nullable": [] + }, + "hash": "64a3b92ce4366518423bc536efe33415b43b325d7380e0c7062c392c7ba51e59" +} diff --git a/backend/.sqlx/query-64adf72c19023b03a47d48444b1cf970559b3ef735274ef0fef6f47b4c68da7e.json b/backend/.sqlx/query-64adf72c19023b03a47d48444b1cf970559b3ef735274ef0fef6f47b4c68da7e.json new file mode 100644 index 0000000000000..d90022a58d2cc --- /dev/null +++ b/backend/.sqlx/query-64adf72c19023b03a47d48444b1cf970559b3ef735274ef0fef6f47b4c68da7e.json @@ -0,0 +1,27 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE schedule SET ws_error_handler_muted = $1, on_failure = $2, on_failure_extra_args = $3, on_failure_times = $4, on_failure_exact = $5 WHERE workspace_id = $6 RETURNING path", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "path", + "type_info": "Varchar" + } + ], + "parameters": { + "Left": [ + "Bool", + "Varchar", + "Json", + "Int4", + "Bool", + "Text" + ] + }, + "nullable": [ + false + ] + }, + "hash": "64adf72c19023b03a47d48444b1cf970559b3ef735274ef0fef6f47b4c68da7e" +} diff --git a/backend/.sqlx/query-64c5ca0bd4a2c42d6f5415fae1de21295673c45e4caae1bdbb47517d4608dc8d.json b/backend/.sqlx/query-64c5ca0bd4a2c42d6f5415fae1de21295673c45e4caae1bdbb47517d4608dc8d.json new file mode 100644 index 0000000000000..d2460a340bb2e --- /dev/null +++ b/backend/.sqlx/query-64c5ca0bd4a2c42d6f5415fae1de21295673c45e4caae1bdbb47517d4608dc8d.json @@ -0,0 +1,17 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE workspace_settings SET auto_invite_domain = $1, auto_invite_operator = $2, auto_add = $4 WHERE workspace_id = $3", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Bool", + "Text", + "Bool" + ] + }, + "nullable": [] + }, + "hash": "64c5ca0bd4a2c42d6f5415fae1de21295673c45e4caae1bdbb47517d4608dc8d" +} diff --git a/backend/.sqlx/query-64ce3eabed6de7a4f99884640c21218ac19ab2a4bc5f8b42deb2476f85d0deac.json b/backend/.sqlx/query-64ce3eabed6de7a4f99884640c21218ac19ab2a4bc5f8b42deb2476f85d0deac.json new file mode 100644 index 0000000000000..6bc0fb8a10830 --- /dev/null +++ b/backend/.sqlx/query-64ce3eabed6de7a4f99884640c21218ac19ab2a4bc5f8b42deb2476f85d0deac.json @@ -0,0 +1,114 @@ +{ + "db_name": "PostgreSQL", + "query": "select path, tag, concurrency_key, concurrent_limit, concurrency_time_window_s, cache_ttl, language as \"language: ScriptLang\", dedicated_worker, priority, delete_after_use, timeout, has_preprocessor from script where hash = $1 AND workspace_id = $2", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "path", + "type_info": "Varchar" + }, + { + "ordinal": 1, + "name": "tag", + "type_info": "Varchar" + }, + { + "ordinal": 2, + "name": "concurrency_key", + "type_info": "Varchar" + }, + { + "ordinal": 3, + "name": "concurrent_limit", + "type_info": "Int4" + }, + { + "ordinal": 4, + "name": "concurrency_time_window_s", + "type_info": "Int4" + }, + { + "ordinal": 5, + "name": "cache_ttl", + "type_info": "Int4" + }, + { + "ordinal": 6, + "name": "language: ScriptLang", + "type_info": { + "Custom": { + "name": "script_lang", + "kind": { + "Enum": [ + "python3", + "deno", + "go", + "bash", + "postgresql", + "nativets", + "bun", + "mysql", + "bigquery", + "snowflake", + "graphql", + "powershell", + "mssql", + "php", + "bunnative", + "rust", + "ansible" + ] + } + } + } + }, + { + "ordinal": 7, + "name": "dedicated_worker", + "type_info": "Bool" + }, + { + "ordinal": 8, + "name": "priority", + "type_info": "Int2" + }, + { + "ordinal": 9, + "name": "delete_after_use", + "type_info": "Bool" + }, + { + "ordinal": 10, + "name": "timeout", + "type_info": "Int4" + }, + { + "ordinal": 11, + "name": "has_preprocessor", + "type_info": "Bool" + } + ], + "parameters": { + "Left": [ + "Int8", + "Text" + ] + }, + "nullable": [ + false, + true, + true, + true, + true, + true, + false, + true, + true, + true, + true, + true + ] + }, + "hash": "64ce3eabed6de7a4f99884640c21218ac19ab2a4bc5f8b42deb2476f85d0deac" +} diff --git a/backend/.sqlx/query-64d2318064711c2cfbaf7c5c2b02d92cc98ac8e33eb560b829c462c3159115eb.json b/backend/.sqlx/query-64d2318064711c2cfbaf7c5c2b02d92cc98ac8e33eb560b829c462c3159115eb.json new file mode 100644 index 0000000000000..d88786d170e56 --- /dev/null +++ b/backend/.sqlx/query-64d2318064711c2cfbaf7c5c2b02d92cc98ac8e33eb560b829c462c3159115eb.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO workspace_key\n (workspace_id, kind, key)\n VALUES ($1, 'cloud', $2)", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Varchar" + ] + }, + "nullable": [] + }, + "hash": "64d2318064711c2cfbaf7c5c2b02d92cc98ac8e33eb560b829c462c3159115eb" +} diff --git a/backend/.sqlx/query-65121a4bfba70c2d7055a2b58c8520fddaef1bd9a3f041e851f9c136c73d34e7.json b/backend/.sqlx/query-65121a4bfba70c2d7055a2b58c8520fddaef1bd9a3f041e851f9c136c73d34e7.json new file mode 100644 index 0000000000000..84d19d1d0f6c1 --- /dev/null +++ b/backend/.sqlx/query-65121a4bfba70c2d7055a2b58c8520fddaef1bd9a3f041e851f9c136c73d34e7.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE job_stats SET workspace_id = $1 WHERE workspace_id = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Text" + ] + }, + "nullable": [] + }, + "hash": "65121a4bfba70c2d7055a2b58c8520fddaef1bd9a3f041e851f9c136c73d34e7" +} diff --git a/backend/.sqlx/query-652835b2b7f801532a591988ac76d385188991c6654d529f6d65f6f03794844a.json b/backend/.sqlx/query-652835b2b7f801532a591988ac76d385188991c6654d529f6d65f6f03794844a.json new file mode 100644 index 0000000000000..91e268889d88a --- /dev/null +++ b/backend/.sqlx/query-652835b2b7f801532a591988ac76d385188991c6654d529f6d65f6f03794844a.json @@ -0,0 +1,17 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO deployment_metadata (workspace_id, path, app_version, deployment_msg) VALUES ($1, $2, $3, $4) ON CONFLICT (workspace_id, path, app_version) WHERE app_version IS NOT NULL DO UPDATE SET deployment_msg = $4", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Varchar", + "Int8", + "Text" + ] + }, + "nullable": [] + }, + "hash": "652835b2b7f801532a591988ac76d385188991c6654d529f6d65f6f03794844a" +} diff --git a/backend/.sqlx/query-653685b39d93008762818d0518b953632040122a9af98332d3fd1d12244b1b80.json b/backend/.sqlx/query-653685b39d93008762818d0518b953632040122a9af98332d3fd1d12244b1b80.json new file mode 100644 index 0000000000000..12f1b82a615aa --- /dev/null +++ b/backend/.sqlx/query-653685b39d93008762818d0518b953632040122a9af98332d3fd1d12244b1b80.json @@ -0,0 +1,29 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO favorite (workspace_id, usr, path, favorite_kind) VALUES ($1, $2, $3, $4) ON CONFLICT DO NOTHING", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Varchar", + "Varchar", + { + "Custom": { + "name": "favorite_kind", + "kind": { + "Enum": [ + "app", + "script", + "flow", + "raw_app" + ] + } + } + } + ] + }, + "nullable": [] + }, + "hash": "653685b39d93008762818d0518b953632040122a9af98332d3fd1d12244b1b80" +} diff --git a/backend/.sqlx/query-656f268969018438499f677d31720e85b2eed7b4705367361fc5e456e5263df9.json b/backend/.sqlx/query-656f268969018438499f677d31720e85b2eed7b4705367361fc5e456e5263df9.json new file mode 100644 index 0000000000000..c72a8c9d8fb78 --- /dev/null +++ b/backend/.sqlx/query-656f268969018438499f677d31720e85b2eed7b4705367361fc5e456e5263df9.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE email_to_igroup SET igroup = $2 WHERE igroup = $1", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Varchar" + ] + }, + "nullable": [] + }, + "hash": "656f268969018438499f677d31720e85b2eed7b4705367361fc5e456e5263df9" +} diff --git a/backend/.sqlx/query-661f472ff3860983322162420457f5033b9c9afc344d9c3e385ba20a3ad2197a.json b/backend/.sqlx/query-661f472ff3860983322162420457f5033b9c9afc344d9c3e385ba20a3ad2197a.json new file mode 100644 index 0000000000000..75b8108281532 --- /dev/null +++ b/backend/.sqlx/query-661f472ff3860983322162420457f5033b9c9afc344d9c3e385ba20a3ad2197a.json @@ -0,0 +1,24 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT true FROM job_stats WHERE workspace_id = $1 AND job_id = $2 AND metric_id = $3", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "?column?", + "type_info": "Bool" + } + ], + "parameters": { + "Left": [ + "Text", + "Uuid", + "Text" + ] + }, + "nullable": [ + null + ] + }, + "hash": "661f472ff3860983322162420457f5033b9c9afc344d9c3e385ba20a3ad2197a" +} diff --git a/backend/.sqlx/query-6681048ee83236e9eb33b407b5d3cf89f563e57d5d3e7981d58cecf147b9bf1e.json b/backend/.sqlx/query-6681048ee83236e9eb33b407b5d3cf89f563e57d5d3e7981d58cecf147b9bf1e.json new file mode 100644 index 0000000000000..0ca0331f8f1f1 --- /dev/null +++ b/backend/.sqlx/query-6681048ee83236e9eb33b407b5d3cf89f563e57d5d3e7981d58cecf147b9bf1e.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE completed_job SET workspace_id = $1 WHERE workspace_id = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Text" + ] + }, + "nullable": [] + }, + "hash": "6681048ee83236e9eb33b407b5d3cf89f563e57d5d3e7981d58cecf147b9bf1e" +} diff --git a/backend/.sqlx/query-67411b46ce51caf84c049dbb52d0e51c9889e73c99ff16ba12a02782bbaa53c4.json b/backend/.sqlx/query-67411b46ce51caf84c049dbb52d0e51c9889e73c99ff16ba12a02782bbaa53c4.json new file mode 100644 index 0000000000000..2f6e22cd09ce2 --- /dev/null +++ b/backend/.sqlx/query-67411b46ce51caf84c049dbb52d0e51c9889e73c99ff16ba12a02782bbaa53c4.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE workspace SET deleted = false WHERE id = $1", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [] + }, + "hash": "67411b46ce51caf84c049dbb52d0e51c9889e73c99ff16ba12a02782bbaa53c4" +} diff --git a/backend/.sqlx/query-675ca010b31b3504403b56c4a8e523b6748cf8b289a8c058688bb7b3a143deaf.json b/backend/.sqlx/query-675ca010b31b3504403b56c4a8e523b6748cf8b289a8c058688bb7b3a143deaf.json new file mode 100644 index 0000000000000..a8abdb51e37a3 --- /dev/null +++ b/backend/.sqlx/query-675ca010b31b3504403b56c4a8e523b6748cf8b289a8c058688bb7b3a143deaf.json @@ -0,0 +1,16 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE variable SET extra_perms = extra_perms - ('u/' || $2) || jsonb_build_object(('u/' || $1), extra_perms->('u/' || $2)) WHERE extra_perms ? ('u/' || $2) AND workspace_id = $3", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "675ca010b31b3504403b56c4a8e523b6748cf8b289a8c058688bb7b3a143deaf" +} diff --git a/backend/.sqlx/query-67624d479cc293b0306398f9e855cf38a72dd3d7d75b01e93cfd3ac4875b6e37.json b/backend/.sqlx/query-67624d479cc293b0306398f9e855cf38a72dd3d7d75b01e93cfd3ac4875b6e37.json new file mode 100644 index 0000000000000..5cc6cc74c6302 --- /dev/null +++ b/backend/.sqlx/query-67624d479cc293b0306398f9e855cf38a72dd3d7d75b01e93cfd3ac4875b6e37.json @@ -0,0 +1,20 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT COUNT(*) FROM password", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "count", + "type_info": "Int8" + } + ], + "parameters": { + "Left": [] + }, + "nullable": [ + null + ] + }, + "hash": "67624d479cc293b0306398f9e855cf38a72dd3d7d75b01e93cfd3ac4875b6e37" +} diff --git a/backend/.sqlx/query-6818cae88492f83baf55f54bf5dd5397e04dbe771445818f88903ee5677b3631.json b/backend/.sqlx/query-6818cae88492f83baf55f54bf5dd5397e04dbe771445818f88903ee5677b3631.json new file mode 100644 index 0000000000000..19ac6b90d3c65 --- /dev/null +++ b/backend/.sqlx/query-6818cae88492f83baf55f54bf5dd5397e04dbe771445818f88903ee5677b3631.json @@ -0,0 +1,16 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE queue SET script_path = REGEXP_REPLACE(script_path,'u/' || $2 || '/(.*)','u/' || $1 || '/\\1') WHERE script_path LIKE ('u/' || $2 || '/%') AND workspace_id = $3", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "6818cae88492f83baf55f54bf5dd5397e04dbe771445818f88903ee5677b3631" +} diff --git a/backend/.sqlx/query-689551fddbff09acd3f000ae54f25cc496528768f8ee4c6924b13bb8f75a9f8a.json b/backend/.sqlx/query-689551fddbff09acd3f000ae54f25cc496528768f8ee4c6924b13bb8f75a9f8a.json new file mode 100644 index 0000000000000..4c27ae38072f1 --- /dev/null +++ b/backend/.sqlx/query-689551fddbff09acd3f000ae54f25cc496528768f8ee4c6924b13bb8f75a9f8a.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE instance_group SET external_id = $1 WHERE name = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Text" + ] + }, + "nullable": [] + }, + "hash": "689551fddbff09acd3f000ae54f25cc496528768f8ee4c6924b13bb8f75a9f8a" +} diff --git a/backend/.sqlx/query-68fadd822c48b5cc5a314a3e6d00f9a44989694eed2e9f1f74a248b2f4b62b2b.json b/backend/.sqlx/query-68fadd822c48b5cc5a314a3e6d00f9a44989694eed2e9f1f74a248b2f4b62b2b.json new file mode 100644 index 0000000000000..e9b6af9b5e7a2 --- /dev/null +++ b/backend/.sqlx/query-68fadd822c48b5cc5a314a3e6d00f9a44989694eed2e9f1f74a248b2f4b62b2b.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE workspace_settings SET default_scripts = NULL WHERE workspace_id = $1", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [] + }, + "hash": "68fadd822c48b5cc5a314a3e6d00f9a44989694eed2e9f1f74a248b2f4b62b2b" +} diff --git a/backend/.sqlx/query-694119068d2d3e5f9a2da6800e3b51728e1f8948d5c7dd7b4811025acb4ff249.json b/backend/.sqlx/query-694119068d2d3e5f9a2da6800e3b51728e1f8948d5c7dd7b4811025acb4ff249.json new file mode 100644 index 0000000000000..4a574124c917f --- /dev/null +++ b/backend/.sqlx/query-694119068d2d3e5f9a2da6800e3b51728e1f8948d5c7dd7b4811025acb4ff249.json @@ -0,0 +1,29 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT is_admin, operator FROM usr where username = $1 AND workspace_id = $2 AND disabled = false", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "is_admin", + "type_info": "Bool" + }, + { + "ordinal": 1, + "name": "operator", + "type_info": "Bool" + } + ], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [ + false, + false + ] + }, + "hash": "694119068d2d3e5f9a2da6800e3b51728e1f8948d5c7dd7b4811025acb4ff249" +} diff --git a/backend/.sqlx/query-699427e7e3e6cd3ba4f61f77e171c5c27234cfa30460696ac619760667d7553c.json b/backend/.sqlx/query-699427e7e3e6cd3ba4f61f77e171c5c27234cfa30460696ac619760667d7553c.json new file mode 100644 index 0000000000000..fea6b54002797 --- /dev/null +++ b/backend/.sqlx/query-699427e7e3e6cd3ba4f61f77e171c5c27234cfa30460696ac619760667d7553c.json @@ -0,0 +1,17 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE job_stats SET scalar_int = $4 WHERE workspace_id = $1 AND job_id = $2 AND metric_id = $3", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Uuid", + "Text", + "Int4" + ] + }, + "nullable": [] + }, + "hash": "699427e7e3e6cd3ba4f61f77e171c5c27234cfa30460696ac619760667d7553c" +} diff --git a/backend/.sqlx/query-6a497334c98bfaf70be44fced572a1cc0dde4141aa4c5002765a95432d0101ab.json b/backend/.sqlx/query-6a497334c98bfaf70be44fced572a1cc0dde4141aa4c5002765a95432d0101ab.json new file mode 100644 index 0000000000000..9df7dced7b398 --- /dev/null +++ b/backend/.sqlx/query-6a497334c98bfaf70be44fced572a1cc0dde4141aa4c5002765a95432d0101ab.json @@ -0,0 +1,133 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT worker, worker_instance, EXTRACT(EPOCH FROM (now() - ping_at))::integer as last_ping, started_at, ip, jobs_executed,\n CASE WHEN $4 IS TRUE THEN current_job_id ELSE NULL END as last_job_id, CASE WHEN $4 IS TRUE THEN current_job_workspace_id ELSE NULL END as last_job_workspace_id, \n custom_tags, worker_group, wm_version, occupancy_rate, occupancy_rate_15s, occupancy_rate_5m, occupancy_rate_30m, memory, vcpus, memory_usage, wm_memory_usage\n FROM worker_ping\n WHERE ($1::integer IS NULL AND ping_at > now() - interval '5 minute') OR (ping_at > now() - ($1 || ' seconds')::interval)\n ORDER BY ping_at desc LIMIT $2 OFFSET $3", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "worker", + "type_info": "Varchar" + }, + { + "ordinal": 1, + "name": "worker_instance", + "type_info": "Varchar" + }, + { + "ordinal": 2, + "name": "last_ping", + "type_info": "Int4" + }, + { + "ordinal": 3, + "name": "started_at", + "type_info": "Timestamptz" + }, + { + "ordinal": 4, + "name": "ip", + "type_info": "Varchar" + }, + { + "ordinal": 5, + "name": "jobs_executed", + "type_info": "Int4" + }, + { + "ordinal": 6, + "name": "last_job_id", + "type_info": "Uuid" + }, + { + "ordinal": 7, + "name": "last_job_workspace_id", + "type_info": "Varchar" + }, + { + "ordinal": 8, + "name": "custom_tags", + "type_info": "TextArray" + }, + { + "ordinal": 9, + "name": "worker_group", + "type_info": "Varchar" + }, + { + "ordinal": 10, + "name": "wm_version", + "type_info": "Varchar" + }, + { + "ordinal": 11, + "name": "occupancy_rate", + "type_info": "Float4" + }, + { + "ordinal": 12, + "name": "occupancy_rate_15s", + "type_info": "Float4" + }, + { + "ordinal": 13, + "name": "occupancy_rate_5m", + "type_info": "Float4" + }, + { + "ordinal": 14, + "name": "occupancy_rate_30m", + "type_info": "Float4" + }, + { + "ordinal": 15, + "name": "memory", + "type_info": "Int8" + }, + { + "ordinal": 16, + "name": "vcpus", + "type_info": "Int8" + }, + { + "ordinal": 17, + "name": "memory_usage", + "type_info": "Int8" + }, + { + "ordinal": 18, + "name": "wm_memory_usage", + "type_info": "Int8" + } + ], + "parameters": { + "Left": [ + "Int4", + "Int8", + "Int8", + "Bool" + ] + }, + "nullable": [ + false, + false, + null, + false, + false, + false, + null, + null, + true, + false, + false, + true, + true, + true, + true, + true, + true, + true, + true + ] + }, + "hash": "6a497334c98bfaf70be44fced572a1cc0dde4141aa4c5002765a95432d0101ab" +} diff --git a/backend/.sqlx/query-6afc5c7cbb3abe11ade0cedf1f7328005ce4de3165cdd998e5a0d27e044c7153.json b/backend/.sqlx/query-6afc5c7cbb3abe11ade0cedf1f7328005ce4de3165cdd998e5a0d27e044c7153.json new file mode 100644 index 0000000000000..0bbe8809419a8 --- /dev/null +++ b/backend/.sqlx/query-6afc5c7cbb3abe11ade0cedf1f7328005ce4de3165cdd998e5a0d27e044c7153.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO worker_ping (worker_instance, worker, ip, custom_tags, worker_group, dedicated_worker, wm_version, vcpus, memory) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9) ON CONFLICT (worker) DO UPDATE set ip = $3, custom_tags = $4, worker_group = $5", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Varchar", + "Varchar", + "TextArray", + "Varchar", + "Varchar", + "Varchar", + "Int8", + "Int8" + ] + }, + "nullable": [] + }, + "hash": "6afc5c7cbb3abe11ade0cedf1f7328005ce4de3165cdd998e5a0d27e044c7153" +} diff --git a/backend/.sqlx/query-6bb4fab9e74c421fb30cfd856a1a9b44c76f1cf1485ceba50aeede9daec94c01.json b/backend/.sqlx/query-6bb4fab9e74c421fb30cfd856a1a9b44c76f1cf1485ceba50aeede9daec94c01.json new file mode 100644 index 0000000000000..20bdf25c03d7d --- /dev/null +++ b/backend/.sqlx/query-6bb4fab9e74c421fb30cfd856a1a9b44c76f1cf1485ceba50aeede9daec94c01.json @@ -0,0 +1,18 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO deployment_metadata (workspace_id, path, script_hash, callback_job_ids, deployment_msg) VALUES ($1, $2, $3, $4, $5)", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Varchar", + "Int8", + "UuidArray", + "Text" + ] + }, + "nullable": [] + }, + "hash": "6bb4fab9e74c421fb30cfd856a1a9b44c76f1cf1485ceba50aeede9daec94c01" +} diff --git a/backend/.sqlx/query-6c0f74c56789ac51ccb06cd8a14986071ccc94df0de137b56d63d673db11d8aa.json b/backend/.sqlx/query-6c0f74c56789ac51ccb06cd8a14986071ccc94df0de137b56d63d673db11d8aa.json new file mode 100644 index 0000000000000..d50a50ebd326d --- /dev/null +++ b/backend/.sqlx/query-6c0f74c56789ac51ccb06cd8a14986071ccc94df0de137b56d63d673db11d8aa.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM job_stats WHERE job_id = ANY($1)", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "UuidArray" + ] + }, + "nullable": [] + }, + "hash": "6c0f74c56789ac51ccb06cd8a14986071ccc94df0de137b56d63d673db11d8aa" +} diff --git a/backend/.sqlx/query-6c63bbcb45d3f51eccaea52ec862700e1f1c2426d823abd951e1eea4fd9b85aa.json b/backend/.sqlx/query-6c63bbcb45d3f51eccaea52ec862700e1f1c2426d823abd951e1eea4fd9b85aa.json new file mode 100644 index 0000000000000..765857b6317cb --- /dev/null +++ b/backend/.sqlx/query-6c63bbcb45d3f51eccaea52ec862700e1f1c2426d823abd951e1eea4fd9b85aa.json @@ -0,0 +1,16 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE script SET lock_error_logs = $1 WHERE hash = $2 AND workspace_id = $3", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Int8", + "Text" + ] + }, + "nullable": [] + }, + "hash": "6c63bbcb45d3f51eccaea52ec862700e1f1c2426d823abd951e1eea4fd9b85aa" +} diff --git a/backend/.sqlx/query-6c7186de56bcd9983a64de0c01a733e818ebc30af2377158c8a92ec66c06464c.json b/backend/.sqlx/query-6c7186de56bcd9983a64de0c01a733e818ebc30af2377158c8a92ec66c06464c.json new file mode 100644 index 0000000000000..a9df312f5efa6 --- /dev/null +++ b/backend/.sqlx/query-6c7186de56bcd9983a64de0c01a733e818ebc30af2377158c8a92ec66c06464c.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE password SET super_admin = $1 WHERE email = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Bool", + "Text" + ] + }, + "nullable": [] + }, + "hash": "6c7186de56bcd9983a64de0c01a733e818ebc30af2377158c8a92ec66c06464c" +} diff --git a/backend/.sqlx/query-6c90d5ea2a09b47b81fdab465062c25f8768b220e53bf469550a3a3697ab756a.json b/backend/.sqlx/query-6c90d5ea2a09b47b81fdab465062c25f8768b220e53bf469550a3a3697ab756a.json new file mode 100644 index 0000000000000..fb5e174ced493 --- /dev/null +++ b/backend/.sqlx/query-6c90d5ea2a09b47b81fdab465062c25f8768b220e53bf469550a3a3697ab756a.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT set_config('session.user', $1, true)", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "set_config", + "type_info": "Text" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + null + ] + }, + "hash": "6c90d5ea2a09b47b81fdab465062c25f8768b220e53bf469550a3a3697ab756a" +} diff --git a/backend/.sqlx/query-6c962f9471b0b1fe385a93789ec46bee53a07c8d1264eeb44bc94233bc06bbfd.json b/backend/.sqlx/query-6c962f9471b0b1fe385a93789ec46bee53a07c8d1264eeb44bc94233bc06bbfd.json new file mode 100644 index 0000000000000..511fec65867b5 --- /dev/null +++ b/backend/.sqlx/query-6c962f9471b0b1fe385a93789ec46bee53a07c8d1264eeb44bc94233bc06bbfd.json @@ -0,0 +1,16 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM dependency_map\n WHERE importer_path = $1 AND importer_kind = $3::text::IMPORTER_KIND\n AND workspace_id = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "6c962f9471b0b1fe385a93789ec46bee53a07c8d1264eeb44bc94233bc06bbfd" +} diff --git a/backend/.sqlx/query-6ca9ae586f3b35aa419a7c0f8455c3e56f347a073ef47c882899daee42a93f40.json b/backend/.sqlx/query-6ca9ae586f3b35aa419a7c0f8455c3e56f347a073ef47c882899daee42a93f40.json new file mode 100644 index 0000000000000..9e221f5417caa --- /dev/null +++ b/backend/.sqlx/query-6ca9ae586f3b35aa419a7c0f8455c3e56f347a073ef47c882899daee42a93f40.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE workspace_settings SET default_scripts = $1 WHERE workspace_id = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Jsonb", + "Text" + ] + }, + "nullable": [] + }, + "hash": "6ca9ae586f3b35aa419a7c0f8455c3e56f347a073ef47c882899daee42a93f40" +} diff --git a/backend/.sqlx/query-6d7955c713ff6b1ea5aefb965a21cb764f82819dee9f31008f3f297c1d95c913.json b/backend/.sqlx/query-6d7955c713ff6b1ea5aefb965a21cb764f82819dee9f31008f3f297c1d95c913.json new file mode 100644 index 0000000000000..5016c332f006a --- /dev/null +++ b/backend/.sqlx/query-6d7955c713ff6b1ea5aefb965a21cb764f82819dee9f31008f3f297c1d95c913.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE schedule SET on_recovery = NULL, on_recovery_extra_args = NULL, on_recovery_times = NULL WHERE workspace_id = $1 RETURNING path", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "path", + "type_info": "Varchar" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + false + ] + }, + "hash": "6d7955c713ff6b1ea5aefb965a21cb764f82819dee9f31008f3f297c1d95c913" +} diff --git a/backend/.sqlx/query-6dfd1ac7168f098a9e7c92d530a470c0a156041d5081053d43d9efb00d81c464.json b/backend/.sqlx/query-6dfd1ac7168f098a9e7c92d530a470c0a156041d5081053d43d9efb00d81c464.json new file mode 100644 index 0000000000000..e745e4674ea87 --- /dev/null +++ b/backend/.sqlx/query-6dfd1ac7168f098a9e7c92d530a470c0a156041d5081053d43d9efb00d81c464.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT policy from app WHERE path = $1 AND workspace_id = $2", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "policy", + "type_info": "Jsonb" + } + ], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [ + false + ] + }, + "hash": "6dfd1ac7168f098a9e7c92d530a470c0a156041d5081053d43d9efb00d81c464" +} diff --git a/backend/.sqlx/query-6f12be65a4fe3eb39292164363f557de9cef7017dcfbcd40370b849a288c52e3.json b/backend/.sqlx/query-6f12be65a4fe3eb39292164363f557de9cef7017dcfbcd40370b849a288c52e3.json new file mode 100644 index 0000000000000..fb92042662869 --- /dev/null +++ b/backend/.sqlx/query-6f12be65a4fe3eb39292164363f557de9cef7017dcfbcd40370b849a288c52e3.json @@ -0,0 +1,12 @@ +{ + "db_name": "PostgreSQL", + "query": "DROP INDEX CONCURRENTLY IF EXISTS labeled_jobs_on_jobs", + "describe": { + "columns": [], + "parameters": { + "Left": [] + }, + "nullable": [] + }, + "hash": "6f12be65a4fe3eb39292164363f557de9cef7017dcfbcd40370b849a288c52e3" +} diff --git a/backend/.sqlx/query-6f4817fad2739a11d89b6704edf62c3c267ca336a8b6bec5b29d4409030ed561.json b/backend/.sqlx/query-6f4817fad2739a11d89b6704edf62c3c267ca336a8b6bec5b29d4409030ed561.json new file mode 100644 index 0000000000000..5605518c9c791 --- /dev/null +++ b/backend/.sqlx/query-6f4817fad2739a11d89b6704edf62c3c267ca336a8b6bec5b29d4409030ed561.json @@ -0,0 +1,73 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO queue (id, script_hash, script_path, job_kind, language, tag, created_by, permissioned_as, email, scheduled_for, workspace_id, raw_flow, flow_status) (SELECT gen_random_uuid(), $1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12 FROM generate_series(1, 1))", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Int8", + "Varchar", + { + "Custom": { + "name": "job_kind", + "kind": { + "Enum": [ + "script", + "preview", + "flow", + "dependencies", + "flowpreview", + "script_hub", + "identity", + "flowdependencies", + "http", + "graphql", + "postgresql", + "noop", + "appdependencies", + "deploymentcallback", + "singlescriptflow" + ] + } + } + }, + { + "Custom": { + "name": "script_lang", + "kind": { + "Enum": [ + "python3", + "deno", + "go", + "bash", + "postgresql", + "nativets", + "bun", + "mysql", + "bigquery", + "snowflake", + "graphql", + "powershell", + "mssql", + "php", + "bunnative", + "rust", + "ansible" + ] + } + } + }, + "Varchar", + "Varchar", + "Varchar", + "Varchar", + "Timestamptz", + "Varchar", + "Jsonb", + "Jsonb" + ] + }, + "nullable": [] + }, + "hash": "6f4817fad2739a11d89b6704edf62c3c267ca336a8b6bec5b29d4409030ed561" +} diff --git a/backend/.sqlx/query-6fa6fa8eb511119c6adb18bd4f9f174bbb48eef8952f91911b8d9b45357372d9.json b/backend/.sqlx/query-6fa6fa8eb511119c6adb18bd4f9f174bbb48eef8952f91911b8d9b45357372d9.json new file mode 100644 index 0000000000000..96230397117f4 --- /dev/null +++ b/backend/.sqlx/query-6fa6fa8eb511119c6adb18bd4f9f174bbb48eef8952f91911b8d9b45357372d9.json @@ -0,0 +1,24 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT CASE WHEN pg_column_size(args) < 40000 OR $3 THEN args ELSE '\"WINDMILL_TOO_BIG\"'::jsonb END as args FROM completed_job WHERE id = $1 AND workspace_id = $2", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "args", + "type_info": "Jsonb" + } + ], + "parameters": { + "Left": [ + "Uuid", + "Text", + "Bool" + ] + }, + "nullable": [ + null + ] + }, + "hash": "6fa6fa8eb511119c6adb18bd4f9f174bbb48eef8952f91911b8d9b45357372d9" +} diff --git a/backend/.sqlx/query-6fb904692513c453989ffedb14b1eb737da453e9fcac6cfa098296d6c211d2a9.json b/backend/.sqlx/query-6fb904692513c453989ffedb14b1eb737da453e9fcac6cfa098296d6c211d2a9.json new file mode 100644 index 0000000000000..1f15905eda002 --- /dev/null +++ b/backend/.sqlx/query-6fb904692513c453989ffedb14b1eb737da453e9fcac6cfa098296d6c211d2a9.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE app_version SET value = $1 WHERE id = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Json", + "Int8" + ] + }, + "nullable": [] + }, + "hash": "6fb904692513c453989ffedb14b1eb737da453e9fcac6cfa098296d6c211d2a9" +} diff --git a/backend/.sqlx/query-701f215eb14ba67a79afea15d7effc0dd394ba6c4a72c95d4560c5a377015d4e.json b/backend/.sqlx/query-701f215eb14ba67a79afea15d7effc0dd394ba6c4a72c95d4560c5a377015d4e.json new file mode 100644 index 0000000000000..37a570e44222f --- /dev/null +++ b/backend/.sqlx/query-701f215eb14ba67a79afea15d7effc0dd394ba6c4a72c95d4560c5a377015d4e.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE workspace SET deleted = true WHERE id = $1", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [] + }, + "hash": "701f215eb14ba67a79afea15d7effc0dd394ba6c4a72c95d4560c5a377015d4e" +} diff --git a/backend/.sqlx/query-70a3bfa729f874c9765f00a9c7dc067fee1ebf7510fec98e0574e07c906cc714.json b/backend/.sqlx/query-70a3bfa729f874c9765f00a9c7dc067fee1ebf7510fec98e0574e07c906cc714.json new file mode 100644 index 0000000000000..e54956175a28d --- /dev/null +++ b/backend/.sqlx/query-70a3bfa729f874c9765f00a9c7dc067fee1ebf7510fec98e0574e07c906cc714.json @@ -0,0 +1,46 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT name, id, scim_display_name, array_remove(array_agg(email_to_igroup.email), null) as emails, external_id FROM email_to_igroup RIGHT JOIN instance_group ON instance_group.name = email_to_igroup.igroup WHERE id = $1 GROUP BY name", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "name", + "type_info": "Varchar" + }, + { + "ordinal": 1, + "name": "id", + "type_info": "Varchar" + }, + { + "ordinal": 2, + "name": "scim_display_name", + "type_info": "Varchar" + }, + { + "ordinal": 3, + "name": "emails", + "type_info": "VarcharArray" + }, + { + "ordinal": 4, + "name": "external_id", + "type_info": "Varchar" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + false, + true, + true, + null, + true + ] + }, + "hash": "70a3bfa729f874c9765f00a9c7dc067fee1ebf7510fec98e0574e07c906cc714" +} diff --git a/backend/.sqlx/query-70bad6ac45db6d03c59aa375f915ec55d1c07998b1bd0268725d34f7f0b98103.json b/backend/.sqlx/query-70bad6ac45db6d03c59aa375f915ec55d1c07998b1bd0268725d34f7f0b98103.json new file mode 100644 index 0000000000000..a3eb036d93e56 --- /dev/null +++ b/backend/.sqlx/query-70bad6ac45db6d03c59aa375f915ec55d1c07998b1bd0268725d34f7f0b98103.json @@ -0,0 +1,16 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE flow SET extra_perms = extra_perms - ('u/' || $2) || jsonb_build_object(('u/' || $1), extra_perms->('u/' || $2)) WHERE extra_perms ? ('u/' || $2) AND workspace_id = $3", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "70bad6ac45db6d03c59aa375f915ec55d1c07998b1bd0268725d34f7f0b98103" +} diff --git a/backend/.sqlx/query-70e6ca3b5ad81f70376d31c75ba5f2b5dd94dd2f7f4cacd5a64029ccc3315d6c.json b/backend/.sqlx/query-70e6ca3b5ad81f70376d31c75ba5f2b5dd94dd2f7f4cacd5a64029ccc3315d6c.json new file mode 100644 index 0000000000000..9da1daf4aa882 --- /dev/null +++ b/backend/.sqlx/query-70e6ca3b5ad81f70376d31c75ba5f2b5dd94dd2f7f4cacd5a64029ccc3315d6c.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT EXISTS(SELECT 1 FROM usr WHERE workspace_id = $1 AND username = $2)", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "exists", + "type_info": "Bool" + } + ], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [ + null + ] + }, + "hash": "70e6ca3b5ad81f70376d31c75ba5f2b5dd94dd2f7f4cacd5a64029ccc3315d6c" +} diff --git a/backend/.sqlx/query-7142222bee1f60bc56752e377b96ac6e4e981ea219c173146088faf1ad9f3822.json b/backend/.sqlx/query-7142222bee1f60bc56752e377b96ac6e4e981ea219c173146088faf1ad9f3822.json new file mode 100644 index 0000000000000..d3743e3dadf15 --- /dev/null +++ b/backend/.sqlx/query-7142222bee1f60bc56752e377b96ac6e4e981ea219c173146088faf1ad9f3822.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT EXISTS (SELECT 1 FROM usr WHERE workspace_id = $1 AND email = $2)", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "exists", + "type_info": "Bool" + } + ], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [ + null + ] + }, + "hash": "7142222bee1f60bc56752e377b96ac6e4e981ea219c173146088faf1ad9f3822" +} diff --git a/backend/.sqlx/query-71ad5448cba8da6677edd02e090cc158e09af72dd31585ed2ddc1cc06cbfd189.json b/backend/.sqlx/query-71ad5448cba8da6677edd02e090cc158e09af72dd31585ed2ddc1cc06cbfd189.json new file mode 100644 index 0000000000000..5d6daba2ab07c --- /dev/null +++ b/backend/.sqlx/query-71ad5448cba8da6677edd02e090cc158e09af72dd31585ed2ddc1cc06cbfd189.json @@ -0,0 +1,20 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT email FROM password WHERE super_admin IS true AND email NOT LIKE '%@windmill.dev' LIMIT 1", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "email", + "type_info": "Varchar" + } + ], + "parameters": { + "Left": [] + }, + "nullable": [ + false + ] + }, + "hash": "71ad5448cba8da6677edd02e090cc158e09af72dd31585ed2ddc1cc06cbfd189" +} diff --git a/backend/.sqlx/query-722a3096f03d25ef94292d53801d41037de4bc69dd434232029c731cbbcbc22f.json b/backend/.sqlx/query-722a3096f03d25ef94292d53801d41037de4bc69dd434232029c731cbbcbc22f.json new file mode 100644 index 0000000000000..2e4dee2a30e7e --- /dev/null +++ b/backend/.sqlx/query-722a3096f03d25ef94292d53801d41037de4bc69dd434232029c731cbbcbc22f.json @@ -0,0 +1,12 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO windmill_migrations (name) VALUES ('bypassrls_1-2')", + "describe": { + "columns": [], + "parameters": { + "Left": [] + }, + "nullable": [] + }, + "hash": "722a3096f03d25ef94292d53801d41037de4bc69dd434232029c731cbbcbc22f" +} diff --git a/backend/.sqlx/query-72b2bc804e1926e1a938ba839a319fd1ca9a8145cc33fa6f912c84fec5eb226e.json b/backend/.sqlx/query-72b2bc804e1926e1a938ba839a319fd1ca9a8145cc33fa6f912c84fec5eb226e.json new file mode 100644 index 0000000000000..21890f69db5cb --- /dev/null +++ b/backend/.sqlx/query-72b2bc804e1926e1a938ba839a319fd1ca9a8145cc33fa6f912c84fec5eb226e.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE workspace_settings SET default_app = $1 WHERE workspace_id = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Text" + ] + }, + "nullable": [] + }, + "hash": "72b2bc804e1926e1a938ba839a319fd1ca9a8145cc33fa6f912c84fec5eb226e" +} diff --git a/backend/.sqlx/query-73706be0610149682fa6131494212095e9494ade5e01b138c7fbbd16f42be791.json b/backend/.sqlx/query-73706be0610149682fa6131494212095e9494ade5e01b138c7fbbd16f42be791.json new file mode 100644 index 0000000000000..c7ecbf1b56094 --- /dev/null +++ b/backend/.sqlx/query-73706be0610149682fa6131494212095e9494ade5e01b138c7fbbd16f42be791.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE workspace_env SET workspace_id = $1 WHERE workspace_id = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Text" + ] + }, + "nullable": [] + }, + "hash": "73706be0610149682fa6131494212095e9494ade5e01b138c7fbbd16f42be791" +} diff --git a/backend/.sqlx/query-73a2dbe03a7debbcb236765a9f9d73f3aeb11469f773797ece590f9327878085.json b/backend/.sqlx/query-73a2dbe03a7debbcb236765a9f9d73f3aeb11469f773797ece590f9327878085.json new file mode 100644 index 0000000000000..0a7febe815883 --- /dev/null +++ b/backend/.sqlx/query-73a2dbe03a7debbcb236765a9f9d73f3aeb11469f773797ece590f9327878085.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE account SET workspace_id = $1 WHERE workspace_id = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Text" + ] + }, + "nullable": [] + }, + "hash": "73a2dbe03a7debbcb236765a9f9d73f3aeb11469f773797ece590f9327878085" +} diff --git a/backend/.sqlx/query-73ca6ea13b362b2569ea115d28e4e255cd5e9b990ffa89998ef24871d3a9717c.json b/backend/.sqlx/query-73ca6ea13b362b2569ea115d28e4e255cd5e9b990ffa89998ef24871d3a9717c.json new file mode 100644 index 0000000000000..1636e4f358eda --- /dev/null +++ b/backend/.sqlx/query-73ca6ea13b362b2569ea115d28e4e255cd5e9b990ffa89998ef24871d3a9717c.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE workspace_settings\n SET slack_team_id = null, slack_name = null WHERE workspace_id = $1", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [] + }, + "hash": "73ca6ea13b362b2569ea115d28e4e255cd5e9b990ffa89998ef24871d3a9717c" +} diff --git a/backend/.sqlx/query-73d3ed17fd0723ba75722f394904f6ee306b59aaf8ecfcf56484d38541343f06.json b/backend/.sqlx/query-73d3ed17fd0723ba75722f394904f6ee306b59aaf8ecfcf56484d38541343f06.json new file mode 100644 index 0000000000000..00488b4309821 --- /dev/null +++ b/backend/.sqlx/query-73d3ed17fd0723ba75722f394904f6ee306b59aaf8ecfcf56484d38541343f06.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM group_ WHERE workspace_id = $1", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [] + }, + "hash": "73d3ed17fd0723ba75722f394904f6ee306b59aaf8ecfcf56484d38541343f06" +} diff --git a/backend/.sqlx/query-748904c35cdbb6c7b8a8e0024b341278bf2bb727f2fe0427847565fb9c774abc.json b/backend/.sqlx/query-748904c35cdbb6c7b8a8e0024b341278bf2bb727f2fe0427847565fb9c774abc.json new file mode 100644 index 0000000000000..d5e026262a5a1 --- /dev/null +++ b/backend/.sqlx/query-748904c35cdbb6c7b8a8e0024b341278bf2bb727f2fe0427847565fb9c774abc.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM folder WHERE name = $1 AND workspace_id = $2 RETURNING 1", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "?column?", + "type_info": "Int4" + } + ], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [ + null + ] + }, + "hash": "748904c35cdbb6c7b8a8e0024b341278bf2bb727f2fe0427847565fb9c774abc" +} diff --git a/backend/.sqlx/query-74bee966d2b5e4c1f9b1739bfd6ed828571aa2395d602d06f6ac755c1001c7c9.json b/backend/.sqlx/query-74bee966d2b5e4c1f9b1739bfd6ed828571aa2395d602d06f6ac755c1001c7c9.json new file mode 100644 index 0000000000000..3b20239107cb7 --- /dev/null +++ b/backend/.sqlx/query-74bee966d2b5e4c1f9b1739bfd6ed828571aa2395d602d06f6ac755c1001c7c9.json @@ -0,0 +1,16 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE app SET path = REGEXP_REPLACE(path,'u/' || $2 || '/(.*)','u/' || $1 || '/\\1') WHERE path LIKE ('u/' || $2 || '/%') AND workspace_id = $3", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "74bee966d2b5e4c1f9b1739bfd6ed828571aa2395d602d06f6ac755c1001c7c9" +} diff --git a/backend/.sqlx/query-74d5757014fc7a6818ae857bfdda9f6317cf2b9e0a78cbad80ebdc935d3246fd.json b/backend/.sqlx/query-74d5757014fc7a6818ae857bfdda9f6317cf2b9e0a78cbad80ebdc935d3246fd.json new file mode 100644 index 0000000000000..0501df6cfeab4 --- /dev/null +++ b/backend/.sqlx/query-74d5757014fc7a6818ae857bfdda9f6317cf2b9e0a78cbad80ebdc935d3246fd.json @@ -0,0 +1,20 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT 1 FROM password LIMIT 2", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "?column?", + "type_info": "Int4" + } + ], + "parameters": { + "Left": [] + }, + "nullable": [ + null + ] + }, + "hash": "74d5757014fc7a6818ae857bfdda9f6317cf2b9e0a78cbad80ebdc935d3246fd" +} diff --git a/backend/.sqlx/query-75e880f9d9fbda36c2314706923cef36e4667d930fb8ee1876dd9ce1c92396b2.json b/backend/.sqlx/query-75e880f9d9fbda36c2314706923cef36e4667d930fb8ee1876dd9ce1c92396b2.json new file mode 100644 index 0000000000000..efaac63d39937 --- /dev/null +++ b/backend/.sqlx/query-75e880f9d9fbda36c2314706923cef36e4667d930fb8ee1876dd9ce1c92396b2.json @@ -0,0 +1,26 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO app\n (workspace_id, path, summary, policy, versions, draft_only)\n VALUES ($1, $2, $3, $4, '{}', $5) RETURNING id", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "id", + "type_info": "Int8" + } + ], + "parameters": { + "Left": [ + "Varchar", + "Varchar", + "Varchar", + "Jsonb", + "Bool" + ] + }, + "nullable": [ + false + ] + }, + "hash": "75e880f9d9fbda36c2314706923cef36e4667d930fb8ee1876dd9ce1c92396b2" +} diff --git a/backend/.sqlx/query-765c18d77412cbb4474f4074d583b9b44681f3b9f58754662ac07a3a3470a3c5.json b/backend/.sqlx/query-765c18d77412cbb4474f4074d583b9b44681f3b9f58754662ac07a3a3470a3c5.json new file mode 100644 index 0000000000000..383d639663d96 --- /dev/null +++ b/backend/.sqlx/query-765c18d77412cbb4474f4074d583b9b44681f3b9f58754662ac07a3a3470a3c5.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM workspace_invite WHERE workspace_id = $1 AND email = $2 RETURNING is_admin", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "is_admin", + "type_info": "Bool" + } + ], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [ + false + ] + }, + "hash": "765c18d77412cbb4474f4074d583b9b44681f3b9f58754662ac07a3a3470a3c5" +} diff --git a/backend/.sqlx/query-76ca60e456022cf3d1931245b7daf22783c81bc757d735a4b247cc693dfed719.json b/backend/.sqlx/query-76ca60e456022cf3d1931245b7daf22783c81bc757d735a4b247cc693dfed719.json new file mode 100644 index 0000000000000..530638af1fa36 --- /dev/null +++ b/backend/.sqlx/query-76ca60e456022cf3d1931245b7daf22783c81bc757d735a4b247cc693dfed719.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE queue\n SET flow_status = JSONB_SET(flow_status, ARRAY['modules', flow_status->>'step', 'progress'], $1)\n WHERE id = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Jsonb", + "Uuid" + ] + }, + "nullable": [] + }, + "hash": "76ca60e456022cf3d1931245b7daf22783c81bc757d735a4b247cc693dfed719" +} diff --git a/backend/.sqlx/query-76d73f2fe5ac75e5033fb93d60f2ef5ab2b0b73a80dcb6a250c17c3b2f15c6b4.json b/backend/.sqlx/query-76d73f2fe5ac75e5033fb93d60f2ef5ab2b0b73a80dcb6a250c17c3b2f15c6b4.json new file mode 100644 index 0000000000000..97c52e993e6d2 --- /dev/null +++ b/backend/.sqlx/query-76d73f2fe5ac75e5033fb93d60f2ef5ab2b0b73a80dcb6a250c17c3b2f15c6b4.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM dependency_map WHERE workspace_id = $1", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [] + }, + "hash": "76d73f2fe5ac75e5033fb93d60f2ef5ab2b0b73a80dcb6a250c17c3b2f15c6b4" +} diff --git a/backend/.sqlx/query-76e1de02790d23394997eeec6a5ee46d1da97b94bdd4a07af3dc57b7f8e6f089.json b/backend/.sqlx/query-76e1de02790d23394997eeec6a5ee46d1da97b94bdd4a07af3dc57b7f8e6f089.json new file mode 100644 index 0000000000000..181da1762dabb --- /dev/null +++ b/backend/.sqlx/query-76e1de02790d23394997eeec6a5ee46d1da97b94bdd4a07af3dc57b7f8e6f089.json @@ -0,0 +1,26 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO flow_version (workspace_id, path, value, schema, created_by) VALUES ($1, $2, $3, $4::text::json, $5) RETURNING id", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "id", + "type_info": "Int8" + } + ], + "parameters": { + "Left": [ + "Varchar", + "Varchar", + "Jsonb", + "Text", + "Varchar" + ] + }, + "nullable": [ + false + ] + }, + "hash": "76e1de02790d23394997eeec6a5ee46d1da97b94bdd4a07af3dc57b7f8e6f089" +} diff --git a/backend/.sqlx/query-7813908c080e239fd6b9df3711fd704d6bb5d5686a02b72de2cb61e3c127cb54.json b/backend/.sqlx/query-7813908c080e239fd6b9df3711fd704d6bb5d5686a02b72de2cb61e3c127cb54.json new file mode 100644 index 0000000000000..a2cd73e73763c --- /dev/null +++ b/backend/.sqlx/query-7813908c080e239fd6b9df3711fd704d6bb5d5686a02b72de2cb61e3c127cb54.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT extra_perms from folder WHERE name = $1 AND workspace_id = $2", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "extra_perms", + "type_info": "Jsonb" + } + ], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [ + false + ] + }, + "hash": "7813908c080e239fd6b9df3711fd704d6bb5d5686a02b72de2cb61e3c127cb54" +} diff --git a/backend/.sqlx/query-793870919e0b61b12bcbb30439201acf664cbdc3d8a45fda7ab12b5898b819f1.json b/backend/.sqlx/query-793870919e0b61b12bcbb30439201acf664cbdc3d8a45fda7ab12b5898b819f1.json new file mode 100644 index 0000000000000..e19c818e04956 --- /dev/null +++ b/backend/.sqlx/query-793870919e0b61b12bcbb30439201acf664cbdc3d8a45fda7ab12b5898b819f1.json @@ -0,0 +1,16 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE capture SET created_by = $1 WHERE created_by = $2 AND workspace_id = $3", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "793870919e0b61b12bcbb30439201acf664cbdc3d8a45fda7ab12b5898b819f1" +} diff --git a/backend/.sqlx/query-79464d5ef46a05ff9c05a4f1f4419ffac7e82c985d59a2e20e5c616461dbfe7b.json b/backend/.sqlx/query-79464d5ef46a05ff9c05a4f1f4419ffac7e82c985d59a2e20e5c616461dbfe7b.json new file mode 100644 index 0000000000000..1cdb56d8c05c0 --- /dev/null +++ b/backend/.sqlx/query-79464d5ef46a05ff9c05a4f1f4419ffac7e82c985d59a2e20e5c616461dbfe7b.json @@ -0,0 +1,24 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT flow.path FROM flow\n LEFT JOIN flow_version\n ON flow_version.path = flow.path AND flow_version.workspace_id = flow.workspace_id\n WHERE flow.path = $1 AND flow.workspace_id = $2 AND flow_version.id = $3", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "path", + "type_info": "Varchar" + } + ], + "parameters": { + "Left": [ + "Text", + "Text", + "Int8" + ] + }, + "nullable": [ + false + ] + }, + "hash": "79464d5ef46a05ff9c05a4f1f4419ffac7e82c985d59a2e20e5c616461dbfe7b" +} diff --git a/backend/.sqlx/query-79fe8688b10d3805ec082b7ec581dc2b17e527d177c736a7adb50af954cc7013.json b/backend/.sqlx/query-79fe8688b10d3805ec082b7ec581dc2b17e527d177c736a7adb50af954cc7013.json new file mode 100644 index 0000000000000..d0477b18dc15b --- /dev/null +++ b/backend/.sqlx/query-79fe8688b10d3805ec082b7ec581dc2b17e527d177c736a7adb50af954cc7013.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM concurrency_counter WHERE concurrency_id = $1", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [] + }, + "hash": "79fe8688b10d3805ec082b7ec581dc2b17e527d177c736a7adb50af954cc7013" +} diff --git a/backend/.sqlx/query-7a511ce8dbbf761423b527672ab02156aba5594623dc269992b34398673ca387.json b/backend/.sqlx/query-7a511ce8dbbf761423b527672ab02156aba5594623dc269992b34398673ca387.json new file mode 100644 index 0000000000000..874b8f885d4aa --- /dev/null +++ b/backend/.sqlx/query-7a511ce8dbbf761423b527672ab02156aba5594623dc269992b34398673ca387.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM usr WHERE email = $1 RETURNING username", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "username", + "type_info": "Varchar" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + false + ] + }, + "hash": "7a511ce8dbbf761423b527672ab02156aba5594623dc269992b34398673ca387" +} diff --git a/backend/.sqlx/query-7a819bbf0522315952fd94d9b320fdd58e5d71dbd7e5f79eaa83c14572159805.json b/backend/.sqlx/query-7a819bbf0522315952fd94d9b320fdd58e5d71dbd7e5f79eaa83c14572159805.json new file mode 100644 index 0000000000000..59c38ef9e4b32 --- /dev/null +++ b/backend/.sqlx/query-7a819bbf0522315952fd94d9b320fdd58e5d71dbd7e5f79eaa83c14572159805.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT count(path) FROM raw_app WHERE path LIKE 'f/' || $1 || '%' AND workspace_id = $2", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "count", + "type_info": "Int8" + } + ], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [ + null + ] + }, + "hash": "7a819bbf0522315952fd94d9b320fdd58e5d71dbd7e5f79eaa83c14572159805" +} diff --git a/backend/.sqlx/query-7a92837ad2a1181580c1e0d059fd6bc0ece84d3c315635de52bd2b364c238a71.json b/backend/.sqlx/query-7a92837ad2a1181580c1e0d059fd6bc0ece84d3c315635de52bd2b364c238a71.json new file mode 100644 index 0000000000000..331816c897fac --- /dev/null +++ b/backend/.sqlx/query-7a92837ad2a1181580c1e0d059fd6bc0ece84d3c315635de52bd2b364c238a71.json @@ -0,0 +1,47 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT value, account, (now() > account.expires_at) as is_expired, is_secret, path from variable\n LEFT JOIN account ON variable.account = account.id WHERE variable.path = $1 AND variable.workspace_id = $2", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "value", + "type_info": "Varchar" + }, + { + "ordinal": 1, + "name": "account", + "type_info": "Int4" + }, + { + "ordinal": 2, + "name": "is_expired", + "type_info": "Bool" + }, + { + "ordinal": 3, + "name": "is_secret", + "type_info": "Bool" + }, + { + "ordinal": 4, + "name": "path", + "type_info": "Varchar" + } + ], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [ + false, + true, + null, + false, + false + ] + }, + "hash": "7a92837ad2a1181580c1e0d059fd6bc0ece84d3c315635de52bd2b364c238a71" +} diff --git a/backend/.sqlx/query-7aef087f9e10dd32417477109b97c99b85d68ce1be2bafdc145aed0aa8e5d989.json b/backend/.sqlx/query-7aef087f9e10dd32417477109b97c99b85d68ce1be2bafdc145aed0aa8e5d989.json new file mode 100644 index 0000000000000..eb3a2fd9f85ee --- /dev/null +++ b/backend/.sqlx/query-7aef087f9e10dd32417477109b97c99b85d68ce1be2bafdc145aed0aa8e5d989.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO workspace_invite\n (workspace_id, email, is_admin)\n VALUES ('demo', $1, false)\n ON CONFLICT DO NOTHING", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar" + ] + }, + "nullable": [] + }, + "hash": "7aef087f9e10dd32417477109b97c99b85d68ce1be2bafdc145aed0aa8e5d989" +} diff --git a/backend/.sqlx/query-7b1239ad6460e8f5fb41bfe12f662a779528784ec8cf3f6dcce5545ab90bf234.json b/backend/.sqlx/query-7b1239ad6460e8f5fb41bfe12f662a779528784ec8cf3f6dcce5545ab90bf234.json new file mode 100644 index 0000000000000..a7a5b812f7922 --- /dev/null +++ b/backend/.sqlx/query-7b1239ad6460e8f5fb41bfe12f662a779528784ec8cf3f6dcce5545ab90bf234.json @@ -0,0 +1,58 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT * FROM resource_type WHERE workspace_id = $1", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "workspace_id", + "type_info": "Varchar" + }, + { + "ordinal": 1, + "name": "name", + "type_info": "Varchar" + }, + { + "ordinal": 2, + "name": "schema", + "type_info": "Jsonb" + }, + { + "ordinal": 3, + "name": "description", + "type_info": "Text" + }, + { + "ordinal": 4, + "name": "edited_at", + "type_info": "Timestamptz" + }, + { + "ordinal": 5, + "name": "created_by", + "type_info": "Varchar" + }, + { + "ordinal": 6, + "name": "format_extension", + "type_info": "Varchar" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + false, + false, + true, + true, + true, + true, + true + ] + }, + "hash": "7b1239ad6460e8f5fb41bfe12f662a779528784ec8cf3f6dcce5545ab90bf234" +} diff --git a/backend/.sqlx/query-7b23055f7d7ede8943637e54a76c43583ef80e475f527c6bbb660329e4f1ac7a.json b/backend/.sqlx/query-7b23055f7d7ede8943637e54a76c43583ef80e475f527c6bbb660329e4f1ac7a.json new file mode 100644 index 0000000000000..3a2749811494a --- /dev/null +++ b/backend/.sqlx/query-7b23055f7d7ede8943637e54a76c43583ef80e475f527c6bbb660329e4f1ac7a.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT EXISTS(SELECT 1 FROM folder WHERE name = $1 AND workspace_id = $2)", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "exists", + "type_info": "Bool" + } + ], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [ + null + ] + }, + "hash": "7b23055f7d7ede8943637e54a76c43583ef80e475f527c6bbb660329e4f1ac7a" +} diff --git a/backend/.sqlx/query-7bb9808f744590c0a962053e28564a37b980d3e9b1ceb23f69b9729b73e0bd33.json b/backend/.sqlx/query-7bb9808f744590c0a962053e28564a37b980d3e9b1ceb23f69b9729b73e0bd33.json new file mode 100644 index 0000000000000..dfed5dcbb9f0d --- /dev/null +++ b/backend/.sqlx/query-7bb9808f744590c0a962053e28564a37b980d3e9b1ceb23f69b9729b73e0bd33.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT app.versions[array_upper(app.versions, 1)] FROM app WHERE path = $1 AND workspace_id = $2", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "versions", + "type_info": "Int8" + } + ], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [ + null + ] + }, + "hash": "7bb9808f744590c0a962053e28564a37b980d3e9b1ceb23f69b9729b73e0bd33" +} diff --git a/backend/.sqlx/query-7c9a464ac807051b99fe37f2078f1b17f824e6d9b1124db618855a15a98e31f6.json b/backend/.sqlx/query-7c9a464ac807051b99fe37f2078f1b17f824e6d9b1124db618855a15a98e31f6.json new file mode 100644 index 0000000000000..c7a6d92bbcebe --- /dev/null +++ b/backend/.sqlx/query-7c9a464ac807051b99fe37f2078f1b17f824e6d9b1124db618855a15a98e31f6.json @@ -0,0 +1,12 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM metrics WHERE id LIKE 'queue_%' AND created_at < NOW() - INTERVAL '14 day'", + "describe": { + "columns": [], + "parameters": { + "Left": [] + }, + "nullable": [] + }, + "hash": "7c9a464ac807051b99fe37f2078f1b17f824e6d9b1124db618855a15a98e31f6" +} diff --git a/backend/.sqlx/query-7d3180d119da0f6215a571118439469569c31e0234bb073af33f2cd4d6ca71d4.json b/backend/.sqlx/query-7d3180d119da0f6215a571118439469569c31e0234bb073af33f2cd4d6ca71d4.json new file mode 100644 index 0000000000000..b332ab287138d --- /dev/null +++ b/backend/.sqlx/query-7d3180d119da0f6215a571118439469569c31e0234bb073af33f2cd4d6ca71d4.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM queue WHERE workspace_id = $1", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [] + }, + "hash": "7d3180d119da0f6215a571118439469569c31e0234bb073af33f2cd4d6ca71d4" +} diff --git a/backend/.sqlx/query-7ded28aae42230da6e3aa6fa952268e8e15cc8b16770c20ec6be2a9e82ab93c9.json b/backend/.sqlx/query-7ded28aae42230da6e3aa6fa952268e8e15cc8b16770c20ec6be2a9e82ab93c9.json new file mode 100644 index 0000000000000..d9185a55864a9 --- /dev/null +++ b/backend/.sqlx/query-7ded28aae42230da6e3aa6fa952268e8e15cc8b16770c20ec6be2a9e82ab93c9.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO folder (workspace_id, name, display_name, owners, extra_perms, created_by, edited_at) VALUES ($1, 'app_custom', 'App Custom Components', ARRAY[]::TEXT[], '{\"g/all\": false}', $2, now()) ON CONFLICT DO NOTHING", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Varchar" + ] + }, + "nullable": [] + }, + "hash": "7ded28aae42230da6e3aa6fa952268e8e15cc8b16770c20ec6be2a9e82ab93c9" +} diff --git a/backend/.sqlx/query-7e90578bb37b2923cd94c201f1818c8c5b0bd62c9555949dda2e6aba3e09a4f0.json b/backend/.sqlx/query-7e90578bb37b2923cd94c201f1818c8c5b0bd62c9555949dda2e6aba3e09a4f0.json new file mode 100644 index 0000000000000..7158ad6a0e778 --- /dev/null +++ b/backend/.sqlx/query-7e90578bb37b2923cd94c201f1818c8c5b0bd62c9555949dda2e6aba3e09a4f0.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE job_logs SET workspace_id = $1 WHERE workspace_id = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Text" + ] + }, + "nullable": [] + }, + "hash": "7e90578bb37b2923cd94c201f1818c8c5b0bd62c9555949dda2e6aba3e09a4f0" +} diff --git a/backend/.sqlx/query-7e950917ef1d80026cae863f0744dbbe229e41b083d2a56940d8032d5dfe4189.json b/backend/.sqlx/query-7e950917ef1d80026cae863f0744dbbe229e41b083d2a56940d8032d5dfe4189.json new file mode 100644 index 0000000000000..67df85dec463d --- /dev/null +++ b/backend/.sqlx/query-7e950917ef1d80026cae863f0744dbbe229e41b083d2a56940d8032d5dfe4189.json @@ -0,0 +1,16 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE script SET path = REGEXP_REPLACE(path,'u/' || $2 || '/(.*)','u/' || $1 || '/\\1') WHERE path LIKE ('u/' || $2 || '/%') AND workspace_id = $3", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "7e950917ef1d80026cae863f0744dbbe229e41b083d2a56940d8032d5dfe4189" +} diff --git a/backend/.sqlx/query-7ee6056b7fb40b312333b489788337574398d63a6ab85171e43c3ab76400ec22.json b/backend/.sqlx/query-7ee6056b7fb40b312333b489788337574398d63a6ab85171e43c3ab76400ec22.json new file mode 100644 index 0000000000000..846bda756e93e --- /dev/null +++ b/backend/.sqlx/query-7ee6056b7fb40b312333b489788337574398d63a6ab85171e43c3ab76400ec22.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE workspace_key SET key = $1 WHERE workspace_id = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Text" + ] + }, + "nullable": [] + }, + "hash": "7ee6056b7fb40b312333b489788337574398d63a6ab85171e43c3ab76400ec22" +} diff --git a/backend/.sqlx/query-7fa8fca5b5cdf147da0cf8ae5a0d9fdee37dd8df66974c8d33f58a88b1bca537.json b/backend/.sqlx/query-7fa8fca5b5cdf147da0cf8ae5a0d9fdee37dd8df66974c8d33f58a88b1bca537.json new file mode 100644 index 0000000000000..e4aa1f4f24a2b --- /dev/null +++ b/backend/.sqlx/query-7fa8fca5b5cdf147da0cf8ae5a0d9fdee37dd8df66974c8d33f58a88b1bca537.json @@ -0,0 +1,12 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM healthchecks WHERE check_type LIKE 'min_alive_workers_%' AND created_at < NOW() - INTERVAL '48 hours'", + "describe": { + "columns": [], + "parameters": { + "Left": [] + }, + "nullable": [] + }, + "hash": "7fa8fca5b5cdf147da0cf8ae5a0d9fdee37dd8df66974c8d33f58a88b1bca537" +} diff --git a/backend/.sqlx/query-7fff1cc19a4b2a7ee99b1e4bd74986f4c9253052272145f37c4da1dfe5be0754.json b/backend/.sqlx/query-7fff1cc19a4b2a7ee99b1e4bd74986f4c9253052272145f37c4da1dfe5be0754.json new file mode 100644 index 0000000000000..b350debd426cf --- /dev/null +++ b/backend/.sqlx/query-7fff1cc19a4b2a7ee99b1e4bd74986f4c9253052272145f37c4da1dfe5be0754.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE schedule SET workspace_id = $1 WHERE workspace_id = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Text" + ] + }, + "nullable": [] + }, + "hash": "7fff1cc19a4b2a7ee99b1e4bd74986f4c9253052272145f37c4da1dfe5be0754" +} diff --git a/backend/.sqlx/query-804fc11e35f4afc0db194b6fe2594f91df7e588d4d2431bc85f4d8734920c8bf.json b/backend/.sqlx/query-804fc11e35f4afc0db194b6fe2594f91df7e588d4d2431bc85f4d8734920c8bf.json new file mode 100644 index 0000000000000..c4a2ff0a1041f --- /dev/null +++ b/backend/.sqlx/query-804fc11e35f4afc0db194b6fe2594f91df7e588d4d2431bc85f4d8734920c8bf.json @@ -0,0 +1,45 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO script (summary, description, dedicated_worker, content, workspace_id, path, hash, language, tag, created_by, lock) VALUES ('', '', true, $1, $2, $3, $4, $5, $6, $7, '') ON CONFLICT (workspace_id, hash) DO NOTHING", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Varchar", + "Varchar", + "Int8", + { + "Custom": { + "name": "script_lang", + "kind": { + "Enum": [ + "python3", + "deno", + "go", + "bash", + "postgresql", + "nativets", + "bun", + "mysql", + "bigquery", + "snowflake", + "graphql", + "powershell", + "mssql", + "php", + "bunnative", + "rust", + "ansible" + ] + } + } + }, + "Varchar", + "Varchar" + ] + }, + "nullable": [] + }, + "hash": "804fc11e35f4afc0db194b6fe2594f91df7e588d4d2431bc85f4d8734920c8bf" +} diff --git a/backend/.sqlx/query-808ff76fdb74482d5d3201417c8a2470e2867cb08b9a46d244653eb366d8ee5e.json b/backend/.sqlx/query-808ff76fdb74482d5d3201417c8a2470e2867cb08b9a46d244653eb366d8ee5e.json new file mode 100644 index 0000000000000..9cfbbc74fc6b3 --- /dev/null +++ b/backend/.sqlx/query-808ff76fdb74482d5d3201417c8a2470e2867cb08b9a46d244653eb366d8ee5e.json @@ -0,0 +1,17 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO group_ (workspace_id, name, summary, extra_perms) VALUES ($1, $2, $3, $4)", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Varchar", + "Text", + "Jsonb" + ] + }, + "nullable": [] + }, + "hash": "808ff76fdb74482d5d3201417c8a2470e2867cb08b9a46d244653eb366d8ee5e" +} diff --git a/backend/.sqlx/query-813d3c65d4c4bc10f1ec16ed4ee0954f4b938f45751ac03fd45479e665db1d40.json b/backend/.sqlx/query-813d3c65d4c4bc10f1ec16ed4ee0954f4b938f45751ac03fd45479e665db1d40.json new file mode 100644 index 0000000000000..6bda4d5cb5d23 --- /dev/null +++ b/backend/.sqlx/query-813d3c65d4c4bc10f1ec16ed4ee0954f4b938f45751ac03fd45479e665db1d40.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM deployment_metadata WHERE workspace_id = $1", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [] + }, + "hash": "813d3c65d4c4bc10f1ec16ed4ee0954f4b938f45751ac03fd45479e665db1d40" +} diff --git a/backend/.sqlx/query-826c6a36020f402169cab2ebe097e9f38f416f6f080a2fe8a9b83e97c4e15150.json b/backend/.sqlx/query-826c6a36020f402169cab2ebe097e9f38f416f6f080a2fe8a9b83e97c4e15150.json new file mode 100644 index 0000000000000..2eb6f507eca25 --- /dev/null +++ b/backend/.sqlx/query-826c6a36020f402169cab2ebe097e9f38f416f6f080a2fe8a9b83e97c4e15150.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE script SET archived = true WHERE path = $1 AND workspace_id = $2 RETURNING hash", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "hash", + "type_info": "Int8" + } + ], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [ + false + ] + }, + "hash": "826c6a36020f402169cab2ebe097e9f38f416f6f080a2fe8a9b83e97c4e15150" +} diff --git a/backend/.sqlx/query-8292b7b2cce5319575bc09ad18f29b63270872b6e5c6df1f0a326370058f13b0.json b/backend/.sqlx/query-8292b7b2cce5319575bc09ad18f29b63270872b6e5c6df1f0a326370058f13b0.json new file mode 100644 index 0000000000000..122f30b2f6f7d --- /dev/null +++ b/backend/.sqlx/query-8292b7b2cce5319575bc09ad18f29b63270872b6e5c6df1f0a326370058f13b0.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE workspace_settings SET webhook = $1 WHERE workspace_id = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "8292b7b2cce5319575bc09ad18f29b63270872b6e5c6df1f0a326370058f13b0" +} diff --git a/backend/.sqlx/query-82b16e771b6e21c4587b5ebf059e312f43b3e5a48f7599133831dbd65886f5d8.json b/backend/.sqlx/query-82b16e771b6e21c4587b5ebf059e312f43b3e5a48f7599133831dbd65886f5d8.json new file mode 100644 index 0000000000000..880e79a957139 --- /dev/null +++ b/backend/.sqlx/query-82b16e771b6e21c4587b5ebf059e312f43b3e5a48f7599133831dbd65886f5d8.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "\n SELECT usage.usage FROM usage \n WHERE is_workspace = true \n AND month_ = EXTRACT(YEAR FROM current_date) * 12 + EXTRACT(MONTH FROM current_date)\n AND id = $1", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "usage", + "type_info": "Int4" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + false + ] + }, + "hash": "82b16e771b6e21c4587b5ebf059e312f43b3e5a48f7599133831dbd65886f5d8" +} diff --git a/backend/.sqlx/query-82f3c4cd1c1f6aea86d66f675442587684391bc32be9ab55ae20aab549b7bba5.json b/backend/.sqlx/query-82f3c4cd1c1f6aea86d66f675442587684391bc32be9ab55ae20aab549b7bba5.json new file mode 100644 index 0000000000000..e2e21ddcbfcd3 --- /dev/null +++ b/backend/.sqlx/query-82f3c4cd1c1f6aea86d66f675442587684391bc32be9ab55ae20aab549b7bba5.json @@ -0,0 +1,16 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE group_ SET summary = $1 WHERE name = $2 AND workspace_id = $3", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "82f3c4cd1c1f6aea86d66f675442587684391bc32be9ab55ae20aab549b7bba5" +} diff --git a/backend/.sqlx/query-82f6674f19e8ad51a992505a46f46fc4a48172f104e9e849f755ac041c3eef92.json b/backend/.sqlx/query-82f6674f19e8ad51a992505a46f46fc4a48172f104e9e849f755ac041c3eef92.json new file mode 100644 index 0000000000000..f98f3fdeeac45 --- /dev/null +++ b/backend/.sqlx/query-82f6674f19e8ad51a992505a46f46fc4a48172f104e9e849f755ac041c3eef92.json @@ -0,0 +1,20 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT created_at FROM metrics WHERE id LIKE 'queue_count_%' ORDER BY created_at DESC LIMIT 1", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "created_at", + "type_info": "Timestamptz" + } + ], + "parameters": { + "Left": [] + }, + "nullable": [ + false + ] + }, + "hash": "82f6674f19e8ad51a992505a46f46fc4a48172f104e9e849f755ac041c3eef92" +} diff --git a/backend/.sqlx/query-83d18f4e1cda2c1867168551d855d5626e766b5469c6976c986bdafc8b9407c5.json b/backend/.sqlx/query-83d18f4e1cda2c1867168551d855d5626e766b5469c6976c986bdafc8b9407c5.json new file mode 100644 index 0000000000000..24cabff562291 --- /dev/null +++ b/backend/.sqlx/query-83d18f4e1cda2c1867168551d855d5626e766b5469c6976c986bdafc8b9407c5.json @@ -0,0 +1,24 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO app_version\n (app_id, value, created_by)\n VALUES ($1, $2::text::json, $3) RETURNING id", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "id", + "type_info": "Int8" + } + ], + "parameters": { + "Left": [ + "Int8", + "Text", + "Varchar" + ] + }, + "nullable": [ + false + ] + }, + "hash": "83d18f4e1cda2c1867168551d855d5626e766b5469c6976c986bdafc8b9407c5" +} diff --git a/backend/.sqlx/query-83ec97f6aad154e0e06ee05a3647dab8f89b1b2d7a569c7eac8c4169e37b9f8b.json b/backend/.sqlx/query-83ec97f6aad154e0e06ee05a3647dab8f89b1b2d7a569c7eac8c4169e37b9f8b.json new file mode 100644 index 0000000000000..4e0bc23b69544 --- /dev/null +++ b/backend/.sqlx/query-83ec97f6aad154e0e06ee05a3647dab8f89b1b2d7a569c7eac8c4169e37b9f8b.json @@ -0,0 +1,20 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT value FROM global_settings WHERE name = 'smtp_settings'", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "value", + "type_info": "Jsonb" + } + ], + "parameters": { + "Left": [] + }, + "nullable": [ + false + ] + }, + "hash": "83ec97f6aad154e0e06ee05a3647dab8f89b1b2d7a569c7eac8c4169e37b9f8b" +} diff --git a/backend/.sqlx/query-845120388af12c2b2f57fedf95c8cce4a406b74c9a8c8590a3bae323d59d046a.json b/backend/.sqlx/query-845120388af12c2b2f57fedf95c8cce4a406b74c9a8c8590a3bae323d59d046a.json new file mode 100644 index 0000000000000..afede37f44ce5 --- /dev/null +++ b/backend/.sqlx/query-845120388af12c2b2f57fedf95c8cce4a406b74c9a8c8590a3bae323d59d046a.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM log_file WHERE log_ts <= now() - ($1::bigint::text || ' s')::interval ", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Int8" + ] + }, + "nullable": [] + }, + "hash": "845120388af12c2b2f57fedf95c8cce4a406b74c9a8c8590a3bae323d59d046a" +} diff --git a/backend/.sqlx/query-84bbd11f7bb0c65dcfb2e12038b8a9cb51d303480ac3c5f8a5e833a53c40ed9b.json b/backend/.sqlx/query-84bbd11f7bb0c65dcfb2e12038b8a9cb51d303480ac3c5f8a5e833a53c40ed9b.json new file mode 100644 index 0000000000000..73a9ddd438db4 --- /dev/null +++ b/backend/.sqlx/query-84bbd11f7bb0c65dcfb2e12038b8a9cb51d303480ac3c5f8a5e833a53c40ed9b.json @@ -0,0 +1,17 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO raw_app\n (workspace_id, path, summary, extra_perms, data)\n VALUES ($1, $2, $3, '{}', $4)", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Varchar", + "Varchar", + "Text" + ] + }, + "nullable": [] + }, + "hash": "84bbd11f7bb0c65dcfb2e12038b8a9cb51d303480ac3c5f8a5e833a53c40ed9b" +} diff --git a/backend/.sqlx/query-855427180b549115923e57cdde6fa2780069b049948bae4140e866c570977a90.json b/backend/.sqlx/query-855427180b549115923e57cdde6fa2780069b049948bae4140e866c570977a90.json new file mode 100644 index 0000000000000..119990ff88ad9 --- /dev/null +++ b/backend/.sqlx/query-855427180b549115923e57cdde6fa2780069b049948bae4140e866c570977a90.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM draft WHERE path = $1 AND workspace_id = $2 AND typ = 'flow'", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "855427180b549115923e57cdde6fa2780069b049948bae4140e866c570977a90" +} diff --git a/backend/.sqlx/query-85844054136d7bc9669d6b340ca1a955cb86557032cfbdbf4022bf1ad3230ae7.json b/backend/.sqlx/query-85844054136d7bc9669d6b340ca1a955cb86557032cfbdbf4022bf1ad3230ae7.json new file mode 100644 index 0000000000000..3381f8593cd20 --- /dev/null +++ b/backend/.sqlx/query-85844054136d7bc9669d6b340ca1a955cb86557032cfbdbf4022bf1ad3230ae7.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM email_to_igroup WHERE email = $1", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [] + }, + "hash": "85844054136d7bc9669d6b340ca1a955cb86557032cfbdbf4022bf1ad3230ae7" +} diff --git a/backend/.sqlx/query-85c116da4a43a5ade37bb9ab2660d206b722ec4192368599c3a5027f50a89c80.json b/backend/.sqlx/query-85c116da4a43a5ade37bb9ab2660d206b722ec4192368599c3a5027f50a89c80.json new file mode 100644 index 0000000000000..a54cdf49ab265 --- /dev/null +++ b/backend/.sqlx/query-85c116da4a43a5ade37bb9ab2660d206b722ec4192368599c3a5027f50a89c80.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO global_settings (name, value) VALUES ('rsa_keys', $1)", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Jsonb" + ] + }, + "nullable": [] + }, + "hash": "85c116da4a43a5ade37bb9ab2660d206b722ec4192368599c3a5027f50a89c80" +} diff --git a/backend/.sqlx/query-8667efb13d6bd7ef1858d7d9fc7ccb9c3e8169e4080ee28f6f40c729d06cbb55.json b/backend/.sqlx/query-8667efb13d6bd7ef1858d7d9fc7ccb9c3e8169e4080ee28f6f40c729d06cbb55.json new file mode 100644 index 0000000000000..3a1412b781328 --- /dev/null +++ b/backend/.sqlx/query-8667efb13d6bd7ef1858d7d9fc7ccb9c3e8169e4080ee28f6f40c729d06cbb55.json @@ -0,0 +1,16 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE instance_group SET scim_display_name = $1, name = $2 where id = $3", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Varchar", + "Text" + ] + }, + "nullable": [] + }, + "hash": "8667efb13d6bd7ef1858d7d9fc7ccb9c3e8169e4080ee28f6f40c729d06cbb55" +} diff --git a/backend/.sqlx/query-866b26e56fd376368c759db6eee13f92373e308f584903121b4546ad51aef86e.json b/backend/.sqlx/query-866b26e56fd376368c759db6eee13f92373e308f584903121b4546ad51aef86e.json new file mode 100644 index 0000000000000..0872fbbb018ba --- /dev/null +++ b/backend/.sqlx/query-866b26e56fd376368c759db6eee13f92373e308f584903121b4546ad51aef86e.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT lockfile FROM pip_resolution_cache WHERE hash = $1", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "lockfile", + "type_info": "Text" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + false + ] + }, + "hash": "866b26e56fd376368c759db6eee13f92373e308f584903121b4546ad51aef86e" +} diff --git a/backend/.sqlx/query-867e0f8299e22a6b8e02d21adeb0281b1a10593715db823a5adeeac3ab1058cd.json b/backend/.sqlx/query-867e0f8299e22a6b8e02d21adeb0281b1a10593715db823a5adeeac3ab1058cd.json new file mode 100644 index 0000000000000..ec6143fe39638 --- /dev/null +++ b/backend/.sqlx/query-867e0f8299e22a6b8e02d21adeb0281b1a10593715db823a5adeeac3ab1058cd.json @@ -0,0 +1,37 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT EXISTS(SELECT 1 FROM http_trigger WHERE route_path_key = $1 AND workspace_id = $2 AND http_method = $3)", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "exists", + "type_info": "Bool" + } + ], + "parameters": { + "Left": [ + "Text", + "Text", + { + "Custom": { + "name": "http_method", + "kind": { + "Enum": [ + "get", + "post", + "put", + "delete", + "patch" + ] + } + } + } + ] + }, + "nullable": [ + null + ] + }, + "hash": "867e0f8299e22a6b8e02d21adeb0281b1a10593715db823a5adeeac3ab1058cd" +} diff --git a/backend/.sqlx/query-870d7feec169f70d140b7477562315ed2fd4662975bf0d01cfbffac86a959368.json b/backend/.sqlx/query-870d7feec169f70d140b7477562315ed2fd4662975bf0d01cfbffac86a959368.json new file mode 100644 index 0000000000000..f5c36ed27f610 --- /dev/null +++ b/backend/.sqlx/query-870d7feec169f70d140b7477562315ed2fd4662975bf0d01cfbffac86a959368.json @@ -0,0 +1,17 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE queue\n SET flow_status = JSONB_SET(\n JSONB_SET(flow_status, ARRAY['modules', $1::TEXT], $2), ARRAY['step'], $3)\n WHERE id = $4", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Jsonb", + "Jsonb", + "Uuid" + ] + }, + "nullable": [] + }, + "hash": "870d7feec169f70d140b7477562315ed2fd4662975bf0d01cfbffac86a959368" +} diff --git a/backend/.sqlx/query-873fde22f7947882edae7d15bc54e8df105d5e241eeb842a83e3444be0d2736d.json b/backend/.sqlx/query-873fde22f7947882edae7d15bc54e8df105d5e241eeb842a83e3444be0d2736d.json new file mode 100644 index 0000000000000..39613fc7218fc --- /dev/null +++ b/backend/.sqlx/query-873fde22f7947882edae7d15bc54e8df105d5e241eeb842a83e3444be0d2736d.json @@ -0,0 +1,20 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM resource WHERE resource_type = 'cache' AND to_timestamp((value->>'expire')::int) < now() RETURNING path", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "path", + "type_info": "Varchar" + } + ], + "parameters": { + "Left": [] + }, + "nullable": [ + false + ] + }, + "hash": "873fde22f7947882edae7d15bc54e8df105d5e241eeb842a83e3444be0d2736d" +} diff --git a/backend/.sqlx/query-8813665f8adfcab0daefbac2cc6b50e427dfd1c12d12895451affd307dc59c37.json b/backend/.sqlx/query-8813665f8adfcab0daefbac2cc6b50e427dfd1c12d12895451affd307dc59c37.json new file mode 100644 index 0000000000000..ce8adcd5b70b2 --- /dev/null +++ b/backend/.sqlx/query-8813665f8adfcab0daefbac2cc6b50e427dfd1c12d12895451affd307dc59c37.json @@ -0,0 +1,58 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT email, login_type::TEXT, super_admin, verified, name, company, username FROM password WHERE email = $1", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "email", + "type_info": "Varchar" + }, + { + "ordinal": 1, + "name": "login_type", + "type_info": "Text" + }, + { + "ordinal": 2, + "name": "super_admin", + "type_info": "Bool" + }, + { + "ordinal": 3, + "name": "verified", + "type_info": "Bool" + }, + { + "ordinal": 4, + "name": "name", + "type_info": "Varchar" + }, + { + "ordinal": 5, + "name": "company", + "type_info": "Varchar" + }, + { + "ordinal": 6, + "name": "username", + "type_info": "Varchar" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + false, + null, + false, + false, + true, + true, + true + ] + }, + "hash": "8813665f8adfcab0daefbac2cc6b50e427dfd1c12d12895451affd307dc59c37" +} diff --git a/backend/.sqlx/query-8824b382c4e98dfa17b4aa656af3a6c1ff99973e778d71bd598a50d022da8f15.json b/backend/.sqlx/query-8824b382c4e98dfa17b4aa656af3a6c1ff99973e778d71bd598a50d022da8f15.json new file mode 100644 index 0000000000000..124a6e36c59c1 --- /dev/null +++ b/backend/.sqlx/query-8824b382c4e98dfa17b4aa656af3a6c1ff99973e778d71bd598a50d022da8f15.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO metrics (id, value) VALUES ($1, $2)", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Jsonb" + ] + }, + "nullable": [] + }, + "hash": "8824b382c4e98dfa17b4aa656af3a6c1ff99973e778d71bd598a50d022da8f15" +} diff --git a/backend/.sqlx/query-88a3f58a1a315200fdd2e4bb8638246ee21818f8aaaf56f6e9d7ddce1490d886.json b/backend/.sqlx/query-88a3f58a1a315200fdd2e4bb8638246ee21818f8aaaf56f6e9d7ddce1490d886.json new file mode 100644 index 0000000000000..0449579437e95 --- /dev/null +++ b/backend/.sqlx/query-88a3f58a1a315200fdd2e4bb8638246ee21818f8aaaf56f6e9d7ddce1490d886.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT EXISTS(SELECT 1 FROM variable WHERE path = $1 AND workspace_id = $2)", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "exists", + "type_info": "Bool" + } + ], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [ + null + ] + }, + "hash": "88a3f58a1a315200fdd2e4bb8638246ee21818f8aaaf56f6e9d7ddce1490d886" +} diff --git a/backend/.sqlx/query-88b7589a6416da8be4b26af3bf30fcfcd6aeae7bc5a37e9a735cabbe2691c570.json b/backend/.sqlx/query-88b7589a6416da8be4b26af3bf30fcfcd6aeae7bc5a37e9a735cabbe2691c570.json new file mode 100644 index 0000000000000..ba27530279d95 --- /dev/null +++ b/backend/.sqlx/query-88b7589a6416da8be4b26af3bf30fcfcd6aeae7bc5a37e9a735cabbe2691c570.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT login_type::TEXT FROM password WHERE email = $1", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "login_type", + "type_info": "Text" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + null + ] + }, + "hash": "88b7589a6416da8be4b26af3bf30fcfcd6aeae7bc5a37e9a735cabbe2691c570" +} diff --git a/backend/.sqlx/query-8929150cb9262623eb12c908cb96c4d7e8cac594900ab0956c098e1cfa75e2f0.json b/backend/.sqlx/query-8929150cb9262623eb12c908cb96c4d7e8cac594900ab0956c098e1cfa75e2f0.json new file mode 100644 index 0000000000000..9e66b2ae2c35d --- /dev/null +++ b/backend/.sqlx/query-8929150cb9262623eb12c908cb96c4d7e8cac594900ab0956c098e1cfa75e2f0.json @@ -0,0 +1,16 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE queue\n SET leaf_jobs = JSONB_SET(coalesce(leaf_jobs, '{}'::jsonb), ARRAY[$1::TEXT], $2)\n WHERE COALESCE((SELECT root_job FROM queue WHERE id = $3), $3) = id", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Jsonb", + "Uuid" + ] + }, + "nullable": [] + }, + "hash": "8929150cb9262623eb12c908cb96c4d7e8cac594900ab0956c098e1cfa75e2f0" +} diff --git a/backend/.sqlx/query-894336809c161cdbb42ea235eb88498db6b1715386f78f57568f01c9954f05af.json b/backend/.sqlx/query-894336809c161cdbb42ea235eb88498db6b1715386f78f57568f01c9954f05af.json new file mode 100644 index 0000000000000..dd372ce279625 --- /dev/null +++ b/backend/.sqlx/query-894336809c161cdbb42ea235eb88498db6b1715386f78f57568f01c9954f05af.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT 1 FROM script WHERE hash = $1 AND workspace_id = $2", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "?column?", + "type_info": "Int4" + } + ], + "parameters": { + "Left": [ + "Int8", + "Text" + ] + }, + "nullable": [ + null + ] + }, + "hash": "894336809c161cdbb42ea235eb88498db6b1715386f78f57568f01c9954f05af" +} diff --git a/backend/.sqlx/query-8974baa530cf20156d9931123f0e046dd626e7763b54c4d0089a33bb417906f8.json b/backend/.sqlx/query-8974baa530cf20156d9931123f0e046dd626e7763b54c4d0089a33bb417906f8.json new file mode 100644 index 0000000000000..1f011a70900a4 --- /dev/null +++ b/backend/.sqlx/query-8974baa530cf20156d9931123f0e046dd626e7763b54c4d0089a33bb417906f8.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM usr_to_group WHERE workspace_id = $1", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [] + }, + "hash": "8974baa530cf20156d9931123f0e046dd626e7763b54c4d0089a33bb417906f8" +} diff --git a/backend/.sqlx/query-899a406cc03659e29bad831cc4d3d1dcda1a39b826a03136353344ccae29871b.json b/backend/.sqlx/query-899a406cc03659e29bad831cc4d3d1dcda1a39b826a03136353344ccae29871b.json new file mode 100644 index 0000000000000..dec3a1bb5a824 --- /dev/null +++ b/backend/.sqlx/query-899a406cc03659e29bad831cc4d3d1dcda1a39b826a03136353344ccae29871b.json @@ -0,0 +1,24 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE flow SET path = $1, summary = $2, description = $3,dependency_job = NULL, draft_only = NULL, tag = $4, dedicated_worker = $5, visible_to_runner_only = $6, value = $7, schema = $8::text::json, edited_by = $9, edited_at = now()\n WHERE path = $10 AND workspace_id = $11", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Text", + "Text", + "Varchar", + "Bool", + "Bool", + "Jsonb", + "Text", + "Varchar", + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "899a406cc03659e29bad831cc4d3d1dcda1a39b826a03136353344ccae29871b" +} diff --git a/backend/.sqlx/query-899b48109ce20a8fbcf9c8e9339713dcdf4173564d388f1927dea06653c718d5.json b/backend/.sqlx/query-899b48109ce20a8fbcf9c8e9339713dcdf4173564d388f1927dea06653c718d5.json new file mode 100644 index 0000000000000..f552871fff6f6 --- /dev/null +++ b/backend/.sqlx/query-899b48109ce20a8fbcf9c8e9339713dcdf4173564d388f1927dea06653c718d5.json @@ -0,0 +1,16 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE flow SET ws_error_handler_muted = $3 WHERE path = $1 AND workspace_id = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Text", + "Bool" + ] + }, + "nullable": [] + }, + "hash": "899b48109ce20a8fbcf9c8e9339713dcdf4173564d388f1927dea06653c718d5" +} diff --git a/backend/.sqlx/query-8a44ca0cfe1e154138cbbf5ebddebbba2e1149d2e329d1d89eecc1c008c93a31.json b/backend/.sqlx/query-8a44ca0cfe1e154138cbbf5ebddebbba2e1149d2e329d1d89eecc1c008c93a31.json new file mode 100644 index 0000000000000..fdfaa0c029c3a --- /dev/null +++ b/backend/.sqlx/query-8a44ca0cfe1e154138cbbf5ebddebbba2e1149d2e329d1d89eecc1c008c93a31.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE completed_job\n SET logs = '##DELETED##', args = '{}'::jsonb, result = '{}'::jsonb\n WHERE id = $1", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Uuid" + ] + }, + "nullable": [] + }, + "hash": "8a44ca0cfe1e154138cbbf5ebddebbba2e1149d2e329d1d89eecc1c008c93a31" +} diff --git a/backend/.sqlx/query-8a8f8c4a9ac35f44e5640ba38b9ef523d890b1687dc40a5b98367285f904e137.json b/backend/.sqlx/query-8a8f8c4a9ac35f44e5640ba38b9ef523d890b1687dc40a5b98367285f904e137.json new file mode 100644 index 0000000000000..58d4193d617df --- /dev/null +++ b/backend/.sqlx/query-8a8f8c4a9ac35f44e5640ba38b9ef523d890b1687dc40a5b98367285f904e137.json @@ -0,0 +1,28 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT workspace_id, username FROM usr WHERE email = $1", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "workspace_id", + "type_info": "Varchar" + }, + { + "ordinal": 1, + "name": "username", + "type_info": "Varchar" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + false, + false + ] + }, + "hash": "8a8f8c4a9ac35f44e5640ba38b9ef523d890b1687dc40a5b98367285f904e137" +} diff --git a/backend/.sqlx/query-8b8c8a9ada87f6cb2bee23ba5b707af4f1ad8819cca2335031126041a55f9483.json b/backend/.sqlx/query-8b8c8a9ada87f6cb2bee23ba5b707af4f1ad8819cca2335031126041a55f9483.json new file mode 100644 index 0000000000000..c310f89178df6 --- /dev/null +++ b/backend/.sqlx/query-8b8c8a9ada87f6cb2bee23ba5b707af4f1ad8819cca2335031126041a55f9483.json @@ -0,0 +1,20 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT COUNT(*) FROM password WHERE login_type != 'password'", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "count", + "type_info": "Int8" + } + ], + "parameters": { + "Left": [] + }, + "nullable": [ + null + ] + }, + "hash": "8b8c8a9ada87f6cb2bee23ba5b707af4f1ad8819cca2335031126041a55f9483" +} diff --git a/backend/.sqlx/query-8c11511a74a41a65f448249a00ebe6964a61d00c2f7b4875a55e64741bf1f0ca.json b/backend/.sqlx/query-8c11511a74a41a65f448249a00ebe6964a61d00c2f7b4875a55e64741bf1f0ca.json new file mode 100644 index 0000000000000..63f876ea86450 --- /dev/null +++ b/backend/.sqlx/query-8c11511a74a41a65f448249a00ebe6964a61d00c2f7b4875a55e64741bf1f0ca.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT EXISTS(SELECT 1 FROM usr WHERE workspace_id = $1 AND email = $2)", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "exists", + "type_info": "Bool" + } + ], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [ + null + ] + }, + "hash": "8c11511a74a41a65f448249a00ebe6964a61d00c2f7b4875a55e64741bf1f0ca" +} diff --git a/backend/.sqlx/query-8c15ea27be82665fe74a4be3182a5049fa937e30b4115caf0ba8d61d34f2089a.json b/backend/.sqlx/query-8c15ea27be82665fe74a4be3182a5049fa937e30b4115caf0ba8d61d34f2089a.json new file mode 100644 index 0000000000000..9b208615373bf --- /dev/null +++ b/backend/.sqlx/query-8c15ea27be82665fe74a4be3182a5049fa937e30b4115caf0ba8d61d34f2089a.json @@ -0,0 +1,34 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE queue SET running = false, started_at = null\n WHERE last_ping < now() - ($1 || ' seconds')::interval\n AND running = true AND job_kind NOT IN ('flow', 'flowpreview', 'singlescriptflow') AND same_worker = false RETURNING id, workspace_id, last_ping", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "id", + "type_info": "Uuid" + }, + { + "ordinal": 1, + "name": "workspace_id", + "type_info": "Varchar" + }, + { + "ordinal": 2, + "name": "last_ping", + "type_info": "Timestamptz" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + false, + false, + true + ] + }, + "hash": "8c15ea27be82665fe74a4be3182a5049fa937e30b4115caf0ba8d61d34f2089a" +} diff --git a/backend/.sqlx/query-8cc4fa257cb8053d27eb7a555d6e1b993e4a74b063eac632df8da24f6b87130e.json b/backend/.sqlx/query-8cc4fa257cb8053d27eb7a555d6e1b993e4a74b063eac632df8da24f6b87130e.json new file mode 100644 index 0000000000000..3130dd7386e1e --- /dev/null +++ b/backend/.sqlx/query-8cc4fa257cb8053d27eb7a555d6e1b993e4a74b063eac632df8da24f6b87130e.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT count(path) FROM resource WHERE path LIKE 'f/' || $1 || '%' AND workspace_id = $2", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "count", + "type_info": "Int8" + } + ], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [ + null + ] + }, + "hash": "8cc4fa257cb8053d27eb7a555d6e1b993e4a74b063eac632df8da24f6b87130e" +} diff --git a/backend/.sqlx/query-8d4235984f27d8b939ffd5c660d5b57dc38dd3b2643361ed3b7cdcd1534d2e21.json b/backend/.sqlx/query-8d4235984f27d8b939ffd5c660d5b57dc38dd3b2643361ed3b7cdcd1534d2e21.json new file mode 100644 index 0000000000000..824deba7fa427 --- /dev/null +++ b/backend/.sqlx/query-8d4235984f27d8b939ffd5c660d5b57dc38dd3b2643361ed3b7cdcd1534d2e21.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM queue WHERE schedule_path = $1 AND running = false AND workspace_id = $2 AND is_flow_step = false", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "8d4235984f27d8b939ffd5c660d5b57dc38dd3b2643361ed3b7cdcd1534d2e21" +} diff --git a/backend/.sqlx/query-8d655c34a00510699d2ad7044f7e526ba5082e5d1945c76a98404fe5d92e32ee.json b/backend/.sqlx/query-8d655c34a00510699d2ad7044f7e526ba5082e5d1945c76a98404fe5d92e32ee.json new file mode 100644 index 0000000000000..028e35f5dc3b2 --- /dev/null +++ b/backend/.sqlx/query-8d655c34a00510699d2ad7044f7e526ba5082e5d1945c76a98404fe5d92e32ee.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM queue WHERE id = any($1) AND workspace_id = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "UuidArray", + "Text" + ] + }, + "nullable": [] + }, + "hash": "8d655c34a00510699d2ad7044f7e526ba5082e5d1945c76a98404fe5d92e32ee" +} diff --git a/backend/.sqlx/query-8d678edbc19a195ef4c26c2deb4bb2bd6dbe9253356f1cd617f5522d8d65c238.json b/backend/.sqlx/query-8d678edbc19a195ef4c26c2deb4bb2bd6dbe9253356f1cd617f5522d8d65c238.json new file mode 100644 index 0000000000000..7cba9dfe84657 --- /dev/null +++ b/backend/.sqlx/query-8d678edbc19a195ef4c26c2deb4bb2bd6dbe9253356f1cd617f5522d8d65c238.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT count(path) FROM flow WHERE path LIKE 'f/' || $1 || '%' AND archived IS false AND workspace_id = $2", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "count", + "type_info": "Int8" + } + ], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [ + null + ] + }, + "hash": "8d678edbc19a195ef4c26c2deb4bb2bd6dbe9253356f1cd617f5522d8d65c238" +} diff --git a/backend/.sqlx/query-8dd1de2aca8c6c9ffaddd2c41c3a614a50fa5fd03c2d3b9a41bd85a7f156345e.json b/backend/.sqlx/query-8dd1de2aca8c6c9ffaddd2c41c3a614a50fa5fd03c2d3b9a41bd85a7f156345e.json new file mode 100644 index 0000000000000..c1a63e668f11c --- /dev/null +++ b/backend/.sqlx/query-8dd1de2aca8c6c9ffaddd2c41c3a614a50fa5fd03c2d3b9a41bd85a7f156345e.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT count(*) \n FROM worker_ping \n WHERE worker_group LIKE $1 AND ping_at > now() - INTERVAL '2 minutes'", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "count", + "type_info": "Int8" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + null + ] + }, + "hash": "8dd1de2aca8c6c9ffaddd2c41c3a614a50fa5fd03c2d3b9a41bd85a7f156345e" +} diff --git a/backend/.sqlx/query-8e6c0ebfe557b8955d23ee3b0e11b77154ab0c2d16b75d4d0c51542569c658a6.json b/backend/.sqlx/query-8e6c0ebfe557b8955d23ee3b0e11b77154ab0c2d16b75d4d0c51542569c658a6.json new file mode 100644 index 0000000000000..b4417ca7126d5 --- /dev/null +++ b/backend/.sqlx/query-8e6c0ebfe557b8955d23ee3b0e11b77154ab0c2d16b75d4d0c51542569c658a6.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM resource_type WHERE workspace_id = $1", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [] + }, + "hash": "8e6c0ebfe557b8955d23ee3b0e11b77154ab0c2d16b75d4d0c51542569c658a6" +} diff --git a/backend/.sqlx/query-8ede6fb740b145b3a8320adb789500870c7a8ec807a7b156b9ff7a15791b78f8.json b/backend/.sqlx/query-8ede6fb740b145b3a8320adb789500870c7a8ec807a7b156b9ff7a15791b78f8.json new file mode 100644 index 0000000000000..1e11772802f8f --- /dev/null +++ b/backend/.sqlx/query-8ede6fb740b145b3a8320adb789500870c7a8ec807a7b156b9ff7a15791b78f8.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM usr WHERE workspace_id = $1 AND username = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "8ede6fb740b145b3a8320adb789500870c7a8ec807a7b156b9ff7a15791b78f8" +} diff --git a/backend/.sqlx/query-8efd06387ded837d7849adafe5bc93acb882ef90fc58b023650c875e0fd17047.json b/backend/.sqlx/query-8efd06387ded837d7849adafe5bc93acb882ef90fc58b023650c875e0fd17047.json new file mode 100644 index 0000000000000..005e8fedc9e41 --- /dev/null +++ b/backend/.sqlx/query-8efd06387ded837d7849adafe5bc93acb882ef90fc58b023650c875e0fd17047.json @@ -0,0 +1,21 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO job_perms (job_id, email, username, is_admin, is_operator, folders, groups, workspace_id) \n values ($1, $2, $3, $4, $5, $6, $7, $8) \n ON CONFLICT (job_id) DO UPDATE SET email = $2, username = $3, is_admin = $4, is_operator = $5, folders = $6, groups = $7, workspace_id = $8", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Uuid", + "Varchar", + "Varchar", + "Bool", + "Bool", + "JsonbArray", + "TextArray", + "Varchar" + ] + }, + "nullable": [] + }, + "hash": "8efd06387ded837d7849adafe5bc93acb882ef90fc58b023650c875e0fd17047" +} diff --git a/backend/.sqlx/query-8f0031533f1bf407bd5d8af4d364eaf00d4c38ee7ba75141b40fc9fcd2ffc0b8.json b/backend/.sqlx/query-8f0031533f1bf407bd5d8af4d364eaf00d4c38ee7ba75141b40fc9fcd2ffc0b8.json new file mode 100644 index 0000000000000..86f46e27e58f7 --- /dev/null +++ b/backend/.sqlx/query-8f0031533f1bf407bd5d8af4d364eaf00d4c38ee7ba75141b40fc9fcd2ffc0b8.json @@ -0,0 +1,16 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO workspace SELECT $1, $2, owner, deleted, premium FROM workspace WHERE id = $3", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Varchar", + "Text" + ] + }, + "nullable": [] + }, + "hash": "8f0031533f1bf407bd5d8af4d364eaf00d4c38ee7ba75141b40fc9fcd2ffc0b8" +} diff --git a/backend/.sqlx/query-8fef781ecef8bb7e4f5172adbab1d1eefa5cf05ff6521ee605af7ac2b90fa60b.json b/backend/.sqlx/query-8fef781ecef8bb7e4f5172adbab1d1eefa5cf05ff6521ee605af7ac2b90fa60b.json new file mode 100644 index 0000000000000..f65ea6d2d4585 --- /dev/null +++ b/backend/.sqlx/query-8fef781ecef8bb7e4f5172adbab1d1eefa5cf05ff6521ee605af7ac2b90fa60b.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT created_at FROM script WHERE workspace_id = $1 AND hash = $2", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "created_at", + "type_info": "Timestamptz" + } + ], + "parameters": { + "Left": [ + "Text", + "Int8" + ] + }, + "nullable": [ + false + ] + }, + "hash": "8fef781ecef8bb7e4f5172adbab1d1eefa5cf05ff6521ee605af7ac2b90fa60b" +} diff --git a/backend/.sqlx/query-902961f15b8c7603dddf2933b5fc7cdd6e5af3545835763ccb29cdf3ac273ef0.json b/backend/.sqlx/query-902961f15b8c7603dddf2933b5fc7cdd6e5af3545835763ccb29cdf3ac273ef0.json new file mode 100644 index 0000000000000..c4e3c52c984fa --- /dev/null +++ b/backend/.sqlx/query-902961f15b8c7603dddf2933b5fc7cdd6e5af3545835763ccb29cdf3ac273ef0.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE password SET password_hash = $1 WHERE email = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Text" + ] + }, + "nullable": [] + }, + "hash": "902961f15b8c7603dddf2933b5fc7cdd6e5af3545835763ccb29cdf3ac273ef0" +} diff --git a/backend/.sqlx/query-903db87d61052a7ed39164be72c365e63acd7f87e103a3bdac870f764ddd7a9f.json b/backend/.sqlx/query-903db87d61052a7ed39164be72c365e63acd7f87e103a3bdac870f764ddd7a9f.json new file mode 100644 index 0000000000000..890f727fbde0d --- /dev/null +++ b/backend/.sqlx/query-903db87d61052a7ed39164be72c365e63acd7f87e103a3bdac870f764ddd7a9f.json @@ -0,0 +1,16 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO usr_to_group (workspace_id, usr, group_) VALUES ($1, $2, $3) ON CONFLICT DO NOTHING", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Varchar", + "Varchar" + ] + }, + "nullable": [] + }, + "hash": "903db87d61052a7ed39164be72c365e63acd7f87e103a3bdac870f764ddd7a9f" +} diff --git a/backend/.sqlx/query-91da4514dfee9a2a5c7c633bc28f8445eef286bd69368bf302d3279494610780.json b/backend/.sqlx/query-91da4514dfee9a2a5c7c633bc28f8445eef286bd69368bf302d3279494610780.json new file mode 100644 index 0000000000000..2618cc4cfb99f --- /dev/null +++ b/backend/.sqlx/query-91da4514dfee9a2a5c7c633bc28f8445eef286bd69368bf302d3279494610780.json @@ -0,0 +1,17 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM dependency_map\n WHERE importer_path = $1 AND importer_kind = $3::text::IMPORTER_KIND\n AND workspace_id = $2 AND ($4::text IS NULL OR importer_node_id = $4::text)", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Text", + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "91da4514dfee9a2a5c7c633bc28f8445eef286bd69368bf302d3279494610780" +} diff --git a/backend/.sqlx/query-93e6cdf58803f63d7d465f9d778c052c40dcdacade0f9b9921860160604f3763.json b/backend/.sqlx/query-93e6cdf58803f63d7d465f9d778c052c40dcdacade0f9b9921860160604f3763.json new file mode 100644 index 0000000000000..53679a94302c6 --- /dev/null +++ b/backend/.sqlx/query-93e6cdf58803f63d7d465f9d778c052c40dcdacade0f9b9921860160604f3763.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE workspace_settings SET workspace_id = $1 WHERE workspace_id = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Text" + ] + }, + "nullable": [] + }, + "hash": "93e6cdf58803f63d7d465f9d778c052c40dcdacade0f9b9921860160604f3763" +} diff --git a/backend/.sqlx/query-940b6f4869e545cbeb796ef379dd718cf03e3752607b6bf7c85a176f8a44cbc2.json b/backend/.sqlx/query-940b6f4869e545cbeb796ef379dd718cf03e3752607b6bf7c85a176f8a44cbc2.json new file mode 100644 index 0000000000000..d52dec49fcc6c --- /dev/null +++ b/backend/.sqlx/query-940b6f4869e545cbeb796ef379dd718cf03e3752607b6bf7c85a176f8a44cbc2.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE dependency_map SET workspace_id = $1 WHERE workspace_id = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Text" + ] + }, + "nullable": [] + }, + "hash": "940b6f4869e545cbeb796ef379dd718cf03e3752607b6bf7c85a176f8a44cbc2" +} diff --git a/backend/.sqlx/query-9422431d79de41518f651ef24e86819d7b6a2f5531740a7deea1b51775335977.json b/backend/.sqlx/query-9422431d79de41518f651ef24e86819d7b6a2f5531740a7deea1b51775335977.json new file mode 100644 index 0000000000000..7f2936f195891 --- /dev/null +++ b/backend/.sqlx/query-9422431d79de41518f651ef24e86819d7b6a2f5531740a7deea1b51775335977.json @@ -0,0 +1,24 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT scalar_int FROM job_stats WHERE workspace_id = $1 AND job_id = $2 AND metric_id = $3", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "scalar_int", + "type_info": "Int4" + } + ], + "parameters": { + "Left": [ + "Text", + "Uuid", + "Text" + ] + }, + "nullable": [ + true + ] + }, + "hash": "9422431d79de41518f651ef24e86819d7b6a2f5531740a7deea1b51775335977" +} diff --git a/backend/.sqlx/query-94ff696b4d3904e3823ef637fa8f1f0d0bdac01040c81b31514326417eb58cee.json b/backend/.sqlx/query-94ff696b4d3904e3823ef637fa8f1f0d0bdac01040c81b31514326417eb58cee.json new file mode 100644 index 0000000000000..885aa5cf642be --- /dev/null +++ b/backend/.sqlx/query-94ff696b4d3904e3823ef637fa8f1f0d0bdac01040c81b31514326417eb58cee.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT usage.usage + 1 FROM usage \n WHERE is_workspace IS FALSE AND\n month_ = EXTRACT(YEAR FROM current_date) * 12 + EXTRACT(MONTH FROM current_date)\n AND id = $1", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "?column?", + "type_info": "Int4" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + null + ] + }, + "hash": "94ff696b4d3904e3823ef637fa8f1f0d0bdac01040c81b31514326417eb58cee" +} diff --git a/backend/.sqlx/query-958ed17dafffdd37e636ccd244dc4ca60cbf562e6f6a371d5f9a9943fb30254c.json b/backend/.sqlx/query-958ed17dafffdd37e636ccd244dc4ca60cbf562e6f6a371d5f9a9943fb30254c.json new file mode 100644 index 0000000000000..31501b4094b39 --- /dev/null +++ b/backend/.sqlx/query-958ed17dafffdd37e636ccd244dc4ca60cbf562e6f6a371d5f9a9943fb30254c.json @@ -0,0 +1,18 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO dependency_map (workspace_id, importer_path, importer_kind, imported_path, importer_node_id)\n VALUES ($1, $2, $4::text::IMPORTER_KIND, $3, $5) ON CONFLICT DO NOTHING", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Varchar", + "Varchar", + "Text", + "Varchar" + ] + }, + "nullable": [] + }, + "hash": "958ed17dafffdd37e636ccd244dc4ca60cbf562e6f6a371d5f9a9943fb30254c" +} diff --git a/backend/.sqlx/query-96724ea1050e71438f7b892254514774f829b37d69f87286bd192af9cf702ac4.json b/backend/.sqlx/query-96724ea1050e71438f7b892254514774f829b37d69f87286bd192af9cf702ac4.json new file mode 100644 index 0000000000000..7f99c8770a5c1 --- /dev/null +++ b/backend/.sqlx/query-96724ea1050e71438f7b892254514774f829b37d69f87286bd192af9cf702ac4.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT pg_try_advisory_lock($1)", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "pg_try_advisory_lock", + "type_info": "Bool" + } + ], + "parameters": { + "Left": [ + "Int8" + ] + }, + "nullable": [ + null + ] + }, + "hash": "96724ea1050e71438f7b892254514774f829b37d69f87286bd192af9cf702ac4" +} diff --git a/backend/.sqlx/query-96a77e839d6210629234879eeeaa23d9bddf5f751fe27d999659f6597f9759f1.json b/backend/.sqlx/query-96a77e839d6210629234879eeeaa23d9bddf5f751fe27d999659f6597f9759f1.json new file mode 100644 index 0000000000000..3a66267a5f463 --- /dev/null +++ b/backend/.sqlx/query-96a77e839d6210629234879eeeaa23d9bddf5f751fe27d999659f6597f9759f1.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM raw_app WHERE workspace_id = $1", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [] + }, + "hash": "96a77e839d6210629234879eeeaa23d9bddf5f751fe27d999659f6597f9759f1" +} diff --git a/backend/.sqlx/query-96bc4b0f9909bd555fa58547fa87e4b311c4b515b9e3d14d922d7aec53a9505e.json b/backend/.sqlx/query-96bc4b0f9909bd555fa58547fa87e4b311c4b515b9e3d14d922d7aec53a9505e.json new file mode 100644 index 0000000000000..e344f1a1214ff --- /dev/null +++ b/backend/.sqlx/query-96bc4b0f9909bd555fa58547fa87e4b311c4b515b9e3d14d922d7aec53a9505e.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE script SET workspace_id = $1 WHERE workspace_id = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Text" + ] + }, + "nullable": [] + }, + "hash": "96bc4b0f9909bd555fa58547fa87e4b311c4b515b9e3d14d922d7aec53a9505e" +} diff --git a/backend/.sqlx/query-971175f6169857c3e1cdc08ac8aeed57300b7792e1797a9cdd73c9b3967cd7b9.json b/backend/.sqlx/query-971175f6169857c3e1cdc08ac8aeed57300b7792e1797a9cdd73c9b3967cd7b9.json new file mode 100644 index 0000000000000..f389cb6432dde --- /dev/null +++ b/backend/.sqlx/query-971175f6169857c3e1cdc08ac8aeed57300b7792e1797a9cdd73c9b3967cd7b9.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT root_job FROM queue WHERE id = $1", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "root_job", + "type_info": "Uuid" + } + ], + "parameters": { + "Left": [ + "Uuid" + ] + }, + "nullable": [ + true + ] + }, + "hash": "971175f6169857c3e1cdc08ac8aeed57300b7792e1797a9cdd73c9b3967cd7b9" +} diff --git a/backend/.sqlx/query-974c7e623f3dfa440e134eaaa8d029334c0645147200219c39b2c00b30941172.json b/backend/.sqlx/query-974c7e623f3dfa440e134eaaa8d029334c0645147200219c39b2c00b30941172.json new file mode 100644 index 0000000000000..0a735b5a2cc52 --- /dev/null +++ b/backend/.sqlx/query-974c7e623f3dfa440e134eaaa8d029334c0645147200219c39b2c00b30941172.json @@ -0,0 +1,46 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT flow.workspace_id as workspace, flow.path, summary, description, flow_version.schema \n FROM flow \n LEFT JOIN flow_version ON flow_version.id = flow.versions[array_upper(flow.versions, 1)]\n WHERE flow.workspace_id = $1", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "workspace", + "type_info": "Varchar" + }, + { + "ordinal": 1, + "name": "path", + "type_info": "Varchar" + }, + { + "ordinal": 2, + "name": "summary", + "type_info": "Text" + }, + { + "ordinal": 3, + "name": "description", + "type_info": "Text" + }, + { + "ordinal": 4, + "name": "schema", + "type_info": "Json" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + false, + false, + false, + false, + true + ] + }, + "hash": "974c7e623f3dfa440e134eaaa8d029334c0645147200219c39b2c00b30941172" +} diff --git a/backend/.sqlx/query-97966407e9f1fa80fd227f75686cc9ecbb767c69ee294638c1c0957f29fd440f.json b/backend/.sqlx/query-97966407e9f1fa80fd227f75686cc9ecbb767c69ee294638c1c0957f29fd440f.json new file mode 100644 index 0000000000000..f14f3e5c61367 --- /dev/null +++ b/backend/.sqlx/query-97966407e9f1fa80fd227f75686cc9ecbb767c69ee294638c1c0957f29fd440f.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT draft_only FROM script WHERE path = $1 AND workspace_id = $2", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "draft_only", + "type_info": "Bool" + } + ], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [ + true + ] + }, + "hash": "97966407e9f1fa80fd227f75686cc9ecbb767c69ee294638c1c0957f29fd440f" +} diff --git a/backend/.sqlx/query-979d80eed9500fc0b76c5707ef07db43de1e6d5dee4a7de2fa99fad3292f0d4c.json b/backend/.sqlx/query-979d80eed9500fc0b76c5707ef07db43de1e6d5dee4a7de2fa99fad3292f0d4c.json new file mode 100644 index 0000000000000..a7a1650316030 --- /dev/null +++ b/backend/.sqlx/query-979d80eed9500fc0b76c5707ef07db43de1e6d5dee4a7de2fa99fad3292f0d4c.json @@ -0,0 +1,16 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE schedule SET edited_by = $1 WHERE edited_by = $2 AND workspace_id = $3", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "979d80eed9500fc0b76c5707ef07db43de1e6d5dee4a7de2fa99fad3292f0d4c" +} diff --git a/backend/.sqlx/query-97b6bbcd655001a99f0cd9b127dcddf6d45ad87308c1294e52f1ae65529271d1.json b/backend/.sqlx/query-97b6bbcd655001a99f0cd9b127dcddf6d45ad87308c1294e52f1ae65529271d1.json new file mode 100644 index 0000000000000..45430a1fa725c --- /dev/null +++ b/backend/.sqlx/query-97b6bbcd655001a99f0cd9b127dcddf6d45ad87308c1294e52f1ae65529271d1.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT ws_error_handler_muted FROM script WHERE workspace_id = $1 AND hash = $2", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "ws_error_handler_muted", + "type_info": "Bool" + } + ], + "parameters": { + "Left": [ + "Text", + "Int8" + ] + }, + "nullable": [ + false + ] + }, + "hash": "97b6bbcd655001a99f0cd9b127dcddf6d45ad87308c1294e52f1ae65529271d1" +} diff --git a/backend/.sqlx/query-97e364c703bdcdfb5345810659cbe0477a28b8199ef0b297f9a22c88a43b6b5c.json b/backend/.sqlx/query-97e364c703bdcdfb5345810659cbe0477a28b8199ef0b297f9a22c88a43b6b5c.json new file mode 100644 index 0000000000000..34ff650dafdb4 --- /dev/null +++ b/backend/.sqlx/query-97e364c703bdcdfb5345810659cbe0477a28b8199ef0b297f9a22c88a43b6b5c.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM token WHERE token = $1 RETURNING email", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "email", + "type_info": "Varchar" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + true + ] + }, + "hash": "97e364c703bdcdfb5345810659cbe0477a28b8199ef0b297f9a22c88a43b6b5c" +} diff --git a/backend/.sqlx/query-98081ee9a4a4a52ae70d74d26e8608a010722d7ea9dc343ae8f03e38978ffaba.json b/backend/.sqlx/query-98081ee9a4a4a52ae70d74d26e8608a010722d7ea9dc343ae8f03e38978ffaba.json new file mode 100644 index 0000000000000..05cbaffc69ced --- /dev/null +++ b/backend/.sqlx/query-98081ee9a4a4a52ae70d74d26e8608a010722d7ea9dc343ae8f03e38978ffaba.json @@ -0,0 +1,41 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT tag, dedicated_worker, flow_version.value->>'early_return' as early_return, flow_version.value->>'preprocessor_module' IS NOT NULL as has_preprocessor\n FROM flow \n LEFT JOIN flow_version\n ON flow_version.id = flow.versions[array_upper(flow.versions, 1)]\n WHERE flow.path = $1 and flow.workspace_id = $2", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "tag", + "type_info": "Varchar" + }, + { + "ordinal": 1, + "name": "dedicated_worker", + "type_info": "Bool" + }, + { + "ordinal": 2, + "name": "early_return", + "type_info": "Text" + }, + { + "ordinal": 3, + "name": "has_preprocessor", + "type_info": "Bool" + } + ], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [ + true, + true, + null, + null + ] + }, + "hash": "98081ee9a4a4a52ae70d74d26e8608a010722d7ea9dc343ae8f03e38978ffaba" +} diff --git a/backend/.sqlx/query-9897705b7c265333559df757a725711a40924ec551a7589a64ee96f8aa7f6a21.json b/backend/.sqlx/query-9897705b7c265333559df757a725711a40924ec551a7589a64ee96f8aa7f6a21.json new file mode 100644 index 0000000000000..abad579224811 --- /dev/null +++ b/backend/.sqlx/query-9897705b7c265333559df757a725711a40924ec551a7589a64ee96f8aa7f6a21.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT set_config('session.folders_write', $1, true)", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "set_config", + "type_info": "Text" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + null + ] + }, + "hash": "9897705b7c265333559df757a725711a40924ec551a7589a64ee96f8aa7f6a21" +} diff --git a/backend/.sqlx/query-98c11a7d870a997c74e533a75bb48f39b0ec43816f05ac1d1eb39ea1903138f9.json b/backend/.sqlx/query-98c11a7d870a997c74e533a75bb48f39b0ec43816f05ac1d1eb39ea1903138f9.json new file mode 100644 index 0000000000000..27bccca71f5e1 --- /dev/null +++ b/backend/.sqlx/query-98c11a7d870a997c74e533a75bb48f39b0ec43816f05ac1d1eb39ea1903138f9.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT EXISTS(SELECT 1 FROM app WHERE id = $1 AND workspace_id = $2)", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "exists", + "type_info": "Bool" + } + ], + "parameters": { + "Left": [ + "Int8", + "Text" + ] + }, + "nullable": [ + null + ] + }, + "hash": "98c11a7d870a997c74e533a75bb48f39b0ec43816f05ac1d1eb39ea1903138f9" +} diff --git a/backend/.sqlx/query-9969f99d81b2fa581a1da8f7cc3722f60cbd41814f8a17006c82f48888f05bb6.json b/backend/.sqlx/query-9969f99d81b2fa581a1da8f7cc3722f60cbd41814f8a17006c82f48888f05bb6.json new file mode 100644 index 0000000000000..5a8a85449d3ff --- /dev/null +++ b/backend/.sqlx/query-9969f99d81b2fa581a1da8f7cc3722f60cbd41814f8a17006c82f48888f05bb6.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM pending_user WHERE email = $1", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [] + }, + "hash": "9969f99d81b2fa581a1da8f7cc3722f60cbd41814f8a17006c82f48888f05bb6" +} diff --git a/backend/.sqlx/query-9a050ab74cfc13a4b855408e61ebcb0a9d27e5563fa7af5e00a4916b03a62ddb.json b/backend/.sqlx/query-9a050ab74cfc13a4b855408e61ebcb0a9d27e5563fa7af5e00a4916b03a62ddb.json new file mode 100644 index 0000000000000..a0c5bd7642a2d --- /dev/null +++ b/backend/.sqlx/query-9a050ab74cfc13a4b855408e61ebcb0a9d27e5563fa7af5e00a4916b03a62ddb.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT EXISTS(SELECT 1 FROM http_trigger WHERE path = $1 AND workspace_id = $2)", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "exists", + "type_info": "Bool" + } + ], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [ + null + ] + }, + "hash": "9a050ab74cfc13a4b855408e61ebcb0a9d27e5563fa7af5e00a4916b03a62ddb" +} diff --git a/backend/.sqlx/query-9a3f8ca29c86fe31f8cc339897b3b49c1d3aa7b8a95be8a9101bd232ecef843a.json b/backend/.sqlx/query-9a3f8ca29c86fe31f8cc339897b3b49c1d3aa7b8a95be8a9101bd232ecef843a.json new file mode 100644 index 0000000000000..f3d030f8bd783 --- /dev/null +++ b/backend/.sqlx/query-9a3f8ca29c86fe31f8cc339897b3b49c1d3aa7b8a95be8a9101bd232ecef843a.json @@ -0,0 +1,16 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE schedule SET path = REGEXP_REPLACE(path,'u/' || $2 || '/(.*)','u/' || $1 || '/\\1') WHERE path LIKE ('u/' || $2 || '/%') AND workspace_id = $3", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "9a3f8ca29c86fe31f8cc339897b3b49c1d3aa7b8a95be8a9101bd232ecef843a" +} diff --git a/backend/.sqlx/query-9b716307fdbd479879224ba60b77eeb7e8487b02b13710c68be99057e2c32cb9.json b/backend/.sqlx/query-9b716307fdbd479879224ba60b77eeb7e8487b02b13710c68be99057e2c32cb9.json new file mode 100644 index 0000000000000..49663a50134cd --- /dev/null +++ b/backend/.sqlx/query-9b716307fdbd479879224ba60b77eeb7e8487b02b13710c68be99057e2c32cb9.json @@ -0,0 +1,16 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE queue SET flow_status = jsonb_set(jsonb_set(COALESCE(flow_status, '{}'::jsonb), array[$1], COALESCE(flow_status->$1, '{}'::jsonb)), array[$1, 'started_at'], to_jsonb(now()::text)) WHERE id = $2 AND workspace_id = $3", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Uuid", + "Text" + ] + }, + "nullable": [] + }, + "hash": "9b716307fdbd479879224ba60b77eeb7e8487b02b13710c68be99057e2c32cb9" +} diff --git a/backend/.sqlx/query-9c17ddca92e0a93051b36bb688ad6c1c24108e45c94be52595ca6cb82135f4eb.json b/backend/.sqlx/query-9c17ddca92e0a93051b36bb688ad6c1c24108e45c94be52595ca6cb82135f4eb.json new file mode 100644 index 0000000000000..5de165462e5e5 --- /dev/null +++ b/backend/.sqlx/query-9c17ddca92e0a93051b36bb688ad6c1c24108e45c94be52595ca6cb82135f4eb.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE queue SET args = (select result FROM completed_job WHERE id = $1) WHERE id = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Uuid", + "Uuid" + ] + }, + "nullable": [] + }, + "hash": "9c17ddca92e0a93051b36bb688ad6c1c24108e45c94be52595ca6cb82135f4eb" +} diff --git a/backend/.sqlx/query-9c6d44ffae63b4050ef3a66cb05d5a4ee50dea4b30093df2e0ceb684201ca4b0.json b/backend/.sqlx/query-9c6d44ffae63b4050ef3a66cb05d5a4ee50dea4b30093df2e0ceb684201ca4b0.json new file mode 100644 index 0000000000000..8c2c0146627b5 --- /dev/null +++ b/backend/.sqlx/query-9c6d44ffae63b4050ef3a66cb05d5a4ee50dea4b30093df2e0ceb684201ca4b0.json @@ -0,0 +1,66 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT workspace_id, name, display_name, owners, extra_perms, summary, created_by, edited_at FROM folder WHERE workspace_id = $1 ORDER BY name desc LIMIT $2 OFFSET $3", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "workspace_id", + "type_info": "Varchar" + }, + { + "ordinal": 1, + "name": "name", + "type_info": "Varchar" + }, + { + "ordinal": 2, + "name": "display_name", + "type_info": "Varchar" + }, + { + "ordinal": 3, + "name": "owners", + "type_info": "VarcharArray" + }, + { + "ordinal": 4, + "name": "extra_perms", + "type_info": "Jsonb" + }, + { + "ordinal": 5, + "name": "summary", + "type_info": "Text" + }, + { + "ordinal": 6, + "name": "created_by", + "type_info": "Varchar" + }, + { + "ordinal": 7, + "name": "edited_at", + "type_info": "Timestamptz" + } + ], + "parameters": { + "Left": [ + "Text", + "Int8", + "Int8" + ] + }, + "nullable": [ + false, + false, + false, + false, + false, + true, + true, + true + ] + }, + "hash": "9c6d44ffae63b4050ef3a66cb05d5a4ee50dea4b30093df2e0ceb684201ca4b0" +} diff --git a/backend/.sqlx/query-9cd6e964ba933de247ba7ddce0acef0b70b784c2410f3a5f51288aaea6904b8f.json b/backend/.sqlx/query-9cd6e964ba933de247ba7ddce0acef0b70b784c2410f3a5f51288aaea6904b8f.json new file mode 100644 index 0000000000000..ed63942f01a01 --- /dev/null +++ b/backend/.sqlx/query-9cd6e964ba933de247ba7ddce0acef0b70b784c2410f3a5f51288aaea6904b8f.json @@ -0,0 +1,50 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT name, summary, array_remove(array_agg(email_to_igroup.email), null) as emails, id, scim_display_name, external_id FROM email_to_igroup RIGHT JOIN instance_group ON instance_group.name = email_to_igroup.igroup GROUP BY name", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "name", + "type_info": "Varchar" + }, + { + "ordinal": 1, + "name": "summary", + "type_info": "Varchar" + }, + { + "ordinal": 2, + "name": "emails", + "type_info": "VarcharArray" + }, + { + "ordinal": 3, + "name": "id", + "type_info": "Varchar" + }, + { + "ordinal": 4, + "name": "scim_display_name", + "type_info": "Varchar" + }, + { + "ordinal": 5, + "name": "external_id", + "type_info": "Varchar" + } + ], + "parameters": { + "Left": [] + }, + "nullable": [ + false, + true, + null, + true, + true, + true + ] + }, + "hash": "9cd6e964ba933de247ba7ddce0acef0b70b784c2410f3a5f51288aaea6904b8f" +} diff --git a/backend/.sqlx/query-9d25fbd21a63e6e9ccfdbf0460c8b3ca6d7fa05600067f379659b59b6f2bf418.json b/backend/.sqlx/query-9d25fbd21a63e6e9ccfdbf0460c8b3ca6d7fa05600067f379659b59b6f2bf418.json new file mode 100644 index 0000000000000..4f8a78ca66ede --- /dev/null +++ b/backend/.sqlx/query-9d25fbd21a63e6e9ccfdbf0460c8b3ca6d7fa05600067f379659b59b6f2bf418.json @@ -0,0 +1,102 @@ +{ + "db_name": "PostgreSQL", + "query": "select hash, tag, concurrency_key, concurrent_limit, concurrency_time_window_s, cache_ttl, language as \"language: ScriptLang\", dedicated_worker, priority, timeout FROM script where path = $1 AND workspace_id = $2 AND\n created_at = (SELECT max(created_at) FROM script WHERE path = $1 AND workspace_id = $2 AND\n deleted = false AND archived = false)", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "hash", + "type_info": "Int8" + }, + { + "ordinal": 1, + "name": "tag", + "type_info": "Varchar" + }, + { + "ordinal": 2, + "name": "concurrency_key", + "type_info": "Varchar" + }, + { + "ordinal": 3, + "name": "concurrent_limit", + "type_info": "Int4" + }, + { + "ordinal": 4, + "name": "concurrency_time_window_s", + "type_info": "Int4" + }, + { + "ordinal": 5, + "name": "cache_ttl", + "type_info": "Int4" + }, + { + "ordinal": 6, + "name": "language: ScriptLang", + "type_info": { + "Custom": { + "name": "script_lang", + "kind": { + "Enum": [ + "python3", + "deno", + "go", + "bash", + "postgresql", + "nativets", + "bun", + "mysql", + "bigquery", + "snowflake", + "graphql", + "powershell", + "mssql", + "php", + "bunnative", + "rust", + "ansible" + ] + } + } + } + }, + { + "ordinal": 7, + "name": "dedicated_worker", + "type_info": "Bool" + }, + { + "ordinal": 8, + "name": "priority", + "type_info": "Int2" + }, + { + "ordinal": 9, + "name": "timeout", + "type_info": "Int4" + } + ], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [ + false, + true, + true, + true, + true, + true, + false, + true, + true, + true + ] + }, + "hash": "9d25fbd21a63e6e9ccfdbf0460c8b3ca6d7fa05600067f379659b59b6f2bf418" +} diff --git a/backend/.sqlx/query-9d3556319411a27a875bf6cf0e5eda837cc63e4d8be912c0b5bfeea4a0c8db2e.json b/backend/.sqlx/query-9d3556319411a27a875bf6cf0e5eda837cc63e4d8be912c0b5bfeea4a0c8db2e.json new file mode 100644 index 0000000000000..2393bc83df95c --- /dev/null +++ b/backend/.sqlx/query-9d3556319411a27a875bf6cf0e5eda837cc63e4d8be912c0b5bfeea4a0c8db2e.json @@ -0,0 +1,72 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO queue (id, script_hash, script_path, job_kind, language, tag, created_by, permissioned_as, email, scheduled_for, workspace_id) (SELECT gen_random_uuid(), $1, $2, $3, $4, $5, $6, $7, $8, $9, $10 FROM generate_series(1, $11))", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Int8", + "Varchar", + { + "Custom": { + "name": "job_kind", + "kind": { + "Enum": [ + "script", + "preview", + "flow", + "dependencies", + "flowpreview", + "script_hub", + "identity", + "flowdependencies", + "http", + "graphql", + "postgresql", + "noop", + "appdependencies", + "deploymentcallback", + "singlescriptflow" + ] + } + } + }, + { + "Custom": { + "name": "script_lang", + "kind": { + "Enum": [ + "python3", + "deno", + "go", + "bash", + "postgresql", + "nativets", + "bun", + "mysql", + "bigquery", + "snowflake", + "graphql", + "powershell", + "mssql", + "php", + "bunnative", + "rust", + "ansible" + ] + } + } + }, + "Varchar", + "Varchar", + "Varchar", + "Varchar", + "Timestamptz", + "Varchar", + "Int4" + ] + }, + "nullable": [] + }, + "hash": "9d3556319411a27a875bf6cf0e5eda837cc63e4d8be912c0b5bfeea4a0c8db2e" +} diff --git a/backend/.sqlx/query-9da0cea2a5d0464ca78cfeccf6cedf2b1c0e6e6cb3c9183a937a68465debdb06.json b/backend/.sqlx/query-9da0cea2a5d0464ca78cfeccf6cedf2b1c0e6e6cb3c9183a937a68465debdb06.json new file mode 100644 index 0000000000000..9f42f0f54dedf --- /dev/null +++ b/backend/.sqlx/query-9da0cea2a5d0464ca78cfeccf6cedf2b1c0e6e6cb3c9183a937a68465debdb06.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM concurrency_key WHERE ended_at <= now() - ($1::bigint::text || ' s')::interval ", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Int8" + ] + }, + "nullable": [] + }, + "hash": "9da0cea2a5d0464ca78cfeccf6cedf2b1c0e6e6cb3c9183a937a68465debdb06" +} diff --git a/backend/.sqlx/query-9dd0cf1627f9e767af8758f26d8bf9e96a48e45daf4a3c54f7b81a7b92d39431.json b/backend/.sqlx/query-9dd0cf1627f9e767af8758f26d8bf9e96a48e45daf4a3c54f7b81a7b92d39431.json new file mode 100644 index 0000000000000..ff9881bb4eb34 --- /dev/null +++ b/backend/.sqlx/query-9dd0cf1627f9e767af8758f26d8bf9e96a48e45daf4a3c54f7b81a7b92d39431.json @@ -0,0 +1,20 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT pg_try_advisory_lock(4242)", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "pg_try_advisory_lock", + "type_info": "Bool" + } + ], + "parameters": { + "Left": [] + }, + "nullable": [ + null + ] + }, + "hash": "9dd0cf1627f9e767af8758f26d8bf9e96a48e45daf4a3c54f7b81a7b92d39431" +} diff --git a/backend/.sqlx/query-9dfc48c84c52b8b027594b1c6638080f1174e06c8621245fd82ea1515e2d9a96.json b/backend/.sqlx/query-9dfc48c84c52b8b027594b1c6638080f1174e06c8621245fd82ea1515e2d9a96.json new file mode 100644 index 0000000000000..737090f5b867f --- /dev/null +++ b/backend/.sqlx/query-9dfc48c84c52b8b027594b1c6638080f1174e06c8621245fd82ea1515e2d9a96.json @@ -0,0 +1,25 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE schedule SET on_recovery = $1, on_recovery_extra_args = $2, on_recovery_times = $3 WHERE workspace_id = $4 RETURNING path", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "path", + "type_info": "Varchar" + } + ], + "parameters": { + "Left": [ + "Varchar", + "Json", + "Int4", + "Text" + ] + }, + "nullable": [ + false + ] + }, + "hash": "9dfc48c84c52b8b027594b1c6638080f1174e06c8621245fd82ea1515e2d9a96" +} diff --git a/backend/.sqlx/query-9e64c6b6db2155ad8e6e514b08da92d80caafd1a217813bcd354aa264810f690.json b/backend/.sqlx/query-9e64c6b6db2155ad8e6e514b08da92d80caafd1a217813bcd354aa264810f690.json new file mode 100644 index 0000000000000..25296490e0f24 --- /dev/null +++ b/backend/.sqlx/query-9e64c6b6db2155ad8e6e514b08da92d80caafd1a217813bcd354aa264810f690.json @@ -0,0 +1,24 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO flow (workspace_id, path, summary, description, dependency_job, draft_only, tag, dedicated_worker, visible_to_runner_only, value, schema, edited_by, edited_at) \n VALUES ($1, $2, $3, $4, NULL, $5, $6, $7, $8, $9, $10::text::json, $11, now())", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Varchar", + "Text", + "Text", + "Bool", + "Varchar", + "Bool", + "Bool", + "Jsonb", + "Text", + "Varchar" + ] + }, + "nullable": [] + }, + "hash": "9e64c6b6db2155ad8e6e514b08da92d80caafd1a217813bcd354aa264810f690" +} diff --git a/backend/.sqlx/query-9ebb9c16948a695a053068d9a1df0152691271ac33d8c82db47be11746ccbcef.json b/backend/.sqlx/query-9ebb9c16948a695a053068d9a1df0152691271ac33d8c82db47be11746ccbcef.json new file mode 100644 index 0000000000000..ae30d3bd980b2 --- /dev/null +++ b/backend/.sqlx/query-9ebb9c16948a695a053068d9a1df0152691271ac33d8c82db47be11746ccbcef.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT EXISTS(SELECT 1 FROM http_trigger WHERE workspace_id = $1)", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "exists", + "type_info": "Bool" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + null + ] + }, + "hash": "9ebb9c16948a695a053068d9a1df0152691271ac33d8c82db47be11746ccbcef" +} diff --git a/backend/.sqlx/query-9ed77e78e6295c62745ac3ac3b7e5f544f654d7cddc13acb5d3f4fdc12a8875f.json b/backend/.sqlx/query-9ed77e78e6295c62745ac3ac3b7e5f544f654d7cddc13acb5d3f4fdc12a8875f.json new file mode 100644 index 0000000000000..9c7af05c429d6 --- /dev/null +++ b/backend/.sqlx/query-9ed77e78e6295c62745ac3ac3b7e5f544f654d7cddc13acb5d3f4fdc12a8875f.json @@ -0,0 +1,20 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT created_at FROM metrics WHERE id = 'license_key_renewal' ORDER BY created_at DESC LIMIT 1", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "created_at", + "type_info": "Timestamptz" + } + ], + "parameters": { + "Left": [] + }, + "nullable": [ + false + ] + }, + "hash": "9ed77e78e6295c62745ac3ac3b7e5f544f654d7cddc13acb5d3f4fdc12a8875f" +} diff --git a/backend/.sqlx/query-9f0783aae9cf5a6de2ca783aeba7a8c2f0eb5cc11cb2f49222f5eef4a21d8c41.json b/backend/.sqlx/query-9f0783aae9cf5a6de2ca783aeba7a8c2f0eb5cc11cb2f49222f5eef4a21d8c41.json new file mode 100644 index 0000000000000..c1449320d9437 --- /dev/null +++ b/backend/.sqlx/query-9f0783aae9cf5a6de2ca783aeba7a8c2f0eb5cc11cb2f49222f5eef4a21d8c41.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO password(email, password_hash, login_type, super_admin, verified, name, company, first_time_user, username)\n VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9)", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Varchar", + "Varchar", + "Bool", + "Bool", + "Varchar", + "Varchar", + "Bool", + "Varchar" + ] + }, + "nullable": [] + }, + "hash": "9f0783aae9cf5a6de2ca783aeba7a8c2f0eb5cc11cb2f49222f5eef4a21d8c41" +} diff --git a/backend/.sqlx/query-9f16a61d6a9a42f3fd3e30a1e7776503cee1b45eba150c3082eb246ea3f98d47.json b/backend/.sqlx/query-9f16a61d6a9a42f3fd3e30a1e7776503cee1b45eba150c3082eb246ea3f98d47.json new file mode 100644 index 0000000000000..aa64996dc8fe0 --- /dev/null +++ b/backend/.sqlx/query-9f16a61d6a9a42f3fd3e30a1e7776503cee1b45eba150c3082eb246ea3f98d47.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT EXISTS(SELECT 1 FROM completed_job WHERE id = $1 AND workspace_id = $2)", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "exists", + "type_info": "Bool" + } + ], + "parameters": { + "Left": [ + "Uuid", + "Text" + ] + }, + "nullable": [ + null + ] + }, + "hash": "9f16a61d6a9a42f3fd3e30a1e7776503cee1b45eba150c3082eb246ea3f98d47" +} diff --git a/backend/.sqlx/query-9f1f388924176dbe3dea882e0c62728a82ba256029096812dd705ccb1a552cfe.json b/backend/.sqlx/query-9f1f388924176dbe3dea882e0c62728a82ba256029096812dd705ccb1a552cfe.json new file mode 100644 index 0000000000000..51ddd8af63c73 --- /dev/null +++ b/backend/.sqlx/query-9f1f388924176dbe3dea882e0c62728a82ba256029096812dd705ccb1a552cfe.json @@ -0,0 +1,19 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO variable\n (workspace_id, path, value, is_secret, account, is_oauth)\n VALUES ($1, $2, $3, $4, $5, $6)\n ON CONFLICT (workspace_id, path) DO UPDATE SET value = $3", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Varchar", + "Varchar", + "Bool", + "Int4", + "Bool" + ] + }, + "nullable": [] + }, + "hash": "9f1f388924176dbe3dea882e0c62728a82ba256029096812dd705ccb1a552cfe" +} diff --git a/backend/.sqlx/query-9f545c9c03d550ba0468dd7b4be39b76a7754a53f4508dce05e3f36300db483b.json b/backend/.sqlx/query-9f545c9c03d550ba0468dd7b4be39b76a7754a53f4508dce05e3f36300db483b.json new file mode 100644 index 0000000000000..c174cee4bfa3d --- /dev/null +++ b/backend/.sqlx/query-9f545c9c03d550ba0468dd7b4be39b76a7754a53f4508dce05e3f36300db483b.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT ws_error_handler_muted FROM flow WHERE workspace_id = $1 AND path = $2", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "ws_error_handler_muted", + "type_info": "Bool" + } + ], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [ + false + ] + }, + "hash": "9f545c9c03d550ba0468dd7b4be39b76a7754a53f4508dce05e3f36300db483b" +} diff --git a/backend/.sqlx/query-a00e61e770e20157bbd9e4cdedf7fb5f9de7c8c9e50282e3ecf2e3ce917ec37a.json b/backend/.sqlx/query-a00e61e770e20157bbd9e4cdedf7fb5f9de7c8c9e50282e3ecf2e3ce917ec37a.json new file mode 100644 index 0000000000000..9f9578113627f --- /dev/null +++ b/backend/.sqlx/query-a00e61e770e20157bbd9e4cdedf7fb5f9de7c8c9e50282e3ecf2e3ce917ec37a.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO global_settings (name, value) VALUES ($1, $2) ON CONFLICT (name) DO UPDATE SET value = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Jsonb" + ] + }, + "nullable": [] + }, + "hash": "a00e61e770e20157bbd9e4cdedf7fb5f9de7c8c9e50282e3ecf2e3ce917ec37a" +} diff --git a/backend/.sqlx/query-a00f3f18087326432c9114998e47cff4f78d1b28cdb8adc6b18b937e1cf142d1.json b/backend/.sqlx/query-a00f3f18087326432c9114998e47cff4f78d1b28cdb8adc6b18b937e1cf142d1.json new file mode 100644 index 0000000000000..b703a00e96e3c --- /dev/null +++ b/backend/.sqlx/query-a00f3f18087326432c9114998e47cff4f78d1b28cdb8adc6b18b937e1cf142d1.json @@ -0,0 +1,32 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT name, summary, array_remove(array_agg(email_to_igroup.email), null) as emails FROM email_to_igroup RIGHT JOIN instance_group ON instance_group.name = email_to_igroup.igroup GROUP BY name", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "name", + "type_info": "Varchar" + }, + { + "ordinal": 1, + "name": "summary", + "type_info": "Varchar" + }, + { + "ordinal": 2, + "name": "emails", + "type_info": "VarcharArray" + } + ], + "parameters": { + "Left": [] + }, + "nullable": [ + false, + true, + null + ] + }, + "hash": "a00f3f18087326432c9114998e47cff4f78d1b28cdb8adc6b18b937e1cf142d1" +} diff --git a/backend/.sqlx/query-a0d7dbff9ef98c3cc25281cb5dc9e29023766ba04c57d07c3f89f07640833619.json b/backend/.sqlx/query-a0d7dbff9ef98c3cc25281cb5dc9e29023766ba04c57d07c3f89f07640833619.json new file mode 100644 index 0000000000000..11b099d79160d --- /dev/null +++ b/backend/.sqlx/query-a0d7dbff9ef98c3cc25281cb5dc9e29023766ba04c57d07c3f89f07640833619.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE raw_app SET workspace_id = $1 WHERE workspace_id = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Text" + ] + }, + "nullable": [] + }, + "hash": "a0d7dbff9ef98c3cc25281cb5dc9e29023766ba04c57d07c3f89f07640833619" +} diff --git a/backend/.sqlx/query-a0f1c0df6bc2f1fbca50edee90e42c94445536e201b322eda6f7a90bdf38f36a.json b/backend/.sqlx/query-a0f1c0df6bc2f1fbca50edee90e42c94445536e201b322eda6f7a90bdf38f36a.json new file mode 100644 index 0000000000000..3ed4f5a316ee5 --- /dev/null +++ b/backend/.sqlx/query-a0f1c0df6bc2f1fbca50edee90e42c94445536e201b322eda6f7a90bdf38f36a.json @@ -0,0 +1,35 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT flow_version.id, flow_version.created_at, deployment_metadata.deployment_msg FROM flow_version \n LEFT JOIN deployment_metadata ON flow_version.id = deployment_metadata.flow_version\n WHERE flow_version.path = $1 AND flow_version.workspace_id = $2 \n ORDER BY flow_version.created_at DESC", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "id", + "type_info": "Int8" + }, + { + "ordinal": 1, + "name": "created_at", + "type_info": "Timestamptz" + }, + { + "ordinal": 2, + "name": "deployment_msg", + "type_info": "Text" + } + ], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [ + false, + false, + true + ] + }, + "hash": "a0f1c0df6bc2f1fbca50edee90e42c94445536e201b322eda6f7a90bdf38f36a" +} diff --git a/backend/.sqlx/query-a15a4478d1249c9ae5cd5f2b755f8479986f1591bf545b8562109b6ce26578b0.json b/backend/.sqlx/query-a15a4478d1249c9ae5cd5f2b755f8479986f1591bf545b8562109b6ce26578b0.json new file mode 100644 index 0000000000000..0099197b32e76 --- /dev/null +++ b/backend/.sqlx/query-a15a4478d1249c9ae5cd5f2b755f8479986f1591bf545b8562109b6ce26578b0.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT resource_type\n FROM resource\n WHERE resource.path = $1 AND resource.workspace_id = $2", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "resource_type", + "type_info": "Varchar" + } + ], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [ + false + ] + }, + "hash": "a15a4478d1249c9ae5cd5f2b755f8479986f1591bf545b8562109b6ce26578b0" +} diff --git a/backend/.sqlx/query-a17260a1f1ee02e786690994d98c84ddf81e2eeb883f895c9cfc47e144d422cb.json b/backend/.sqlx/query-a17260a1f1ee02e786690994d98c84ddf81e2eeb883f895c9cfc47e144d422cb.json new file mode 100644 index 0000000000000..5f8386be37d4f --- /dev/null +++ b/backend/.sqlx/query-a17260a1f1ee02e786690994d98c84ddf81e2eeb883f895c9cfc47e144d422cb.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT content FROM script WHERE path = $1 AND workspace_id = $2 AND\n created_at = (SELECT max(created_at) FROM script WHERE path = $1 AND archived = false AND workspace_id = $2)", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "content", + "type_info": "Text" + } + ], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [ + false + ] + }, + "hash": "a17260a1f1ee02e786690994d98c84ddf81e2eeb883f895c9cfc47e144d422cb" +} diff --git a/backend/.sqlx/query-a21844a8a73420a1f25dac7815e525a27eda3ca6c69d690e8aa437b425c90963.json b/backend/.sqlx/query-a21844a8a73420a1f25dac7815e525a27eda3ca6c69d690e8aa437b425c90963.json new file mode 100644 index 0000000000000..f43754ea6783f --- /dev/null +++ b/backend/.sqlx/query-a21844a8a73420a1f25dac7815e525a27eda3ca6c69d690e8aa437b425c90963.json @@ -0,0 +1,25 @@ +{ + "db_name": "PostgreSQL", + "query": "\n UPDATE queue SET flow_status = JSONB_SET(flow_status, ARRAY['user_states'], JSONB_SET(COALESCE(flow_status->'user_states', '{}'::jsonb), ARRAY[$1], $2))\n WHERE id = $3 AND workspace_id = $4 AND job_kind IN ('flow', 'flowpreview') RETURNING 1\n ", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "?column?", + "type_info": "Int4" + } + ], + "parameters": { + "Left": [ + "Text", + "Jsonb", + "Uuid", + "Text" + ] + }, + "nullable": [ + null + ] + }, + "hash": "a21844a8a73420a1f25dac7815e525a27eda3ca6c69d690e8aa437b425c90963" +} diff --git a/backend/.sqlx/query-a22146c0a924e5a1a99bc72775399a8c3db31b57ae9ded5bff55f44321c3f3c2.json b/backend/.sqlx/query-a22146c0a924e5a1a99bc72775399a8c3db31b57ae9ded5bff55f44321c3f3c2.json new file mode 100644 index 0000000000000..daeaccb7158b1 --- /dev/null +++ b/backend/.sqlx/query-a22146c0a924e5a1a99bc72775399a8c3db31b57ae9ded5bff55f44321c3f3c2.json @@ -0,0 +1,24 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT CASE WHEN pg_column_size(args) < 40000 OR $3 THEN args ELSE '\"WINDMILL_TOO_BIG\"'::jsonb END as args FROM input WHERE id = $1 AND workspace_id = $2", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "args", + "type_info": "Jsonb" + } + ], + "parameters": { + "Left": [ + "Uuid", + "Text", + "Bool" + ] + }, + "nullable": [ + null + ] + }, + "hash": "a22146c0a924e5a1a99bc72775399a8c3db31b57ae9ded5bff55f44321c3f3c2" +} diff --git a/backend/.sqlx/query-a241c56415759105ccbcbf7fff77287fa4ec2cc096c0060d14db421115d63e2d.json b/backend/.sqlx/query-a241c56415759105ccbcbf7fff77287fa4ec2cc096c0060d14db421115d63e2d.json new file mode 100644 index 0000000000000..226f49f2fe497 --- /dev/null +++ b/backend/.sqlx/query-a241c56415759105ccbcbf7fff77287fa4ec2cc096c0060d14db421115d63e2d.json @@ -0,0 +1,24 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT EXISTS (SELECT 1 FROM queue WHERE workspace_id = $1 AND schedule_path = $2 AND scheduled_for = $3)", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "exists", + "type_info": "Bool" + } + ], + "parameters": { + "Left": [ + "Text", + "Text", + "Timestamptz" + ] + }, + "nullable": [ + null + ] + }, + "hash": "a241c56415759105ccbcbf7fff77287fa4ec2cc096c0060d14db421115d63e2d" +} diff --git a/backend/.sqlx/query-a2b78a33c8122a4657e95d0da73e1de64c096a41ce7b993b267284fae5ea53fb.json b/backend/.sqlx/query-a2b78a33c8122a4657e95d0da73e1de64c096a41ce7b993b267284fae5ea53fb.json new file mode 100644 index 0000000000000..665c7bdf0cf46 --- /dev/null +++ b/backend/.sqlx/query-a2b78a33c8122a4657e95d0da73e1de64c096a41ce7b993b267284fae5ea53fb.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM workspace_key WHERE workspace_id = $1", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [] + }, + "hash": "a2b78a33c8122a4657e95d0da73e1de64c096a41ce7b993b267284fae5ea53fb" +} diff --git a/backend/.sqlx/query-a2bc43114a2fb17fb62af19c34d8d5787ea304d1e8ef51f2c3d7b9882fdd0108.json b/backend/.sqlx/query-a2bc43114a2fb17fb62af19c34d8d5787ea304d1e8ef51f2c3d7b9882fdd0108.json new file mode 100644 index 0000000000000..378580ab861b4 --- /dev/null +++ b/backend/.sqlx/query-a2bc43114a2fb17fb62af19c34d8d5787ea304d1e8ef51f2c3d7b9882fdd0108.json @@ -0,0 +1,29 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT path, content from script WHERE workspace_id = $1 AND archived = false LIMIT $2", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "path", + "type_info": "Varchar" + }, + { + "ordinal": 1, + "name": "content", + "type_info": "Text" + } + ], + "parameters": { + "Left": [ + "Text", + "Int8" + ] + }, + "nullable": [ + false, + false + ] + }, + "hash": "a2bc43114a2fb17fb62af19c34d8d5787ea304d1e8ef51f2c3d7b9882fdd0108" +} diff --git a/backend/.sqlx/query-a31147b85e68f49e635deda0bd5f1401ca297e14bdbfa350dfd9f0f91a7c1f54.json b/backend/.sqlx/query-a31147b85e68f49e635deda0bd5f1401ca297e14bdbfa350dfd9f0f91a7c1f54.json new file mode 100644 index 0000000000000..3febbb1a1acbb --- /dev/null +++ b/backend/.sqlx/query-a31147b85e68f49e635deda0bd5f1401ca297e14bdbfa350dfd9f0f91a7c1f54.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT name FROM workspace WHERE id = $1", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "name", + "type_info": "Varchar" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + false + ] + }, + "hash": "a31147b85e68f49e635deda0bd5f1401ca297e14bdbfa350dfd9f0f91a7c1f54" +} diff --git a/backend/.sqlx/query-a34066d4a1578a13b2e322e6936ae80a0239a79148f3edce65f51a93910a1a4b.json b/backend/.sqlx/query-a34066d4a1578a13b2e322e6936ae80a0239a79148f3edce65f51a93910a1a4b.json new file mode 100644 index 0000000000000..613c7ee892e14 --- /dev/null +++ b/backend/.sqlx/query-a34066d4a1578a13b2e322e6936ae80a0239a79148f3edce65f51a93910a1a4b.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT email FROM usr where username = $1 AND workspace_id = $2", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "email", + "type_info": "Varchar" + } + ], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [ + false + ] + }, + "hash": "a34066d4a1578a13b2e322e6936ae80a0239a79148f3edce65f51a93910a1a4b" +} diff --git a/backend/.sqlx/query-a34b79872766941cae2d62c99d80e28b7214dd2fcbb68020a63325bbcb34f417.json b/backend/.sqlx/query-a34b79872766941cae2d62c99d80e28b7214dd2fcbb68020a63325bbcb34f417.json new file mode 100644 index 0000000000000..f192c7b8a3af3 --- /dev/null +++ b/backend/.sqlx/query-a34b79872766941cae2d62c99d80e28b7214dd2fcbb68020a63325bbcb34f417.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT webhook FROM workspace_settings WHERE workspace_id = $1", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "webhook", + "type_info": "Text" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + true + ] + }, + "hash": "a34b79872766941cae2d62c99d80e28b7214dd2fcbb68020a63325bbcb34f417" +} diff --git a/backend/.sqlx/query-a3ccf362b4f6df400b3c7a084795dbf541eb14c5c374656ffb96da7283a2a6f1.json b/backend/.sqlx/query-a3ccf362b4f6df400b3c7a084795dbf541eb14c5c374656ffb96da7283a2a6f1.json new file mode 100644 index 0000000000000..bc5e2351f90ea --- /dev/null +++ b/backend/.sqlx/query-a3ccf362b4f6df400b3c7a084795dbf541eb14c5c374656ffb96da7283a2a6f1.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT concurrency_key FROM script WHERE hash = $1 AND workspace_id = $2", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "concurrency_key", + "type_info": "Varchar" + } + ], + "parameters": { + "Left": [ + "Int8", + "Text" + ] + }, + "nullable": [ + true + ] + }, + "hash": "a3ccf362b4f6df400b3c7a084795dbf541eb14c5c374656ffb96da7283a2a6f1" +} diff --git a/backend/.sqlx/query-a405e637f5f3b3203de6d65dfcb0ba1be406ee5167f7b8aa90213ef52c97441f.json b/backend/.sqlx/query-a405e637f5f3b3203de6d65dfcb0ba1be406ee5167f7b8aa90213ef52c97441f.json new file mode 100644 index 0000000000000..21dacfcc9bedf --- /dev/null +++ b/backend/.sqlx/query-a405e637f5f3b3203de6d65dfcb0ba1be406ee5167f7b8aa90213ef52c97441f.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT usage.usage + 1 FROM usage \n WHERE is_workspace IS TRUE AND\n month_ = EXTRACT(YEAR FROM current_date) * 12 + EXTRACT(MONTH FROM current_date)\n AND id = $1", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "?column?", + "type_info": "Int4" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + null + ] + }, + "hash": "a405e637f5f3b3203de6d65dfcb0ba1be406ee5167f7b8aa90213ef52c97441f" +} diff --git a/backend/.sqlx/query-a4326cb3dba79f850b46c5ab88d948f9a0b07f8bfdc8f7611cf0702efdee1324.json b/backend/.sqlx/query-a4326cb3dba79f850b46c5ab88d948f9a0b07f8bfdc8f7611cf0702efdee1324.json new file mode 100644 index 0000000000000..f294ed6176fa8 --- /dev/null +++ b/backend/.sqlx/query-a4326cb3dba79f850b46c5ab88d948f9a0b07f8bfdc8f7611cf0702efdee1324.json @@ -0,0 +1,16 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE flow SET dependency_job = $1 WHERE path = $2 AND workspace_id = $3", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Uuid", + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "a4326cb3dba79f850b46c5ab88d948f9a0b07f8bfdc8f7611cf0702efdee1324" +} diff --git a/backend/.sqlx/query-a439552f74ed0ba305e3d9cb99ae9e5d24834082ebf2fe9fd3964fdd80b69ccb.json b/backend/.sqlx/query-a439552f74ed0ba305e3d9cb99ae9e5d24834082ebf2fe9fd3964fdd80b69ccb.json new file mode 100644 index 0000000000000..691a6d5e31cc0 --- /dev/null +++ b/backend/.sqlx/query-a439552f74ed0ba305e3d9cb99ae9e5d24834082ebf2fe9fd3964fdd80b69ccb.json @@ -0,0 +1,24 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE worker_ping SET ping_at = now(), jobs_executed = $1, custom_tags = $2,\n occupancy_rate = $3, memory_usage = $4, wm_memory_usage = $5, vcpus = COALESCE($7, vcpus),\n memory = COALESCE($8, memory), occupancy_rate_15s = $9, occupancy_rate_5m = $10, occupancy_rate_30m = $11 WHERE worker = $6", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Int4", + "TextArray", + "Float4", + "Int8", + "Int8", + "Text", + "Int8", + "Int8", + "Float4", + "Float4", + "Float4" + ] + }, + "nullable": [] + }, + "hash": "a439552f74ed0ba305e3d9cb99ae9e5d24834082ebf2fe9fd3964fdd80b69ccb" +} diff --git a/backend/.sqlx/query-a474d655786f0b70e659da8c88e4f934c7d27234491e850b4406f4d5c8da3293.json b/backend/.sqlx/query-a474d655786f0b70e659da8c88e4f934c7d27234491e850b4406f4d5c8da3293.json new file mode 100644 index 0000000000000..66230247c10ce --- /dev/null +++ b/backend/.sqlx/query-a474d655786f0b70e659da8c88e4f934c7d27234491e850b4406f4d5c8da3293.json @@ -0,0 +1,16 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE folder SET owners = ARRAY_REPLACE(owners, 'u/' || $2, 'u/' || $1) WHERE ('u/' || $2) = ANY(owners) AND workspace_id = $3", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "a474d655786f0b70e659da8c88e4f934c7d27234491e850b4406f4d5c8da3293" +} diff --git a/backend/.sqlx/query-a51007ca7b509b92faa6fe7aa59fa738594a2b7eaab8e38f3ca30e548f9a49a7.json b/backend/.sqlx/query-a51007ca7b509b92faa6fe7aa59fa738594a2b7eaab8e38f3ca30e548f9a49a7.json new file mode 100644 index 0000000000000..7e1f008dba4c6 --- /dev/null +++ b/backend/.sqlx/query-a51007ca7b509b92faa6fe7aa59fa738594a2b7eaab8e38f3ca30e548f9a49a7.json @@ -0,0 +1,50 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT worker, worker_instance, vcpus, memory, ping_at, started_at FROM worker_ping WHERE ping_at > now() - interval '30 days' ORDER BY started_at", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "worker", + "type_info": "Varchar" + }, + { + "ordinal": 1, + "name": "worker_instance", + "type_info": "Varchar" + }, + { + "ordinal": 2, + "name": "vcpus", + "type_info": "Int8" + }, + { + "ordinal": 3, + "name": "memory", + "type_info": "Int8" + }, + { + "ordinal": 4, + "name": "ping_at", + "type_info": "Timestamptz" + }, + { + "ordinal": 5, + "name": "started_at", + "type_info": "Timestamptz" + } + ], + "parameters": { + "Left": [] + }, + "nullable": [ + false, + false, + true, + true, + false, + false + ] + }, + "hash": "a51007ca7b509b92faa6fe7aa59fa738594a2b7eaab8e38f3ca30e548f9a49a7" +} diff --git a/backend/.sqlx/query-a59aac0bc593d99aedd14fd9606f11191590a12ea98a671e172b867306959884.json b/backend/.sqlx/query-a59aac0bc593d99aedd14fd9606f11191590a12ea98a671e172b867306959884.json new file mode 100644 index 0000000000000..987c3d8633b7c --- /dev/null +++ b/backend/.sqlx/query-a59aac0bc593d99aedd14fd9606f11191590a12ea98a671e172b867306959884.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO password (email, login_type, verified, username) VALUES ($1, 'saml', true, $2) ON CONFLICT DO NOTHING", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Varchar" + ] + }, + "nullable": [] + }, + "hash": "a59aac0bc593d99aedd14fd9606f11191590a12ea98a671e172b867306959884" +} diff --git a/backend/.sqlx/query-a59b70164dc87224d09a04d5469ca217eb19a15a250c3b83ca63f606f89b9681.json b/backend/.sqlx/query-a59b70164dc87224d09a04d5469ca217eb19a15a250c3b83ca63f606f89b9681.json new file mode 100644 index 0000000000000..da8842f9a7ac2 --- /dev/null +++ b/backend/.sqlx/query-a59b70164dc87224d09a04d5469ca217eb19a15a250c3b83ca63f606f89b9681.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO global_settings (name, value) VALUES ($1, $2) ON CONFLICT (name) DO UPDATE SET value = $2, updated_at = now()", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Jsonb" + ] + }, + "nullable": [] + }, + "hash": "a59b70164dc87224d09a04d5469ca217eb19a15a250c3b83ca63f606f89b9681" +} diff --git a/backend/.sqlx/query-a65cb39ac640a86c90d1648d1a9e93fa5a7c1be385454153f15625bd58c3cc3a.json b/backend/.sqlx/query-a65cb39ac640a86c90d1648d1a9e93fa5a7c1be385454153f15625bd58c3cc3a.json new file mode 100644 index 0000000000000..57ef779f2255a --- /dev/null +++ b/backend/.sqlx/query-a65cb39ac640a86c90d1648d1a9e93fa5a7c1be385454153f15625bd58c3cc3a.json @@ -0,0 +1,16 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE resource SET path = REGEXP_REPLACE(path,'u/' || $2 || '/(.*)','u/' || $1 || '/\\1') WHERE path LIKE ('u/' || $2 || '/%') AND workspace_id = $3", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "a65cb39ac640a86c90d1648d1a9e93fa5a7c1be385454153f15625bd58c3cc3a" +} diff --git a/backend/.sqlx/query-a670b88ea83d69997f1b70873b927bfe0790d5e1c347e5b15835c8996c039cd1.json b/backend/.sqlx/query-a670b88ea83d69997f1b70873b927bfe0790d5e1c347e5b15835c8996c039cd1.json new file mode 100644 index 0000000000000..35fe3aec917c8 --- /dev/null +++ b/backend/.sqlx/query-a670b88ea83d69997f1b70873b927bfe0790d5e1c347e5b15835c8996c039cd1.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT EXISTS (SELECT 1 FROM password WHERE email = $1)", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "exists", + "type_info": "Bool" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + null + ] + }, + "hash": "a670b88ea83d69997f1b70873b927bfe0790d5e1c347e5b15835c8996c039cd1" +} diff --git a/backend/.sqlx/query-a6af0760c20eb9a7db648ea5d643b4c5703b776dc6cb1c5315e26569a2daa240.json b/backend/.sqlx/query-a6af0760c20eb9a7db648ea5d643b4c5703b776dc6cb1c5315e26569a2daa240.json new file mode 100644 index 0000000000000..4961124d2dda0 --- /dev/null +++ b/backend/.sqlx/query-a6af0760c20eb9a7db648ea5d643b4c5703b776dc6cb1c5315e26569a2daa240.json @@ -0,0 +1,20 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT EXISTS(SELECT name FROM windmill_migrations WHERE name = 'fix_flow_versioning_2')", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "exists", + "type_info": "Bool" + } + ], + "parameters": { + "Left": [] + }, + "nullable": [ + null + ] + }, + "hash": "a6af0760c20eb9a7db648ea5d643b4c5703b776dc6cb1c5315e26569a2daa240" +} diff --git a/backend/.sqlx/query-a6feede7d9c3060b1e4c94bb4fa700d38a0d1b9d25429021c08fc94d57f952d2.json b/backend/.sqlx/query-a6feede7d9c3060b1e4c94bb4fa700d38a0d1b9d25429021c08fc94d57f952d2.json new file mode 100644 index 0000000000000..c3658e02a27bd --- /dev/null +++ b/backend/.sqlx/query-a6feede7d9c3060b1e4c94bb4fa700d38a0d1b9d25429021c08fc94d57f952d2.json @@ -0,0 +1,16 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE queue SET created_by = $1 WHERE created_by = $2 AND workspace_id = $3", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "a6feede7d9c3060b1e4c94bb4fa700d38a0d1b9d25429021c08fc94d57f952d2" +} diff --git a/backend/.sqlx/query-a77717db3326091974fe7d1d248a1e5186d3d107e2ded97df1cfac49580a2ed1.json b/backend/.sqlx/query-a77717db3326091974fe7d1d248a1e5186d3d107e2ded97df1cfac49580a2ed1.json new file mode 100644 index 0000000000000..2883145d16ca5 --- /dev/null +++ b/backend/.sqlx/query-a77717db3326091974fe7d1d248a1e5186d3d107e2ded97df1cfac49580a2ed1.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO email_to_igroup (email, igroup) VALUES ($1, $2) ON CONFLICT DO NOTHING", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Varchar" + ] + }, + "nullable": [] + }, + "hash": "a77717db3326091974fe7d1d248a1e5186d3d107e2ded97df1cfac49580a2ed1" +} diff --git a/backend/.sqlx/query-a7abe946c8d0653169e292560eb7a5aa50a9c0f590444480ac642afcb83bbffb.json b/backend/.sqlx/query-a7abe946c8d0653169e292560eb7a5aa50a9c0f590444480ac642afcb83bbffb.json new file mode 100644 index 0000000000000..a2b26dbdf1f88 --- /dev/null +++ b/backend/.sqlx/query-a7abe946c8d0653169e292560eb7a5aa50a9c0f590444480ac642afcb83bbffb.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT EXISTS(SELECT 1 FROM group_ WHERE name = $1 AND workspace_id = $2)", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "exists", + "type_info": "Bool" + } + ], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [ + null + ] + }, + "hash": "a7abe946c8d0653169e292560eb7a5aa50a9c0f590444480ac642afcb83bbffb" +} diff --git a/backend/.sqlx/query-a7b028e832396ee4d1ad6dfd44ba6134344f3eb37dbf0254154eba31b9cc2ed3.json b/backend/.sqlx/query-a7b028e832396ee4d1ad6dfd44ba6134344f3eb37dbf0254154eba31b9cc2ed3.json new file mode 100644 index 0000000000000..2de5f54b1a433 --- /dev/null +++ b/backend/.sqlx/query-a7b028e832396ee4d1ad6dfd44ba6134344f3eb37dbf0254154eba31b9cc2ed3.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "\n SELECT usage.usage FROM usage \n WHERE is_workspace = false \n AND month_ = EXTRACT(YEAR FROM current_date) * 12 + EXTRACT(MONTH FROM current_date)\n AND id = $1", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "usage", + "type_info": "Int4" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + false + ] + }, + "hash": "a7b028e832396ee4d1ad6dfd44ba6134344f3eb37dbf0254154eba31b9cc2ed3" +} diff --git a/backend/.sqlx/query-a7d107fbeb8749d16ea3fea091573324cd5cbae2c3b77f24027802ea3896ef26.json b/backend/.sqlx/query-a7d107fbeb8749d16ea3fea091573324cd5cbae2c3b77f24027802ea3896ef26.json new file mode 100644 index 0000000000000..9e26d239affb6 --- /dev/null +++ b/backend/.sqlx/query-a7d107fbeb8749d16ea3fea091573324cd5cbae2c3b77f24027802ea3896ef26.json @@ -0,0 +1,12 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO metrics (id, value) VALUES ('email_trigger_usage', to_jsonb(1))", + "describe": { + "columns": [], + "parameters": { + "Left": [] + }, + "nullable": [] + }, + "hash": "a7d107fbeb8749d16ea3fea091573324cd5cbae2c3b77f24027802ea3896ef26" +} diff --git a/backend/.sqlx/query-a82eec879838b02e3e0722352fba9f537374dc0658733f7e15bfe42f646d22e2.json b/backend/.sqlx/query-a82eec879838b02e3e0722352fba9f537374dc0658733f7e15bfe42f646d22e2.json new file mode 100644 index 0000000000000..0972b8b282fe2 --- /dev/null +++ b/backend/.sqlx/query-a82eec879838b02e3e0722352fba9f537374dc0658733f7e15bfe42f646d22e2.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT progress::bigint FROM tutorial_progress WHERE email = $1", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "progress", + "type_info": "Int8" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + null + ] + }, + "hash": "a82eec879838b02e3e0722352fba9f537374dc0658733f7e15bfe42f646d22e2" +} diff --git a/backend/.sqlx/query-a8a9a0197c51ec1614a7a5f2c24e621eadeca9a3500e9b8ab34b3b2d5037ca3c.json b/backend/.sqlx/query-a8a9a0197c51ec1614a7a5f2c24e621eadeca9a3500e9b8ab34b3b2d5037ca3c.json new file mode 100644 index 0000000000000..cad24140236bb --- /dev/null +++ b/backend/.sqlx/query-a8a9a0197c51ec1614a7a5f2c24e621eadeca9a3500e9b8ab34b3b2d5037ca3c.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM variable WHERE workspace_id = $1", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [] + }, + "hash": "a8a9a0197c51ec1614a7a5f2c24e621eadeca9a3500e9b8ab34b3b2d5037ca3c" +} diff --git a/backend/.sqlx/query-a90924854cbd98bb16a2ed02e7966b0726e11ddd7511f1d503b1df29dee71419.json b/backend/.sqlx/query-a90924854cbd98bb16a2ed02e7966b0726e11ddd7511f1d503b1df29dee71419.json new file mode 100644 index 0000000000000..2eb0b4cfc3929 --- /dev/null +++ b/backend/.sqlx/query-a90924854cbd98bb16a2ed02e7966b0726e11ddd7511f1d503b1df29dee71419.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT extra_perms from variable WHERE path = $1 AND workspace_id = $2", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "extra_perms", + "type_info": "Jsonb" + } + ], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [ + false + ] + }, + "hash": "a90924854cbd98bb16a2ed02e7966b0726e11ddd7511f1d503b1df29dee71419" +} diff --git a/backend/.sqlx/query-a94dbd1f7aab20682548471c5cc06c7a496edac36e3de537b00b76ad93c7556c.json b/backend/.sqlx/query-a94dbd1f7aab20682548471c5cc06c7a496edac36e3de537b00b76ad93c7556c.json new file mode 100644 index 0000000000000..5906375f532ff --- /dev/null +++ b/backend/.sqlx/query-a94dbd1f7aab20682548471c5cc06c7a496edac36e3de537b00b76ad93c7556c.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE queue\n SET flow_status = JSONB_SET(flow_status, ARRAY['modules', $1::TEXT, 'branchall', 'branch'], ((flow_status->'modules'->$1::int->'branchall'->>'branch')::int + 1)::text::jsonb)\n WHERE id = $2\n RETURNING (flow_status->'modules'->$1::int->'branchall'->>'branch')::int", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "int4", + "type_info": "Int4" + } + ], + "parameters": { + "Left": [ + "Int4", + "Uuid" + ] + }, + "nullable": [ + null + ] + }, + "hash": "a94dbd1f7aab20682548471c5cc06c7a496edac36e3de537b00b76ad93c7556c" +} diff --git a/backend/.sqlx/query-a98b2d68f023f46ab91167d3147416df672c2aed2ba5ab70e98a9da5fa47255a.json b/backend/.sqlx/query-a98b2d68f023f46ab91167d3147416df672c2aed2ba5ab70e98a9da5fa47255a.json new file mode 100644 index 0000000000000..28bce0cd6e138 --- /dev/null +++ b/backend/.sqlx/query-a98b2d68f023f46ab91167d3147416df672c2aed2ba5ab70e98a9da5fa47255a.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO workspace_settings\n (workspace_id)\n VALUES ($1)", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar" + ] + }, + "nullable": [] + }, + "hash": "a98b2d68f023f46ab91167d3147416df672c2aed2ba5ab70e98a9da5fa47255a" +} diff --git a/backend/.sqlx/query-aa5bdf0ab8781cf984711ae4f4351eb3bd5621ae081a418f1d4dbcb8359a8adb.json b/backend/.sqlx/query-aa5bdf0ab8781cf984711ae4f4351eb3bd5621ae081a418f1d4dbcb8359a8adb.json new file mode 100644 index 0000000000000..9a38a434b0fee --- /dev/null +++ b/backend/.sqlx/query-aa5bdf0ab8781cf984711ae4f4351eb3bd5621ae081a418f1d4dbcb8359a8adb.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE password SET name = $1 WHERE email = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Text" + ] + }, + "nullable": [] + }, + "hash": "aa5bdf0ab8781cf984711ae4f4351eb3bd5621ae081a418f1d4dbcb8359a8adb" +} diff --git a/backend/.sqlx/query-aa6f7f4fbbeb475a2cdbbb2aebb7fa799b431745218a80b348c3f0e555ce9126.json b/backend/.sqlx/query-aa6f7f4fbbeb475a2cdbbb2aebb7fa799b431745218a80b348c3f0e555ce9126.json new file mode 100644 index 0000000000000..def70eaa52e8f --- /dev/null +++ b/backend/.sqlx/query-aa6f7f4fbbeb475a2cdbbb2aebb7fa799b431745218a80b348c3f0e555ce9126.json @@ -0,0 +1,20 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT pg_backend_pid()", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "pg_backend_pid", + "type_info": "Int4" + } + ], + "parameters": { + "Left": [] + }, + "nullable": [ + null + ] + }, + "hash": "aa6f7f4fbbeb475a2cdbbb2aebb7fa799b431745218a80b348c3f0e555ce9126" +} diff --git a/backend/.sqlx/query-abb56dec024600d0d7a63212f63c3296196898003707f2cb3a890690173a51a5.json b/backend/.sqlx/query-abb56dec024600d0d7a63212f63c3296196898003707f2cb3a890690173a51a5.json new file mode 100644 index 0000000000000..df1b7fab400cb --- /dev/null +++ b/backend/.sqlx/query-abb56dec024600d0d7a63212f63c3296196898003707f2cb3a890690173a51a5.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT path FROM app WHERE id = $1", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "path", + "type_info": "Varchar" + } + ], + "parameters": { + "Left": [ + "Int8" + ] + }, + "nullable": [ + false + ] + }, + "hash": "abb56dec024600d0d7a63212f63c3296196898003707f2cb3a890690173a51a5" +} diff --git a/backend/.sqlx/query-abb962124b848ae07e517994ca9ad10e28ed47c5c9cdecf449a3758ae65cb62f.json b/backend/.sqlx/query-abb962124b848ae07e517994ca9ad10e28ed47c5c9cdecf449a3758ae65cb62f.json new file mode 100644 index 0000000000000..f16f625e4ec2d --- /dev/null +++ b/backend/.sqlx/query-abb962124b848ae07e517994ca9ad10e28ed47c5c9cdecf449a3758ae65cb62f.json @@ -0,0 +1,16 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE variable SET path = REGEXP_REPLACE(path,'u/' || $2 || '/(.*)','u/' || $1 || '/\\1') WHERE path LIKE ('u/' || $2 || '/%') AND workspace_id = $3", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "abb962124b848ae07e517994ca9ad10e28ed47c5c9cdecf449a3758ae65cb62f" +} diff --git a/backend/.sqlx/query-abc9f034e62ac224894173356aa69e09f3647a45d176e253e4fc8f7206f6a18d.json b/backend/.sqlx/query-abc9f034e62ac224894173356aa69e09f3647a45d176e253e4fc8f7206f6a18d.json new file mode 100644 index 0000000000000..395816d91620b --- /dev/null +++ b/backend/.sqlx/query-abc9f034e62ac224894173356aa69e09f3647a45d176e253e4fc8f7206f6a18d.json @@ -0,0 +1,42 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT * FROM group_ WHERE workspace_id = $1 ORDER BY name desc LIMIT $2 OFFSET $3", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "workspace_id", + "type_info": "Varchar" + }, + { + "ordinal": 1, + "name": "name", + "type_info": "Varchar" + }, + { + "ordinal": 2, + "name": "summary", + "type_info": "Text" + }, + { + "ordinal": 3, + "name": "extra_perms", + "type_info": "Jsonb" + } + ], + "parameters": { + "Left": [ + "Text", + "Int8", + "Int8" + ] + }, + "nullable": [ + false, + false, + true, + false + ] + }, + "hash": "abc9f034e62ac224894173356aa69e09f3647a45d176e253e4fc8f7206f6a18d" +} diff --git a/backend/.sqlx/query-ac01e45d3335015f53f3d63fe159e631efb65c3d326b6b6ae8361a2116bff145.json b/backend/.sqlx/query-ac01e45d3335015f53f3d63fe159e631efb65c3d326b6b6ae8361a2116bff145.json new file mode 100644 index 0000000000000..929157b5d73ca --- /dev/null +++ b/backend/.sqlx/query-ac01e45d3335015f53f3d63fe159e631efb65c3d326b6b6ae8361a2116bff145.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "\n SELECT content FROM script WHERE path = $1 AND workspace_id = $2\n AND created_at = (SELECT max(created_at) FROM script WHERE path = $1 AND\n workspace_id = $2)\n ", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "content", + "type_info": "Text" + } + ], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [ + false + ] + }, + "hash": "ac01e45d3335015f53f3d63fe159e631efb65c3d326b6b6ae8361a2116bff145" +} diff --git a/backend/.sqlx/query-acdaa5151f8f7f37bb8c8c5a7d146789887e47db9695fc26b1dfaedd735e1e60.json b/backend/.sqlx/query-acdaa5151f8f7f37bb8c8c5a7d146789887e47db9695fc26b1dfaedd735e1e60.json new file mode 100644 index 0000000000000..90b77d6cb7b81 --- /dev/null +++ b/backend/.sqlx/query-acdaa5151f8f7f37bb8c8c5a7d146789887e47db9695fc26b1dfaedd735e1e60.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT value\n FROM resource\n WHERE path = $1 AND workspace_id = $2", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "value", + "type_info": "Jsonb" + } + ], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [ + true + ] + }, + "hash": "acdaa5151f8f7f37bb8c8c5a7d146789887e47db9695fc26b1dfaedd735e1e60" +} diff --git a/backend/.sqlx/query-ad3b0176e3d41a0c1d79a8eb59da2a9cc4fee3473b3f6ea69f397d91e9356ba1.json b/backend/.sqlx/query-ad3b0176e3d41a0c1d79a8eb59da2a9cc4fee3473b3f6ea69f397d91e9356ba1.json new file mode 100644 index 0000000000000..936365c8d070e --- /dev/null +++ b/backend/.sqlx/query-ad3b0176e3d41a0c1d79a8eb59da2a9cc4fee3473b3f6ea69f397d91e9356ba1.json @@ -0,0 +1,19 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO folder\n (workspace_id, name, display_name, owners, extra_perms, created_by, edited_at)\n VALUES ($1, $2, $3, $4, $5, $6, now()) ON CONFLICT DO NOTHING", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Varchar", + "Varchar", + "VarcharArray", + "Jsonb", + "Varchar" + ] + }, + "nullable": [] + }, + "hash": "ad3b0176e3d41a0c1d79a8eb59da2a9cc4fee3473b3f6ea69f397d91e9356ba1" +} diff --git a/backend/.sqlx/query-ad8f9e0b06f288051cbec3c91877430a1d61353b9122fd42777d92e4cbc9f4fa.json b/backend/.sqlx/query-ad8f9e0b06f288051cbec3c91877430a1d61353b9122fd42777d92e4cbc9f4fa.json new file mode 100644 index 0000000000000..00453be45bad1 --- /dev/null +++ b/backend/.sqlx/query-ad8f9e0b06f288051cbec3c91877430a1d61353b9122fd42777d92e4cbc9f4fa.json @@ -0,0 +1,16 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE queue\n SET flow_status = JSONB_SET(\n JSONB_SET(flow_status, ARRAY['failure_module'], $1), ARRAY['step'], $2)\n WHERE id = $3", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Jsonb", + "Jsonb", + "Uuid" + ] + }, + "nullable": [] + }, + "hash": "ad8f9e0b06f288051cbec3c91877430a1d61353b9122fd42777d92e4cbc9f4fa" +} diff --git a/backend/.sqlx/query-ae25fae1aca2cffc43a6054cd54639ba9deaaef419ad4cb2655e7e95f602a688.json b/backend/.sqlx/query-ae25fae1aca2cffc43a6054cd54639ba9deaaef419ad4cb2655e7e95f602a688.json new file mode 100644 index 0000000000000..5634e602336ef --- /dev/null +++ b/backend/.sqlx/query-ae25fae1aca2cffc43a6054cd54639ba9deaaef419ad4cb2655e7e95f602a688.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "\n INSERT INTO job_logs (job_id, logs) VALUES ($1,'Restarted job after not receiving job''s ping for too long the ' || now() || '\n\n') \n ON CONFLICT (job_id) DO UPDATE SET logs = job_logs.logs || '\nRestarted job after not receiving job''s ping for too long the ' || now() || '\n\n' WHERE job_logs.job_id = $1", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Uuid" + ] + }, + "nullable": [] + }, + "hash": "ae25fae1aca2cffc43a6054cd54639ba9deaaef419ad4cb2655e7e95f602a688" +} diff --git a/backend/.sqlx/query-ae2f005af8ab4b035a907e0c8fc9a9d035f3eb1d9d833041969fce967daa91a4.json b/backend/.sqlx/query-ae2f005af8ab4b035a907e0c8fc9a9d035f3eb1d9d833041969fce967daa91a4.json new file mode 100644 index 0000000000000..74c890726fd30 --- /dev/null +++ b/backend/.sqlx/query-ae2f005af8ab4b035a907e0c8fc9a9d035f3eb1d9d833041969fce967daa91a4.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT raw_flow->'modules'->$2::int->'retry' FROM queue WHERE id = $1", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "?column?", + "type_info": "Jsonb" + } + ], + "parameters": { + "Left": [ + "Uuid", + "Int4" + ] + }, + "nullable": [ + null + ] + }, + "hash": "ae2f005af8ab4b035a907e0c8fc9a9d035f3eb1d9d833041969fce967daa91a4" +} diff --git a/backend/.sqlx/query-aeaae7641539d51f4535b04e9a7adb7545bd37d0d706edb54b8f5507403105ee.json b/backend/.sqlx/query-aeaae7641539d51f4535b04e9a7adb7545bd37d0d706edb54b8f5507403105ee.json new file mode 100644 index 0000000000000..4500ce478813d --- /dev/null +++ b/backend/.sqlx/query-aeaae7641539d51f4535b04e9a7adb7545bd37d0d706edb54b8f5507403105ee.json @@ -0,0 +1,28 @@ +{ + "db_name": "PostgreSQL", + "query": "\n SELECT resume_id, approver\n FROM resume_job\n WHERE job = $1\n ", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "resume_id", + "type_info": "Int4" + }, + { + "ordinal": 1, + "name": "approver", + "type_info": "Varchar" + } + ], + "parameters": { + "Left": [ + "Uuid" + ] + }, + "nullable": [ + false, + true + ] + }, + "hash": "aeaae7641539d51f4535b04e9a7adb7545bd37d0d706edb54b8f5507403105ee" +} diff --git a/backend/.sqlx/query-aee9f7f1d99910c669ef7224a6cc237ac7a0d7f5a24849bb62a6e1a8babd8ef9.json b/backend/.sqlx/query-aee9f7f1d99910c669ef7224a6cc237ac7a0d7f5a24849bb62a6e1a8babd8ef9.json new file mode 100644 index 0000000000000..f05e206e9ea27 --- /dev/null +++ b/backend/.sqlx/query-aee9f7f1d99910c669ef7224a6cc237ac7a0d7f5a24849bb62a6e1a8babd8ef9.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM deployment_metadata WHERE path = $1 AND workspace_id = $2 AND app_version IS NOT NULL", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "aee9f7f1d99910c669ef7224a6cc237ac7a0d7f5a24849bb62a6e1a8babd8ef9" +} diff --git a/backend/.sqlx/query-af00c212f509076e37538be52f582ba09e47db50ba93af322649ccddbb05cc49.json b/backend/.sqlx/query-af00c212f509076e37538be52f582ba09e47db50ba93af322649ccddbb05cc49.json new file mode 100644 index 0000000000000..2c3c76ca3111c --- /dev/null +++ b/backend/.sqlx/query-af00c212f509076e37538be52f582ba09e47db50ba93af322649ccddbb05cc49.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO config (name, config) VALUES ($1, $2) ON CONFLICT (name) DO UPDATE SET config = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Jsonb" + ] + }, + "nullable": [] + }, + "hash": "af00c212f509076e37538be52f582ba09e47db50ba93af322649ccddbb05cc49" +} diff --git a/backend/.sqlx/query-afc7c23c057748f6d4a61dbef17e433b8875c6588b91e38e8141d12189118412.json b/backend/.sqlx/query-afc7c23c057748f6d4a61dbef17e433b8875c6588b91e38e8141d12189118412.json new file mode 100644 index 0000000000000..08ea345138254 --- /dev/null +++ b/backend/.sqlx/query-afc7c23c057748f6d4a61dbef17e433b8875c6588b91e38e8141d12189118412.json @@ -0,0 +1,17 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO deployment_metadata (workspace_id, path, flow_version, deployment_msg) VALUES ($1, $2, $3, $4) ON CONFLICT (workspace_id, path, flow_version) WHERE flow_version IS NOT NULL DO UPDATE SET deployment_msg = $4", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Varchar", + "Int8", + "Text" + ] + }, + "nullable": [] + }, + "hash": "afc7c23c057748f6d4a61dbef17e433b8875c6588b91e38e8141d12189118412" +} diff --git a/backend/.sqlx/query-b053117536c067095e2fb2864ce5af33f84b22c24c92fcb870f37f0501f8ea9a.json b/backend/.sqlx/query-b053117536c067095e2fb2864ce5af33f84b22c24c92fcb870f37f0501f8ea9a.json new file mode 100644 index 0000000000000..316f6d7edafae --- /dev/null +++ b/backend/.sqlx/query-b053117536c067095e2fb2864ce5af33f84b22c24c92fcb870f37f0501f8ea9a.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT COUNT(id) FROM queue WHERE running = true AND email = $1", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "count", + "type_info": "Int8" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + null + ] + }, + "hash": "b053117536c067095e2fb2864ce5af33f84b22c24c92fcb870f37f0501f8ea9a" +} diff --git a/backend/.sqlx/query-b05c5f62ef4aa21d33369130cced0e9d7d128727eb58a9be7ae69cbb16bcbb27.json b/backend/.sqlx/query-b05c5f62ef4aa21d33369130cced0e9d7d128727eb58a9be7ae69cbb16bcbb27.json new file mode 100644 index 0000000000000..75f58e98e3e9c --- /dev/null +++ b/backend/.sqlx/query-b05c5f62ef4aa21d33369130cced0e9d7d128727eb58a9be7ae69cbb16bcbb27.json @@ -0,0 +1,18 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO token\n (token, email, label, expiration, super_admin)\n VALUES ($1, $2, $3, now() + ($4 || ' hours')::interval, $5)", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Varchar", + "Varchar", + "Text", + "Bool" + ] + }, + "nullable": [] + }, + "hash": "b05c5f62ef4aa21d33369130cced0e9d7d128727eb58a9be7ae69cbb16bcbb27" +} diff --git a/backend/.sqlx/query-b081cd4ddd24e8510efaeb8a1dc921e1f208216cbf32402e8a65a3a260219628.json b/backend/.sqlx/query-b081cd4ddd24e8510efaeb8a1dc921e1f208216cbf32402e8a65a3a260219628.json new file mode 100644 index 0000000000000..0db979d60c3b5 --- /dev/null +++ b/backend/.sqlx/query-b081cd4ddd24e8510efaeb8a1dc921e1f208216cbf32402e8a65a3a260219628.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM workspace_invite WHERE email = $1", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [] + }, + "hash": "b081cd4ddd24e8510efaeb8a1dc921e1f208216cbf32402e8a65a3a260219628" +} diff --git a/backend/.sqlx/query-b08bf73ca7da6af302eeb5a5f443d71e03478e642a7999157a631a7ff0b7c63e.json b/backend/.sqlx/query-b08bf73ca7da6af302eeb5a5f443d71e03478e642a7999157a631a7ff0b7c63e.json new file mode 100644 index 0000000000000..53fc18f0fccc3 --- /dev/null +++ b/backend/.sqlx/query-b08bf73ca7da6af302eeb5a5f443d71e03478e642a7999157a631a7ff0b7c63e.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE completed_job SET flow_status = q.flow_status FROM queue q WHERE completed_job.id = $1 AND q.id = $1 AND q.workspace_id = $2 AND completed_job.workspace_id = $2 AND q.flow_status IS NOT NULL", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Uuid", + "Text" + ] + }, + "nullable": [] + }, + "hash": "b08bf73ca7da6af302eeb5a5f443d71e03478e642a7999157a631a7ff0b7c63e" +} diff --git a/backend/.sqlx/query-b0c2f470f7d2df567eca550db1ae638fcb554622b61a5f4fb6b6696f6283516a.json b/backend/.sqlx/query-b0c2f470f7d2df567eca550db1ae638fcb554622b61a5f4fb6b6696f6283516a.json new file mode 100644 index 0000000000000..86a8abb43246f --- /dev/null +++ b/backend/.sqlx/query-b0c2f470f7d2df567eca550db1ae638fcb554622b61a5f4fb6b6696f6283516a.json @@ -0,0 +1,20 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM variable WHERE expires_at IS NOT NULL AND expires_at < now() RETURNING path", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "path", + "type_info": "Varchar" + } + ], + "parameters": { + "Left": [] + }, + "nullable": [ + false + ] + }, + "hash": "b0c2f470f7d2df567eca550db1ae638fcb554622b61a5f4fb6b6696f6283516a" +} diff --git a/backend/.sqlx/query-b101ce2acb77e2f3861d9e50ea241f55bb3ffc8afd26f377c8f0c9f894321806.json b/backend/.sqlx/query-b101ce2acb77e2f3861d9e50ea241f55bb3ffc8afd26f377c8f0c9f894321806.json new file mode 100644 index 0000000000000..6e9978bf2901f --- /dev/null +++ b/backend/.sqlx/query-b101ce2acb77e2f3861d9e50ea241f55bb3ffc8afd26f377c8f0c9f894321806.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE deployment_metadata SET workspace_id = $1 WHERE workspace_id = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Text" + ] + }, + "nullable": [] + }, + "hash": "b101ce2acb77e2f3861d9e50ea241f55bb3ffc8afd26f377c8f0c9f894321806" +} diff --git a/backend/.sqlx/query-b1d619ba58b58805308bcf1d5c46a3c1998a52c63aeb7c06f4c2a34916702537.json b/backend/.sqlx/query-b1d619ba58b58805308bcf1d5c46a3c1998a52c63aeb7c06f4c2a34916702537.json new file mode 100644 index 0000000000000..f2e5e5dadb9fa --- /dev/null +++ b/backend/.sqlx/query-b1d619ba58b58805308bcf1d5c46a3c1998a52c63aeb7c06f4c2a34916702537.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM app WHERE path = $1 AND workspace_id = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "b1d619ba58b58805308bcf1d5c46a3c1998a52c63aeb7c06f4c2a34916702537" +} diff --git a/backend/.sqlx/query-b1f2ab29cb09a213a38a711d5c228f4f735a3343fbae15d2bc3510c3308d16ba.json b/backend/.sqlx/query-b1f2ab29cb09a213a38a711d5c228f4f735a3343fbae15d2bc3510c3308d16ba.json new file mode 100644 index 0000000000000..7d67eebe2cc97 --- /dev/null +++ b/backend/.sqlx/query-b1f2ab29cb09a213a38a711d5c228f4f735a3343fbae15d2bc3510c3308d16ba.json @@ -0,0 +1,26 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT name, config FROM config", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "name", + "type_info": "Varchar" + }, + { + "ordinal": 1, + "name": "config", + "type_info": "Jsonb" + } + ], + "parameters": { + "Left": [] + }, + "nullable": [ + false, + true + ] + }, + "hash": "b1f2ab29cb09a213a38a711d5c228f4f735a3343fbae15d2bc3510c3308d16ba" +} diff --git a/backend/.sqlx/query-b20977e70ebac7ccbaec5a2a1e940301dd331a5f9a4be67a27cfbff8619ac8f0.json b/backend/.sqlx/query-b20977e70ebac7ccbaec5a2a1e940301dd331a5f9a4be67a27cfbff8619ac8f0.json new file mode 100644 index 0000000000000..b0d374559621a --- /dev/null +++ b/backend/.sqlx/query-b20977e70ebac7ccbaec5a2a1e940301dd331a5f9a4be67a27cfbff8619ac8f0.json @@ -0,0 +1,16 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO usr\n (workspace_id, email, username, is_admin)\n VALUES ($1, $2, $3, true)", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Varchar", + "Varchar" + ] + }, + "nullable": [] + }, + "hash": "b20977e70ebac7ccbaec5a2a1e940301dd331a5f9a4be67a27cfbff8619ac8f0" +} diff --git a/backend/.sqlx/query-b21ea7abea51f159d761c43f3443278eca5211a8b1c5a2170141c848a3522f05.json b/backend/.sqlx/query-b21ea7abea51f159d761c43f3443278eca5211a8b1c5a2170141c848a3522f05.json new file mode 100644 index 0000000000000..87c97f68ab73a --- /dev/null +++ b/backend/.sqlx/query-b21ea7abea51f159d761c43f3443278eca5211a8b1c5a2170141c848a3522f05.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT extra_perms FROM folder WHERE name = $1 AND workspace_id = $2", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "extra_perms", + "type_info": "Jsonb" + } + ], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [ + false + ] + }, + "hash": "b21ea7abea51f159d761c43f3443278eca5211a8b1c5a2170141c848a3522f05" +} diff --git a/backend/.sqlx/query-b24c1a2587812d2fd40063328ce393377826b170a7970ba02f4057454058321b.json b/backend/.sqlx/query-b24c1a2587812d2fd40063328ce393377826b170a7970ba02f4057454058321b.json new file mode 100644 index 0000000000000..2236d7c52edb6 --- /dev/null +++ b/backend/.sqlx/query-b24c1a2587812d2fd40063328ce393377826b170a7970ba02f4057454058321b.json @@ -0,0 +1,16 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE usr SET is_admin = $1 WHERE username = $2 AND workspace_id = $3", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Bool", + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "b24c1a2587812d2fd40063328ce393377826b170a7970ba02f4057454058321b" +} diff --git a/backend/.sqlx/query-b2b2b7251be2b80207f47b10eeff78d61c84161caaf16b8fd25d82b97aac1186.json b/backend/.sqlx/query-b2b2b7251be2b80207f47b10eeff78d61c84161caaf16b8fd25d82b97aac1186.json new file mode 100644 index 0000000000000..89f74fac61e75 --- /dev/null +++ b/backend/.sqlx/query-b2b2b7251be2b80207f47b10eeff78d61c84161caaf16b8fd25d82b97aac1186.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM raw_app WHERE path = $1 AND workspace_id = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "b2b2b7251be2b80207f47b10eeff78d61c84161caaf16b8fd25d82b97aac1186" +} diff --git a/backend/.sqlx/query-b2ce29f663cfe1f10dd506dd28b8ce31c58bd40dc130e05df6ef804b2800d6cb.json b/backend/.sqlx/query-b2ce29f663cfe1f10dd506dd28b8ce31c58bd40dc130e05df6ef804b2800d6cb.json new file mode 100644 index 0000000000000..d9c988348aa62 --- /dev/null +++ b/backend/.sqlx/query-b2ce29f663cfe1f10dd506dd28b8ce31c58bd40dc130e05df6ef804b2800d6cb.json @@ -0,0 +1,28 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT self_wait_time_ms, aggregate_wait_time_ms FROM outstanding_wait_time WHERE job_id = $1", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "self_wait_time_ms", + "type_info": "Int8" + }, + { + "ordinal": 1, + "name": "aggregate_wait_time_ms", + "type_info": "Int8" + } + ], + "parameters": { + "Left": [ + "Uuid" + ] + }, + "nullable": [ + true, + true + ] + }, + "hash": "b2ce29f663cfe1f10dd506dd28b8ce31c58bd40dc130e05df6ef804b2800d6cb" +} diff --git a/backend/.sqlx/query-b30a29fa6edbeacaddad2a8b79a9aa73fcb0e8cb1f5e863f31faf98e4137b5e6.json b/backend/.sqlx/query-b30a29fa6edbeacaddad2a8b79a9aa73fcb0e8cb1f5e863f31faf98e4137b5e6.json new file mode 100644 index 0000000000000..f12c7413c5c01 --- /dev/null +++ b/backend/.sqlx/query-b30a29fa6edbeacaddad2a8b79a9aa73fcb0e8cb1f5e863f31faf98e4137b5e6.json @@ -0,0 +1,26 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT name, value FROM global_settings", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "name", + "type_info": "Varchar" + }, + { + "ordinal": 1, + "name": "value", + "type_info": "Jsonb" + } + ], + "parameters": { + "Left": [] + }, + "nullable": [ + false, + false + ] + }, + "hash": "b30a29fa6edbeacaddad2a8b79a9aa73fcb0e8cb1f5e863f31faf98e4137b5e6" +} diff --git a/backend/.sqlx/query-b3b80de52d0931a2fdb5d38b7603a2d69cc25ab1cda413228c363a5ffd777113.json b/backend/.sqlx/query-b3b80de52d0931a2fdb5d38b7603a2d69cc25ab1cda413228c363a5ffd777113.json new file mode 100644 index 0000000000000..a8bd3c0e8f265 --- /dev/null +++ b/backend/.sqlx/query-b3b80de52d0931a2fdb5d38b7603a2d69cc25ab1cda413228c363a5ffd777113.json @@ -0,0 +1,40 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT * from workspace_invite WHERE workspace_id = $1", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "workspace_id", + "type_info": "Varchar" + }, + { + "ordinal": 1, + "name": "email", + "type_info": "Varchar" + }, + { + "ordinal": 2, + "name": "is_admin", + "type_info": "Bool" + }, + { + "ordinal": 3, + "name": "operator", + "type_info": "Bool" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + false, + false, + false, + false + ] + }, + "hash": "b3b80de52d0931a2fdb5d38b7603a2d69cc25ab1cda413228c363a5ffd777113" +} diff --git a/backend/.sqlx/query-b3d13bdc40c19d0f94937633053a213057f09e853ea48dc8034a4a586c44ee55.json b/backend/.sqlx/query-b3d13bdc40c19d0f94937633053a213057f09e853ea48dc8034a4a586c44ee55.json new file mode 100644 index 0000000000000..c516c778aba48 --- /dev/null +++ b/backend/.sqlx/query-b3d13bdc40c19d0f94937633053a213057f09e853ea48dc8034a4a586c44ee55.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO outstanding_wait_time(job_id, aggregate_wait_time_ms) VALUES ($1, $2)\n ON CONFLICT (job_id) DO UPDATE SET aggregate_wait_time_ms =\n COALESCE(outstanding_wait_time.aggregate_wait_time_ms, 0) + EXCLUDED.aggregate_wait_time_ms", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Uuid", + "Int8" + ] + }, + "nullable": [] + }, + "hash": "b3d13bdc40c19d0f94937633053a213057f09e853ea48dc8034a4a586c44ee55" +} diff --git a/backend/.sqlx/query-b3d4787ad09757725a721228e0f3deaf3ee851ba23f866da50162e362764d6a6.json b/backend/.sqlx/query-b3d4787ad09757725a721228e0f3deaf3ee851ba23f866da50162e362764d6a6.json new file mode 100644 index 0000000000000..89c1827a7d0fc --- /dev/null +++ b/backend/.sqlx/query-b3d4787ad09757725a721228e0f3deaf3ee851ba23f866da50162e362764d6a6.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT count(path) FROM schedule WHERE path LIKE 'f/' || $1 || '%' AND workspace_id = $2", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "count", + "type_info": "Int8" + } + ], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [ + null + ] + }, + "hash": "b3d4787ad09757725a721228e0f3deaf3ee851ba23f866da50162e362764d6a6" +} diff --git a/backend/.sqlx/query-b3dbdfb50ee8118bdaed3164b210cb549a34b96554ae1872355b90304f5dcb76.json b/backend/.sqlx/query-b3dbdfb50ee8118bdaed3164b210cb549a34b96554ae1872355b90304f5dcb76.json new file mode 100644 index 0000000000000..99269c9851126 --- /dev/null +++ b/backend/.sqlx/query-b3dbdfb50ee8118bdaed3164b210cb549a34b96554ae1872355b90304f5dcb76.json @@ -0,0 +1,26 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT p.email as \"email!\", u.username as \"username?\" FROM password p LEFT JOIN usr u ON p.email = u.email WHERE p.username IS NULL AND (SELECT COUNT(DISTINCT username) FROM usr WHERE email = p.email) <= 1", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "email!", + "type_info": "Varchar" + }, + { + "ordinal": 1, + "name": "username?", + "type_info": "Varchar" + } + ], + "parameters": { + "Left": [] + }, + "nullable": [ + true, + false + ] + }, + "hash": "b3dbdfb50ee8118bdaed3164b210cb549a34b96554ae1872355b90304f5dcb76" +} diff --git a/backend/.sqlx/query-b49b1eaf58e62063c7a03039d0c36e65991b1d21a3306390fb1c7ca38babafe3.json b/backend/.sqlx/query-b49b1eaf58e62063c7a03039d0c36e65991b1d21a3306390fb1c7ca38babafe3.json new file mode 100644 index 0000000000000..71aaf4ba90a56 --- /dev/null +++ b/backend/.sqlx/query-b49b1eaf58e62063c7a03039d0c36e65991b1d21a3306390fb1c7ca38babafe3.json @@ -0,0 +1,82 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO script (workspace_id, hash, path, parent_hashes, summary, description, content, created_by, schema, is_template, extra_perms, lock, language, kind, tag, draft_only, envs, concurrent_limit, concurrency_time_window_s, cache_ttl, dedicated_worker, ws_error_handler_muted, priority, restart_unless_cancelled, delete_after_use, timeout, concurrency_key, visible_to_runner_only, no_main_func, codebase, has_preprocessor) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9::text::json, $10, $11, $12, $13, $14, $15, $16, $17, $18, $19, $20, $21, $22, $23, $24, $25, $26, $27, $28, $29, $30, $31)", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Int8", + "Varchar", + "Int8Array", + "Text", + "Text", + "Text", + "Varchar", + "Text", + "Bool", + "Jsonb", + "Text", + { + "Custom": { + "name": "script_lang", + "kind": { + "Enum": [ + "python3", + "deno", + "go", + "bash", + "postgresql", + "nativets", + "bun", + "mysql", + "bigquery", + "snowflake", + "graphql", + "powershell", + "mssql", + "php", + "bunnative", + "rust", + "ansible" + ] + } + } + }, + { + "Custom": { + "name": "script_kind", + "kind": { + "Enum": [ + "script", + "trigger", + "failure", + "command", + "approval" + ] + } + } + }, + "Varchar", + "Bool", + "VarcharArray", + "Int4", + "Int4", + "Int4", + "Bool", + "Bool", + "Int2", + "Bool", + "Bool", + "Int4", + "Varchar", + "Bool", + "Bool", + "Varchar", + "Bool" + ] + }, + "nullable": [] + }, + "hash": "b49b1eaf58e62063c7a03039d0c36e65991b1d21a3306390fb1c7ca38babafe3" +} diff --git a/backend/.sqlx/query-b4c4b1aa4bcf7e5f49ce3bd93fff3b7c49e812271e4888d33eb73dd638486488.json b/backend/.sqlx/query-b4c4b1aa4bcf7e5f49ce3bd93fff3b7c49e812271e4888d33eb73dd638486488.json new file mode 100644 index 0000000000000..7610c7477be13 --- /dev/null +++ b/backend/.sqlx/query-b4c4b1aa4bcf7e5f49ce3bd93fff3b7c49e812271e4888d33eb73dd638486488.json @@ -0,0 +1,41 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT created_by, CONCAT(coalesce(completed_job.logs, ''), coalesce(job_logs.logs, '')) as logs, job_logs.log_offset, job_logs.log_file_index\n FROM completed_job \n LEFT JOIN job_logs ON job_logs.job_id = completed_job.id \n WHERE completed_job.id = $1 AND completed_job.workspace_id = $2", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "created_by", + "type_info": "Varchar" + }, + { + "ordinal": 1, + "name": "logs", + "type_info": "Text" + }, + { + "ordinal": 2, + "name": "log_offset", + "type_info": "Int4" + }, + { + "ordinal": 3, + "name": "log_file_index", + "type_info": "TextArray" + } + ], + "parameters": { + "Left": [ + "Uuid", + "Text" + ] + }, + "nullable": [ + false, + null, + false, + true + ] + }, + "hash": "b4c4b1aa4bcf7e5f49ce3bd93fff3b7c49e812271e4888d33eb73dd638486488" +} diff --git a/backend/.sqlx/query-b50b8d3367bd1f74986e6f923fe8497bcbfffea2570a3f3d1f8100207bc1557c.json b/backend/.sqlx/query-b50b8d3367bd1f74986e6f923fe8497bcbfffea2570a3f3d1f8100207bc1557c.json new file mode 100644 index 0000000000000..dd2a7b9ede621 --- /dev/null +++ b/backend/.sqlx/query-b50b8d3367bd1f74986e6f923fe8497bcbfffea2570a3f3d1f8100207bc1557c.json @@ -0,0 +1,20 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT COUNT(*) FROM queue WHERE canceled = false AND (scheduled_for <= now()\n OR (suspend_until IS NOT NULL\n AND ( suspend <= 0\n OR suspend_until <= now())))", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "count", + "type_info": "Int8" + } + ], + "parameters": { + "Left": [] + }, + "nullable": [ + null + ] + }, + "hash": "b50b8d3367bd1f74986e6f923fe8497bcbfffea2570a3f3d1f8100207bc1557c" +} diff --git a/backend/.sqlx/query-b56111c5b81de2449a1b687656a4636457da851a4db5e916cf4f6847c48c6bd3.json b/backend/.sqlx/query-b56111c5b81de2449a1b687656a4636457da851a4db5e916cf4f6847c48c6bd3.json new file mode 100644 index 0000000000000..a3e2229cd32a9 --- /dev/null +++ b/backend/.sqlx/query-b56111c5b81de2449a1b687656a4636457da851a4db5e916cf4f6847c48c6bd3.json @@ -0,0 +1,17 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE job_stats SET scalar_float = $4 WHERE workspace_id = $1 AND job_id = $2 AND metric_id = $3", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Uuid", + "Text", + "Float4" + ] + }, + "nullable": [] + }, + "hash": "b56111c5b81de2449a1b687656a4636457da851a4db5e916cf4f6847c48c6bd3" +} diff --git a/backend/.sqlx/query-b57a188ca137162a2848ebf81fa3aeca9a14ac628c61a358e2c6612c57249b0f.json b/backend/.sqlx/query-b57a188ca137162a2848ebf81fa3aeca9a14ac628c61a358e2c6612c57249b0f.json new file mode 100644 index 0000000000000..a730d4b588e17 --- /dev/null +++ b/backend/.sqlx/query-b57a188ca137162a2848ebf81fa3aeca9a14ac628c61a358e2c6612c57249b0f.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT EXISTS(SELECT 1 FROM http_trigger WHERE workspace_id = $1 AND path = $2)", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "exists", + "type_info": "Bool" + } + ], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [ + null + ] + }, + "hash": "b57a188ca137162a2848ebf81fa3aeca9a14ac628c61a358e2c6612c57249b0f" +} diff --git a/backend/.sqlx/query-b5fbceb4fde1a4c00d8d36be6f2fb612b0aec2baa6ed76c09bd11ae462642221.json b/backend/.sqlx/query-b5fbceb4fde1a4c00d8d36be6f2fb612b0aec2baa6ed76c09bd11ae462642221.json new file mode 100644 index 0000000000000..a97704e999a5a --- /dev/null +++ b/backend/.sqlx/query-b5fbceb4fde1a4c00d8d36be6f2fb612b0aec2baa6ed76c09bd11ae462642221.json @@ -0,0 +1,16 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE draft SET path = REGEXP_REPLACE(path,'u/' || $2 || '/(.*)','u/' || $1 || '/\\1') WHERE path LIKE ('u/' || $2 || '/%') AND workspace_id = $3", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "b5fbceb4fde1a4c00d8d36be6f2fb612b0aec2baa6ed76c09bd11ae462642221" +} diff --git a/backend/.sqlx/query-b656f38e5f1d6a0799767a775b8550027cf7a3bb202269e8dda92d31bc8789dd.json b/backend/.sqlx/query-b656f38e5f1d6a0799767a775b8550027cf7a3bb202269e8dda92d31bc8789dd.json new file mode 100644 index 0000000000000..6ad2fc0ae11b4 --- /dev/null +++ b/backend/.sqlx/query-b656f38e5f1d6a0799767a775b8550027cf7a3bb202269e8dda92d31bc8789dd.json @@ -0,0 +1,34 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT path, value, is_secret FROM variable WHERE workspace_id = $1", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "path", + "type_info": "Varchar" + }, + { + "ordinal": 1, + "name": "value", + "type_info": "Varchar" + }, + { + "ordinal": 2, + "name": "is_secret", + "type_info": "Bool" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + false, + false, + false + ] + }, + "hash": "b656f38e5f1d6a0799767a775b8550027cf7a3bb202269e8dda92d31bc8789dd" +} diff --git a/backend/.sqlx/query-b6ddadfa8d23db666206f907a6390b824af5260a3b1ab3355ac613f1f83fc349.json b/backend/.sqlx/query-b6ddadfa8d23db666206f907a6390b824af5260a3b1ab3355ac613f1f83fc349.json new file mode 100644 index 0000000000000..c681870c725a5 --- /dev/null +++ b/backend/.sqlx/query-b6ddadfa8d23db666206f907a6390b824af5260a3b1ab3355ac613f1f83fc349.json @@ -0,0 +1,16 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO workspace_invite\n (workspace_id, email, is_admin, operator)\n VALUES ($1, $2, false, $3)\n ON CONFLICT DO NOTHING", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Varchar", + "Bool" + ] + }, + "nullable": [] + }, + "hash": "b6ddadfa8d23db666206f907a6390b824af5260a3b1ab3355ac613f1f83fc349" +} diff --git a/backend/.sqlx/query-b705a3692c98081501bff467daf347e6cb6f6eff578882ce7e5e87db05b4a1e0.json b/backend/.sqlx/query-b705a3692c98081501bff467daf347e6cb6f6eff578882ce7e5e87db05b4a1e0.json new file mode 100644 index 0000000000000..cd686e20ceff9 --- /dev/null +++ b/backend/.sqlx/query-b705a3692c98081501bff467daf347e6cb6f6eff578882ce7e5e87db05b4a1e0.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE password SET username = $1 WHERE email = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Text" + ] + }, + "nullable": [] + }, + "hash": "b705a3692c98081501bff467daf347e6cb6f6eff578882ce7e5e87db05b4a1e0" +} diff --git a/backend/.sqlx/query-b7ac3383a058ab3bbd7280300cebc5f81eeb9e96622ad2557f810a8b91641b89.json b/backend/.sqlx/query-b7ac3383a058ab3bbd7280300cebc5f81eeb9e96622ad2557f810a8b91641b89.json new file mode 100644 index 0000000000000..de7f98209c995 --- /dev/null +++ b/backend/.sqlx/query-b7ac3383a058ab3bbd7280300cebc5f81eeb9e96622ad2557f810a8b91641b89.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO folder (workspace_id, name, display_name, owners, extra_perms, created_by, edited_at) VALUES ($1, 'app_groups', 'App Groups', ARRAY[]::TEXT[], '{\"g/all\": false}', $2, now()) ON CONFLICT DO NOTHING", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Varchar" + ] + }, + "nullable": [] + }, + "hash": "b7ac3383a058ab3bbd7280300cebc5f81eeb9e96622ad2557f810a8b91641b89" +} diff --git a/backend/.sqlx/query-b83e58972d8f8285eb604de94c3d363102f5f6705d6debb442a85126ed59d863.json b/backend/.sqlx/query-b83e58972d8f8285eb604de94c3d363102f5f6705d6debb442a85126ed59d863.json new file mode 100644 index 0000000000000..7548983ecba28 --- /dev/null +++ b/backend/.sqlx/query-b83e58972d8f8285eb604de94c3d363102f5f6705d6debb442a85126ed59d863.json @@ -0,0 +1,18 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO deployment_metadata (workspace_id, path, app_version, callback_job_ids, deployment_msg) VALUES ($1, $2, $3, $4, $5)", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Varchar", + "Int8", + "UuidArray", + "Text" + ] + }, + "nullable": [] + }, + "hash": "b83e58972d8f8285eb604de94c3d363102f5f6705d6debb442a85126ed59d863" +} diff --git a/backend/.sqlx/query-b8490eea478c1fd279593a7ced86b4d21aa3bfe772e4d344e306a224ec2c8a01.json b/backend/.sqlx/query-b8490eea478c1fd279593a7ced86b4d21aa3bfe772e4d344e306a224ec2c8a01.json new file mode 100644 index 0000000000000..15d17d5784a55 --- /dev/null +++ b/backend/.sqlx/query-b8490eea478c1fd279593a7ced86b4d21aa3bfe772e4d344e306a224ec2c8a01.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE password SET email = $1 WHERE email = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Text" + ] + }, + "nullable": [] + }, + "hash": "b8490eea478c1fd279593a7ced86b4d21aa3bfe772e4d344e306a224ec2c8a01" +} diff --git a/backend/.sqlx/query-b8959764cd7c67f6535044cfd42ebdbca3aadb5197cf395ba9a1fdee0e55967e.json b/backend/.sqlx/query-b8959764cd7c67f6535044cfd42ebdbca3aadb5197cf395ba9a1fdee0e55967e.json new file mode 100644 index 0000000000000..c15c07bc019e0 --- /dev/null +++ b/backend/.sqlx/query-b8959764cd7c67f6535044cfd42ebdbca3aadb5197cf395ba9a1fdee0e55967e.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE workspace SET name = $1 WHERE id = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Text" + ] + }, + "nullable": [] + }, + "hash": "b8959764cd7c67f6535044cfd42ebdbca3aadb5197cf395ba9a1fdee0e55967e" +} diff --git a/backend/.sqlx/query-b8c66d905a6c7ffa6441c84b14ea897040069dac7367895813cc2d64a9867193.json b/backend/.sqlx/query-b8c66d905a6c7ffa6441c84b14ea897040069dac7367895813cc2d64a9867193.json new file mode 100644 index 0000000000000..265a3c96a4c32 --- /dev/null +++ b/backend/.sqlx/query-b8c66d905a6c7ffa6441c84b14ea897040069dac7367895813cc2d64a9867193.json @@ -0,0 +1,16 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO workspace_env (workspace_id, name, value) VALUES ($1, $2, $3) ON CONFLICT (workspace_id, name) DO UPDATE SET value = $3", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Varchar", + "Varchar" + ] + }, + "nullable": [] + }, + "hash": "b8c66d905a6c7ffa6441c84b14ea897040069dac7367895813cc2d64a9867193" +} diff --git a/backend/.sqlx/query-b8d392ccfcccafe0c19511b3567bc11779b1052b0948c410468a8aeba1d26d33.json b/backend/.sqlx/query-b8d392ccfcccafe0c19511b3567bc11779b1052b0948c410468a8aeba1d26d33.json new file mode 100644 index 0000000000000..c403f6a428292 --- /dev/null +++ b/backend/.sqlx/query-b8d392ccfcccafe0c19511b3567bc11779b1052b0948c410468a8aeba1d26d33.json @@ -0,0 +1,58 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT * from resource_type WHERE (workspace_id = $1 OR workspace_id = 'admins') ORDER BY name", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "workspace_id", + "type_info": "Varchar" + }, + { + "ordinal": 1, + "name": "name", + "type_info": "Varchar" + }, + { + "ordinal": 2, + "name": "schema", + "type_info": "Jsonb" + }, + { + "ordinal": 3, + "name": "description", + "type_info": "Text" + }, + { + "ordinal": 4, + "name": "edited_at", + "type_info": "Timestamptz" + }, + { + "ordinal": 5, + "name": "created_by", + "type_info": "Varchar" + }, + { + "ordinal": 6, + "name": "format_extension", + "type_info": "Varchar" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + false, + false, + true, + true, + true, + true, + true + ] + }, + "hash": "b8d392ccfcccafe0c19511b3567bc11779b1052b0948c410468a8aeba1d26d33" +} diff --git a/backend/.sqlx/query-b9468b9e16f55db11b33d8e9793e6e3ae6c5add6ca02414140adb724120a6800.json b/backend/.sqlx/query-b9468b9e16f55db11b33d8e9793e6e3ae6c5add6ca02414140adb724120a6800.json new file mode 100644 index 0000000000000..8f9f3dfc89c7d --- /dev/null +++ b/backend/.sqlx/query-b9468b9e16f55db11b33d8e9793e6e3ae6c5add6ca02414140adb724120a6800.json @@ -0,0 +1,16 @@ +{ + "db_name": "PostgreSQL", + "query": "\n UPDATE capture\n SET payload = $3\n WHERE workspace_id = $1\n AND path = $2\n ", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Text", + "Jsonb" + ] + }, + "nullable": [] + }, + "hash": "b9468b9e16f55db11b33d8e9793e6e3ae6c5add6ca02414140adb724120a6800" +} diff --git a/backend/.sqlx/query-bafff2205d9ca74b033d1d1faf6b1a3398ce387847d73f894dfe850e096326c0.json b/backend/.sqlx/query-bafff2205d9ca74b033d1d1faf6b1a3398ce387847d73f894dfe850e096326c0.json new file mode 100644 index 0000000000000..dbd29f1977b88 --- /dev/null +++ b/backend/.sqlx/query-bafff2205d9ca74b033d1d1faf6b1a3398ce387847d73f894dfe850e096326c0.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE flow_version SET workspace_id = $1 WHERE workspace_id = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Text" + ] + }, + "nullable": [] + }, + "hash": "bafff2205d9ca74b033d1d1faf6b1a3398ce387847d73f894dfe850e096326c0" +} diff --git a/backend/.sqlx/query-bb0ee03198bcad69a1777447cf5c42fc22700e3cbf8cd44621a8380536d77552.json b/backend/.sqlx/query-bb0ee03198bcad69a1777447cf5c42fc22700e3cbf8cd44621a8380536d77552.json new file mode 100644 index 0000000000000..91a88794f4b88 --- /dev/null +++ b/backend/.sqlx/query-bb0ee03198bcad69a1777447cf5c42fc22700e3cbf8cd44621a8380536d77552.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM completed_job WHERE created_at <= now() - ($1::bigint::text || ' s')::interval AND started_at + ((duration_ms/1000 + $1::bigint) || ' s')::interval <= now() RETURNING id", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "id", + "type_info": "Uuid" + } + ], + "parameters": { + "Left": [ + "Int8" + ] + }, + "nullable": [ + false + ] + }, + "hash": "bb0ee03198bcad69a1777447cf5c42fc22700e3cbf8cd44621a8380536d77552" +} diff --git a/backend/.sqlx/query-bb56e61c7cfb09c0a28fb3226dfe91704c70d9fe15eda18e6889adfd7496f80b.json b/backend/.sqlx/query-bb56e61c7cfb09c0a28fb3226dfe91704c70d9fe15eda18e6889adfd7496f80b.json new file mode 100644 index 0000000000000..56bf2bf09a46e --- /dev/null +++ b/backend/.sqlx/query-bb56e61c7cfb09c0a28fb3226dfe91704c70d9fe15eda18e6889adfd7496f80b.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM account WHERE workspace_id = $1 AND id = $2 RETURNING id", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "id", + "type_info": "Int4" + } + ], + "parameters": { + "Left": [ + "Text", + "Int4" + ] + }, + "nullable": [ + false + ] + }, + "hash": "bb56e61c7cfb09c0a28fb3226dfe91704c70d9fe15eda18e6889adfd7496f80b" +} diff --git a/backend/.sqlx/query-bbd4136dfcfac26296fb6c52be1a74fd4874f8f74d9f06c018db8867af18e429.json b/backend/.sqlx/query-bbd4136dfcfac26296fb6c52be1a74fd4874f8f74d9f06c018db8867af18e429.json new file mode 100644 index 0000000000000..d43b1e23fde27 --- /dev/null +++ b/backend/.sqlx/query-bbd4136dfcfac26296fb6c52be1a74fd4874f8f74d9f06c018db8867af18e429.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT config FROM config WHERE name = $1", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "config", + "type_info": "Jsonb" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + true + ] + }, + "hash": "bbd4136dfcfac26296fb6c52be1a74fd4874f8f74d9f06c018db8867af18e429" +} diff --git a/backend/.sqlx/query-bc01d5ca0138527b796a373f76404b8b6e4c6d711d0f6a557f929d831b8cfd3e.json b/backend/.sqlx/query-bc01d5ca0138527b796a373f76404b8b6e4c6d711d0f6a557f929d831b8cfd3e.json new file mode 100644 index 0000000000000..6fcbd0a26648e --- /dev/null +++ b/backend/.sqlx/query-bc01d5ca0138527b796a373f76404b8b6e4c6d711d0f6a557f929d831b8cfd3e.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT null FROM queue WHERE id = $1 FOR UPDATE", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "?column?", + "type_info": "Text" + } + ], + "parameters": { + "Left": [ + "Uuid" + ] + }, + "nullable": [ + null + ] + }, + "hash": "bc01d5ca0138527b796a373f76404b8b6e4c6d711d0f6a557f929d831b8cfd3e" +} diff --git a/backend/.sqlx/query-bd829646d08f68106211f97c75dce13b6fc7d35bbaf7f503dcc73ae48fd07489.json b/backend/.sqlx/query-bd829646d08f68106211f97c75dce13b6fc7d35bbaf7f503dcc73ae48fd07489.json new file mode 100644 index 0000000000000..27a484a8eb21d --- /dev/null +++ b/backend/.sqlx/query-bd829646d08f68106211f97c75dce13b6fc7d35bbaf7f503dcc73ae48fd07489.json @@ -0,0 +1,17 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO instance_group (name, scim_display_name, id, external_id) VALUES ($1, $2, $3, $4) ON CONFLICT DO NOTHING", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Varchar", + "Varchar", + "Varchar" + ] + }, + "nullable": [] + }, + "hash": "bd829646d08f68106211f97c75dce13b6fc7d35bbaf7f503dcc73ae48fd07489" +} diff --git a/backend/.sqlx/query-be10033b37dc9cbc38cc56afa8ef93cd7dbe267525d78cbfea87bb7c7cbf8ec4.json b/backend/.sqlx/query-be10033b37dc9cbc38cc56afa8ef93cd7dbe267525d78cbfea87bb7c7cbf8ec4.json new file mode 100644 index 0000000000000..4f1c3ca161033 --- /dev/null +++ b/backend/.sqlx/query-be10033b37dc9cbc38cc56afa8ef93cd7dbe267525d78cbfea87bb7c7cbf8ec4.json @@ -0,0 +1,17 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE resource SET path = $1, value = $2, edited_at = now() WHERE path = $3 AND workspace_id = $4", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Jsonb", + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "be10033b37dc9cbc38cc56afa8ef93cd7dbe267525d78cbfea87bb7c7cbf8ec4" +} diff --git a/backend/.sqlx/query-be1de9116b18a40681cb8c5ec7578fd7c5f7ce77f7af63f766c2899d85fe0bef.json b/backend/.sqlx/query-be1de9116b18a40681cb8c5ec7578fd7c5f7ce77f7af63f766c2899d85fe0bef.json new file mode 100644 index 0000000000000..a03162fcb92f3 --- /dev/null +++ b/backend/.sqlx/query-be1de9116b18a40681cb8c5ec7578fd7c5f7ce77f7af63f766c2899d85fe0bef.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT value FROM resource WHERE path = $1 AND workspace_id = $2", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "value", + "type_info": "Jsonb" + } + ], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [ + true + ] + }, + "hash": "be1de9116b18a40681cb8c5ec7578fd7c5f7ce77f7af63f766c2899d85fe0bef" +} diff --git a/backend/.sqlx/query-bf04a017bc55f6e1f5f25f697b3c4828611591c76dd32541735095c010d6cdf2.json b/backend/.sqlx/query-bf04a017bc55f6e1f5f25f697b3c4828611591c76dd32541735095c010d6cdf2.json new file mode 100644 index 0000000000000..aad74045838de --- /dev/null +++ b/backend/.sqlx/query-bf04a017bc55f6e1f5f25f697b3c4828611591c76dd32541735095c010d6cdf2.json @@ -0,0 +1,28 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT coalesce(COUNT(*), 0) as \"database_length!\", null::bigint as suspended FROM completed_job WHERE workspace_id = $1", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "database_length!", + "type_info": "Int8" + }, + { + "ordinal": 1, + "name": "suspended", + "type_info": "Int8" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + null, + null + ] + }, + "hash": "bf04a017bc55f6e1f5f25f697b3c4828611591c76dd32541735095c010d6cdf2" +} diff --git a/backend/.sqlx/query-bf0ae8e884556a87f8a495aa2c8245e69b8f68b7c2748b2b1c29a3f013123a09.json b/backend/.sqlx/query-bf0ae8e884556a87f8a495aa2c8245e69b8f68b7c2748b2b1c29a3f013123a09.json new file mode 100644 index 0000000000000..c6939fb1ea7ab --- /dev/null +++ b/backend/.sqlx/query-bf0ae8e884556a87f8a495aa2c8245e69b8f68b7c2748b2b1c29a3f013123a09.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE capture SET workspace_id = $1 WHERE workspace_id = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Text" + ] + }, + "nullable": [] + }, + "hash": "bf0ae8e884556a87f8a495aa2c8245e69b8f68b7c2748b2b1c29a3f013123a09" +} diff --git a/backend/.sqlx/query-bf27083af3514e5fae868364518096d1cf4a042c23526dc134c3b2d27904e954.json b/backend/.sqlx/query-bf27083af3514e5fae868364518096d1cf4a042c23526dc134c3b2d27904e954.json new file mode 100644 index 0000000000000..065f940888c17 --- /dev/null +++ b/backend/.sqlx/query-bf27083af3514e5fae868364518096d1cf4a042c23526dc134c3b2d27904e954.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE workspace_settings SET large_file_storage = $1 WHERE workspace_id = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Jsonb", + "Text" + ] + }, + "nullable": [] + }, + "hash": "bf27083af3514e5fae868364518096d1cf4a042c23526dc134c3b2d27904e954" +} diff --git a/backend/.sqlx/query-bf282f7ed77ed09bb44b5e253725a15acefac87bedb2725827938c54a3c0e8f8.json b/backend/.sqlx/query-bf282f7ed77ed09bb44b5e253725a15acefac87bedb2725827938c54a3c0e8f8.json new file mode 100644 index 0000000000000..356aa785478f3 --- /dev/null +++ b/backend/.sqlx/query-bf282f7ed77ed09bb44b5e253725a15acefac87bedb2725827938c54a3c0e8f8.json @@ -0,0 +1,16 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE queue SET canceled_by = $1 WHERE canceled_by = $2 AND workspace_id = $3", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "bf282f7ed77ed09bb44b5e253725a15acefac87bedb2725827938c54a3c0e8f8" +} diff --git a/backend/.sqlx/query-bf2aeb9a1e649106d2a084c1d628690a44573c1869a206474811215714ba97c2.json b/backend/.sqlx/query-bf2aeb9a1e649106d2a084c1d628690a44573c1869a206474811215714ba97c2.json new file mode 100644 index 0000000000000..91b4f2786ab6e --- /dev/null +++ b/backend/.sqlx/query-bf2aeb9a1e649106d2a084c1d628690a44573c1869a206474811215714ba97c2.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM resource WHERE path = $1 AND workspace_id = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "bf2aeb9a1e649106d2a084c1d628690a44573c1869a206474811215714ba97c2" +} diff --git a/backend/.sqlx/query-c07c9276945663d062cf0ff5b3323be681a0e2cb07a457ea9aede2daeff551cc.json b/backend/.sqlx/query-c07c9276945663d062cf0ff5b3323be681a0e2cb07a457ea9aede2daeff551cc.json new file mode 100644 index 0000000000000..dc7f552834d46 --- /dev/null +++ b/backend/.sqlx/query-c07c9276945663d062cf0ff5b3323be681a0e2cb07a457ea9aede2daeff551cc.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT customer_id FROM workspace_settings WHERE workspace_id = $1", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "customer_id", + "type_info": "Varchar" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + true + ] + }, + "hash": "c07c9276945663d062cf0ff5b3323be681a0e2cb07a457ea9aede2daeff551cc" +} diff --git a/backend/.sqlx/query-c10f6b544af2a4a3f7e172a6bb919d5133e633b47942406ddf9834d17950df30.json b/backend/.sqlx/query-c10f6b544af2a4a3f7e172a6bb919d5133e633b47942406ddf9834d17950df30.json new file mode 100644 index 0000000000000..de66942f86f1f --- /dev/null +++ b/backend/.sqlx/query-c10f6b544af2a4a3f7e172a6bb919d5133e633b47942406ddf9834d17950df30.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE config SET config = config WHERE name = $1", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [] + }, + "hash": "c10f6b544af2a4a3f7e172a6bb919d5133e633b47942406ddf9834d17950df30" +} diff --git a/backend/.sqlx/query-c1149f74ef0cca4a48be80f523d339d78e8e20e2bfacac9ad1b6b75c5ae370fb.json b/backend/.sqlx/query-c1149f74ef0cca4a48be80f523d339d78e8e20e2bfacac9ad1b6b75c5ae370fb.json new file mode 100644 index 0000000000000..3b6071eb71100 --- /dev/null +++ b/backend/.sqlx/query-c1149f74ef0cca4a48be80f523d339d78e8e20e2bfacac9ad1b6b75c5ae370fb.json @@ -0,0 +1,16 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE usr SET operator = $1 WHERE username = $2 AND workspace_id = $3", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Bool", + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "c1149f74ef0cca4a48be80f523d339d78e8e20e2bfacac9ad1b6b75c5ae370fb" +} diff --git a/backend/.sqlx/query-c14009d133956710f4435a5984c18b9517e256978512f014e1bf5c270f499772.json b/backend/.sqlx/query-c14009d133956710f4435a5984c18b9517e256978512f014e1bf5c270f499772.json new file mode 100644 index 0000000000000..7e9e9b84aa10c --- /dev/null +++ b/backend/.sqlx/query-c14009d133956710f4435a5984c18b9517e256978512f014e1bf5c270f499772.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE queue\n SET flow_status = JSONB_SET(flow_status, ARRAY['preprocessor_module'], $1)\n WHERE id = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Jsonb", + "Uuid" + ] + }, + "nullable": [] + }, + "hash": "c14009d133956710f4435a5984c18b9517e256978512f014e1bf5c270f499772" +} diff --git a/backend/.sqlx/query-c1ceb03e0eafd2e494c06cef1ec96f78c2cfd42ed7d1ca6cfd35288b561120db.json b/backend/.sqlx/query-c1ceb03e0eafd2e494c06cef1ec96f78c2cfd42ed7d1ca6cfd35288b561120db.json new file mode 100644 index 0000000000000..d1a89a6ad674d --- /dev/null +++ b/backend/.sqlx/query-c1ceb03e0eafd2e494c06cef1ec96f78c2cfd42ed7d1ca6cfd35288b561120db.json @@ -0,0 +1,28 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT healthy, created_at FROM healthchecks WHERE check_type = 'min_alive_workers_' || $1 AND created_at > NOW() - INTERVAL '24 hours' ORDER BY created_at DESC", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "healthy", + "type_info": "Bool" + }, + { + "ordinal": 1, + "name": "created_at", + "type_info": "Timestamptz" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + false, + false + ] + }, + "hash": "c1ceb03e0eafd2e494c06cef1ec96f78c2cfd42ed7d1ca6cfd35288b561120db" +} diff --git a/backend/.sqlx/query-c2060e8cacef6c3b5ce51ed203a2dbafc18d66f2924d1fe518c6728997647db2.json b/backend/.sqlx/query-c2060e8cacef6c3b5ce51ed203a2dbafc18d66f2924d1fe518c6728997647db2.json new file mode 100644 index 0000000000000..6a08bbeab3916 --- /dev/null +++ b/backend/.sqlx/query-c2060e8cacef6c3b5ce51ed203a2dbafc18d66f2924d1fe518c6728997647db2.json @@ -0,0 +1,59 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT email, login_type::text, verified, super_admin, name, company, username from password ORDER BY super_admin DESC, email LIMIT $1 OFFSET $2", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "email", + "type_info": "Varchar" + }, + { + "ordinal": 1, + "name": "login_type", + "type_info": "Text" + }, + { + "ordinal": 2, + "name": "verified", + "type_info": "Bool" + }, + { + "ordinal": 3, + "name": "super_admin", + "type_info": "Bool" + }, + { + "ordinal": 4, + "name": "name", + "type_info": "Varchar" + }, + { + "ordinal": 5, + "name": "company", + "type_info": "Varchar" + }, + { + "ordinal": 6, + "name": "username", + "type_info": "Varchar" + } + ], + "parameters": { + "Left": [ + "Int8", + "Int8" + ] + }, + "nullable": [ + false, + null, + false, + false, + true, + true, + true + ] + }, + "hash": "c2060e8cacef6c3b5ce51ed203a2dbafc18d66f2924d1fe518c6728997647db2" +} diff --git a/backend/.sqlx/query-c229744534f17f7622c3dee21bb1e7292ff17e6dffe58e80e53bff8baade07c8.json b/backend/.sqlx/query-c229744534f17f7622c3dee21bb1e7292ff17e6dffe58e80e53bff8baade07c8.json new file mode 100644 index 0000000000000..df94d893a6d81 --- /dev/null +++ b/backend/.sqlx/query-c229744534f17f7622c3dee21bb1e7292ff17e6dffe58e80e53bff8baade07c8.json @@ -0,0 +1,37 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO http_trigger (workspace_id, path, route_path, route_path_key, script_path, is_flow, is_async, requires_auth, http_method, edited_by, email, edited_at) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, now())", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Varchar", + "Varchar", + "Varchar", + "Varchar", + "Bool", + "Bool", + "Bool", + { + "Custom": { + "name": "http_method", + "kind": { + "Enum": [ + "get", + "post", + "put", + "delete", + "patch" + ] + } + } + }, + "Varchar", + "Varchar" + ] + }, + "nullable": [] + }, + "hash": "c229744534f17f7622c3dee21bb1e7292ff17e6dffe58e80e53bff8baade07c8" +} diff --git a/backend/.sqlx/query-c24d63fb137b805f1e674261681d15e6405de27d40b799b0a65b31fd41bcc625.json b/backend/.sqlx/query-c24d63fb137b805f1e674261681d15e6405de27d40b799b0a65b31fd41bcc625.json new file mode 100644 index 0000000000000..d30c48c5cad44 --- /dev/null +++ b/backend/.sqlx/query-c24d63fb137b805f1e674261681d15e6405de27d40b799b0a65b31fd41bcc625.json @@ -0,0 +1,12 @@ +{ + "db_name": "PostgreSQL", + "query": "VACUUM (skip_locked) queue", + "describe": { + "columns": [], + "parameters": { + "Left": [] + }, + "nullable": [] + }, + "hash": "c24d63fb137b805f1e674261681d15e6405de27d40b799b0a65b31fd41bcc625" +} diff --git a/backend/.sqlx/query-c2a6e8f38d2293c45ede26b89a976f1a32f5bc2323a28f640cf3301a299f1cf4.json b/backend/.sqlx/query-c2a6e8f38d2293c45ede26b89a976f1a32f5bc2323a28f640cf3301a299f1cf4.json new file mode 100644 index 0000000000000..64f691b86be76 --- /dev/null +++ b/backend/.sqlx/query-c2a6e8f38d2293c45ede26b89a976f1a32f5bc2323a28f640cf3301a299f1cf4.json @@ -0,0 +1,16 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE folder SET created_by = $1 WHERE created_by = $2 AND workspace_id = $3", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "c2a6e8f38d2293c45ede26b89a976f1a32f5bc2323a28f640cf3301a299f1cf4" +} diff --git a/backend/.sqlx/query-c3364a5cd3fb7d43a6a6f484009f47a3b108bbf61c9f4afd364ed869deac75a5.json b/backend/.sqlx/query-c3364a5cd3fb7d43a6a6f484009f47a3b108bbf61c9f4afd364ed869deac75a5.json new file mode 100644 index 0000000000000..1b49e9e9868f9 --- /dev/null +++ b/backend/.sqlx/query-c3364a5cd3fb7d43a6a6f484009f47a3b108bbf61c9f4afd364ed869deac75a5.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE workspace_settings SET deploy_ui = $1 WHERE workspace_id = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Jsonb", + "Text" + ] + }, + "nullable": [] + }, + "hash": "c3364a5cd3fb7d43a6a6f484009f47a3b108bbf61c9f4afd364ed869deac75a5" +} diff --git a/backend/.sqlx/query-c3b5abbf2c9079d597a55f7c63bc83b8b4da98bda204a40f045a62172cfb4ebb.json b/backend/.sqlx/query-c3b5abbf2c9079d597a55f7c63bc83b8b4da98bda204a40f045a62172cfb4ebb.json new file mode 100644 index 0000000000000..b545c4859953d --- /dev/null +++ b/backend/.sqlx/query-c3b5abbf2c9079d597a55f7c63bc83b8b4da98bda204a40f045a62172cfb4ebb.json @@ -0,0 +1,29 @@ +{ + "db_name": "PostgreSQL", + "query": "\n SELECT tag as \"tag!\", COUNT(*) as \"count!\"\n FROM completed_job\n WHERE started_at > NOW() - make_interval(secs => $1) AND ($2::text IS NULL OR workspace_id = $2)\n GROUP BY tag\n ORDER BY \"count!\" DESC\n ", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "tag!", + "type_info": "Varchar" + }, + { + "ordinal": 1, + "name": "count!", + "type_info": "Int8" + } + ], + "parameters": { + "Left": [ + "Float8", + "Text" + ] + }, + "nullable": [ + false, + null + ] + }, + "hash": "c3b5abbf2c9079d597a55f7c63bc83b8b4da98bda204a40f045a62172cfb4ebb" +} diff --git a/backend/.sqlx/query-c3e8866a3e86e26f0225f9590ebad3d209d663ac5db05e187b2789fdf4d67489.json b/backend/.sqlx/query-c3e8866a3e86e26f0225f9590ebad3d209d663ac5db05e187b2789fdf4d67489.json new file mode 100644 index 0000000000000..fad9463bc4dfb --- /dev/null +++ b/backend/.sqlx/query-c3e8866a3e86e26f0225f9590ebad3d209d663ac5db05e187b2789fdf4d67489.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE usage SET id = $1 WHERE id = $2 AND is_workspace = true", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Text" + ] + }, + "nullable": [] + }, + "hash": "c3e8866a3e86e26f0225f9590ebad3d209d663ac5db05e187b2789fdf4d67489" +} diff --git a/backend/.sqlx/query-c4b3ab3d87f158b20f0557f78c6307c50620425aeb43636e19931c142b5ce0d7.json b/backend/.sqlx/query-c4b3ab3d87f158b20f0557f78c6307c50620425aeb43636e19931c142b5ce0d7.json new file mode 100644 index 0000000000000..8f54593038b02 --- /dev/null +++ b/backend/.sqlx/query-c4b3ab3d87f158b20f0557f78c6307c50620425aeb43636e19931c142b5ce0d7.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT EXISTS(SELECT 1 FROM raw_app WHERE path = $1 AND workspace_id = $2)", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "exists", + "type_info": "Bool" + } + ], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [ + null + ] + }, + "hash": "c4b3ab3d87f158b20f0557f78c6307c50620425aeb43636e19931c142b5ce0d7" +} diff --git a/backend/.sqlx/query-c4d032639dbfb47c84a2fbcb4cdca75af3007499a9f6c8c492a32fac5274aeb2.json b/backend/.sqlx/query-c4d032639dbfb47c84a2fbcb4cdca75af3007499a9f6c8c492a32fac5274aeb2.json new file mode 100644 index 0000000000000..37cb627daf5a6 --- /dev/null +++ b/backend/.sqlx/query-c4d032639dbfb47c84a2fbcb4cdca75af3007499a9f6c8c492a32fac5274aeb2.json @@ -0,0 +1,12 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO windmill_migrations (name) VALUES ('fix_flow_versioning_2')", + "describe": { + "columns": [], + "parameters": { + "Left": [] + }, + "nullable": [] + }, + "hash": "c4d032639dbfb47c84a2fbcb4cdca75af3007499a9f6c8c492a32fac5274aeb2" +} diff --git a/backend/.sqlx/query-c4ee16065fa021cf6443c2f29f1ca986b9730eae9df26dd33c3ea21e35df62c4.json b/backend/.sqlx/query-c4ee16065fa021cf6443c2f29f1ca986b9730eae9df26dd33c3ea21e35df62c4.json new file mode 100644 index 0000000000000..ff71ffbe0124d --- /dev/null +++ b/backend/.sqlx/query-c4ee16065fa021cf6443c2f29f1ca986b9730eae9df26dd33c3ea21e35df62c4.json @@ -0,0 +1,18 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO resource\n (workspace_id, path, value, resource_type, created_by, edited_at)\n VALUES ($1, $2, $3, $4, $5, now()) ON CONFLICT (workspace_id, path)\n DO UPDATE SET value = $3, edited_at = now()", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Varchar", + "Jsonb", + "Varchar", + "Varchar" + ] + }, + "nullable": [] + }, + "hash": "c4ee16065fa021cf6443c2f29f1ca986b9730eae9df26dd33c3ea21e35df62c4" +} diff --git a/backend/.sqlx/query-c58c35f74739ae139848099ef379aa721d37f97d3aab19d5ee798a650b757af9.json b/backend/.sqlx/query-c58c35f74739ae139848099ef379aa721d37f97d3aab19d5ee798a650b757af9.json new file mode 100644 index 0000000000000..3d623b6881085 --- /dev/null +++ b/backend/.sqlx/query-c58c35f74739ae139848099ef379aa721d37f97d3aab19d5ee798a650b757af9.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT username FROM password WHERE email = $1", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "username", + "type_info": "Varchar" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + true + ] + }, + "hash": "c58c35f74739ae139848099ef379aa721d37f97d3aab19d5ee798a650b757af9" +} diff --git a/backend/.sqlx/query-c59dd666b9a316c027e8c319b80ccbab3a220d93b64357981bd4a03324dad1d0.json b/backend/.sqlx/query-c59dd666b9a316c027e8c319b80ccbab3a220d93b64357981bd4a03324dad1d0.json new file mode 100644 index 0000000000000..01a1aac432552 --- /dev/null +++ b/backend/.sqlx/query-c59dd666b9a316c027e8c319b80ccbab3a220d93b64357981bd4a03324dad1d0.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT is_secret from variable WHERE path = $1 AND workspace_id = $2", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "is_secret", + "type_info": "Bool" + } + ], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [ + false + ] + }, + "hash": "c59dd666b9a316c027e8c319b80ccbab3a220d93b64357981bd4a03324dad1d0" +} diff --git a/backend/.sqlx/query-c68d39492686d0fd275acf4eca3844c37d0f58647a100d24afcf090b4b13f85d.json b/backend/.sqlx/query-c68d39492686d0fd275acf4eca3844c37d0f58647a100d24afcf090b4b13f85d.json new file mode 100644 index 0000000000000..b7536edf0d2fa --- /dev/null +++ b/backend/.sqlx/query-c68d39492686d0fd275acf4eca3844c37d0f58647a100d24afcf090b4b13f85d.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT username from usr WHERE workspace_id = $1", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "username", + "type_info": "Varchar" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + false + ] + }, + "hash": "c68d39492686d0fd275acf4eca3844c37d0f58647a100d24afcf090b4b13f85d" +} diff --git a/backend/.sqlx/query-c69719d0a63b0ca434c3317529e00e4d0df0104b6c1dbdf6d0f68f5047a2ad5e.json b/backend/.sqlx/query-c69719d0a63b0ca434c3317529e00e4d0df0104b6c1dbdf6d0f68f5047a2ad5e.json new file mode 100644 index 0000000000000..d3634c6e96b70 --- /dev/null +++ b/backend/.sqlx/query-c69719d0a63b0ca434c3317529e00e4d0df0104b6c1dbdf6d0f68f5047a2ad5e.json @@ -0,0 +1,19 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO resource\n (workspace_id, path, value, description, resource_type, created_by, edited_at)\n VALUES ($1, $2, $3, $4, $5, $6, now()) ON CONFLICT (workspace_id, path)\n DO UPDATE SET value = $3, description = $4, resource_type = $5, edited_at = now()", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Varchar", + "Jsonb", + "Text", + "Varchar", + "Varchar" + ] + }, + "nullable": [] + }, + "hash": "c69719d0a63b0ca434c3317529e00e4d0df0104b6c1dbdf6d0f68f5047a2ad5e" +} diff --git a/backend/.sqlx/query-c6f5c08cb7c641b398e77424fb79c26d4218aea34ff9fe05beac685504333053.json b/backend/.sqlx/query-c6f5c08cb7c641b398e77424fb79c26d4218aea34ff9fe05beac685504333053.json new file mode 100644 index 0000000000000..36fcfe41bb993 --- /dev/null +++ b/backend/.sqlx/query-c6f5c08cb7c641b398e77424fb79c26d4218aea34ff9fe05beac685504333053.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM usr WHERE workspace_id = $1", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [] + }, + "hash": "c6f5c08cb7c641b398e77424fb79c26d4218aea34ff9fe05beac685504333053" +} diff --git a/backend/.sqlx/query-c721347a78ada56730f92038820e4b7e9e1f541f76bb37a0906a3c96dfe8169e.json b/backend/.sqlx/query-c721347a78ada56730f92038820e4b7e9e1f541f76bb37a0906a3c96dfe8169e.json new file mode 100644 index 0000000000000..f09296e07416c --- /dev/null +++ b/backend/.sqlx/query-c721347a78ada56730f92038820e4b7e9e1f541f76bb37a0906a3c96dfe8169e.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE favorite SET workspace_id = $1 WHERE workspace_id = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Text" + ] + }, + "nullable": [] + }, + "hash": "c721347a78ada56730f92038820e4b7e9e1f541f76bb37a0906a3c96dfe8169e" +} diff --git a/backend/.sqlx/query-c732dcb4df5877560a3e75e0032179140cbe442f0b80ce1172d80903dd8a14fa.json b/backend/.sqlx/query-c732dcb4df5877560a3e75e0032179140cbe442f0b80ce1172d80903dd8a14fa.json new file mode 100644 index 0000000000000..d19fc9d699160 --- /dev/null +++ b/backend/.sqlx/query-c732dcb4df5877560a3e75e0032179140cbe442f0b80ce1172d80903dd8a14fa.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE queue SET canceled = true WHERE id = $1", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Uuid" + ] + }, + "nullable": [] + }, + "hash": "c732dcb4df5877560a3e75e0032179140cbe442f0b80ce1172d80903dd8a14fa" +} diff --git a/backend/.sqlx/query-c75761c9aa900391251596771782039809bc01e4a0aa05701d6607b06769caa5.json b/backend/.sqlx/query-c75761c9aa900391251596771782039809bc01e4a0aa05701d6607b06769caa5.json new file mode 100644 index 0000000000000..abe61cf520223 --- /dev/null +++ b/backend/.sqlx/query-c75761c9aa900391251596771782039809bc01e4a0aa05701d6607b06769caa5.json @@ -0,0 +1,40 @@ +{ + "db_name": "PostgreSQL", + "query": "\n SELECT id, flow_status, suspend, script_path\n FROM queue\n WHERE id = ( SELECT parent_job FROM queue WHERE id = $1 UNION ALL SELECT parent_job FROM completed_job WHERE id = $1)\n FOR UPDATE\n ", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "id", + "type_info": "Uuid" + }, + { + "ordinal": 1, + "name": "flow_status", + "type_info": "Jsonb" + }, + { + "ordinal": 2, + "name": "suspend", + "type_info": "Int4" + }, + { + "ordinal": 3, + "name": "script_path", + "type_info": "Varchar" + } + ], + "parameters": { + "Left": [ + "Uuid" + ] + }, + "nullable": [ + false, + true, + false, + true + ] + }, + "hash": "c75761c9aa900391251596771782039809bc01e4a0aa05701d6607b06769caa5" +} diff --git a/backend/.sqlx/query-c7dbcb52f6b44c8fc0d6240b7d73717ee7f24abd54fab5b4a687490b7c0b3672.json b/backend/.sqlx/query-c7dbcb52f6b44c8fc0d6240b7d73717ee7f24abd54fab5b4a687490b7c0b3672.json new file mode 100644 index 0000000000000..69a201a650269 --- /dev/null +++ b/backend/.sqlx/query-c7dbcb52f6b44c8fc0d6240b7d73717ee7f24abd54fab5b4a687490b7c0b3672.json @@ -0,0 +1,12 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM instance_group", + "describe": { + "columns": [], + "parameters": { + "Left": [] + }, + "nullable": [] + }, + "hash": "c7dbcb52f6b44c8fc0d6240b7d73717ee7f24abd54fab5b4a687490b7c0b3672" +} diff --git a/backend/.sqlx/query-c7dd35561e9b1cfd86238d410139f50e4d87c762e4867d8b32c11bd8c74846eb.json b/backend/.sqlx/query-c7dd35561e9b1cfd86238d410139f50e4d87c762e4867d8b32c11bd8c74846eb.json new file mode 100644 index 0000000000000..73a1911081c02 --- /dev/null +++ b/backend/.sqlx/query-c7dd35561e9b1cfd86238d410139f50e4d87c762e4867d8b32c11bd8c74846eb.json @@ -0,0 +1,16 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO job_logs (logs, job_id, workspace_id) VALUES ($1, $2, $3) ON CONFLICT (job_id) DO UPDATE SET logs = concat(job_logs.logs, $1::text)", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Uuid", + "Varchar" + ] + }, + "nullable": [] + }, + "hash": "c7dd35561e9b1cfd86238d410139f50e4d87c762e4867d8b32c11bd8c74846eb" +} diff --git a/backend/.sqlx/query-c845c06aa46b52a1e3672fd379dbcec167f4044e45e932aeeefd3d9237e5042c.json b/backend/.sqlx/query-c845c06aa46b52a1e3672fd379dbcec167f4044e45e932aeeefd3d9237e5042c.json new file mode 100644 index 0000000000000..e698dac42763c --- /dev/null +++ b/backend/.sqlx/query-c845c06aa46b52a1e3672fd379dbcec167f4044e45e932aeeefd3d9237e5042c.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT CAST(ROUND(AVG(duration_ms), 0) AS BIGINT) AS avg_duration_s FROM\n (SELECT duration_ms FROM concurrency_key LEFT JOIN completed_job ON completed_job.id = concurrency_key.job_id WHERE key = $1 AND ended_at IS NOT NULL\n ORDER BY ended_at\n DESC LIMIT 10) AS t", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "avg_duration_s", + "type_info": "Int8" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + null + ] + }, + "hash": "c845c06aa46b52a1e3672fd379dbcec167f4044e45e932aeeefd3d9237e5042c" +} diff --git a/backend/.sqlx/query-c87db5bfb559c912e35415c9945009041a5f5a03eaf03fe6bf27eed406640b6a.json b/backend/.sqlx/query-c87db5bfb559c912e35415c9945009041a5f5a03eaf03fe6bf27eed406640b6a.json new file mode 100644 index 0000000000000..3facb38868b7e --- /dev/null +++ b/backend/.sqlx/query-c87db5bfb559c912e35415c9945009041a5f5a03eaf03fe6bf27eed406640b6a.json @@ -0,0 +1,20 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT value->>'private_key' FROM global_settings WHERE name = 'rsa_keys'", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "?column?", + "type_info": "Text" + } + ], + "parameters": { + "Left": [] + }, + "nullable": [ + null + ] + }, + "hash": "c87db5bfb559c912e35415c9945009041a5f5a03eaf03fe6bf27eed406640b6a" +} diff --git a/backend/.sqlx/query-c9f7da8404969eacb02a61c354c2c04910e2362029d6c9d4eb9ee8ebc70231cb.json b/backend/.sqlx/query-c9f7da8404969eacb02a61c354c2c04910e2362029d6c9d4eb9ee8ebc70231cb.json new file mode 100644 index 0000000000000..0cd0741808bbb --- /dev/null +++ b/backend/.sqlx/query-c9f7da8404969eacb02a61c354c2c04910e2362029d6c9d4eb9ee8ebc70231cb.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM instance_group WHERE name = $1", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [] + }, + "hash": "c9f7da8404969eacb02a61c354c2c04910e2362029d6c9d4eb9ee8ebc70231cb" +} diff --git a/backend/.sqlx/query-ca3ba808e020c8c7a35eaef842b20cfeee64fd47ded72fce55cc75e0bbb291a8.json b/backend/.sqlx/query-ca3ba808e020c8c7a35eaef842b20cfeee64fd47ded72fce55cc75e0bbb291a8.json new file mode 100644 index 0000000000000..6d44fb28408f4 --- /dev/null +++ b/backend/.sqlx/query-ca3ba808e020c8c7a35eaef842b20cfeee64fd47ded72fce55cc75e0bbb291a8.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO usage (id, is_workspace, month_, usage) \n VALUES ($1, TRUE, EXTRACT(YEAR FROM current_date) * 12 + EXTRACT(MONTH FROM current_date), $2) \n ON CONFLICT (id, is_workspace, month_) DO UPDATE SET usage = usage.usage + $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Int4" + ] + }, + "nullable": [] + }, + "hash": "ca3ba808e020c8c7a35eaef842b20cfeee64fd47ded72fce55cc75e0bbb291a8" +} diff --git a/backend/.sqlx/query-ca5f42cb0e368d0817461600152aabefe718829fb6eae2f681c4c8328acc94b2.json b/backend/.sqlx/query-ca5f42cb0e368d0817461600152aabefe718829fb6eae2f681c4c8328acc94b2.json new file mode 100644 index 0000000000000..eb5c3a8bf0979 --- /dev/null +++ b/backend/.sqlx/query-ca5f42cb0e368d0817461600152aabefe718829fb6eae2f681c4c8328acc94b2.json @@ -0,0 +1,46 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT g_.workspace_id, name, summary, extra_perms, array_agg(u2g.usr) filter (where u2g.usr is not null) as members \n FROM usr u\n JOIN usr_to_group u2g ON u2g.usr = u.username AND u2g.workspace_id = u.workspace_id\n RIGHT JOIN group_ g_ ON g_.workspace_id = u.workspace_id AND g_.name = u2g.group_\n WHERE g_.workspace_id = $1 AND g_.name != 'all'\n GROUP BY g_.workspace_id, name, summary, extra_perms", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "workspace_id", + "type_info": "Varchar" + }, + { + "ordinal": 1, + "name": "name", + "type_info": "Varchar" + }, + { + "ordinal": 2, + "name": "summary", + "type_info": "Text" + }, + { + "ordinal": 3, + "name": "extra_perms", + "type_info": "Jsonb" + }, + { + "ordinal": 4, + "name": "members", + "type_info": "VarcharArray" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + false, + false, + true, + false, + null + ] + }, + "hash": "ca5f42cb0e368d0817461600152aabefe718829fb6eae2f681c4c8328acc94b2" +} diff --git a/backend/.sqlx/query-cac594031a21b4806de9c4616317d3541522ef9712a83ecff7bd8b5f6e870748.json b/backend/.sqlx/query-cac594031a21b4806de9c4616317d3541522ef9712a83ecff7bd8b5f6e870748.json new file mode 100644 index 0000000000000..3a1add0befdc3 --- /dev/null +++ b/backend/.sqlx/query-cac594031a21b4806de9c4616317d3541522ef9712a83ecff7bd8b5f6e870748.json @@ -0,0 +1,17 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE account SET refresh_token = $1, expires_at = $2 WHERE workspace_id = $3 AND id = $4", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Timestamptz", + "Text", + "Int4" + ] + }, + "nullable": [] + }, + "hash": "cac594031a21b4806de9c4616317d3541522ef9712a83ecff7bd8b5f6e870748" +} diff --git a/backend/.sqlx/query-cb0eecb1130617f2132b8ec74a401ac3fb932bbeafe3aecc0b14465cce7e192d.json b/backend/.sqlx/query-cb0eecb1130617f2132b8ec74a401ac3fb932bbeafe3aecc0b14465cce7e192d.json new file mode 100644 index 0000000000000..128863559fee8 --- /dev/null +++ b/backend/.sqlx/query-cb0eecb1130617f2132b8ec74a401ac3fb932bbeafe3aecc0b14465cce7e192d.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT 1 FROM queue WHERE id = $1 UNION ALL select 1 FROM completed_job WHERE id = $1", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "?column?", + "type_info": "Int4" + } + ], + "parameters": { + "Left": [ + "Uuid" + ] + }, + "nullable": [ + null + ] + }, + "hash": "cb0eecb1130617f2132b8ec74a401ac3fb932bbeafe3aecc0b14465cce7e192d" +} diff --git a/backend/.sqlx/query-cb12aee5f8e04cb196d4b8fad81699fcbb1ae7b0c84090d5705b14eac76074ff.json b/backend/.sqlx/query-cb12aee5f8e04cb196d4b8fad81699fcbb1ae7b0c84090d5705b14eac76074ff.json new file mode 100644 index 0000000000000..f99438c606e7d --- /dev/null +++ b/backend/.sqlx/query-cb12aee5f8e04cb196d4b8fad81699fcbb1ae7b0c84090d5705b14eac76074ff.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO group_\n VALUES ($1, 'all', 'The group that always contains all users of this workspace')", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar" + ] + }, + "nullable": [] + }, + "hash": "cb12aee5f8e04cb196d4b8fad81699fcbb1ae7b0c84090d5705b14eac76074ff" +} diff --git a/backend/.sqlx/query-cb20f04352364f112ec564617722354577dc5f77169fd4573317454e47361d65.json b/backend/.sqlx/query-cb20f04352364f112ec564617722354577dc5f77169fd4573317454e47361d65.json new file mode 100644 index 0000000000000..a33576931c997 --- /dev/null +++ b/backend/.sqlx/query-cb20f04352364f112ec564617722354577dc5f77169fd4573317454e47361d65.json @@ -0,0 +1,65 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT workspace_id, name, display_name, owners, extra_perms, summary, created_by, edited_at FROM folder WHERE name = $1 AND workspace_id = $2", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "workspace_id", + "type_info": "Varchar" + }, + { + "ordinal": 1, + "name": "name", + "type_info": "Varchar" + }, + { + "ordinal": 2, + "name": "display_name", + "type_info": "Varchar" + }, + { + "ordinal": 3, + "name": "owners", + "type_info": "VarcharArray" + }, + { + "ordinal": 4, + "name": "extra_perms", + "type_info": "Jsonb" + }, + { + "ordinal": 5, + "name": "summary", + "type_info": "Text" + }, + { + "ordinal": 6, + "name": "created_by", + "type_info": "Varchar" + }, + { + "ordinal": 7, + "name": "edited_at", + "type_info": "Timestamptz" + } + ], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [ + false, + false, + false, + false, + false, + true, + true, + true + ] + }, + "hash": "cb20f04352364f112ec564617722354577dc5f77169fd4573317454e47361d65" +} diff --git a/backend/.sqlx/query-cbf5a2b315a7e89689ee86acf452f40fd82605c456aff479890462f4d0202316.json b/backend/.sqlx/query-cbf5a2b315a7e89689ee86acf452f40fd82605c456aff479890462f4d0202316.json new file mode 100644 index 0000000000000..889f2433d760f --- /dev/null +++ b/backend/.sqlx/query-cbf5a2b315a7e89689ee86acf452f40fd82605c456aff479890462f4d0202316.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE queue SET workspace_id = $1 WHERE workspace_id = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Text" + ] + }, + "nullable": [] + }, + "hash": "cbf5a2b315a7e89689ee86acf452f40fd82605c456aff479890462f4d0202316" +} diff --git a/backend/.sqlx/query-cc9e2460b8fded240eff64cf3cf348f9bd36a86233f3b0a3e73f51698ed353dd.json b/backend/.sqlx/query-cc9e2460b8fded240eff64cf3cf348f9bd36a86233f3b0a3e73f51698ed353dd.json new file mode 100644 index 0000000000000..af93f11961851 --- /dev/null +++ b/backend/.sqlx/query-cc9e2460b8fded240eff64cf3cf348f9bd36a86233f3b0a3e73f51698ed353dd.json @@ -0,0 +1,16 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE folder SET extra_perms = extra_perms - ('u/' || $2) || jsonb_build_object(('u/' || $1), extra_perms->('u/' || $2)) WHERE extra_perms ? ('u/' || $2) AND workspace_id = $3", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "cc9e2460b8fded240eff64cf3cf348f9bd36a86233f3b0a3e73f51698ed353dd" +} diff --git a/backend/.sqlx/query-cccf9e216d84dfbb801b92d697496f44d93b344190a26c8393867b3a268b9aba.json b/backend/.sqlx/query-cccf9e216d84dfbb801b92d697496f44d93b344190a26c8393867b3a268b9aba.json new file mode 100644 index 0000000000000..4a34830b0e1b1 --- /dev/null +++ b/backend/.sqlx/query-cccf9e216d84dfbb801b92d697496f44d93b344190a26c8393867b3a268b9aba.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO resource (workspace_id, path, value, description, resource_type, created_by, edited_at) VALUES ($1, 'f/app_themes/theme_0', '{\"name\": \"Default Theme\", \"value\": \"\"}', 'The default app theme', 'app_theme', $2, now()) ON CONFLICT DO NOTHING", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Varchar" + ] + }, + "nullable": [] + }, + "hash": "cccf9e216d84dfbb801b92d697496f44d93b344190a26c8393867b3a268b9aba" +} diff --git a/backend/.sqlx/query-cce991f582bc9d2ba28a5b2b41c679366bb07bc6a100727721a787160ac6910c.json b/backend/.sqlx/query-cce991f582bc9d2ba28a5b2b41c679366bb07bc6a100727721a787160ac6910c.json new file mode 100644 index 0000000000000..f5d905a157029 --- /dev/null +++ b/backend/.sqlx/query-cce991f582bc9d2ba28a5b2b41c679366bb07bc6a100727721a787160ac6910c.json @@ -0,0 +1,38 @@ +{ + "db_name": "PostgreSQL", + "query": "WITH active_users as (SELECT distinct username as email FROM audit WHERE timestamp > NOW() - INTERVAL '1 month' AND (operation = 'users.login' OR operation = 'oauth.login')),\n active_authors as (SELECT distinct email FROM usr WHERE usr.operator IS false AND email IN (SELECT email FROM active_users)),\n active_authors_agg as (SELECT array_agg(email) as authors FROM active_authors),\n active_ops_agg as (SELECT array_agg(email) as operators from active_users WHERE email NOT IN (SELECT email FROM active_authors))\n SELECT active_authors_agg.authors, active_ops_agg.operators, array_length(active_authors_agg.authors, 1) as author_count, array_length(active_ops_agg.operators, 1) as operator_count FROM active_authors_agg, active_ops_agg", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "authors", + "type_info": "VarcharArray" + }, + { + "ordinal": 1, + "name": "operators", + "type_info": "VarcharArray" + }, + { + "ordinal": 2, + "name": "author_count", + "type_info": "Int4" + }, + { + "ordinal": 3, + "name": "operator_count", + "type_info": "Int4" + } + ], + "parameters": { + "Left": [] + }, + "nullable": [ + null, + null, + null, + null + ] + }, + "hash": "cce991f582bc9d2ba28a5b2b41c679366bb07bc6a100727721a787160ac6910c" +} diff --git a/backend/.sqlx/query-ce9e56ff451bae10af2c396352f5f93f78658e57b79dc5295553cacc328eb2b7.json b/backend/.sqlx/query-ce9e56ff451bae10af2c396352f5f93f78658e57b79dc5295553cacc328eb2b7.json new file mode 100644 index 0000000000000..b64a1eb468a2b --- /dev/null +++ b/backend/.sqlx/query-ce9e56ff451bae10af2c396352f5f93f78658e57b79dc5295553cacc328eb2b7.json @@ -0,0 +1,26 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT * FROM config WHERE name LIKE 'worker__%'", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "name", + "type_info": "Varchar" + }, + { + "ordinal": 1, + "name": "config", + "type_info": "Jsonb" + } + ], + "parameters": { + "Left": [] + }, + "nullable": [ + false, + true + ] + }, + "hash": "ce9e56ff451bae10af2c396352f5f93f78658e57b79dc5295553cacc328eb2b7" +} diff --git a/backend/.sqlx/query-ceb97024ebf1a1c00ea1ed4952f66b229ca4622c537cc252d8ed52b4d24270ee.json b/backend/.sqlx/query-ceb97024ebf1a1c00ea1ed4952f66b229ca4622c537cc252d8ed52b4d24270ee.json new file mode 100644 index 0000000000000..30b5230f9673a --- /dev/null +++ b/backend/.sqlx/query-ceb97024ebf1a1c00ea1ed4952f66b229ca4622c537cc252d8ed52b4d24270ee.json @@ -0,0 +1,28 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT openai_resource_path, code_completion_enabled FROM workspace_settings WHERE workspace_id = $1", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "openai_resource_path", + "type_info": "Varchar" + }, + { + "ordinal": 1, + "name": "code_completion_enabled", + "type_info": "Bool" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + true, + false + ] + }, + "hash": "ceb97024ebf1a1c00ea1ed4952f66b229ca4622c537cc252d8ed52b4d24270ee" +} diff --git a/backend/.sqlx/query-cec906e3bcfe5b477f23e8bb44500b97166c789ab1cf6487679d092eebf3a48b.json b/backend/.sqlx/query-cec906e3bcfe5b477f23e8bb44500b97166c789ab1cf6487679d092eebf3a48b.json new file mode 100644 index 0000000000000..e6003b9b34720 --- /dev/null +++ b/backend/.sqlx/query-cec906e3bcfe5b477f23e8bb44500b97166c789ab1cf6487679d092eebf3a48b.json @@ -0,0 +1,20 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT COUNT(*) FROM group_ WHERE name != 'all' AND name != 'error_handler' AND name != 'slack'", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "count", + "type_info": "Int8" + } + ], + "parameters": { + "Left": [] + }, + "nullable": [ + null + ] + }, + "hash": "cec906e3bcfe5b477f23e8bb44500b97166c789ab1cf6487679d092eebf3a48b" +} diff --git a/backend/.sqlx/query-cf1cef7e0fe2e7e3db96b0ec005360361b9eec023a6fc2a4a7a917f59d86af4d.json b/backend/.sqlx/query-cf1cef7e0fe2e7e3db96b0ec005360361b9eec023a6fc2a4a7a917f59d86af4d.json new file mode 100644 index 0000000000000..2556ac55809a6 --- /dev/null +++ b/backend/.sqlx/query-cf1cef7e0fe2e7e3db96b0ec005360361b9eec023a6fc2a4a7a917f59d86af4d.json @@ -0,0 +1,28 @@ +{ + "db_name": "PostgreSQL", + "query": "\n SELECT name, format_extension FROM resource_type WHERE format_extension IS NOT NULL AND (workspace_id = $1 OR workspace_id = 'admins')", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "name", + "type_info": "Varchar" + }, + { + "ordinal": 1, + "name": "format_extension", + "type_info": "Varchar" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + false, + true + ] + }, + "hash": "cf1cef7e0fe2e7e3db96b0ec005360361b9eec023a6fc2a4a7a917f59d86af4d" +} diff --git a/backend/.sqlx/query-cfa0daf8f342aedd2d9b0bbb00965187e3838bbfe6a14be5b7a308e246123f71.json b/backend/.sqlx/query-cfa0daf8f342aedd2d9b0bbb00965187e3838bbfe6a14be5b7a308e246123f71.json new file mode 100644 index 0000000000000..55d1ef464d2d3 --- /dev/null +++ b/backend/.sqlx/query-cfa0daf8f342aedd2d9b0bbb00965187e3838bbfe6a14be5b7a308e246123f71.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE input SET workspace_id = $1 WHERE workspace_id = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Text" + ] + }, + "nullable": [] + }, + "hash": "cfa0daf8f342aedd2d9b0bbb00965187e3838bbfe6a14be5b7a308e246123f71" +} diff --git a/backend/.sqlx/query-d02c1cfefc7d5f87ca4555a092f5fbc777a91271b80d0e488a8cae79afd56d8f.json b/backend/.sqlx/query-d02c1cfefc7d5f87ca4555a092f5fbc777a91271b80d0e488a8cae79afd56d8f.json new file mode 100644 index 0000000000000..f90af3cca79f8 --- /dev/null +++ b/backend/.sqlx/query-d02c1cfefc7d5f87ca4555a092f5fbc777a91271b80d0e488a8cae79afd56d8f.json @@ -0,0 +1,35 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT a.id as app_id, av.id as version_id, dm.deployment_msg as deployment_msg\n FROM app a LEFT JOIN app_version av ON a.id = av.app_id LEFT JOIN deployment_metadata dm ON av.id = dm.app_version\n WHERE a.workspace_id = $1 AND a.path = $2\n ORDER BY created_at DESC", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "app_id", + "type_info": "Int8" + }, + { + "ordinal": 1, + "name": "version_id", + "type_info": "Int8" + }, + { + "ordinal": 2, + "name": "deployment_msg", + "type_info": "Text" + } + ], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [ + false, + false, + true + ] + }, + "hash": "d02c1cfefc7d5f87ca4555a092f5fbc777a91271b80d0e488a8cae79afd56d8f" +} diff --git a/backend/.sqlx/query-d0308abac80575038203b60bb66d3b39b586939da0421a595e47c7a759616431.json b/backend/.sqlx/query-d0308abac80575038203b60bb66d3b39b586939da0421a595e47c7a759616431.json new file mode 100644 index 0000000000000..9000851c1f172 --- /dev/null +++ b/backend/.sqlx/query-d0308abac80575038203b60bb66d3b39b586939da0421a595e47c7a759616431.json @@ -0,0 +1,16 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE workspace SET name = $1, owner = $2 WHERE id = $3", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Varchar", + "Text" + ] + }, + "nullable": [] + }, + "hash": "d0308abac80575038203b60bb66d3b39b586939da0421a595e47c7a759616431" +} diff --git a/backend/.sqlx/query-d0bcb407ce7442511add6572b100783fb6d517a23bb9a32febf38b8c47bda656.json b/backend/.sqlx/query-d0bcb407ce7442511add6572b100783fb6d517a23bb9a32febf38b8c47bda656.json new file mode 100644 index 0000000000000..7af689ff28f74 --- /dev/null +++ b/backend/.sqlx/query-d0bcb407ce7442511add6572b100783fb6d517a23bb9a32febf38b8c47bda656.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM workspace WHERE id = $1", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [] + }, + "hash": "d0bcb407ce7442511add6572b100783fb6d517a23bb9a32febf38b8c47bda656" +} diff --git a/backend/.sqlx/query-d0df57fc4cd0be7b541dee081ffbe86b869b01ca1ab10aa17634bb6dae879f12.json b/backend/.sqlx/query-d0df57fc4cd0be7b541dee081ffbe86b869b01ca1ab10aa17634bb6dae879f12.json new file mode 100644 index 0000000000000..29227c3d8c60c --- /dev/null +++ b/backend/.sqlx/query-d0df57fc4cd0be7b541dee081ffbe86b869b01ca1ab10aa17634bb6dae879f12.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE queue\n SET last_ping = null\n WHERE id = $1", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Uuid" + ] + }, + "nullable": [] + }, + "hash": "d0df57fc4cd0be7b541dee081ffbe86b869b01ca1ab10aa17634bb6dae879f12" +} diff --git a/backend/.sqlx/query-d113bc301f2f094c3a2a4c6ed385da65edde2fbfee0fac5103ba7bd18c64563d.json b/backend/.sqlx/query-d113bc301f2f094c3a2a4c6ed385da65edde2fbfee0fac5103ba7bd18c64563d.json new file mode 100644 index 0000000000000..c3782f5571dc2 --- /dev/null +++ b/backend/.sqlx/query-d113bc301f2f094c3a2a4c6ed385da65edde2fbfee0fac5103ba7bd18c64563d.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO metrics (id, value) VALUES ('license_key_renewal', $1)", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Jsonb" + ] + }, + "nullable": [] + }, + "hash": "d113bc301f2f094c3a2a4c6ed385da65edde2fbfee0fac5103ba7bd18c64563d" +} diff --git a/backend/.sqlx/query-d12d151995da2e8357307dd99e3f7b59192832a566d56b56097d15f713430705.json b/backend/.sqlx/query-d12d151995da2e8357307dd99e3f7b59192832a566d56b56097d15f713430705.json new file mode 100644 index 0000000000000..d806f03296319 --- /dev/null +++ b/backend/.sqlx/query-d12d151995da2e8357307dd99e3f7b59192832a566d56b56097d15f713430705.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT count(path) FROM app WHERE path LIKE 'f/' || $1 || '%' AND workspace_id = $2", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "count", + "type_info": "Int8" + } + ], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [ + null + ] + }, + "hash": "d12d151995da2e8357307dd99e3f7b59192832a566d56b56097d15f713430705" +} diff --git a/backend/.sqlx/query-d1b508e1d8496e5e7aee9db555f9740128d87fe5183f9b7b72f550a5502e1cbb.json b/backend/.sqlx/query-d1b508e1d8496e5e7aee9db555f9740128d87fe5183f9b7b72f550a5502e1cbb.json new file mode 100644 index 0000000000000..1a96553b1f117 --- /dev/null +++ b/backend/.sqlx/query-d1b508e1d8496e5e7aee9db555f9740128d87fe5183f9b7b72f550a5502e1cbb.json @@ -0,0 +1,16 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE resource_type SET created_by = $1 WHERE created_by = $2 AND workspace_id = $3", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "d1b508e1d8496e5e7aee9db555f9740128d87fe5183f9b7b72f550a5502e1cbb" +} diff --git a/backend/.sqlx/query-d1ded8b38e50eb01fa5e5e122dae48ec21856a0041f4aeb244349ab7648d306f.json b/backend/.sqlx/query-d1ded8b38e50eb01fa5e5e122dae48ec21856a0041f4aeb244349ab7648d306f.json new file mode 100644 index 0000000000000..4e1dac2b414d2 --- /dev/null +++ b/backend/.sqlx/query-d1ded8b38e50eb01fa5e5e122dae48ec21856a0041f4aeb244349ab7648d306f.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM schedule WHERE path = $1 AND workspace_id = $2 RETURNING 1", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "?column?", + "type_info": "Int4" + } + ], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [ + null + ] + }, + "hash": "d1ded8b38e50eb01fa5e5e122dae48ec21856a0041f4aeb244349ab7648d306f" +} diff --git a/backend/.sqlx/query-d21e5be1ac26db926b7196316dae0c9fa82a865b95bb55de5370e4ee34889ba3.json b/backend/.sqlx/query-d21e5be1ac26db926b7196316dae0c9fa82a865b95bb55de5370e4ee34889ba3.json new file mode 100644 index 0000000000000..00f38b2f59934 --- /dev/null +++ b/backend/.sqlx/query-d21e5be1ac26db926b7196316dae0c9fa82a865b95bb55de5370e4ee34889ba3.json @@ -0,0 +1,17 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE workspace_settings SET error_handler = $1, error_handler_extra_args = $2, error_handler_muted_on_cancel = $3 WHERE workspace_id = $4", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Json", + "Bool", + "Text" + ] + }, + "nullable": [] + }, + "hash": "d21e5be1ac26db926b7196316dae0c9fa82a865b95bb55de5370e4ee34889ba3" +} diff --git a/backend/.sqlx/query-d233e07d19e8e339e1378c1bfc5d78d592c00ffb6f42c3d072f56305b40e50f9.json b/backend/.sqlx/query-d233e07d19e8e339e1378c1bfc5d78d592c00ffb6f42c3d072f56305b40e50f9.json new file mode 100644 index 0000000000000..b235a60c1ac7e --- /dev/null +++ b/backend/.sqlx/query-d233e07d19e8e339e1378c1bfc5d78d592c00ffb6f42c3d072f56305b40e50f9.json @@ -0,0 +1,28 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT * FROM config WHERE name = $1", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "name", + "type_info": "Varchar" + }, + { + "ordinal": 1, + "name": "config", + "type_info": "Jsonb" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + false, + true + ] + }, + "hash": "d233e07d19e8e339e1378c1bfc5d78d592c00ffb6f42c3d072f56305b40e50f9" +} diff --git a/backend/.sqlx/query-d243064655e45a3898e39ed151416e4e63ec19292cedddfb408d026cf5218f09.json b/backend/.sqlx/query-d243064655e45a3898e39ed151416e4e63ec19292cedddfb408d026cf5218f09.json new file mode 100644 index 0000000000000..a9b0af9525111 --- /dev/null +++ b/backend/.sqlx/query-d243064655e45a3898e39ed151416e4e63ec19292cedddfb408d026cf5218f09.json @@ -0,0 +1,35 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT name, (EXISTS (SELECT 1 FROM (SELECT key, value FROM jsonb_each_text(extra_perms) WHERE key = ANY($1)) t WHERE value::boolean IS true)) as write, $1 && owners::text[] as owner FROM folder\n WHERE extra_perms ?| $1 AND workspace_id = $2", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "name", + "type_info": "Varchar" + }, + { + "ordinal": 1, + "name": "write", + "type_info": "Bool" + }, + { + "ordinal": 2, + "name": "owner", + "type_info": "Bool" + } + ], + "parameters": { + "Left": [ + "TextArray", + "Text" + ] + }, + "nullable": [ + false, + null, + null + ] + }, + "hash": "d243064655e45a3898e39ed151416e4e63ec19292cedddfb408d026cf5218f09" +} diff --git a/backend/.sqlx/query-d2def87d7f7901eebc65082f7df5e0a33e5702b25c3db3affa06155e90480e42.json b/backend/.sqlx/query-d2def87d7f7901eebc65082f7df5e0a33e5702b25c3db3affa06155e90480e42.json new file mode 100644 index 0000000000000..58f03dbec2f5e --- /dev/null +++ b/backend/.sqlx/query-d2def87d7f7901eebc65082f7df5e0a33e5702b25c3db3affa06155e90480e42.json @@ -0,0 +1,71 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT * FROM job_perms WHERE job_id = $1 AND workspace_id = $2", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "job_id", + "type_info": "Uuid" + }, + { + "ordinal": 1, + "name": "email", + "type_info": "Varchar" + }, + { + "ordinal": 2, + "name": "username", + "type_info": "Varchar" + }, + { + "ordinal": 3, + "name": "is_admin", + "type_info": "Bool" + }, + { + "ordinal": 4, + "name": "is_operator", + "type_info": "Bool" + }, + { + "ordinal": 5, + "name": "created_at", + "type_info": "Timestamp" + }, + { + "ordinal": 6, + "name": "workspace_id", + "type_info": "Varchar" + }, + { + "ordinal": 7, + "name": "groups", + "type_info": "TextArray" + }, + { + "ordinal": 8, + "name": "folders", + "type_info": "JsonbArray" + } + ], + "parameters": { + "Left": [ + "Uuid", + "Text" + ] + }, + "nullable": [ + false, + false, + false, + false, + false, + false, + false, + false, + false + ] + }, + "hash": "d2def87d7f7901eebc65082f7df5e0a33e5702b25c3db3affa06155e90480e42" +} diff --git a/backend/.sqlx/query-d44c37882150532383d1058639f4d3af288a346c50f29809dbc55a34088a0abc.json b/backend/.sqlx/query-d44c37882150532383d1058639f4d3af288a346c50f29809dbc55a34088a0abc.json new file mode 100644 index 0000000000000..c071272ff9623 --- /dev/null +++ b/backend/.sqlx/query-d44c37882150532383d1058639f4d3af288a346c50f29809dbc55a34088a0abc.json @@ -0,0 +1,17 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE job_stats SET timestamps = array_append(timestamps, now()), timeseries_float = array_append(timeseries_float, $4) WHERE workspace_id = $1 AND job_id = $2 AND metric_id = $3", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Uuid", + "Text", + "Float4" + ] + }, + "nullable": [] + }, + "hash": "d44c37882150532383d1058639f4d3af288a346c50f29809dbc55a34088a0abc" +} diff --git a/backend/.sqlx/query-d48f06a5ddf41fc11e31c6f53cfb9b9e18256877087a1601bd6f51f826575f26.json b/backend/.sqlx/query-d48f06a5ddf41fc11e31c6f53cfb9b9e18256877087a1601bd6f51f826575f26.json new file mode 100644 index 0000000000000..803a550330884 --- /dev/null +++ b/backend/.sqlx/query-d48f06a5ddf41fc11e31c6f53cfb9b9e18256877087a1601bd6f51f826575f26.json @@ -0,0 +1,16 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE script SET created_by = $1 WHERE created_by = $2 AND workspace_id = $3", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "d48f06a5ddf41fc11e31c6f53cfb9b9e18256877087a1601bd6f51f826575f26" +} diff --git a/backend/.sqlx/query-d4eb7aea60894b65498144b9bf522beba612f36368d62fe4e94b5b9e26349d32.json b/backend/.sqlx/query-d4eb7aea60894b65498144b9bf522beba612f36368d62fe4e94b5b9e26349d32.json new file mode 100644 index 0000000000000..265034b6fcdcd --- /dev/null +++ b/backend/.sqlx/query-d4eb7aea60894b65498144b9bf522beba612f36368d62fe4e94b5b9e26349d32.json @@ -0,0 +1,20 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT EXISTS(SELECT 1 FROM workspace WHERE id = 'demo')", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "exists", + "type_info": "Bool" + } + ], + "parameters": { + "Left": [] + }, + "nullable": [ + null + ] + }, + "hash": "d4eb7aea60894b65498144b9bf522beba612f36368d62fe4e94b5b9e26349d32" +} diff --git a/backend/.sqlx/query-d5a8614286c170e0d175903cd1b53ff66b37ed8110a0b67aedb9f25e6a7383e1.json b/backend/.sqlx/query-d5a8614286c170e0d175903cd1b53ff66b37ed8110a0b67aedb9f25e6a7383e1.json new file mode 100644 index 0000000000000..164157b02fcef --- /dev/null +++ b/backend/.sqlx/query-d5a8614286c170e0d175903cd1b53ff66b37ed8110a0b67aedb9f25e6a7383e1.json @@ -0,0 +1,98 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO completed_job AS cj\n ( workspace_id\n , id\n , parent_job\n , created_by\n , created_at\n , started_at\n , duration_ms\n , success\n , script_hash\n , script_path\n , args\n , result\n , raw_code\n , raw_lock\n , canceled\n , canceled_by\n , canceled_reason\n , job_kind\n , schedule_path\n , permissioned_as\n , flow_status\n , raw_flow\n , is_flow_step\n , is_skipped\n , language\n , email\n , visible_to_owner\n , mem_peak\n , tag\n , priority\n )\n VALUES ($1, $2, $3, $4, $5, COALESCE($6, now()), (EXTRACT('epoch' FROM (now())) - EXTRACT('epoch' FROM (COALESCE($6, now()))))*1000, $7, $8, $9,$10, $11, $12, $13, $14, $15, $16, $17, $18, $19, $20, $21, $22, $23, $24, $25, $26, $27, $28, $29)\n ON CONFLICT (id) DO UPDATE SET success = $7, result = $11 RETURNING duration_ms", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "duration_ms", + "type_info": "Int8" + } + ], + "parameters": { + "Left": [ + "Varchar", + "Uuid", + "Uuid", + "Varchar", + "Timestamptz", + "Timestamptz", + "Bool", + "Int8", + "Varchar", + "Jsonb", + "Jsonb", + "Text", + "Text", + "Bool", + "Varchar", + "Text", + { + "Custom": { + "name": "job_kind", + "kind": { + "Enum": [ + "script", + "preview", + "flow", + "dependencies", + "flowpreview", + "script_hub", + "identity", + "flowdependencies", + "http", + "graphql", + "postgresql", + "noop", + "appdependencies", + "deploymentcallback", + "singlescriptflow" + ] + } + } + }, + "Varchar", + "Varchar", + "Jsonb", + "Jsonb", + "Bool", + "Bool", + { + "Custom": { + "name": "script_lang", + "kind": { + "Enum": [ + "python3", + "deno", + "go", + "bash", + "postgresql", + "nativets", + "bun", + "mysql", + "bigquery", + "snowflake", + "graphql", + "powershell", + "mssql", + "php", + "bunnative", + "rust", + "ansible" + ] + } + } + }, + "Varchar", + "Bool", + "Int4", + "Varchar", + "Int2" + ] + }, + "nullable": [ + false + ] + }, + "hash": "d5a8614286c170e0d175903cd1b53ff66b37ed8110a0b67aedb9f25e6a7383e1" +} diff --git a/backend/.sqlx/query-d5d97005eebcb2760216dbd10872acdb42868fd5f7a27f71836e7a6ff1c69856.json b/backend/.sqlx/query-d5d97005eebcb2760216dbd10872acdb42868fd5f7a27f71836e7a6ff1c69856.json new file mode 100644 index 0000000000000..87361665b54a9 --- /dev/null +++ b/backend/.sqlx/query-d5d97005eebcb2760216dbd10872acdb42868fd5f7a27f71836e7a6ff1c69856.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM resource_type WHERE name = $1 AND workspace_id = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "d5d97005eebcb2760216dbd10872acdb42868fd5f7a27f71836e7a6ff1c69856" +} diff --git a/backend/.sqlx/query-d600a0ad953ed131952d9c46deb8f65143894f86517f2b5b2d51bc9a2857695c.json b/backend/.sqlx/query-d600a0ad953ed131952d9c46deb8f65143894f86517f2b5b2d51bc9a2857695c.json new file mode 100644 index 0000000000000..34afed8276400 --- /dev/null +++ b/backend/.sqlx/query-d600a0ad953ed131952d9c46deb8f65143894f86517f2b5b2d51bc9a2857695c.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT (scalar_int)::int FROM job_stats WHERE job_id = $1 AND workspace_id = $2 AND metric_id = 'progress_perc'", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "scalar_int", + "type_info": "Int4" + } + ], + "parameters": { + "Left": [ + "Uuid", + "Text" + ] + }, + "nullable": [ + true + ] + }, + "hash": "d600a0ad953ed131952d9c46deb8f65143894f86517f2b5b2d51bc9a2857695c" +} diff --git a/backend/.sqlx/query-d6acfbc2e4ef1a4f4252cf7566d91fc4d80a4bb0e383495efa82c697b17d2bf8.json b/backend/.sqlx/query-d6acfbc2e4ef1a4f4252cf7566d91fc4d80a4bb0e383495efa82c697b17d2bf8.json new file mode 100644 index 0000000000000..51dd27804dc55 --- /dev/null +++ b/backend/.sqlx/query-d6acfbc2e4ef1a4f4252cf7566d91fc4d80a4bb0e383495efa82c697b17d2bf8.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT count(path) FROM variable WHERE path LIKE 'f/' || $1 || '%' AND workspace_id = $2", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "count", + "type_info": "Int8" + } + ], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [ + null + ] + }, + "hash": "d6acfbc2e4ef1a4f4252cf7566d91fc4d80a4bb0e383495efa82c697b17d2bf8" +} diff --git a/backend/.sqlx/query-d6b7d48c4ebf1161f2b781829b57957bbe7aaaf734c63c2a20c2ba600b423b49.json b/backend/.sqlx/query-d6b7d48c4ebf1161f2b781829b57957bbe7aaaf734c63c2a20c2ba600b423b49.json new file mode 100644 index 0000000000000..552fca4dfaae9 --- /dev/null +++ b/backend/.sqlx/query-d6b7d48c4ebf1161f2b781829b57957bbe7aaaf734c63c2a20c2ba600b423b49.json @@ -0,0 +1,16 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE schedule SET extra_perms = extra_perms - ('u/' || $2) || jsonb_build_object(('u/' || $1), extra_perms->('u/' || $2)) WHERE extra_perms ? ('u/' || $2) AND workspace_id = $3", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "d6b7d48c4ebf1161f2b781829b57957bbe7aaaf734c63c2a20c2ba600b423b49" +} diff --git a/backend/.sqlx/query-d6c0f1fe3a6dd0b9ccb9d4765a73dc3e7cf71f1ed15d155009aa61657040f4f6.json b/backend/.sqlx/query-d6c0f1fe3a6dd0b9ccb9d4765a73dc3e7cf71f1ed15d155009aa61657040f4f6.json new file mode 100644 index 0000000000000..ee65c0b02f1b8 --- /dev/null +++ b/backend/.sqlx/query-d6c0f1fe3a6dd0b9ccb9d4765a73dc3e7cf71f1ed15d155009aa61657040f4f6.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT username FROM pending_user WHERE email = $1", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "username", + "type_info": "Varchar" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + false + ] + }, + "hash": "d6c0f1fe3a6dd0b9ccb9d4765a73dc3e7cf71f1ed15d155009aa61657040f4f6" +} diff --git a/backend/.sqlx/query-d6c25421bb6513908697ebe74c159da0ef78b5252b6ac669a3c9e545d05c0d43.json b/backend/.sqlx/query-d6c25421bb6513908697ebe74c159da0ef78b5252b6ac669a3c9e545d05c0d43.json new file mode 100644 index 0000000000000..7d7274d774832 --- /dev/null +++ b/backend/.sqlx/query-d6c25421bb6513908697ebe74c159da0ef78b5252b6ac669a3c9e545d05c0d43.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE queue\n SET flow_status = JSONB_SET(flow_status, ARRAY['modules', $1::TEXT, 'iterator', 'index'], ((flow_status->'modules'->$1::int->'iterator'->>'index')::int + 1)::text::jsonb)\n WHERE id = $2\n RETURNING (flow_status->'modules'->$1::int->'iterator'->>'index')::int", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "int4", + "type_info": "Int4" + } + ], + "parameters": { + "Left": [ + "Int4", + "Uuid" + ] + }, + "nullable": [ + null + ] + }, + "hash": "d6c25421bb6513908697ebe74c159da0ef78b5252b6ac669a3c9e545d05c0d43" +} diff --git a/backend/.sqlx/query-d746b15231c05541992b5ae39e8b0ac4ed45ac2c959becfc2e743c8a7f357873.json b/backend/.sqlx/query-d746b15231c05541992b5ae39e8b0ac4ed45ac2c959becfc2e743c8a7f357873.json new file mode 100644 index 0000000000000..acd957c4f58f9 --- /dev/null +++ b/backend/.sqlx/query-d746b15231c05541992b5ae39e8b0ac4ed45ac2c959becfc2e743c8a7f357873.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE parallel_monitor_lock SET last_ping = now() WHERE parent_flow_id = $1 and job_id = $2 RETURNING 1", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "?column?", + "type_info": "Int4" + } + ], + "parameters": { + "Left": [ + "Uuid", + "Uuid" + ] + }, + "nullable": [ + null + ] + }, + "hash": "d746b15231c05541992b5ae39e8b0ac4ed45ac2c959becfc2e743c8a7f357873" +} diff --git a/backend/.sqlx/query-d768bbc46f8a9c4289b918c88ca50aa180b29bbe931d948f6e61976f71b7cdb9.json b/backend/.sqlx/query-d768bbc46f8a9c4289b918c88ca50aa180b29bbe931d948f6e61976f71b7cdb9.json new file mode 100644 index 0000000000000..22b38a521779f --- /dev/null +++ b/backend/.sqlx/query-d768bbc46f8a9c4289b918c88ca50aa180b29bbe931d948f6e61976f71b7cdb9.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT premium FROM workspace WHERE id = $1", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "premium", + "type_info": "Bool" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + false + ] + }, + "hash": "d768bbc46f8a9c4289b918c88ca50aa180b29bbe931d948f6e61976f71b7cdb9" +} diff --git a/backend/.sqlx/query-d77223fc94257711512b6ff21ce109b97324f2917113f04492f53b20860e9588.json b/backend/.sqlx/query-d77223fc94257711512b6ff21ce109b97324f2917113f04492f53b20860e9588.json new file mode 100644 index 0000000000000..52800c5369af6 --- /dev/null +++ b/backend/.sqlx/query-d77223fc94257711512b6ff21ce109b97324f2917113f04492f53b20860e9588.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM job_stats WHERE workspace_id = $1", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [] + }, + "hash": "d77223fc94257711512b6ff21ce109b97324f2917113f04492f53b20860e9588" +} diff --git a/backend/.sqlx/query-d814833e31b3b3657c57dde1c8cd21896d6cb8256fe05dd5b0fecb53782956ce.json b/backend/.sqlx/query-d814833e31b3b3657c57dde1c8cd21896d6cb8256fe05dd5b0fecb53782956ce.json new file mode 100644 index 0000000000000..50d30ab09a472 --- /dev/null +++ b/backend/.sqlx/query-d814833e31b3b3657c57dde1c8cd21896d6cb8256fe05dd5b0fecb53782956ce.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT name FROM group_ WHERE workspace_id = $1 UNION SELECT name FROM instance_group ORDER BY name desc", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "name", + "type_info": "Varchar" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + null + ] + }, + "hash": "d814833e31b3b3657c57dde1c8cd21896d6cb8256fe05dd5b0fecb53782956ce" +} diff --git a/backend/.sqlx/query-d860cd90e583e4666beb37b283bd990dbcb91b781728b5b6253051decfda83d6.json b/backend/.sqlx/query-d860cd90e583e4666beb37b283bd990dbcb91b781728b5b6253051decfda83d6.json new file mode 100644 index 0000000000000..149c649285a52 --- /dev/null +++ b/backend/.sqlx/query-d860cd90e583e4666beb37b283bd990dbcb91b781728b5b6253051decfda83d6.json @@ -0,0 +1,16 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO flow \n (workspace_id, path, summary, description, archived, extra_perms, dependency_job, draft_only, tag, ws_error_handler_muted, dedicated_worker, timeout, visible_to_runner_only, concurrency_key, versions, value, schema, edited_by, edited_at) \n SELECT workspace_id, $1, summary, description, archived, extra_perms, dependency_job, draft_only, tag, ws_error_handler_muted, dedicated_worker, timeout, visible_to_runner_only, concurrency_key, versions, value, schema, edited_by, edited_at\n FROM flow\n WHERE path = $2 AND workspace_id = $3", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "d860cd90e583e4666beb37b283bd990dbcb91b781728b5b6253051decfda83d6" +} diff --git a/backend/.sqlx/query-d9308c0154e029f7568b1d021368ca07f4867d192aa58b3888ae532d1c040828.json b/backend/.sqlx/query-d9308c0154e029f7568b1d021368ca07f4867d192aa58b3888ae532d1c040828.json new file mode 100644 index 0000000000000..879c18a45a31b --- /dev/null +++ b/backend/.sqlx/query-d9308c0154e029f7568b1d021368ca07f4867d192aa58b3888ae532d1c040828.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE workspace_settings SET error_handler = NULL, error_handler_extra_args = NULL WHERE workspace_id = $1", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [] + }, + "hash": "d9308c0154e029f7568b1d021368ca07f4867d192aa58b3888ae532d1c040828" +} diff --git a/backend/.sqlx/query-d970a0b07a2b5840d1feb1baacb834dbaf91c633d3e7e1e29c8eb7eedc53e888.json b/backend/.sqlx/query-d970a0b07a2b5840d1feb1baacb834dbaf91c633d3e7e1e29c8eb7eedc53e888.json new file mode 100644 index 0000000000000..c6324a22d5c2f --- /dev/null +++ b/backend/.sqlx/query-d970a0b07a2b5840d1feb1baacb834dbaf91c633d3e7e1e29c8eb7eedc53e888.json @@ -0,0 +1,17 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO workspace_invite\n (workspace_id, email, is_admin, operator)\n VALUES ($1, $2, $3, $4) ON CONFLICT (workspace_id, email)\n DO UPDATE SET is_admin = $3, operator = $4", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Varchar", + "Bool", + "Bool" + ] + }, + "nullable": [] + }, + "hash": "d970a0b07a2b5840d1feb1baacb834dbaf91c633d3e7e1e29c8eb7eedc53e888" +} diff --git a/backend/.sqlx/query-d9b32f819c87250962dae44e34d13b234e765b4b90b961e7db494f4c544c08ca.json b/backend/.sqlx/query-d9b32f819c87250962dae44e34d13b234e765b4b90b961e7db494f4c544c08ca.json new file mode 100644 index 0000000000000..7e1120ae855ca --- /dev/null +++ b/backend/.sqlx/query-d9b32f819c87250962dae44e34d13b234e765b4b90b961e7db494f4c544c08ca.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT logs FROM job_logs WHERE job_id = $1 AND workspace_id = $2", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "logs", + "type_info": "Text" + } + ], + "parameters": { + "Left": [ + "Uuid", + "Text" + ] + }, + "nullable": [ + true + ] + }, + "hash": "d9b32f819c87250962dae44e34d13b234e765b4b90b961e7db494f4c544c08ca" +} diff --git a/backend/.sqlx/query-d9c8f6ec7bd10e533876526255c15e376ccb4f898b9c0ab8840b2930bda24fdc.json b/backend/.sqlx/query-d9c8f6ec7bd10e533876526255c15e376ccb4f898b9c0ab8840b2930bda24fdc.json new file mode 100644 index 0000000000000..463a3f32f0931 --- /dev/null +++ b/backend/.sqlx/query-d9c8f6ec7bd10e533876526255c15e376ccb4f898b9c0ab8840b2930bda24fdc.json @@ -0,0 +1,41 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT * FROM group_ WHERE name = $1 AND workspace_id = $2", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "workspace_id", + "type_info": "Varchar" + }, + { + "ordinal": 1, + "name": "name", + "type_info": "Varchar" + }, + { + "ordinal": 2, + "name": "summary", + "type_info": "Text" + }, + { + "ordinal": 3, + "name": "extra_perms", + "type_info": "Jsonb" + } + ], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [ + false, + false, + true, + false + ] + }, + "hash": "d9c8f6ec7bd10e533876526255c15e376ccb4f898b9c0ab8840b2930bda24fdc" +} diff --git a/backend/.sqlx/query-db558b5ecdc4c3b1af0def511f1bcd91a548f00376f644c8ba38f73812b462d0.json b/backend/.sqlx/query-db558b5ecdc4c3b1af0def511f1bcd91a548f00376f644c8ba38f73812b462d0.json new file mode 100644 index 0000000000000..1e36101464502 --- /dev/null +++ b/backend/.sqlx/query-db558b5ecdc4c3b1af0def511f1bcd91a548f00376f644c8ba38f73812b462d0.json @@ -0,0 +1,17 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO deployment_metadata (workspace_id, path, script_hash, deployment_msg) VALUES ($1, $2, $3, $4) ON CONFLICT (workspace_id, script_hash) WHERE script_hash IS NOT NULL DO UPDATE SET deployment_msg = $4", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Varchar", + "Int8", + "Text" + ] + }, + "nullable": [] + }, + "hash": "db558b5ecdc4c3b1af0def511f1bcd91a548f00376f644c8ba38f73812b462d0" +} diff --git a/backend/.sqlx/query-dc649111c4c862c36c26ad8a9eff8c31c2533a4a73184d0276f9a388ff2fa574.json b/backend/.sqlx/query-dc649111c4c862c36c26ad8a9eff8c31c2533a4a73184d0276f9a388ff2fa574.json new file mode 100644 index 0000000000000..f6ec69af571cc --- /dev/null +++ b/backend/.sqlx/query-dc649111c4c862c36c26ad8a9eff8c31c2533a4a73184d0276f9a388ff2fa574.json @@ -0,0 +1,25 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO account (workspace_id, client, expires_at, refresh_token) VALUES ($1, $2, now() + ($3 || ' seconds')::interval, $4) RETURNING id", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "id", + "type_info": "Int4" + } + ], + "parameters": { + "Left": [ + "Varchar", + "Varchar", + "Text", + "Varchar" + ] + }, + "nullable": [ + false + ] + }, + "hash": "dc649111c4c862c36c26ad8a9eff8c31c2533a4a73184d0276f9a388ff2fa574" +} diff --git a/backend/.sqlx/query-dc96a920fcea89f4ba695fa3a1fa4d904069ef91467ece10c158af2430da1e39.json b/backend/.sqlx/query-dc96a920fcea89f4ba695fa3a1fa4d904069ef91467ece10c158af2430da1e39.json new file mode 100644 index 0000000000000..bda2f4187329c --- /dev/null +++ b/backend/.sqlx/query-dc96a920fcea89f4ba695fa3a1fa4d904069ef91467ece10c158af2430da1e39.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM email_to_igroup WHERE email = $1 AND igroup = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "dc96a920fcea89f4ba695fa3a1fa4d904069ef91467ece10c158af2430da1e39" +} diff --git a/backend/.sqlx/query-dc9a906d6c6156a84fccf4e3a2a7c08d8ed4984409b669162f0a1fc1aa48e188.json b/backend/.sqlx/query-dc9a906d6c6156a84fccf4e3a2a7c08d8ed4984409b669162f0a1fc1aa48e188.json new file mode 100644 index 0000000000000..03b0c561e19a1 --- /dev/null +++ b/backend/.sqlx/query-dc9a906d6c6156a84fccf4e3a2a7c08d8ed4984409b669162f0a1fc1aa48e188.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM http_trigger WHERE workspace_id = $1 AND path = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "dc9a906d6c6156a84fccf4e3a2a7c08d8ed4984409b669162f0a1fc1aa48e188" +} diff --git a/backend/.sqlx/query-dcf9e4087732c830278603a47eb1efe99bea1f2ad8770ed3f7dee349b6ec7a3e.json b/backend/.sqlx/query-dcf9e4087732c830278603a47eb1efe99bea1f2ad8770ed3f7dee349b6ec7a3e.json new file mode 100644 index 0000000000000..e1a5a0bf239d9 --- /dev/null +++ b/backend/.sqlx/query-dcf9e4087732c830278603a47eb1efe99bea1f2ad8770ed3f7dee349b6ec7a3e.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE password SET first_time_user = false WHERE email = $1", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [] + }, + "hash": "dcf9e4087732c830278603a47eb1efe99bea1f2ad8770ed3f7dee349b6ec7a3e" +} diff --git a/backend/.sqlx/query-dd7940ec390357b268d616e1880516ecc08d506db2109efcce840f096d7a594e.json b/backend/.sqlx/query-dd7940ec390357b268d616e1880516ecc08d506db2109efcce840f096d7a594e.json new file mode 100644 index 0000000000000..d141e106fc425 --- /dev/null +++ b/backend/.sqlx/query-dd7940ec390357b268d616e1880516ecc08d506db2109efcce840f096d7a594e.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT EXISTS(SELECT 1 FROM workspace WHERE id = $1)", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "exists", + "type_info": "Bool" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + null + ] + }, + "hash": "dd7940ec390357b268d616e1880516ecc08d506db2109efcce840f096d7a594e" +} diff --git a/backend/.sqlx/query-deb2e4c21d4f9d0b9439780ca6ebee13450609b578c469cb437c5420ab520258.json b/backend/.sqlx/query-deb2e4c21d4f9d0b9439780ca6ebee13450609b578c469cb437c5420ab520258.json new file mode 100644 index 0000000000000..54e871eb13fa2 --- /dev/null +++ b/backend/.sqlx/query-deb2e4c21d4f9d0b9439780ca6ebee13450609b578c469cb437c5420ab520258.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT content FROM script WHERE hash = $1 AND workspace_id = $2", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "content", + "type_info": "Text" + } + ], + "parameters": { + "Left": [ + "Int8", + "Text" + ] + }, + "nullable": [ + false + ] + }, + "hash": "deb2e4c21d4f9d0b9439780ca6ebee13450609b578c469cb437c5420ab520258" +} diff --git a/backend/.sqlx/query-dee32ce9c4010ae407b4d1ba2ecf2062c36ee5dab3d4894ad4b2aa8b2f5a0db9.json b/backend/.sqlx/query-dee32ce9c4010ae407b4d1ba2ecf2062c36ee5dab3d4894ad4b2aa8b2f5a0db9.json new file mode 100644 index 0000000000000..bb8d339e5501e --- /dev/null +++ b/backend/.sqlx/query-dee32ce9c4010ae407b4d1ba2ecf2062c36ee5dab3d4894ad4b2aa8b2f5a0db9.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT EXISTS(SELECT 1 FROM log_file WHERE hostname = $1 AND log_ts = $2)", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "exists", + "type_info": "Bool" + } + ], + "parameters": { + "Left": [ + "Text", + "Timestamp" + ] + }, + "nullable": [ + null + ] + }, + "hash": "dee32ce9c4010ae407b4d1ba2ecf2062c36ee5dab3d4894ad4b2aa8b2f5a0db9" +} diff --git a/backend/.sqlx/query-df1f1d15d442789a5b9c81cdddf44d88d5748499cc48865023ddc1ff1587d0f6.json b/backend/.sqlx/query-df1f1d15d442789a5b9c81cdddf44d88d5748499cc48865023ddc1ff1587d0f6.json new file mode 100644 index 0000000000000..7fe6da39230a4 --- /dev/null +++ b/backend/.sqlx/query-df1f1d15d442789a5b9c81cdddf44d88d5748499cc48865023ddc1ff1587d0f6.json @@ -0,0 +1,20 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT version()", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "version", + "type_info": "Text" + } + ], + "parameters": { + "Left": [] + }, + "nullable": [ + null + ] + }, + "hash": "df1f1d15d442789a5b9c81cdddf44d88d5748499cc48865023ddc1ff1587d0f6" +} diff --git a/backend/.sqlx/query-df8f9b2e601b0157759e9507308ea7df562a7a42516be0fcb465b8e34de0f438.json b/backend/.sqlx/query-df8f9b2e601b0157759e9507308ea7df562a7a42516be0fcb465b8e34de0f438.json new file mode 100644 index 0000000000000..8c96518669d97 --- /dev/null +++ b/backend/.sqlx/query-df8f9b2e601b0157759e9507308ea7df562a7a42516be0fcb465b8e34de0f438.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT EXISTS(SELECT 1 FROM workspace WHERE workspace.id = $1)", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "exists", + "type_info": "Bool" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + null + ] + }, + "hash": "df8f9b2e601b0157759e9507308ea7df562a7a42516be0fcb465b8e34de0f438" +} diff --git a/backend/.sqlx/query-e02b99525cb1f8737acfec86809f59c8cff67bb1ec3926680fb691cc3573738a.json b/backend/.sqlx/query-e02b99525cb1f8737acfec86809f59c8cff67bb1ec3926680fb691cc3573738a.json new file mode 100644 index 0000000000000..d600d8069a8ba --- /dev/null +++ b/backend/.sqlx/query-e02b99525cb1f8737acfec86809f59c8cff67bb1ec3926680fb691cc3573738a.json @@ -0,0 +1,16 @@ +{ + "db_name": "PostgreSQL", + "query": "\n DELETE FROM capture\n WHERE workspace_id = $1\n AND created_by = $2\n AND created_at <=\n ( SELECT created_at\n FROM capture\n WHERE workspace_id = $1\n AND created_by = $2\n ORDER BY created_at DESC\n OFFSET $3\n LIMIT 1 )\n ", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Text", + "Int8" + ] + }, + "nullable": [] + }, + "hash": "e02b99525cb1f8737acfec86809f59c8cff67bb1ec3926680fb691cc3573738a" +} diff --git a/backend/.sqlx/query-e03b8e0360ed7c282742b9b8657abdeecb3fec75bf10773544339bd025fc45bb.json b/backend/.sqlx/query-e03b8e0360ed7c282742b9b8657abdeecb3fec75bf10773544339bd025fc45bb.json new file mode 100644 index 0000000000000..e17fd3f203370 --- /dev/null +++ b/backend/.sqlx/query-e03b8e0360ed7c282742b9b8657abdeecb3fec75bf10773544339bd025fc45bb.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT script_path FROM completed_job WHERE id = $1", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "script_path", + "type_info": "Varchar" + } + ], + "parameters": { + "Left": [ + "Uuid" + ] + }, + "nullable": [ + true + ] + }, + "hash": "e03b8e0360ed7c282742b9b8657abdeecb3fec75bf10773544339bd025fc45bb" +} diff --git a/backend/.sqlx/query-e207bbcdd478758562e3082330836d6efe1dd6c4f719bc415222eba78d5e63fc.json b/backend/.sqlx/query-e207bbcdd478758562e3082330836d6efe1dd6c4f719bc415222eba78d5e63fc.json new file mode 100644 index 0000000000000..ac91e4f1d1630 --- /dev/null +++ b/backend/.sqlx/query-e207bbcdd478758562e3082330836d6efe1dd6c4f719bc415222eba78d5e63fc.json @@ -0,0 +1,20 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT id FROM queue", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "id", + "type_info": "Uuid" + } + ], + "parameters": { + "Left": [] + }, + "nullable": [ + false + ] + }, + "hash": "e207bbcdd478758562e3082330836d6efe1dd6c4f719bc415222eba78d5e63fc" +} diff --git a/backend/.sqlx/query-e262f83b672a558092dc959b28a919f18e44b2a0d03b27b0ddba99896940c6d3.json b/backend/.sqlx/query-e262f83b672a558092dc959b28a919f18e44b2a0d03b27b0ddba99896940c6d3.json new file mode 100644 index 0000000000000..d396d90702d52 --- /dev/null +++ b/backend/.sqlx/query-e262f83b672a558092dc959b28a919f18e44b2a0d03b27b0ddba99896940c6d3.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT EXISTS (SELECT 1 FROM flow WHERE path = $1 AND workspace_id = $2)", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "exists", + "type_info": "Bool" + } + ], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [ + null + ] + }, + "hash": "e262f83b672a558092dc959b28a919f18e44b2a0d03b27b0ddba99896940c6d3" +} diff --git a/backend/.sqlx/query-e38240e6d50bfe60e1c2b649588eb41dcef121ed161db04b2568ac2d990aed7c.json b/backend/.sqlx/query-e38240e6d50bfe60e1c2b649588eb41dcef121ed161db04b2568ac2d990aed7c.json new file mode 100644 index 0000000000000..1ff35d722792f --- /dev/null +++ b/backend/.sqlx/query-e38240e6d50bfe60e1c2b649588eb41dcef121ed161db04b2568ac2d990aed7c.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO usage (id, is_workspace, month_, usage) \n VALUES ($1, FALSE, EXTRACT(YEAR FROM current_date) * 12 + EXTRACT(MONTH FROM current_date), $2) \n ON CONFLICT (id, is_workspace, month_) DO UPDATE SET usage = usage.usage + $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Int4" + ] + }, + "nullable": [] + }, + "hash": "e38240e6d50bfe60e1c2b649588eb41dcef121ed161db04b2568ac2d990aed7c" +} diff --git a/backend/.sqlx/query-e38dd0f093636efa2ec1cda4618fc104f7b8ea88130692ce9c1390bda289627a.json b/backend/.sqlx/query-e38dd0f093636efa2ec1cda4618fc104f7b8ea88130692ce9c1390bda289627a.json new file mode 100644 index 0000000000000..63f8295ef6c37 --- /dev/null +++ b/backend/.sqlx/query-e38dd0f093636efa2ec1cda4618fc104f7b8ea88130692ce9c1390bda289627a.json @@ -0,0 +1,16 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE script SET extra_perms = extra_perms - ('u/' || $2) || jsonb_build_object(('u/' || $1), extra_perms->('u/' || $2)) WHERE extra_perms ? ('u/' || $2) AND workspace_id = $3", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "e38dd0f093636efa2ec1cda4618fc104f7b8ea88130692ce9c1390bda289627a" +} diff --git a/backend/.sqlx/query-e3ac59fcf6193007a21c808a275d3d84fd76e44f9240f4292c5c1208096b8563.json b/backend/.sqlx/query-e3ac59fcf6193007a21c808a275d3d84fd76e44f9240f4292c5c1208096b8563.json new file mode 100644 index 0000000000000..e8cba862fe4e3 --- /dev/null +++ b/backend/.sqlx/query-e3ac59fcf6193007a21c808a275d3d84fd76e44f9240f4292c5c1208096b8563.json @@ -0,0 +1,29 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT lock, lock_error_logs FROM script WHERE hash = $1 AND workspace_id = $2", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "lock", + "type_info": "Text" + }, + { + "ordinal": 1, + "name": "lock_error_logs", + "type_info": "Text" + } + ], + "parameters": { + "Left": [ + "Int8", + "Text" + ] + }, + "nullable": [ + true, + true + ] + }, + "hash": "e3ac59fcf6193007a21c808a275d3d84fd76e44f9240f4292c5c1208096b8563" +} diff --git a/backend/.sqlx/query-e3eeda2e19bfbfd5aadd71c40774f7e93c8479a777fdb2828607b1db36361726.json b/backend/.sqlx/query-e3eeda2e19bfbfd5aadd71c40774f7e93c8479a777fdb2828607b1db36361726.json new file mode 100644 index 0000000000000..cf6d64f9f587d --- /dev/null +++ b/backend/.sqlx/query-e3eeda2e19bfbfd5aadd71c40774f7e93c8479a777fdb2828607b1db36361726.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO usr_to_group\n VALUES ($1, 'all', $2)", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Varchar" + ] + }, + "nullable": [] + }, + "hash": "e3eeda2e19bfbfd5aadd71c40774f7e93c8479a777fdb2828607b1db36361726" +} diff --git a/backend/.sqlx/query-e40f7e0b61567f948bfea0b6f50518564634885ccc2c0d30ccca79fc13bdcf07.json b/backend/.sqlx/query-e40f7e0b61567f948bfea0b6f50518564634885ccc2c0d30ccca79fc13bdcf07.json new file mode 100644 index 0000000000000..be7ab6923c7c2 --- /dev/null +++ b/backend/.sqlx/query-e40f7e0b61567f948bfea0b6f50518564634885ccc2c0d30ccca79fc13bdcf07.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO tutorial_progress VALUES ($2, $1::bigint::bit(64)) ON CONFLICT (email) DO UPDATE SET progress = $1::bigint::bit(64)", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Int8", + "Varchar" + ] + }, + "nullable": [] + }, + "hash": "e40f7e0b61567f948bfea0b6f50518564634885ccc2c0d30ccca79fc13bdcf07" +} diff --git a/backend/.sqlx/query-e500a422fa986faf5c612c08f4a139e10b25a3106551e7c92f43dcf9758a5ec7.json b/backend/.sqlx/query-e500a422fa986faf5c612c08f4a139e10b25a3106551e7c92f43dcf9758a5ec7.json new file mode 100644 index 0000000000000..f249de4dc9ed5 --- /dev/null +++ b/backend/.sqlx/query-e500a422fa986faf5c612c08f4a139e10b25a3106551e7c92f43dcf9758a5ec7.json @@ -0,0 +1,24 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE folder SET owners = array_remove(owners, $1::varchar) WHERE name = $2 AND workspace_id = $3 RETURNING name", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "name", + "type_info": "Varchar" + } + ], + "parameters": { + "Left": [ + "Varchar", + "Text", + "Text" + ] + }, + "nullable": [ + false + ] + }, + "hash": "e500a422fa986faf5c612c08f4a139e10b25a3106551e7c92f43dcf9758a5ec7" +} diff --git a/backend/.sqlx/query-e517ebdbb5c81ea0cb7355aaea0c17ad9a45ddc77f236399b453f9ddb93acecd.json b/backend/.sqlx/query-e517ebdbb5c81ea0cb7355aaea0c17ad9a45ddc77f236399b453f9ddb93acecd.json new file mode 100644 index 0000000000000..7ac02be92300d --- /dev/null +++ b/backend/.sqlx/query-e517ebdbb5c81ea0cb7355aaea0c17ad9a45ddc77f236399b453f9ddb93acecd.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM deployment_metadata WHERE path = $1 AND workspace_id = $2 AND script_hash IS NULL and app_version IS NULL", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "e517ebdbb5c81ea0cb7355aaea0c17ad9a45ddc77f236399b453f9ddb93acecd" +} diff --git a/backend/.sqlx/query-e5231634fbb37d45e5cf3e5dfb39cb829d224caad1c3ca1712d0fc4c495aa4fc.json b/backend/.sqlx/query-e5231634fbb37d45e5cf3e5dfb39cb829d224caad1c3ca1712d0fc4c495aa4fc.json new file mode 100644 index 0000000000000..dea607fddc817 --- /dev/null +++ b/backend/.sqlx/query-e5231634fbb37d45e5cf3e5dfb39cb829d224caad1c3ca1712d0fc4c495aa4fc.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT hash FROM script WHERE parent_hashes[1] = $1 AND workspace_id = $2", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "hash", + "type_info": "Int8" + } + ], + "parameters": { + "Left": [ + "Int8", + "Text" + ] + }, + "nullable": [ + false + ] + }, + "hash": "e5231634fbb37d45e5cf3e5dfb39cb829d224caad1c3ca1712d0fc4c495aa4fc" +} diff --git a/backend/.sqlx/query-e533518bd272a0643529f101b1d1dcbd6287494cc87b90487d917bc56bfcf1c1.json b/backend/.sqlx/query-e533518bd272a0643529f101b1d1dcbd6287494cc87b90487d917bc56bfcf1c1.json new file mode 100644 index 0000000000000..212a4fac57b41 --- /dev/null +++ b/backend/.sqlx/query-e533518bd272a0643529f101b1d1dcbd6287494cc87b90487d917bc56bfcf1c1.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM workspace_invite WHERE workspace_id = $1", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [] + }, + "hash": "e533518bd272a0643529f101b1d1dcbd6287494cc87b90487d917bc56bfcf1c1" +} diff --git a/backend/.sqlx/query-e58cf2e3deb9aa1e9f37313a33e5d44fcfdb40a4764e1dc34896bd85b3d007f9.json b/backend/.sqlx/query-e58cf2e3deb9aa1e9f37313a33e5d44fcfdb40a4764e1dc34896bd85b3d007f9.json new file mode 100644 index 0000000000000..ab1bd399ea02a --- /dev/null +++ b/backend/.sqlx/query-e58cf2e3deb9aa1e9f37313a33e5d44fcfdb40a4764e1dc34896bd85b3d007f9.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT success FROM completed_job WHERE id = ANY($1)", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "success", + "type_info": "Bool" + } + ], + "parameters": { + "Left": [ + "UuidArray" + ] + }, + "nullable": [ + false + ] + }, + "hash": "e58cf2e3deb9aa1e9f37313a33e5d44fcfdb40a4764e1dc34896bd85b3d007f9" +} diff --git a/backend/.sqlx/query-e6f85cdbe681ace495fde31e67339dc58460b6914440473fe94de7a7bc292af4.json b/backend/.sqlx/query-e6f85cdbe681ace495fde31e67339dc58460b6914440473fe94de7a7bc292af4.json new file mode 100644 index 0000000000000..b35f375b8c144 --- /dev/null +++ b/backend/.sqlx/query-e6f85cdbe681ace495fde31e67339dc58460b6914440473fe94de7a7bc292af4.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM completed_job WHERE workspace_id = $1", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [] + }, + "hash": "e6f85cdbe681ace495fde31e67339dc58460b6914440473fe94de7a7bc292af4" +} diff --git a/backend/.sqlx/query-e7a1c2b5d79e72f557181782419a9d8d1a502796842f185374d2d0f69043086b.json b/backend/.sqlx/query-e7a1c2b5d79e72f557181782419a9d8d1a502796842f185374d2d0f69043086b.json new file mode 100644 index 0000000000000..829d4f6768539 --- /dev/null +++ b/backend/.sqlx/query-e7a1c2b5d79e72f557181782419a9d8d1a502796842f185374d2d0f69043086b.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT COUNT(id) FROM queue WHERE workspace_id = $1", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "count", + "type_info": "Int8" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + null + ] + }, + "hash": "e7a1c2b5d79e72f557181782419a9d8d1a502796842f185374d2d0f69043086b" +} diff --git a/backend/.sqlx/query-e822d186203fe809b764007ad7c02870a3b7d93ae43b40ac2cd3181dffab0837.json b/backend/.sqlx/query-e822d186203fe809b764007ad7c02870a3b7d93ae43b40ac2cd3181dffab0837.json new file mode 100644 index 0000000000000..8974494ddd57d --- /dev/null +++ b/backend/.sqlx/query-e822d186203fe809b764007ad7c02870a3b7d93ae43b40ac2cd3181dffab0837.json @@ -0,0 +1,17 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO usr (workspace_id, username, email, is_admin, operator) VALUES ($1, $2, $3, false, $4) ON CONFLICT DO NOTHING", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Varchar", + "Varchar", + "Bool" + ] + }, + "nullable": [] + }, + "hash": "e822d186203fe809b764007ad7c02870a3b7d93ae43b40ac2cd3181dffab0837" +} diff --git a/backend/.sqlx/query-e838b15953b567af2a2da6a4e3a04add5ec2cacabd93171a97c5fc978a64f8aa.json b/backend/.sqlx/query-e838b15953b567af2a2da6a4e3a04add5ec2cacabd93171a97c5fc978a64f8aa.json new file mode 100644 index 0000000000000..4f0dcde6d01fc --- /dev/null +++ b/backend/.sqlx/query-e838b15953b567af2a2da6a4e3a04add5ec2cacabd93171a97c5fc978a64f8aa.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM password WHERE email = $1", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [] + }, + "hash": "e838b15953b567af2a2da6a4e3a04add5ec2cacabd93171a97c5fc978a64f8aa" +} diff --git a/backend/.sqlx/query-e87d4e8d6b52a92537b02a02631a393a2f8b17a5678a1f4f9326db86b417e468.json b/backend/.sqlx/query-e87d4e8d6b52a92537b02a02631a393a2f8b17a5678a1f4f9326db86b417e468.json new file mode 100644 index 0000000000000..fd4218d7610fa --- /dev/null +++ b/backend/.sqlx/query-e87d4e8d6b52a92537b02a02631a393a2f8b17a5678a1f4f9326db86b417e468.json @@ -0,0 +1,20 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT COUNT(*) FROM workspace WHERE id != 'admins' AND deleted = false", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "count", + "type_info": "Int8" + } + ], + "parameters": { + "Left": [] + }, + "nullable": [ + null + ] + }, + "hash": "e87d4e8d6b52a92537b02a02631a393a2f8b17a5678a1f4f9326db86b417e468" +} diff --git a/backend/.sqlx/query-e92536776a1960fa739bbb01d5a8d1b451ff2689a95442bdf820c65f0a8412a5.json b/backend/.sqlx/query-e92536776a1960fa739bbb01d5a8d1b451ff2689a95442bdf820c65f0a8412a5.json new file mode 100644 index 0000000000000..a818fbdcc1bf8 --- /dev/null +++ b/backend/.sqlx/query-e92536776a1960fa739bbb01d5a8d1b451ff2689a95442bdf820c65f0a8412a5.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT value->>'js' FROM resource\n WHERE path = $1 AND workspace_id = $2", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "?column?", + "type_info": "Text" + } + ], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [ + null + ] + }, + "hash": "e92536776a1960fa739bbb01d5a8d1b451ff2689a95442bdf820c65f0a8412a5" +} diff --git a/backend/.sqlx/query-e968e879d3c52f7dd502c3cd15fc8fbd983a4a3ab25648c562497a27c74b5c8c.json b/backend/.sqlx/query-e968e879d3c52f7dd502c3cd15fc8fbd983a4a3ab25648c562497a27c74b5c8c.json new file mode 100644 index 0000000000000..3bacda16d936b --- /dev/null +++ b/backend/.sqlx/query-e968e879d3c52f7dd502c3cd15fc8fbd983a4a3ab25648c562497a27c74b5c8c.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE worker_ping SET ping_at = now(), current_job_id = $1, current_job_workspace_id = $2, memory_usage = $3, wm_memory_usage = $4,\n occupancy_rate = $6, occupancy_rate_15s = $7, occupancy_rate_5m = $8, occupancy_rate_30m = $9 WHERE worker = $5", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Uuid", + "Varchar", + "Int8", + "Int8", + "Text", + "Float4", + "Float4", + "Float4", + "Float4" + ] + }, + "nullable": [] + }, + "hash": "e968e879d3c52f7dd502c3cd15fc8fbd983a4a3ab25648c562497a27c74b5c8c" +} diff --git a/backend/.sqlx/query-e9d9edc030061c5ccf2fb4294acbbae160e97faede6934d90f4882d806c14813.json b/backend/.sqlx/query-e9d9edc030061c5ccf2fb4294acbbae160e97faede6934d90f4882d806c14813.json new file mode 100644 index 0000000000000..8b79600c5051a --- /dev/null +++ b/backend/.sqlx/query-e9d9edc030061c5ccf2fb4294acbbae160e97faede6934d90f4882d806c14813.json @@ -0,0 +1,16 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE completed_job SET canceled_by = $1 WHERE canceled_by = $2 AND workspace_id = $3", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "e9d9edc030061c5ccf2fb4294acbbae160e97faede6934d90f4882d806c14813" +} diff --git a/backend/.sqlx/query-ea1637af410b48f3673f64ae783dda41f946268be4ffbaacc7fc1865c8974628.json b/backend/.sqlx/query-ea1637af410b48f3673f64ae783dda41f946268be4ffbaacc7fc1865c8974628.json new file mode 100644 index 0000000000000..6dd90f09611cd --- /dev/null +++ b/backend/.sqlx/query-ea1637af410b48f3673f64ae783dda41f946268be4ffbaacc7fc1865c8974628.json @@ -0,0 +1,27 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM draft WHERE path = $1 AND typ = $2 AND workspace_id = $3", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + { + "Custom": { + "name": "draft_type", + "kind": { + "Enum": [ + "script", + "flow", + "app" + ] + } + } + }, + "Text" + ] + }, + "nullable": [] + }, + "hash": "ea1637af410b48f3673f64ae783dda41f946268be4ffbaacc7fc1865c8974628" +} diff --git a/backend/.sqlx/query-ea2b88dc050aec038641ea37399d68d4385c5bdc721d1351609f27ca45e4dbdc.json b/backend/.sqlx/query-ea2b88dc050aec038641ea37399d68d4385c5bdc721d1351609f27ca45e4dbdc.json new file mode 100644 index 0000000000000..1d30071300777 --- /dev/null +++ b/backend/.sqlx/query-ea2b88dc050aec038641ea37399d68d4385c5bdc721d1351609f27ca45e4dbdc.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT EXISTS(SELECT 1 FROM script WHERE path = $1 AND workspace_id = $2 AND\n created_at = (SELECT max(created_at) FROM script WHERE path = $1 AND workspace_id = $2))", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "exists", + "type_info": "Bool" + } + ], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [ + null + ] + }, + "hash": "ea2b88dc050aec038641ea37399d68d4385c5bdc721d1351609f27ca45e4dbdc" +} diff --git a/backend/.sqlx/query-eb1f7f01461f5a7540c273b37e5d578c31cf151ab3ef813f7aada76533761e12.json b/backend/.sqlx/query-eb1f7f01461f5a7540c273b37e5d578c31cf151ab3ef813f7aada76533761e12.json new file mode 100644 index 0000000000000..73c1fd7b2ce90 --- /dev/null +++ b/backend/.sqlx/query-eb1f7f01461f5a7540c273b37e5d578c31cf151ab3ef813f7aada76533761e12.json @@ -0,0 +1,56 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT * from resource_type ORDER BY name", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "workspace_id", + "type_info": "Varchar" + }, + { + "ordinal": 1, + "name": "name", + "type_info": "Varchar" + }, + { + "ordinal": 2, + "name": "schema", + "type_info": "Jsonb" + }, + { + "ordinal": 3, + "name": "description", + "type_info": "Text" + }, + { + "ordinal": 4, + "name": "edited_at", + "type_info": "Timestamptz" + }, + { + "ordinal": 5, + "name": "created_by", + "type_info": "Varchar" + }, + { + "ordinal": 6, + "name": "format_extension", + "type_info": "Varchar" + } + ], + "parameters": { + "Left": [] + }, + "nullable": [ + false, + false, + true, + true, + true, + true, + true + ] + }, + "hash": "eb1f7f01461f5a7540c273b37e5d578c31cf151ab3ef813f7aada76533761e12" +} diff --git a/backend/.sqlx/query-eb1f916f9beea3eea83ce359f5305d0cfb0d6cdba9cc56c6139f57e46345f843.json b/backend/.sqlx/query-eb1f916f9beea3eea83ce359f5305d0cfb0d6cdba9cc56c6139f57e46345f843.json new file mode 100644 index 0000000000000..ecd83ae2e3d7d --- /dev/null +++ b/backend/.sqlx/query-eb1f916f9beea3eea83ce359f5305d0cfb0d6cdba9cc56c6139f57e46345f843.json @@ -0,0 +1,20 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT EXISTS(SELECT name FROM windmill_migrations WHERE name = 'bypassrls_1-2')", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "exists", + "type_info": "Bool" + } + ], + "parameters": { + "Left": [] + }, + "nullable": [ + null + ] + }, + "hash": "eb1f916f9beea3eea83ce359f5305d0cfb0d6cdba9cc56c6139f57e46345f843" +} diff --git a/backend/.sqlx/query-eb610cc508048cdcc030369784c274c828d67ee46ae7260b3c2fb04901b782f2.json b/backend/.sqlx/query-eb610cc508048cdcc030369784c274c828d67ee46ae7260b3c2fb04901b782f2.json new file mode 100644 index 0000000000000..8f61a30dd7385 --- /dev/null +++ b/backend/.sqlx/query-eb610cc508048cdcc030369784c274c828d67ee46ae7260b3c2fb04901b782f2.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT right(logs, 600) FROM job_logs WHERE job_id = $1 AND workspace_id = $2 ORDER BY created_at DESC LIMIT 1", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "right", + "type_info": "Text" + } + ], + "parameters": { + "Left": [ + "Uuid", + "Text" + ] + }, + "nullable": [ + null + ] + }, + "hash": "eb610cc508048cdcc030369784c274c828d67ee46ae7260b3c2fb04901b782f2" +} diff --git a/backend/.sqlx/query-ec3359bbc309c2b893e9f68c09c9f61501068f4b027f58279e0c8508839607f4.json b/backend/.sqlx/query-ec3359bbc309c2b893e9f68c09c9f61501068f4b027f58279e0c8508839607f4.json new file mode 100644 index 0000000000000..b2fa44659be56 --- /dev/null +++ b/backend/.sqlx/query-ec3359bbc309c2b893e9f68c09c9f61501068f4b027f58279e0c8508839607f4.json @@ -0,0 +1,35 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT importer_path, importer_kind::text, array_agg(importer_node_id) as importer_node_ids FROM dependency_map\n WHERE imported_path = $1\n AND workspace_id = $2\n GROUP BY importer_path, importer_kind", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "importer_path", + "type_info": "Varchar" + }, + { + "ordinal": 1, + "name": "importer_kind", + "type_info": "Text" + }, + { + "ordinal": 2, + "name": "importer_node_ids", + "type_info": "VarcharArray" + } + ], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [ + false, + null, + null + ] + }, + "hash": "ec3359bbc309c2b893e9f68c09c9f61501068f4b027f58279e0c8508839607f4" +} diff --git a/backend/.sqlx/query-ec47955683d811b12e82ff3e6aeafa0df46a320c436bad5eb1acc127df138a61.json b/backend/.sqlx/query-ec47955683d811b12e82ff3e6aeafa0df46a320c436bad5eb1acc127df138a61.json new file mode 100644 index 0000000000000..2ed5e047dbe2a --- /dev/null +++ b/backend/.sqlx/query-ec47955683d811b12e82ff3e6aeafa0df46a320c436bad5eb1acc127df138a61.json @@ -0,0 +1,16 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE script SET lock = $1, created_at = now() WHERE hash = $2 AND workspace_id = $3", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Int8", + "Text" + ] + }, + "nullable": [] + }, + "hash": "ec47955683d811b12e82ff3e6aeafa0df46a320c436bad5eb1acc127df138a61" +} diff --git a/backend/.sqlx/query-ec4f70d9e6392ade016245de73e7a2831d430838307b086c96511f91e76a214a.json b/backend/.sqlx/query-ec4f70d9e6392ade016245de73e7a2831d430838307b086c96511f91e76a214a.json new file mode 100644 index 0000000000000..3f39f6beff147 --- /dev/null +++ b/backend/.sqlx/query-ec4f70d9e6392ade016245de73e7a2831d430838307b086c96511f91e76a214a.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE workspace_settings SET git_sync = $1 WHERE workspace_id = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Jsonb", + "Text" + ] + }, + "nullable": [] + }, + "hash": "ec4f70d9e6392ade016245de73e7a2831d430838307b086c96511f91e76a214a" +} diff --git a/backend/.sqlx/query-ec85a425f88044c6ed4f8fcea223c28eb9fb8c16c89a52d4c4552bd149badafa.json b/backend/.sqlx/query-ec85a425f88044c6ed4f8fcea223c28eb9fb8c16c89a52d4c4552bd149badafa.json new file mode 100644 index 0000000000000..e5b1dbd51da85 --- /dev/null +++ b/backend/.sqlx/query-ec85a425f88044c6ed4f8fcea223c28eb9fb8c16c89a52d4c4552bd149badafa.json @@ -0,0 +1,29 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM workspace_invite WHERE workspace_id = $1 AND email = $2 RETURNING is_admin, operator", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "is_admin", + "type_info": "Bool" + }, + { + "ordinal": 1, + "name": "operator", + "type_info": "Bool" + } + ], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [ + false, + false + ] + }, + "hash": "ec85a425f88044c6ed4f8fcea223c28eb9fb8c16c89a52d4c4552bd149badafa" +} diff --git a/backend/.sqlx/query-ed1a053c7b22d9cb69767be40d33f3be67b6160cd258c86b8e8f22a6d601afd0.json b/backend/.sqlx/query-ed1a053c7b22d9cb69767be40d33f3be67b6160cd258c86b8e8f22a6d601afd0.json new file mode 100644 index 0000000000000..b7c642ef12680 --- /dev/null +++ b/backend/.sqlx/query-ed1a053c7b22d9cb69767be40d33f3be67b6160cd258c86b8e8f22a6d601afd0.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT default_app FROM workspace_settings WHERE workspace_id = $1", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "default_app", + "type_info": "Varchar" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + true + ] + }, + "hash": "ed1a053c7b22d9cb69767be40d33f3be67b6160cd258c86b8e8f22a6d601afd0" +} diff --git a/backend/.sqlx/query-ed5764ead5e8f433adfe666976664876b22dcb2b34dcd99f1e44cd03cb9ab4ef.json b/backend/.sqlx/query-ed5764ead5e8f433adfe666976664876b22dcb2b34dcd99f1e44cd03cb9ab4ef.json new file mode 100644 index 0000000000000..c69242b3b253a --- /dev/null +++ b/backend/.sqlx/query-ed5764ead5e8f433adfe666976664876b22dcb2b34dcd99f1e44cd03cb9ab4ef.json @@ -0,0 +1,29 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT value->>'name' as name, path from resource WHERE resource_type = $1 AND workspace_id = $2", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "name", + "type_info": "Text" + }, + { + "ordinal": 1, + "name": "path", + "type_info": "Varchar" + } + ], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [ + null, + false + ] + }, + "hash": "ed5764ead5e8f433adfe666976664876b22dcb2b34dcd99f1e44cd03cb9ab4ef" +} diff --git a/backend/.sqlx/query-ee99cb974fb35d2d92fa96cecb53b8ad3a729ac710f362dc55a576613b66f9be.json b/backend/.sqlx/query-ee99cb974fb35d2d92fa96cecb53b8ad3a729ac710f362dc55a576613b66f9be.json new file mode 100644 index 0000000000000..66224b89101f2 --- /dev/null +++ b/backend/.sqlx/query-ee99cb974fb35d2d92fa96cecb53b8ad3a729ac710f362dc55a576613b66f9be.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT EXISTS(SELECT 1 FROM schedule WHERE path = $1 AND workspace_id = $2)", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "exists", + "type_info": "Bool" + } + ], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [ + null + ] + }, + "hash": "ee99cb974fb35d2d92fa96cecb53b8ad3a729ac710f362dc55a576613b66f9be" +} diff --git a/backend/.sqlx/query-ef0f4447498a117e4495ed9335d803403ad0055efb6da4bdd467b4ac9bf4e478.json b/backend/.sqlx/query-ef0f4447498a117e4495ed9335d803403ad0055efb6da4bdd467b4ac9bf4e478.json new file mode 100644 index 0000000000000..8e10da3f7b819 --- /dev/null +++ b/backend/.sqlx/query-ef0f4447498a117e4495ed9335d803403ad0055efb6da4bdd467b4ac9bf4e478.json @@ -0,0 +1,34 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT name, summary, array_remove(array_agg(email_to_igroup.email), null) as emails FROM email_to_igroup RIGHT JOIN instance_group ON instance_group.name = email_to_igroup.igroup WHERE name = $1 GROUP BY name", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "name", + "type_info": "Varchar" + }, + { + "ordinal": 1, + "name": "summary", + "type_info": "Varchar" + }, + { + "ordinal": 2, + "name": "emails", + "type_info": "VarcharArray" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + false, + true, + null + ] + }, + "hash": "ef0f4447498a117e4495ed9335d803403ad0055efb6da4bdd467b4ac9bf4e478" +} diff --git a/backend/.sqlx/query-ef6795d93423f98eea82eb18e6332580dc7f7a9e5a67026f8c0b3077f371fc62.json b/backend/.sqlx/query-ef6795d93423f98eea82eb18e6332580dc7f7a9e5a67026f8c0b3077f371fc62.json new file mode 100644 index 0000000000000..08c585194455b --- /dev/null +++ b/backend/.sqlx/query-ef6795d93423f98eea82eb18e6332580dc7f7a9e5a67026f8c0b3077f371fc62.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT hash FROM script WHERE path = $1", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "hash", + "type_info": "Int8" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + false + ] + }, + "hash": "ef6795d93423f98eea82eb18e6332580dc7f7a9e5a67026f8c0b3077f371fc62" +} diff --git a/backend/.sqlx/query-f04fa0262091c5a4abf7dddafeec1b34ed806dda70592b0030067aed46a104d9.json b/backend/.sqlx/query-f04fa0262091c5a4abf7dddafeec1b34ed806dda70592b0030067aed46a104d9.json new file mode 100644 index 0000000000000..58fec1a0d0435 --- /dev/null +++ b/backend/.sqlx/query-f04fa0262091c5a4abf7dddafeec1b34ed806dda70592b0030067aed46a104d9.json @@ -0,0 +1,41 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT created_by, CONCAT(coalesce(completed_job.logs, ''), coalesce(job_logs.logs, '')) as logs, job_logs.log_offset, job_logs.log_file_index\n FROM completed_job\n LEFT JOIN job_logs ON job_logs.job_id = completed_job.id\n WHERE completed_job.id = $1 AND completed_job.workspace_id = $2", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "created_by", + "type_info": "Varchar" + }, + { + "ordinal": 1, + "name": "logs", + "type_info": "Text" + }, + { + "ordinal": 2, + "name": "log_offset", + "type_info": "Int4" + }, + { + "ordinal": 3, + "name": "log_file_index", + "type_info": "TextArray" + } + ], + "parameters": { + "Left": [ + "Uuid", + "Text" + ] + }, + "nullable": [ + false, + null, + false, + true + ] + }, + "hash": "f04fa0262091c5a4abf7dddafeec1b34ed806dda70592b0030067aed46a104d9" +} diff --git a/backend/.sqlx/query-f095f413aef2ad008f4cb3d6c9517ce8abb1fa3b34e6a62864ec37ab9442de9d.json b/backend/.sqlx/query-f095f413aef2ad008f4cb3d6c9517ce8abb1fa3b34e6a62864ec37ab9442de9d.json new file mode 100644 index 0000000000000..877e23350f00a --- /dev/null +++ b/backend/.sqlx/query-f095f413aef2ad008f4cb3d6c9517ce8abb1fa3b34e6a62864ec37ab9442de9d.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM flow WHERE path LIKE ('u/' || $1 || '/%') AND workspace_id = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "f095f413aef2ad008f4cb3d6c9517ce8abb1fa3b34e6a62864ec37ab9442de9d" +} diff --git a/backend/.sqlx/query-f1e65e52585b27bfb39817e82613063e168f10a53d56f222c7917aeba020fff3.json b/backend/.sqlx/query-f1e65e52585b27bfb39817e82613063e168f10a53d56f222c7917aeba020fff3.json new file mode 100644 index 0000000000000..7a578ce15c930 --- /dev/null +++ b/backend/.sqlx/query-f1e65e52585b27bfb39817e82613063e168f10a53d56f222c7917aeba020fff3.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM email_to_igroup WHERE igroup = $1", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [] + }, + "hash": "f1e65e52585b27bfb39817e82613063e168f10a53d56f222c7917aeba020fff3" +} diff --git a/backend/.sqlx/query-f2173822c1b3d82afedf0f7dba31e218539f0b259eb5f2c98e4e8ada6665f5ee.json b/backend/.sqlx/query-f2173822c1b3d82afedf0f7dba31e218539f0b259eb5f2c98e4e8ada6665f5ee.json new file mode 100644 index 0000000000000..4490ba97a1657 --- /dev/null +++ b/backend/.sqlx/query-f2173822c1b3d82afedf0f7dba31e218539f0b259eb5f2c98e4e8ada6665f5ee.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT no_flow_overlap FROM schedule WHERE path = $1 AND workspace_id = $2", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "no_flow_overlap", + "type_info": "Bool" + } + ], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [ + false + ] + }, + "hash": "f2173822c1b3d82afedf0f7dba31e218539f0b259eb5f2c98e4e8ada6665f5ee" +} diff --git a/backend/.sqlx/query-f2485c69b3ab6bec11c4e1eac2934d6e49f83b71a72fe74eba7b49abc225df7c.json b/backend/.sqlx/query-f2485c69b3ab6bec11c4e1eac2934d6e49f83b71a72fe74eba7b49abc225df7c.json new file mode 100644 index 0000000000000..84bd36e8b99db --- /dev/null +++ b/backend/.sqlx/query-f2485c69b3ab6bec11c4e1eac2934d6e49f83b71a72fe74eba7b49abc225df7c.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT distinct(path) FROM script WHERE workspace_id = $1", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "path", + "type_info": "Varchar" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + false + ] + }, + "hash": "f2485c69b3ab6bec11c4e1eac2934d6e49f83b71a72fe74eba7b49abc225df7c" +} diff --git a/backend/.sqlx/query-f2d85395311fd9b3293fc4d23644ab486d6f0bf633c2cc38ace9c1f1cd12ea80.json b/backend/.sqlx/query-f2d85395311fd9b3293fc4d23644ab486d6f0bf633c2cc38ace9c1f1cd12ea80.json new file mode 100644 index 0000000000000..5842cbab2c98c --- /dev/null +++ b/backend/.sqlx/query-f2d85395311fd9b3293fc4d23644ab486d6f0bf633c2cc38ace9c1f1cd12ea80.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO pending_user (email, username) VALUES ($1, $2)", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Varchar" + ] + }, + "nullable": [] + }, + "hash": "f2d85395311fd9b3293fc4d23644ab486d6f0bf633c2cc38ace9c1f1cd12ea80" +} diff --git a/backend/.sqlx/query-f2f42aded6f1a400c84e2575abb551dfcd9260714eef333a85b1e5d7d5c9f67e.json b/backend/.sqlx/query-f2f42aded6f1a400c84e2575abb551dfcd9260714eef333a85b1e5d7d5c9f67e.json new file mode 100644 index 0000000000000..762a7c81e25a0 --- /dev/null +++ b/backend/.sqlx/query-f2f42aded6f1a400c84e2575abb551dfcd9260714eef333a85b1e5d7d5c9f67e.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT deploy_to FROM workspace_settings WHERE workspace_id = $1", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "deploy_to", + "type_info": "Varchar" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + true + ] + }, + "hash": "f2f42aded6f1a400c84e2575abb551dfcd9260714eef333a85b1e5d7d5c9f67e" +} diff --git a/backend/.sqlx/query-f325a1262084bd3468e12dc8bcc289a96536f172b679af54dd0fbc82d4d7c987.json b/backend/.sqlx/query-f325a1262084bd3468e12dc8bcc289a96536f172b679af54dd0fbc82d4d7c987.json new file mode 100644 index 0000000000000..afdf89425cd61 --- /dev/null +++ b/backend/.sqlx/query-f325a1262084bd3468e12dc8bcc289a96536f172b679af54dd0fbc82d4d7c987.json @@ -0,0 +1,16 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM usr_to_group WHERE usr = $1 AND group_ = $2 AND workspace_id = $3", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "f325a1262084bd3468e12dc8bcc289a96536f172b679af54dd0fbc82d4d7c987" +} diff --git a/backend/.sqlx/query-f33dd637181439ba7fa441dbd7d7430c1ccc0f410c377cde71c70c9211f9c1df.json b/backend/.sqlx/query-f33dd637181439ba7fa441dbd7d7430c1ccc0f410c377cde71c70c9211f9c1df.json new file mode 100644 index 0000000000000..536a8116f44fc --- /dev/null +++ b/backend/.sqlx/query-f33dd637181439ba7fa441dbd7d7430c1ccc0f410c377cde71c70c9211f9c1df.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT parent_job FROM queue WHERE id = $1 AND workspace_id = $2", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "parent_job", + "type_info": "Uuid" + } + ], + "parameters": { + "Left": [ + "Uuid", + "Text" + ] + }, + "nullable": [ + true + ] + }, + "hash": "f33dd637181439ba7fa441dbd7d7430c1ccc0f410c377cde71c70c9211f9c1df" +} diff --git a/backend/.sqlx/query-f362c8bb2e214f218115a9c2808d01427d43581ad11cc492f59363aaea730788.json b/backend/.sqlx/query-f362c8bb2e214f218115a9c2808d01427d43581ad11cc492f59363aaea730788.json new file mode 100644 index 0000000000000..255def8b784e7 --- /dev/null +++ b/backend/.sqlx/query-f362c8bb2e214f218115a9c2808d01427d43581ad11cc492f59363aaea730788.json @@ -0,0 +1,16 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE app_version SET created_by = $1 WHERE created_by = $2 AND EXISTS (SELECT 1 FROM app WHERE workspace_id = $3 AND app.id = app_version.app_id)", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "f362c8bb2e214f218115a9c2808d01427d43581ad11cc492f59363aaea730788" +} diff --git a/backend/.sqlx/query-f367a1c8f80dd414dcbcd949374eeb5770796f00b5b3d547163bcfdaed65d8ae.json b/backend/.sqlx/query-f367a1c8f80dd414dcbcd949374eeb5770796f00b5b3d547163bcfdaed65d8ae.json new file mode 100644 index 0000000000000..776443782e4d4 --- /dev/null +++ b/backend/.sqlx/query-f367a1c8f80dd414dcbcd949374eeb5770796f00b5b3d547163bcfdaed65d8ae.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO outstanding_wait_time(job_id, self_wait_time_ms) VALUES ($1, $2)\n ON CONFLICT (job_id) DO UPDATE SET self_wait_time_ms = EXCLUDED.self_wait_time_ms", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Uuid", + "Int8" + ] + }, + "nullable": [] + }, + "hash": "f367a1c8f80dd414dcbcd949374eeb5770796f00b5b3d547163bcfdaed65d8ae" +} diff --git a/backend/.sqlx/query-f3d20b0fa17836538ec93b84b08ffc6b555371d6eeeadfc54f5bf0bcbe93d8b4.json b/backend/.sqlx/query-f3d20b0fa17836538ec93b84b08ffc6b555371d6eeeadfc54f5bf0bcbe93d8b4.json new file mode 100644 index 0000000000000..2cfac3a744973 --- /dev/null +++ b/backend/.sqlx/query-f3d20b0fa17836538ec93b84b08ffc6b555371d6eeeadfc54f5bf0bcbe93d8b4.json @@ -0,0 +1,30 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT COALESCE((SELECT MIN(started_at) as min_started_at\n FROM queue\n WHERE script_path = $1 AND job_kind != 'dependencies' AND running = true AND workspace_id = $2 AND canceled = false AND concurrent_limit > 0), $3) as min_started_at, now() AS now", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "min_started_at", + "type_info": "Timestamptz" + }, + { + "ordinal": 1, + "name": "now", + "type_info": "Timestamptz" + } + ], + "parameters": { + "Left": [ + "Text", + "Text", + "Timestamptz" + ] + }, + "nullable": [ + null, + null + ] + }, + "hash": "f3d20b0fa17836538ec93b84b08ffc6b555371d6eeeadfc54f5bf0bcbe93d8b4" +} diff --git a/backend/.sqlx/query-f3d3d105b76ec2eded521c3bb3735a3765c9aa2d103e3df85c245d85ba32b3b9.json b/backend/.sqlx/query-f3d3d105b76ec2eded521c3bb3735a3765c9aa2d103e3df85c245d85ba32b3b9.json new file mode 100644 index 0000000000000..4f5d515e96067 --- /dev/null +++ b/backend/.sqlx/query-f3d3d105b76ec2eded521c3bb3735a3765c9aa2d103e3df85c245d85ba32b3b9.json @@ -0,0 +1,29 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT value, is_secret\n FROM variable\n WHERE path = $1 AND workspace_id = $2", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "value", + "type_info": "Varchar" + }, + { + "ordinal": 1, + "name": "is_secret", + "type_info": "Bool" + } + ], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [ + false, + false + ] + }, + "hash": "f3d3d105b76ec2eded521c3bb3735a3765c9aa2d103e3df85c245d85ba32b3b9" +} diff --git a/backend/.sqlx/query-f3f1b312bff773fe04a5dbfc2c03963042fa19d5eb15cfb3e0c291a29482aa5b.json b/backend/.sqlx/query-f3f1b312bff773fe04a5dbfc2c03963042fa19d5eb15cfb3e0c291a29482aa5b.json new file mode 100644 index 0000000000000..99d4d7075c840 --- /dev/null +++ b/backend/.sqlx/query-f3f1b312bff773fe04a5dbfc2c03963042fa19d5eb15cfb3e0c291a29482aa5b.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE job_logs\n SET logs = '##DELETED##'\n WHERE job_id = $1", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Uuid" + ] + }, + "nullable": [] + }, + "hash": "f3f1b312bff773fe04a5dbfc2c03963042fa19d5eb15cfb3e0c291a29482aa5b" +} diff --git a/backend/.sqlx/query-f4849960aff7387cb6b130d2bc62dbfce45209fbbccf3b4b9b13019e0cd55ddb.json b/backend/.sqlx/query-f4849960aff7387cb6b130d2bc62dbfce45209fbbccf3b4b9b13019e0cd55ddb.json new file mode 100644 index 0000000000000..f97b5d1da4623 --- /dev/null +++ b/backend/.sqlx/query-f4849960aff7387cb6b130d2bc62dbfce45209fbbccf3b4b9b13019e0cd55ddb.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT flow_status->'failure_module'->>'parent_module' FROM queue WHERE id = $1", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "?column?", + "type_info": "Text" + } + ], + "parameters": { + "Left": [ + "Uuid" + ] + }, + "nullable": [ + null + ] + }, + "hash": "f4849960aff7387cb6b130d2bc62dbfce45209fbbccf3b4b9b13019e0cd55ddb" +} diff --git a/backend/.sqlx/query-f4942f502ba7f66bafb0b2de6979601723de8092796f3bbeb78191c1da30d225.json b/backend/.sqlx/query-f4942f502ba7f66bafb0b2de6979601723de8092796f3bbeb78191c1da30d225.json new file mode 100644 index 0000000000000..25510e4150399 --- /dev/null +++ b/backend/.sqlx/query-f4942f502ba7f66bafb0b2de6979601723de8092796f3bbeb78191c1da30d225.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE metrics SET value = $1 WHERE id = 'email_trigger_usage' AND created_at > NOW() - INTERVAL '1 day'", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Jsonb" + ] + }, + "nullable": [] + }, + "hash": "f4942f502ba7f66bafb0b2de6979601723de8092796f3bbeb78191c1da30d225" +} diff --git a/backend/.sqlx/query-f4a792eca82e9974d13d0731e7862e3c75dbee326e0856944539b2c5574cb6d3.json b/backend/.sqlx/query-f4a792eca82e9974d13d0731e7862e3c75dbee326e0856944539b2c5574cb6d3.json new file mode 100644 index 0000000000000..a0ec3da44b6e1 --- /dev/null +++ b/backend/.sqlx/query-f4a792eca82e9974d13d0731e7862e3c75dbee326e0856944539b2c5574cb6d3.json @@ -0,0 +1,17 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE queue SET flow_status = jsonb_set(jsonb_set(COALESCE(flow_status, '{}'::jsonb), array[$1], COALESCE(flow_status->$1, '{}'::jsonb)), array[$1, 'duration_ms'], to_jsonb($2::bigint)) WHERE id = $3 AND workspace_id = $4", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Int8", + "Uuid", + "Text" + ] + }, + "nullable": [] + }, + "hash": "f4a792eca82e9974d13d0731e7862e3c75dbee326e0856944539b2c5574cb6d3" +} diff --git a/backend/.sqlx/query-f581f5ad5c386cef1037e3e8dcb759164e21a72ddc859304421ccb96233fa277.json b/backend/.sqlx/query-f581f5ad5c386cef1037e3e8dcb759164e21a72ddc859304421ccb96233fa277.json new file mode 100644 index 0000000000000..e953e1b725aef --- /dev/null +++ b/backend/.sqlx/query-f581f5ad5c386cef1037e3e8dcb759164e21a72ddc859304421ccb96233fa277.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO folder (workspace_id, name, display_name, owners, extra_perms, created_by, edited_at) VALUES ($1, 'app_themes', 'App Themes', ARRAY[]::TEXT[], '{\"g/all\": false}', $2, now()) ON CONFLICT DO NOTHING", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Varchar" + ] + }, + "nullable": [] + }, + "hash": "f581f5ad5c386cef1037e3e8dcb759164e21a72ddc859304421ccb96233fa277" +} diff --git a/backend/.sqlx/query-f5a0346034f3bef54260962f7783b3fde7b1aa1f37a72058e292eebbcae08d74.json b/backend/.sqlx/query-f5a0346034f3bef54260962f7783b3fde7b1aa1f37a72058e292eebbcae08d74.json new file mode 100644 index 0000000000000..b5c383854bf4a --- /dev/null +++ b/backend/.sqlx/query-f5a0346034f3bef54260962f7783b3fde7b1aa1f37a72058e292eebbcae08d74.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO concurrency_key (job_id, key) SELECT id, $1 FROM unnest($2::uuid[]) as id", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "UuidArray" + ] + }, + "nullable": [] + }, + "hash": "f5a0346034f3bef54260962f7783b3fde7b1aa1f37a72058e292eebbcae08d74" +} diff --git a/backend/.sqlx/query-f632ca2e17a3952fc45bd40a055a9442c35453dff95140d2f252c4fe6a14c6a4.json b/backend/.sqlx/query-f632ca2e17a3952fc45bd40a055a9442c35453dff95140d2f252c4fe6a14c6a4.json new file mode 100644 index 0000000000000..5145efa59576d --- /dev/null +++ b/backend/.sqlx/query-f632ca2e17a3952fc45bd40a055a9442c35453dff95140d2f252c4fe6a14c6a4.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "\n SELECT EXISTS (SELECT 1 \n FROM workspace_settings \n WHERE workspace_id <> $1 \n AND slack_command_script IS NOT NULL\n AND slack_team_id IS NOT NULL \n AND slack_team_id = (SELECT slack_team_id FROM workspace_settings WHERE workspace_id = $1))\n ", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "exists", + "type_info": "Bool" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + null + ] + }, + "hash": "f632ca2e17a3952fc45bd40a055a9442c35453dff95140d2f252c4fe6a14c6a4" +} diff --git a/backend/.sqlx/query-f790a016c4a1333e3d4d1ce468a1679ba5e61ea88a5c65be9696312d2f455508.json b/backend/.sqlx/query-f790a016c4a1333e3d4d1ce468a1679ba5e61ea88a5c65be9696312d2f455508.json new file mode 100644 index 0000000000000..d64348ef46cad --- /dev/null +++ b/backend/.sqlx/query-f790a016c4a1333e3d4d1ce468a1679ba5e61ea88a5c65be9696312d2f455508.json @@ -0,0 +1,34 @@ +{ + "db_name": "PostgreSQL", + "query": "\n DELETE\n FROM parallel_monitor_lock\n WHERE last_ping IS NOT NULL AND last_ping < NOW() - ($1 || ' seconds')::interval \n RETURNING parent_flow_id, job_id, last_ping\n ", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "parent_flow_id", + "type_info": "Uuid" + }, + { + "ordinal": 1, + "name": "job_id", + "type_info": "Uuid" + }, + { + "ordinal": 2, + "name": "last_ping", + "type_info": "Timestamptz" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + false, + false, + true + ] + }, + "hash": "f790a016c4a1333e3d4d1ce468a1679ba5e61ea88a5c65be9696312d2f455508" +} diff --git a/backend/.sqlx/query-f7be09062288e645544e3ca3912a67ab6418985b299b118fbde24e29a9bc1871.json b/backend/.sqlx/query-f7be09062288e645544e3ca3912a67ab6418985b299b118fbde24e29a9bc1871.json new file mode 100644 index 0000000000000..bd89ecc794039 --- /dev/null +++ b/backend/.sqlx/query-f7be09062288e645544e3ca3912a67ab6418985b299b118fbde24e29a9bc1871.json @@ -0,0 +1,16 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE raw_app SET extra_perms = extra_perms - ('u/' || $2) || jsonb_build_object(('u/' || $1), extra_perms->('u/' || $2)) WHERE extra_perms ? ('u/' || $2) AND workspace_id = $3", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "f7be09062288e645544e3ca3912a67ab6418985b299b118fbde24e29a9bc1871" +} diff --git a/backend/.sqlx/query-f7f2598ac824e9b5719b96b1d1873ad728f7f786c7f447df6cac3e65d5a53bf1.json b/backend/.sqlx/query-f7f2598ac824e9b5719b96b1d1873ad728f7f786c7f447df6cac3e65d5a53bf1.json new file mode 100644 index 0000000000000..33bc8f1c2da27 --- /dev/null +++ b/backend/.sqlx/query-f7f2598ac824e9b5719b96b1d1873ad728f7f786c7f447df6cac3e65d5a53bf1.json @@ -0,0 +1,46 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT workspace.* FROM workspace, usr WHERE usr.workspace_id = workspace.id AND usr.email = $1 AND deleted = false", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "id", + "type_info": "Varchar" + }, + { + "ordinal": 1, + "name": "name", + "type_info": "Varchar" + }, + { + "ordinal": 2, + "name": "owner", + "type_info": "Varchar" + }, + { + "ordinal": 3, + "name": "deleted", + "type_info": "Bool" + }, + { + "ordinal": 4, + "name": "premium", + "type_info": "Bool" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + false, + false, + false, + false, + false + ] + }, + "hash": "f7f2598ac824e9b5719b96b1d1873ad728f7f786c7f447df6cac3e65d5a53bf1" +} diff --git a/backend/.sqlx/query-f8b34e09453d51d3df5be20652938a890ee353fec64ee73c312a3352da7f7515.json b/backend/.sqlx/query-f8b34e09453d51d3df5be20652938a890ee353fec64ee73c312a3352da7f7515.json new file mode 100644 index 0000000000000..13526abb6071f --- /dev/null +++ b/backend/.sqlx/query-f8b34e09453d51d3df5be20652938a890ee353fec64ee73c312a3352da7f7515.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT error_handler FROM workspace_settings WHERE workspace_id = $1", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "error_handler", + "type_info": "Varchar" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + true + ] + }, + "hash": "f8b34e09453d51d3df5be20652938a890ee353fec64ee73c312a3352da7f7515" +} diff --git a/backend/.sqlx/query-f8b689ec3e09f14dc02ac9e9f98d252a14d3a2acfadcd9cd6ba27ca9799f4706.json b/backend/.sqlx/query-f8b689ec3e09f14dc02ac9e9f98d252a14d3a2acfadcd9cd6ba27ca9799f4706.json new file mode 100644 index 0000000000000..0e42f60a930b6 --- /dev/null +++ b/backend/.sqlx/query-f8b689ec3e09f14dc02ac9e9f98d252a14d3a2acfadcd9cd6ba27ca9799f4706.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT openai_resource_path FROM workspace_settings WHERE workspace_id = $1", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "openai_resource_path", + "type_info": "Varchar" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + true + ] + }, + "hash": "f8b689ec3e09f14dc02ac9e9f98d252a14d3a2acfadcd9cd6ba27ca9799f4706" +} diff --git a/backend/.sqlx/query-f96dd1dd944506c07ad58d178e9b6a09259fedca329d790c34e58703bf26f34c.json b/backend/.sqlx/query-f96dd1dd944506c07ad58d178e9b6a09259fedca329d790c34e58703bf26f34c.json new file mode 100644 index 0000000000000..81c15c15cf20c --- /dev/null +++ b/backend/.sqlx/query-f96dd1dd944506c07ad58d178e9b6a09259fedca329d790c34e58703bf26f34c.json @@ -0,0 +1,64 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT * FROM usr\n WHERE workspace_id = $1", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "workspace_id", + "type_info": "Varchar" + }, + { + "ordinal": 1, + "name": "username", + "type_info": "Varchar" + }, + { + "ordinal": 2, + "name": "email", + "type_info": "Varchar" + }, + { + "ordinal": 3, + "name": "is_admin", + "type_info": "Bool" + }, + { + "ordinal": 4, + "name": "created_at", + "type_info": "Timestamptz" + }, + { + "ordinal": 5, + "name": "operator", + "type_info": "Bool" + }, + { + "ordinal": 6, + "name": "disabled", + "type_info": "Bool" + }, + { + "ordinal": 7, + "name": "role", + "type_info": "Varchar" + } + ], + "parameters": { + "Left": [ + "Text" + ] + }, + "nullable": [ + false, + false, + false, + false, + false, + false, + false, + true + ] + }, + "hash": "f96dd1dd944506c07ad58d178e9b6a09259fedca329d790c34e58703bf26f34c" +} diff --git a/backend/.sqlx/query-f9e0e35b4789a4da89f7bb21fa6b250fd64ee0e0b299471979db5ff8ee906929.json b/backend/.sqlx/query-f9e0e35b4789a4da89f7bb21fa6b250fd64ee0e0b299471979db5ff8ee906929.json new file mode 100644 index 0000000000000..39c96b8989b9d --- /dev/null +++ b/backend/.sqlx/query-f9e0e35b4789a4da89f7bb21fa6b250fd64ee0e0b299471979db5ff8ee906929.json @@ -0,0 +1,28 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT (flow_status->'step')::integer as step, jsonb_array_length(flow_status->'modules') as len FROM queue WHERE id = $1", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "step", + "type_info": "Int4" + }, + { + "ordinal": 1, + "name": "len", + "type_info": "Int4" + } + ], + "parameters": { + "Left": [ + "Uuid" + ] + }, + "nullable": [ + null, + null + ] + }, + "hash": "f9e0e35b4789a4da89f7bb21fa6b250fd64ee0e0b299471979db5ff8ee906929" +} diff --git a/backend/.sqlx/query-f9fed1aa8a4bbf1749da8c91b9cbae5605cd3ae7fd2e7ee774411971fa1ddc01.json b/backend/.sqlx/query-f9fed1aa8a4bbf1749da8c91b9cbae5605cd3ae7fd2e7ee774411971fa1ddc01.json new file mode 100644 index 0000000000000..f2320efec9ae9 --- /dev/null +++ b/backend/.sqlx/query-f9fed1aa8a4bbf1749da8c91b9cbae5605cd3ae7fd2e7ee774411971fa1ddc01.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE schedule SET paused_until = NULL WHERE workspace_id = $1 AND path = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "f9fed1aa8a4bbf1749da8c91b9cbae5605cd3ae7fd2e7ee774411971fa1ddc01" +} diff --git a/backend/.sqlx/query-fa59674af1d1a4ceb696fc883005ef114772f7d2ee0f60cb1358cdb7f0b5cd0c.json b/backend/.sqlx/query-fa59674af1d1a4ceb696fc883005ef114772f7d2ee0f60cb1358cdb7f0b5cd0c.json new file mode 100644 index 0000000000000..917a0910cc945 --- /dev/null +++ b/backend/.sqlx/query-fa59674af1d1a4ceb696fc883005ef114772f7d2ee0f60cb1358cdb7f0b5cd0c.json @@ -0,0 +1,23 @@ +{ + "db_name": "PostgreSQL", + "query": "\n SELECT EXISTS (SELECT 1 \n FROM workspace_settings \n WHERE workspace_id <> $1 \n AND slack_command_script IS NOT NULL\n AND slack_team_id = $2\n AND (SELECT slack_command_script IS NOT NULL FROM workspace_settings WHERE workspace_id = $1))\n ", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "exists", + "type_info": "Bool" + } + ], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [ + null + ] + }, + "hash": "fa59674af1d1a4ceb696fc883005ef114772f7d2ee0f60cb1358cdb7f0b5cd0c" +} diff --git a/backend/.sqlx/query-fab5a746a179eea356f0bb9005590e3bb89c4deff181827bd2fa5630c21e42a7.json b/backend/.sqlx/query-fab5a746a179eea356f0bb9005590e3bb89c4deff181827bd2fa5630c21e42a7.json new file mode 100644 index 0000000000000..1f877fcddf2de --- /dev/null +++ b/backend/.sqlx/query-fab5a746a179eea356f0bb9005590e3bb89c4deff181827bd2fa5630c21e42a7.json @@ -0,0 +1,29 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT COUNT(*) as count, COALESCE(MAX(ended_at), now() - INTERVAL '1 second' * $2) as max_ended_at FROM concurrency_key WHERE key = $1 AND ended_at >= (now() - INTERVAL '1 second' * $2)", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "count", + "type_info": "Int8" + }, + { + "ordinal": 1, + "name": "max_ended_at", + "type_info": "Timestamptz" + } + ], + "parameters": { + "Left": [ + "Text", + "Float8" + ] + }, + "nullable": [ + null, + null + ] + }, + "hash": "fab5a746a179eea356f0bb9005590e3bb89c4deff181827bd2fa5630c21e42a7" +} diff --git a/backend/.sqlx/query-fad42991fb062a34d7b5952ec8dd169e4e6ae16ab34ccce0950805122c27a2b4.json b/backend/.sqlx/query-fad42991fb062a34d7b5952ec8dd169e4e6ae16ab34ccce0950805122c27a2b4.json new file mode 100644 index 0000000000000..73774388e8440 --- /dev/null +++ b/backend/.sqlx/query-fad42991fb062a34d7b5952ec8dd169e4e6ae16ab34ccce0950805122c27a2b4.json @@ -0,0 +1,16 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE group_ SET extra_perms = extra_perms - ('u/' || $2) || jsonb_build_object(('u/' || $1), extra_perms->('u/' || $2)) WHERE extra_perms ? ('u/' || $2) AND workspace_id = $3", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "fad42991fb062a34d7b5952ec8dd169e4e6ae16ab34ccce0950805122c27a2b4" +} diff --git a/backend/.sqlx/query-fb581eb6f883ebb5909a00c65a6e1217f088290fce0e052171230bcd88f945b9.json b/backend/.sqlx/query-fb581eb6f883ebb5909a00c65a6e1217f088290fce0e052171230bcd88f945b9.json new file mode 100644 index 0000000000000..b3f640dd764b9 --- /dev/null +++ b/backend/.sqlx/query-fb581eb6f883ebb5909a00c65a6e1217f088290fce0e052171230bcd88f945b9.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO global_settings (name, value) VALUES ('slack', $1) ON CONFLICT (name) DO UPDATE SET value = $1, updated_at = now()", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Jsonb" + ] + }, + "nullable": [] + }, + "hash": "fb581eb6f883ebb5909a00c65a6e1217f088290fce0e052171230bcd88f945b9" +} diff --git a/backend/.sqlx/query-fbe14569717b4c4937b74e6dc6f6b4ea29a2b0c2b1cde48ef06d687f6f9e8f15.json b/backend/.sqlx/query-fbe14569717b4c4937b74e6dc6f6b4ea29a2b0c2b1cde48ef06d687f6f9e8f15.json new file mode 100644 index 0000000000000..642572bfe8b6d --- /dev/null +++ b/backend/.sqlx/query-fbe14569717b4c4937b74e6dc6f6b4ea29a2b0c2b1cde48ef06d687f6f9e8f15.json @@ -0,0 +1,29 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT client, refresh_token FROM account WHERE workspace_id = $1 AND id = $2", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "client", + "type_info": "Varchar" + }, + { + "ordinal": 1, + "name": "refresh_token", + "type_info": "Varchar" + } + ], + "parameters": { + "Left": [ + "Text", + "Int4" + ] + }, + "nullable": [ + false, + false + ] + }, + "hash": "fbe14569717b4c4937b74e6dc6f6b4ea29a2b0c2b1cde48ef06d687f6f9e8f15" +} diff --git a/backend/.sqlx/query-fc384ad2e85f3b21887d65ae68e8c408acbe4ad5c5c63a9ca9dac35dbb2eec2e.json b/backend/.sqlx/query-fc384ad2e85f3b21887d65ae68e8c408acbe4ad5c5c63a9ca9dac35dbb2eec2e.json new file mode 100644 index 0000000000000..8a460c09fd9df --- /dev/null +++ b/backend/.sqlx/query-fc384ad2e85f3b21887d65ae68e8c408acbe4ad5c5c63a9ca9dac35dbb2eec2e.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE workspace_invite SET workspace_id = $1 WHERE workspace_id = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Text" + ] + }, + "nullable": [] + }, + "hash": "fc384ad2e85f3b21887d65ae68e8c408acbe4ad5c5c63a9ca9dac35dbb2eec2e" +} diff --git a/backend/.sqlx/query-fc7ac95d8d5f4532a2b0e50f84c1e273d25543401639a68f868e1e4fd8b0640a.json b/backend/.sqlx/query-fc7ac95d8d5f4532a2b0e50f84c1e273d25543401639a68f868e1e4fd8b0640a.json new file mode 100644 index 0000000000000..5e4f5221475a8 --- /dev/null +++ b/backend/.sqlx/query-fc7ac95d8d5f4532a2b0e50f84c1e273d25543401639a68f868e1e4fd8b0640a.json @@ -0,0 +1,114 @@ +{ + "db_name": "PostgreSQL", + "query": "select hash, tag, concurrency_key, concurrent_limit, concurrency_time_window_s, cache_ttl, language as \"language: ScriptLang\", dedicated_worker, priority, delete_after_use, timeout, has_preprocessor from script where path = $1 AND workspace_id = $2 AND\n created_at = (SELECT max(created_at) FROM script WHERE path = $1 AND workspace_id = $2 AND\n deleted = false AND lock IS not NULL AND lock_error_logs IS NULL)", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "hash", + "type_info": "Int8" + }, + { + "ordinal": 1, + "name": "tag", + "type_info": "Varchar" + }, + { + "ordinal": 2, + "name": "concurrency_key", + "type_info": "Varchar" + }, + { + "ordinal": 3, + "name": "concurrent_limit", + "type_info": "Int4" + }, + { + "ordinal": 4, + "name": "concurrency_time_window_s", + "type_info": "Int4" + }, + { + "ordinal": 5, + "name": "cache_ttl", + "type_info": "Int4" + }, + { + "ordinal": 6, + "name": "language: ScriptLang", + "type_info": { + "Custom": { + "name": "script_lang", + "kind": { + "Enum": [ + "python3", + "deno", + "go", + "bash", + "postgresql", + "nativets", + "bun", + "mysql", + "bigquery", + "snowflake", + "graphql", + "powershell", + "mssql", + "php", + "bunnative", + "rust", + "ansible" + ] + } + } + } + }, + { + "ordinal": 7, + "name": "dedicated_worker", + "type_info": "Bool" + }, + { + "ordinal": 8, + "name": "priority", + "type_info": "Int2" + }, + { + "ordinal": 9, + "name": "delete_after_use", + "type_info": "Bool" + }, + { + "ordinal": 10, + "name": "timeout", + "type_info": "Int4" + }, + { + "ordinal": 11, + "name": "has_preprocessor", + "type_info": "Bool" + } + ], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [ + false, + true, + true, + true, + true, + true, + false, + true, + true, + true, + true, + true + ] + }, + "hash": "fc7ac95d8d5f4532a2b0e50f84c1e273d25543401639a68f868e1e4fd8b0640a" +} diff --git a/backend/.sqlx/query-fc8fa909ef7a15c7ad30dd938be3c13864e855219c7f366c86f0605ec25d1538.json b/backend/.sqlx/query-fc8fa909ef7a15c7ad30dd938be3c13864e855219c7f366c86f0605ec25d1538.json new file mode 100644 index 0000000000000..f5d5a46df582b --- /dev/null +++ b/backend/.sqlx/query-fc8fa909ef7a15c7ad30dd938be3c13864e855219c7f366c86f0605ec25d1538.json @@ -0,0 +1,35 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT workspace_id, auto_invite_operator, auto_add FROM workspace_settings ws WHERE (auto_invite_domain = $1 OR auto_invite_domain = '*') AND NOT EXISTS (SELECT 1 FROM usr WHERE workspace_id = ws.workspace_id AND email = $2)", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "workspace_id", + "type_info": "Varchar" + }, + { + "ordinal": 1, + "name": "auto_invite_operator", + "type_info": "Bool" + }, + { + "ordinal": 2, + "name": "auto_add", + "type_info": "Bool" + } + ], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [ + false, + true, + true + ] + }, + "hash": "fc8fa909ef7a15c7ad30dd938be3c13864e855219c7f366c86f0605ec25d1538" +} diff --git a/backend/.sqlx/query-fcb6ce4fab662602827281e3e85fffaa48542f8d590100d0e7eead2ad4ad4873.json b/backend/.sqlx/query-fcb6ce4fab662602827281e3e85fffaa48542f8d590100d0e7eead2ad4ad4873.json new file mode 100644 index 0000000000000..20ded3679f3ae --- /dev/null +++ b/backend/.sqlx/query-fcb6ce4fab662602827281e3e85fffaa48542f8d590100d0e7eead2ad4ad4873.json @@ -0,0 +1,16 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE variable SET value = $1 WHERE workspace_id = $2 AND path = $3", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "fcb6ce4fab662602827281e3e85fffaa48542f8d590100d0e7eead2ad4ad4873" +} diff --git a/backend/.sqlx/query-fcf885a2214d5ae47e652f6c003cf537e011efd44c256301357079283dfc8e02.json b/backend/.sqlx/query-fcf885a2214d5ae47e652f6c003cf537e011efd44c256301357079283dfc8e02.json new file mode 100644 index 0000000000000..cdbd4e08d1092 --- /dev/null +++ b/backend/.sqlx/query-fcf885a2214d5ae47e652f6c003cf537e011efd44c256301357079283dfc8e02.json @@ -0,0 +1,16 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE flow SET versions = array_append(versions, $1) WHERE path = $2 AND workspace_id = $3", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Int8", + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "fcf885a2214d5ae47e652f6c003cf537e011efd44c256301357079283dfc8e02" +} diff --git a/backend/.sqlx/query-fd790067c02d384aead5ff8f94efb37cc20d2f7a3749d21a1de5642e888b5f42.json b/backend/.sqlx/query-fd790067c02d384aead5ff8f94efb37cc20d2f7a3749d21a1de5642e888b5f42.json new file mode 100644 index 0000000000000..a39ccd77969de --- /dev/null +++ b/backend/.sqlx/query-fd790067c02d384aead5ff8f94efb37cc20d2f7a3749d21a1de5642e888b5f42.json @@ -0,0 +1,16 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE resource SET value = $1, edited_at = now() WHERE path = $2 AND workspace_id = $3", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Jsonb", + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "fd790067c02d384aead5ff8f94efb37cc20d2f7a3749d21a1de5642e888b5f42" +} diff --git a/backend/.sqlx/query-fe4f91ca7e179e58041a5c0b1a36015175e9301c01a99e8f2b82cb853349a183.json b/backend/.sqlx/query-fe4f91ca7e179e58041a5c0b1a36015175e9301c01a99e8f2b82cb853349a183.json new file mode 100644 index 0000000000000..65cb5c66336cb --- /dev/null +++ b/backend/.sqlx/query-fe4f91ca7e179e58041a5c0b1a36015175e9301c01a99e8f2b82cb853349a183.json @@ -0,0 +1,87 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT path, script_path, is_flow, route_path, workspace_id, is_async, requires_auth, edited_by, email, http_method as \"http_method: _\" FROM http_trigger", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "path", + "type_info": "Varchar" + }, + { + "ordinal": 1, + "name": "script_path", + "type_info": "Varchar" + }, + { + "ordinal": 2, + "name": "is_flow", + "type_info": "Bool" + }, + { + "ordinal": 3, + "name": "route_path", + "type_info": "Varchar" + }, + { + "ordinal": 4, + "name": "workspace_id", + "type_info": "Varchar" + }, + { + "ordinal": 5, + "name": "is_async", + "type_info": "Bool" + }, + { + "ordinal": 6, + "name": "requires_auth", + "type_info": "Bool" + }, + { + "ordinal": 7, + "name": "edited_by", + "type_info": "Varchar" + }, + { + "ordinal": 8, + "name": "email", + "type_info": "Varchar" + }, + { + "ordinal": 9, + "name": "http_method: _", + "type_info": { + "Custom": { + "name": "http_method", + "kind": { + "Enum": [ + "get", + "post", + "put", + "delete", + "patch" + ] + } + } + } + } + ], + "parameters": { + "Left": [] + }, + "nullable": [ + false, + false, + false, + false, + false, + false, + false, + false, + false, + false + ] + }, + "hash": "fe4f91ca7e179e58041a5c0b1a36015175e9301c01a99e8f2b82cb853349a183" +} diff --git a/backend/.sqlx/query-fe5e941310ffdbbe7cc5f3e2beb213999ff64bbe4f8e2532a7aa48184cb008e7.json b/backend/.sqlx/query-fe5e941310ffdbbe7cc5f3e2beb213999ff64bbe4f8e2532a7aa48184cb008e7.json new file mode 100644 index 0000000000000..ca0ef918e9a50 --- /dev/null +++ b/backend/.sqlx/query-fe5e941310ffdbbe7cc5f3e2beb213999ff64bbe4f8e2532a7aa48184cb008e7.json @@ -0,0 +1,16 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE completed_job SET schedule_path = REGEXP_REPLACE(schedule_path,'u/' || $2 || '/(.*)','u/' || $1 || '/\\1') WHERE schedule_path LIKE ('u/' || $2 || '/%') AND workspace_id = $3", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Text", + "Text", + "Text" + ] + }, + "nullable": [] + }, + "hash": "fe5e941310ffdbbe7cc5f3e2beb213999ff64bbe4f8e2532a7aa48184cb008e7" +} diff --git a/backend/.sqlx/query-fec3144df0d33bf8cfd4a629d85ba58d79f523994e75b7b4631f493d12933152.json b/backend/.sqlx/query-fec3144df0d33bf8cfd4a629d85ba58d79f523994e75b7b4631f493d12933152.json new file mode 100644 index 0000000000000..843c86177e0b3 --- /dev/null +++ b/backend/.sqlx/query-fec3144df0d33bf8cfd4a629d85ba58d79f523994e75b7b4631f493d12933152.json @@ -0,0 +1,22 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM parallel_monitor_lock WHERE parent_flow_id = $1 RETURNING last_ping", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "last_ping", + "type_info": "Timestamptz" + } + ], + "parameters": { + "Left": [ + "Uuid" + ] + }, + "nullable": [ + true + ] + }, + "hash": "fec3144df0d33bf8cfd4a629d85ba58d79f523994e75b7b4631f493d12933152" +} diff --git a/backend/.sqlx/query-fed842c14aa37998da2b3cfafc71f7364132ea1e40e687aa84c3d02399e3bfb5.json b/backend/.sqlx/query-fed842c14aa37998da2b3cfafc71f7364132ea1e40e687aa84c3d02399e3bfb5.json new file mode 100644 index 0000000000000..78c0158757ce5 --- /dev/null +++ b/backend/.sqlx/query-fed842c14aa37998da2b3cfafc71f7364132ea1e40e687aa84c3d02399e3bfb5.json @@ -0,0 +1,29 @@ +{ + "db_name": "PostgreSQL", + "query": "SELECT path, value from resource WHERE workspace_id = $1 LIMIT $2", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "path", + "type_info": "Varchar" + }, + { + "ordinal": 1, + "name": "value", + "type_info": "Jsonb" + } + ], + "parameters": { + "Left": [ + "Text", + "Int8" + ] + }, + "nullable": [ + false, + true + ] + }, + "hash": "fed842c14aa37998da2b3cfafc71f7364132ea1e40e687aa84c3d02399e3bfb5" +} diff --git a/backend/.sqlx/query-ff89e9f0941507d5cbfbb27e7c3b1ebad6b2b0a836334a5e20f151711fc11370.json b/backend/.sqlx/query-ff89e9f0941507d5cbfbb27e7c3b1ebad6b2b0a836334a5e20f151711fc11370.json new file mode 100644 index 0000000000000..9012e34322a97 --- /dev/null +++ b/backend/.sqlx/query-ff89e9f0941507d5cbfbb27e7c3b1ebad6b2b0a836334a5e20f151711fc11370.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "UPDATE workspace_settings SET deploy_to = $1 WHERE workspace_id = $2", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Text" + ] + }, + "nullable": [] + }, + "hash": "ff89e9f0941507d5cbfbb27e7c3b1ebad6b2b0a836334a5e20f151711fc11370" +} diff --git a/backend/.sqlx/query-ffedbb3a2676a6d7b71f81f89109a02a8dba90d40144e942527f8a3fc36dfbc1.json b/backend/.sqlx/query-ffedbb3a2676a6d7b71f81f89109a02a8dba90d40144e942527f8a3fc36dfbc1.json new file mode 100644 index 0000000000000..c58dfad63a1d9 --- /dev/null +++ b/backend/.sqlx/query-ffedbb3a2676a6d7b71f81f89109a02a8dba90d40144e942527f8a3fc36dfbc1.json @@ -0,0 +1,19 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO resource_type\n (workspace_id, name, schema, description, created_by, format_extension, edited_at)\n VALUES ($1, $2, $3, $4, $5, $6, now())", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Varchar", + "Varchar", + "Jsonb", + "Text", + "Varchar", + "Varchar" + ] + }, + "nullable": [] + }, + "hash": "ffedbb3a2676a6d7b71f81f89109a02a8dba90d40144e942527f8a3fc36dfbc1" +} diff --git a/backend/.vscode/settings.json b/backend/.vscode/settings.json new file mode 100644 index 0000000000000..d9d4cdd047b79 --- /dev/null +++ b/backend/.vscode/settings.json @@ -0,0 +1,5 @@ +{ + "python.analysis.typeCheckingMode": "basic", + "rust-analyzer.linkedProjects": ["./windmill-common/Cargo.toml"], + "rust-analyzer.showUnlinkedFileNotification": false +} diff --git a/backend/Cargo.lock b/backend/Cargo.lock index c10e25a9524b3..f5fff59d61ed2 100644 --- a/backend/Cargo.lock +++ b/backend/Cargo.lock @@ -2,4169 +2,11373 @@ # It is not intended for manual editing. version = 3 +[[package]] +name = "Inflector" +version = "0.11.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe438c63458706e03479442743baae6c88256498e6431708f6dfc520a26515d3" +dependencies = [ + "lazy_static", + "regex", +] + +[[package]] +name = "addr2line" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5fb1d8e4442bd405fdfd1dacb42792696b0cf9cb15882e5d097b742a676d375" +dependencies = [ + "gimli", +] + [[package]] name = "adler" version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +[[package]] +name = "adler2" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" + [[package]] name = "aes" version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9e8b47f52ea9bae42228d07ec09eb676433d7c4ed1ebdf0f1d1c29ed446f1ab8" dependencies = [ - "cfg-if 1.0.0", - "cipher", + "cfg-if", + "cipher 0.3.0", + "cpufeatures", + "opaque-debug", +] + +[[package]] +name = "aes" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" +dependencies = [ + "cfg-if", + "cipher 0.4.4", "cpufeatures", - "opaque-debug 0.3.0", ] [[package]] name = "ahash" -version = "0.7.6" +version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" +checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" dependencies = [ - "getrandom 0.2.6", + "getrandom 0.2.15", "once_cell", "version_check", ] [[package]] -name = "aho-corasick" -version = "0.7.18" +name = "ahash" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f" +checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" dependencies = [ - "memchr", + "cfg-if", + "const-random", + "getrandom 0.2.15", + "once_cell", + "version_check", + "zerocopy", ] [[package]] -name = "ansi_term" -version = "0.12.1" +name = "aho-corasick" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" dependencies = [ - "winapi 0.3.9", + "memchr", ] [[package]] -name = "anyhow" -version = "1.0.56" +name = "alloc-no-stdlib" +version = "2.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4361135be9122e0870de935d7c439aef945b9f9ddd4199a553b5270b49c82a27" +checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" [[package]] -name = "argon2" -version = "0.4.0" +name = "alloc-stdlib" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a27e27b63e4a34caee411ade944981136fdfa535522dc9944d6700196cbd899f" +checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece" dependencies = [ - "base64ct", - "blake2", - "password-hash", + "alloc-no-stdlib", ] [[package]] -name = "arrayref" -version = "0.3.6" +name = "allocator-api2" +version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544" +checksum = "5c6cb57a04249c6480766f7f7cef5467412af1490f8d1e243141daddada3264f" [[package]] -name = "arrayvec" -version = "0.5.2" +name = "android-tzdata" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" [[package]] -name = "ascii-canvas" -version = "2.0.0" +name = "android_system_properties" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff8eb72df928aafb99fe5d37b383f2fe25bd2a765e3e5f7c365916b6f2463a29" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" dependencies = [ - "term", + "libc", ] [[package]] -name = "async-lock" -version = "2.5.0" +name = "anstream" +version = "0.6.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e97a171d191782fba31bb902b14ad94e24a68145032b7eedf871ab0bc0d077b6" +checksum = "64e15c1ab1f89faffbf04a634d5e1962e9074f2741eef6d97f3c4e322426d526" dependencies = [ - "event-listener", + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "is_terminal_polyfill", + "utf8parse", ] [[package]] -name = "async-recursion" -version = "1.0.0" +name = "anstyle" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2cda8f4bcc10624c4e85bc66b3f452cca98cfa5ca002dc83a16aad2367641bea" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] +checksum = "1bec1de6f59aedf83baf9ff929c98f2ad654b97c9510f4e70cf6f661d49fd5b1" [[package]] -name = "async-stream" -version = "0.3.3" +name = "anstyle-parse" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dad5c83079eae9969be7fadefe640a1c566901f05ff91ab221de4b6f68d9507e" +checksum = "eb47de1e80c2b463c735db5b217a0ddc39d612e7ac9e2e96a5aed1f57616c1cb" dependencies = [ - "async-stream-impl", - "futures-core", + "utf8parse", ] [[package]] -name = "async-stream-impl" -version = "0.3.3" +name = "anstyle-query" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10f203db73a71dfa2fb6dd22763990fa26f3d2625a6da2da900d23b87d26be27" +checksum = "6d36fc52c7f6c869915e99412912f22093507da8d9e942ceaf66fe4b7c14422a" dependencies = [ - "proc-macro2", - "quote", - "syn", + "windows-sys 0.52.0", ] [[package]] -name = "async-timer" -version = "0.7.4" +name = "anstyle-wincon" +version = "3.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba5fa6ed76cb2aa820707b4eb9ec46f42da9ce70b0eafab5e5e34942b38a44d5" +checksum = "5bf74e1b6e971609db8ca7a9ce79fd5768ab6ae46441c572e46cf596f59e57f8" dependencies = [ - "libc", - "wasm-bindgen", - "winapi 0.3.9", + "anstyle", + "windows-sys 0.52.0", ] [[package]] -name = "async-trait" -version = "0.1.53" +name = "anyhow" +version = "1.0.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed6aa3524a2dfcf9fe180c51eae2b58738348d819517ceadf95789c51fff7600" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] +checksum = "86fdf8605db99b54d3cd748a44c6d04df638eb5dafb219b135d0149bd0db01f6" [[package]] -name = "atoi" -version = "0.4.0" +name = "arc-swap" +version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "616896e05fc0e2649463a93a15183c6a16bf03413a7af88ef1285ddedfa9cda5" -dependencies = [ - "num-traits", -] +checksum = "69f7f8c3906b62b754cd5326047894316021dcfe5a194c8ea52bdd94934a3457" [[package]] -name = "attohttpc" -version = "0.16.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdb8867f378f33f78a811a8eb9bf108ad99430d7aad43315dd9319c827ef6247" +name = "archiver-rs" +version = "0.5.1" +source = "git+https://github.com/gz/archiver-rs.git?branch=patch-1#a73cef92c2a5b8f48c2a4a9e889952072e03b4b7" dependencies = [ - "http", - "log", - "url", - "wildmatch", + "bzip2", + "flate2", + "tar", + "thiserror", + "xz2", + "zip", ] [[package]] -name = "atty" -version = "0.2.14" +name = "argon2" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" +checksum = "3c3610892ee6e0cbce8ae2700349fcf8f98adb0dbfbee85aec3c9179d29cc072" dependencies = [ - "hermit-abi", - "libc", - "winapi 0.3.9", + "base64ct", + "blake2", + "cpufeatures", + "password-hash 0.5.0", ] [[package]] -name = "autocfg" -version = "0.1.8" +name = "ariadne" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dde43e75fd43e8a1bf86103336bc699aa8d17ad1be60c76c0bdfd4828e19b78" +checksum = "f1cb2a2046bea8ce5e875551f5772024882de0b540c7f93dfc5d6cf1ca8b030c" dependencies = [ - "autocfg 1.1.0", + "yansi", ] [[package]] -name = "autocfg" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" - -[[package]] -name = "axum" -version = "0.5.1" +name = "array-init" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "47594e438a243791dba58124b6669561f5baa14cb12046641d8008bf035e5a25" -dependencies = [ - "async-trait", - "axum-core", - "bitflags", - "bytes 1.1.0", - "futures-util", - "headers", - "http", - "http-body 0.4.4", - "hyper 0.14.18", - "itoa 1.0.1", - "matchit", - "memchr", - "mime", - "percent-encoding", - "pin-project-lite 0.2.8", - "serde", - "serde_json", - "serde_urlencoded", - "sync_wrapper", - "tokio 1.17.0", - "tower", - "tower-http", - "tower-layer", - "tower-service", -] +checksum = "3d62b7694a562cdf5a74227903507c56ab2cc8bdd1f781ed5cb4cf9c9f810bfc" [[package]] -name = "axum-core" -version = "0.2.1" +name = "arrayref" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a671c9ae99531afdd5d3ee8340b8da547779430689947144c140fc74a740244" -dependencies = [ - "async-trait", - "bytes 1.1.0", - "futures-util", - "http", - "http-body 0.4.4", - "mime", -] +checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" [[package]] -name = "base64" -version = "0.13.0" +name = "arrayvec" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd" +checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" [[package]] -name = "base64ct" -version = "1.5.0" +name = "arrow" +version = "52.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dea908e7347a8c64e378c17e30ef880ad73e3b4498346b055c2c00ea342f3179" +checksum = "05048a8932648b63f21c37d88b552ccc8a65afb6dfe9fc9f30ce79174c2e7a85" +dependencies = [ + "arrow-arith", + "arrow-array", + "arrow-buffer", + "arrow-cast", + "arrow-csv", + "arrow-data", + "arrow-ipc", + "arrow-json", + "arrow-ord", + "arrow-row", + "arrow-schema", + "arrow-select", + "arrow-string", +] [[package]] -name = "bit-set" -version = "0.5.2" +name = "arrow-arith" +version = "52.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e11e16035ea35e4e5997b393eacbf6f63983188f7a2ad25bfb13465f5ad59de" +checksum = "1d8a57966e43bfe9a3277984a14c24ec617ad874e4c0e1d2a1b083a39cfbf22c" dependencies = [ - "bit-vec", + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "chrono", + "half", + "num", ] [[package]] -name = "bit-vec" -version = "0.6.3" +name = "arrow-array" +version = "52.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" +checksum = "16f4a9468c882dc66862cef4e1fd8423d47e67972377d85d80e022786427768c" +dependencies = [ + "ahash 0.8.11", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "chrono", + "chrono-tz 0.9.0", + "half", + "hashbrown 0.14.5", + "num", +] [[package]] -name = "bitflags" -version = "1.3.2" +name = "arrow-buffer" +version = "52.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" +checksum = "c975484888fc95ec4a632cdc98be39c085b1bb518531b0c80c5d462063e5daa1" +dependencies = [ + "bytes", + "half", + "num", +] [[package]] -name = "blake2" -version = "0.10.4" +name = "arrow-cast" +version = "52.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9cf849ee05b2ee5fba5e36f97ff8ec2533916700fc0758d40d92136a42f3388" +checksum = "da26719e76b81d8bc3faad1d4dbdc1bcc10d14704e63dc17fc9f3e7e1e567c8e" dependencies = [ - "digest 0.10.3", + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "arrow-select", + "atoi", + "base64 0.22.1", + "chrono", + "comfy-table", + "half", + "lexical-core", + "num", + "ryu", ] [[package]] -name = "blake2b_simd" -version = "0.5.11" +name = "arrow-csv" +version = "52.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afa748e348ad3be8263be728124b24a24f268266f6f5d58af9d75f6a40b5c587" +checksum = "c13c36dc5ddf8c128df19bab27898eea64bf9da2b555ec1cd17a8ff57fba9ec2" dependencies = [ - "arrayref", - "arrayvec", - "constant_time_eq", + "arrow-array", + "arrow-buffer", + "arrow-cast", + "arrow-data", + "arrow-schema", + "chrono", + "csv", + "csv-core", + "lazy_static", + "lexical-core", + "regex", ] [[package]] -name = "block-buffer" -version = "0.7.3" +name = "arrow-data" +version = "52.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b" +checksum = "dd9d6f18c65ef7a2573ab498c374d8ae364b4a4edf67105357491c031f716ca5" dependencies = [ - "block-padding 0.1.5", - "byte-tools", - "byteorder", - "generic-array 0.12.4", + "arrow-buffer", + "arrow-schema", + "half", + "num", ] [[package]] -name = "block-buffer" -version = "0.9.0" +name = "arrow-ipc" +version = "52.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" +checksum = "e786e1cdd952205d9a8afc69397b317cfbb6e0095e445c69cda7e8da5c1eeb0f" dependencies = [ - "block-padding 0.2.1", - "generic-array 0.14.5", + "arrow-array", + "arrow-buffer", + "arrow-cast", + "arrow-data", + "arrow-schema", + "flatbuffers", + "lz4_flex", ] [[package]] -name = "block-buffer" -version = "0.10.2" +name = "arrow-json" +version = "52.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bf7fe51849ea569fd452f37822f606a5cabb684dc918707a0193fd4664ff324" +checksum = "fb22284c5a2a01d73cebfd88a33511a3234ab45d66086b2ca2d1228c3498e445" dependencies = [ - "generic-array 0.14.5", + "arrow-array", + "arrow-buffer", + "arrow-cast", + "arrow-data", + "arrow-schema", + "chrono", + "half", + "indexmap 2.5.0", + "lexical-core", + "num", + "serde", + "serde_json", ] [[package]] -name = "block-modes" -version = "0.8.1" +name = "arrow-ord" +version = "52.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2cb03d1bed155d89dce0f845b7899b18a9a163e148fd004e1c28421a783e2d8e" +checksum = "42745f86b1ab99ef96d1c0bcf49180848a64fe2c7a7a0d945bc64fa2b21ba9bc" dependencies = [ - "block-padding 0.2.1", - "cipher", + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "arrow-select", + "half", + "num", ] [[package]] -name = "block-padding" -version = "0.1.5" +name = "arrow-row" +version = "52.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa79dedbb091f449f1f39e53edf88d5dbe95f895dae6135a8d7b881fb5af73f5" +checksum = "4cd09a518c602a55bd406bcc291a967b284cfa7a63edfbf8b897ea4748aad23c" dependencies = [ - "byte-tools", + "ahash 0.8.11", + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "half", ] [[package]] -name = "block-padding" -version = "0.2.1" +name = "arrow-schema" +version = "52.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d696c370c750c948ada61c69a0ee2cbbb9c50b1019ddb86d9317157a99c2cae" +checksum = "9e972cd1ff4a4ccd22f86d3e53e835c2ed92e0eea6a3e8eadb72b4f1ac802cf8" [[package]] -name = "bumpalo" -version = "3.9.1" +name = "arrow-select" +version = "52.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a45a46ab1f2412e53d3a0ade76ffad2025804294569aae387231a0cd6e0899" +checksum = "600bae05d43483d216fb3494f8c32fdbefd8aa4e1de237e790dbb3d9f44690a3" +dependencies = [ + "ahash 0.8.11", + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "num", +] [[package]] -name = "byte-tools" -version = "0.3.1" +name = "arrow-string" +version = "52.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" +checksum = "f0dc1985b67cb45f6606a248ac2b4a288849f196bab8c657ea5589f47cdd55e6" +dependencies = [ + "arrow-array", + "arrow-buffer", + "arrow-data", + "arrow-schema", + "arrow-select", + "memchr", + "num", + "regex", + "regex-syntax 0.8.4", +] [[package]] -name = "byteorder" -version = "1.4.3" +name = "ast_node" +version = "0.9.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" +checksum = "f9184f2b369b3e8625712493c89b785881f27eedc6cde480a81883cef78868b2" +dependencies = [ + "proc-macro2", + "quote", + "swc_macros_common", + "syn 2.0.79", +] [[package]] -name = "bytes" -version = "0.5.6" +name = "async-channel" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e4cec68f03f32e44924783795810fa50a7035d8c8ebe78580ad7e6c703fba38" +checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35" +dependencies = [ + "concurrent-queue", + "event-listener 2.5.3", + "futures-core", +] [[package]] -name = "bytes" -version = "1.1.0" +name = "async-channel" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4872d67bab6358e59559027aa3b9157c53d9358c51423c17554809a8858e0f8" +checksum = "89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a" +dependencies = [ + "concurrent-queue", + "event-listener-strategy", + "futures-core", + "pin-project-lite", +] [[package]] -name = "cc" -version = "1.0.73" +name = "async-compression" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11" +checksum = "942c7cd7ae39e91bde4820d74132e9862e62c2f386c3aa90ccf55949f5bad63a" +dependencies = [ + "bzip2", + "flate2", + "futures-core", + "memchr", + "pin-project-lite", + "tokio", + "xz2", + "zstd 0.11.2+zstd.1.5.2", + "zstd-safe 5.0.2+zstd.1.5.2", +] [[package]] -name = "cfg-if" -version = "0.1.10" +name = "async-compression" +version = "0.4.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" +checksum = "fec134f64e2bc57411226dfc4e52dec859ddfc7e711fc5e07b612584f000e4aa" +dependencies = [ + "brotli", + "bzip2", + "flate2", + "futures-core", + "futures-io", + "memchr", + "pin-project-lite", + "tokio", + "xz2", + "zstd 0.13.2", + "zstd-safe 7.2.1", +] [[package]] -name = "cfg-if" -version = "1.0.0" +name = "async-executor" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +checksum = "30ca9a001c1e8ba5149f91a74362376cc6bc5b919d92d988668657bd570bdcec" +dependencies = [ + "async-task", + "concurrent-queue", + "fastrand 2.1.1", + "futures-lite 2.3.0", + "slab", +] [[package]] -name = "chrono" -version = "0.4.19" +name = "async-global-executor" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73" +checksum = "05b1b633a2115cd122d73b955eadd9916c18c8f510ec9cd1686404c60ad1c29c" dependencies = [ - "js-sys", - "libc", - "num-integer", - "num-traits", - "serde", - "time 0.1.43", - "wasm-bindgen", - "winapi 0.3.9", + "async-channel 2.3.1", + "async-executor", + "async-io", + "async-lock", + "blocking", + "futures-lite 2.3.0", + "once_cell", ] [[package]] -name = "cipher" -version = "0.3.0" +name = "async-io" +version = "2.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ee52072ec15386f770805afd189a01c8841be8696bed250fa2f13c4c0d6dfb7" +checksum = "444b0228950ee6501b3568d3c93bf1176a1fdbc3b758dcd9475046d30f4dc7e8" dependencies = [ - "generic-array 0.14.5", + "async-lock", + "cfg-if", + "concurrent-queue", + "futures-io", + "futures-lite 2.3.0", + "parking", + "polling", + "rustix", + "slab", + "tracing", + "windows-sys 0.59.0", ] [[package]] -name = "cloudabi" -version = "0.0.3" +name = "async-lock" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f" +checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" dependencies = [ - "bitflags", + "event-listener 5.3.1", + "event-listener-strategy", + "pin-project-lite", ] [[package]] -name = "console-api" -version = "0.2.0" +name = "async-oauth2" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24cb05777feccbb2642d4f2df44d0505601a2cd88ca517d8c913f263a5a8dc8b" +checksum = "021cf450e9574793e45e1044a5d3d94bba7dbaa0802e6122e9c10eb8c4dd12dc" dependencies = [ - "prost", - "prost-types", - "tonic", - "tracing-core", + "base64 0.22.1", + "bytes", + "http 1.1.0", + "rand 0.8.5", + "reqwest 0.12.7", + "serde", + "serde-aux", + "serde_json", + "sha2 0.10.8", + "thiserror", + "url", ] [[package]] -name = "console-subscriber" -version = "0.1.4" +name = "async-recursion" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8bd6b23feb4180ccf20cefca9357262818443aafb7159b5e503d170d442a872" +checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" dependencies = [ - "console-api", - "crossbeam-channel", + "proc-macro2", + "quote", + "syn 2.0.79", +] + +[[package]] +name = "async-std" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c634475f29802fde2b8f0b505b1bd00dfe4df7d4a000f0b36f7671197d5c3615" +dependencies = [ + "async-channel 1.9.0", + "async-global-executor", + "async-io", + "async-lock", "crossbeam-utils", - "futures", - "hdrhistogram", - "humantime", - "prost-types", - "serde", - "serde_json", - "thread_local", - "tokio 1.17.0", - "tokio-stream", - "tonic", - "tracing", - "tracing-core", - "tracing-subscriber", + "futures-channel", + "futures-core", + "futures-io", + "futures-lite 2.3.0", + "gloo-timers", + "kv-log-macro", + "log", + "memchr", + "once_cell", + "pin-project-lite", + "pin-utils", + "slab", + "wasm-bindgen-futures", ] [[package]] -name = "constant_time_eq" -version = "0.1.5" +name = "async-stream" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" +checksum = "cd56dd203fef61ac097dd65721a419ddccb106b2d2b70ba60a6b529f03961a51" +dependencies = [ + "async-stream-impl", + "futures-core", + "pin-project-lite", +] [[package]] -name = "cookie" -version = "0.16.0" +name = "async-stream-impl" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94d4706de1b0fa5b132270cddffa8585166037822e260a944fe161acd137ca05" +checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" dependencies = [ - "percent-encoding", - "time 0.3.9", - "version_check", + "proc-macro2", + "quote", + "syn 2.0.79", ] [[package]] -name = "core-foundation" -version = "0.9.3" +name = "async-stripe" +version = "0.34.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" +checksum = "109605d984dd71a9a278e2d43a2831a20e80f25c3bcc25174096d12352cfc469" dependencies = [ - "core-foundation-sys", - "libc", + "chrono", + "futures-util", + "hex", + "hmac", + "http-types", + "hyper 0.14.30", + "hyper-tls 0.5.0", + "serde", + "serde_json", + "serde_path_to_error", + "serde_qs 0.10.1", + "sha2 0.10.8", + "smart-default", + "smol_str", + "thiserror", + "tokio", + "uuid 0.8.2", ] [[package]] -name = "core-foundation-sys" -version = "0.8.3" +name = "async-task" +version = "4.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" +checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" [[package]] -name = "cpufeatures" -version = "0.2.2" +name = "async-trait" +version = "0.1.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59a6001667ab124aebae2a495118e11d30984c3a653e99d86d58971708cf5e4b" +checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd" dependencies = [ - "libc", + "proc-macro2", + "quote", + "syn 2.0.79", ] [[package]] -name = "crc" -version = "2.1.0" +name = "async_zip" +version = "0.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49fc9a695bca7f35f5f4c15cddc84415f66a74ea78eef08e90c5024f2b540e23" +checksum = "c50d29ab7e2f9e808cca1a69ea56a36f4ff216f54a41a23aae1fd4afc05cc020" dependencies = [ - "crc-catalog", + "async-compression 0.3.15", + "chrono", + "crc32fast", + "log", + "pin-project", + "thiserror", + "tokio", ] [[package]] -name = "crc-any" -version = "2.4.2" +name = "asynchronous-codec" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3fc9f32c34de51ba0a727fd84d2cc83587efeca519cfca1105e3efa9c1c78fb" +checksum = "4057f2c32adbb2fc158e22fb38433c8e9bbf76b75a4732c7c0cbaf695fb65568" dependencies = [ - "debug-helper", + "bytes", + "futures-sink", + "futures-util", + "memchr", + "pin-project-lite", ] [[package]] -name = "crc-catalog" -version = "1.1.1" +name = "atoi" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccaeedb56da03b09f598226e25e80088cb4cd25f316e6e4df7d695f0feeb1403" +checksum = "f28d99ec8bfea296261ca1af174f24225171fea9664ba9003cbebee704810528" +dependencies = [ + "num-traits", +] [[package]] -name = "crc32fast" -version = "1.3.2" +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + +[[package]] +name = "autocfg" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" + +[[package]] +name = "aws-config" +version = "1.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" +checksum = "8191fb3091fa0561d1379ef80333c3c7191c6f0435d986e85821bcf7acbd1126" dependencies = [ - "cfg-if 1.0.0", + "aws-credential-types", + "aws-runtime", + "aws-sdk-sso", + "aws-sdk-ssooidc", + "aws-sdk-sts", + "aws-smithy-async", + "aws-smithy-http", + "aws-smithy-json", + "aws-smithy-runtime", + "aws-smithy-runtime-api", + "aws-smithy-types", + "aws-types", + "bytes", + "fastrand 2.1.1", + "hex", + "http 0.2.12", + "ring 0.17.8", + "time", + "tokio", + "tracing", + "url", + "zeroize", ] [[package]] -name = "cron" -version = "0.11.0" +name = "aws-credential-types" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d76219e9243e100d5a37676005f08379297f8addfebc247613299600625c734d" +checksum = "60e8f6b615cb5fc60a98132268508ad104310f0cfb25a1c22eee76efdf9154da" dependencies = [ - "chrono", - "nom", + "aws-smithy-async", + "aws-smithy-runtime-api", + "aws-smithy-types", + "zeroize", +] + +[[package]] +name = "aws-runtime" +version = "1.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a10d5c055aa540164d9561a0e2e74ad30f0dcf7393c3a92f6733ddf9c5762468" +dependencies = [ + "aws-credential-types", + "aws-sigv4", + "aws-smithy-async", + "aws-smithy-http", + "aws-smithy-runtime", + "aws-smithy-runtime-api", + "aws-smithy-types", + "aws-types", + "bytes", + "fastrand 2.1.1", + "http 0.2.12", + "http-body 0.4.6", "once_cell", + "percent-encoding", + "pin-project-lite", + "tracing", + "uuid 1.10.0", ] [[package]] -name = "crossbeam-channel" -version = "0.5.4" +name = "aws-sdk-sso" +version = "1.44.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5aaa7bd5fb665c6864b5f963dd9097905c54125909c7aa94c9e18507cdbe6c53" +checksum = "0b90cfe6504115e13c41d3ea90286ede5aa14da294f3fe077027a6e83850843c" dependencies = [ - "cfg-if 1.0.0", - "crossbeam-utils", + "aws-credential-types", + "aws-runtime", + "aws-smithy-async", + "aws-smithy-http", + "aws-smithy-json", + "aws-smithy-runtime", + "aws-smithy-runtime-api", + "aws-smithy-types", + "aws-types", + "bytes", + "http 0.2.12", + "once_cell", + "regex-lite", + "tracing", ] [[package]] -name = "crossbeam-queue" -version = "0.3.5" +name = "aws-sdk-ssooidc" +version = "1.45.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f25d8400f4a7a5778f0e4e52384a48cbd9b5c495d110786187fc750075277a2" +checksum = "167c0fad1f212952084137308359e8e4c4724d1c643038ce163f06de9662c1d0" dependencies = [ - "cfg-if 1.0.0", - "crossbeam-utils", + "aws-credential-types", + "aws-runtime", + "aws-smithy-async", + "aws-smithy-http", + "aws-smithy-json", + "aws-smithy-runtime", + "aws-smithy-runtime-api", + "aws-smithy-types", + "aws-types", + "bytes", + "http 0.2.12", + "once_cell", + "regex-lite", + "tracing", ] [[package]] -name = "crossbeam-utils" -version = "0.8.8" +name = "aws-sdk-sts" +version = "1.44.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bf124c720b7686e3c2663cf54062ab0f68a88af2fb6a030e87e30bf721fcb38" +checksum = "2cb5f98188ec1435b68097daa2a37d74b9d17c9caa799466338a8d1544e71b9d" dependencies = [ - "cfg-if 1.0.0", - "lazy_static", + "aws-credential-types", + "aws-runtime", + "aws-smithy-async", + "aws-smithy-http", + "aws-smithy-json", + "aws-smithy-query", + "aws-smithy-runtime", + "aws-smithy-runtime-api", + "aws-smithy-types", + "aws-smithy-xml", + "aws-types", + "http 0.2.12", + "once_cell", + "regex-lite", + "tracing", ] [[package]] -name = "crypto-common" -version = "0.1.3" +name = "aws-sigv4" +version = "1.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57952ca27b5e3606ff4dd79b0020231aaf9d6aa76dc05fd30137538c50bd3ce8" +checksum = "cc8db6904450bafe7473c6ca9123f88cc11089e41a025408f992db4e22d3be68" dependencies = [ - "generic-array 0.14.5", - "typenum", + "aws-credential-types", + "aws-smithy-http", + "aws-smithy-runtime-api", + "aws-smithy-types", + "bytes", + "form_urlencoded", + "hex", + "hmac", + "http 0.2.12", + "http 1.1.0", + "once_cell", + "percent-encoding", + "sha2 0.10.8", + "time", + "tracing", ] [[package]] -name = "crypto-mac" -version = "0.7.0" +name = "aws-smithy-async" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4434400df11d95d556bac068ddfedd482915eb18fe8bea89bc80b6e4b1c179e5" +checksum = "62220bc6e97f946ddd51b5f1361f78996e704677afc518a4ff66b7a72ea1378c" dependencies = [ - "generic-array 0.12.4", - "subtle 1.0.0", + "futures-util", + "pin-project-lite", + "tokio", ] [[package]] -name = "data-encoding" -version = "2.3.2" +name = "aws-smithy-http" +version = "0.60.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ee2393c4a91429dffb4bedf19f4d6abf27d8a732c8ce4980305d782e5426d57" +checksum = "5c8bc3e8fdc6b8d07d976e301c02fe553f72a39b7a9fea820e023268467d7ab6" +dependencies = [ + "aws-smithy-runtime-api", + "aws-smithy-types", + "bytes", + "bytes-utils", + "futures-core", + "http 0.2.12", + "http-body 0.4.6", + "once_cell", + "percent-encoding", + "pin-project-lite", + "pin-utils", + "tracing", +] [[package]] -name = "debug-helper" -version = "0.3.13" +name = "aws-smithy-json" +version = "0.60.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f578e8e2c440e7297e008bb5486a3a8a194775224bbc23729b0dbdfaeebf162e" +checksum = "4683df9469ef09468dad3473d129960119a0d3593617542b7d52086c8486f2d6" +dependencies = [ + "aws-smithy-types", +] [[package]] -name = "deno_core" -version = "0.110.0" +name = "aws-smithy-query" +version = "0.60.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffca9c7f3b54e5a63124fc13825d70f20f1c286fcb7440922f86566bc65edd99" +checksum = "f2fbd61ceb3fe8a1cb7352e42689cec5335833cd9f94103a61e98f9bb61c64bb" dependencies = [ - "anyhow", - "futures", - "indexmap", - "lazy_static", - "libc", - "log", - "parking_lot 0.11.2", - "pin-project", - "serde", - "serde_json", - "serde_v8", - "url", - "v8", + "aws-smithy-types", + "urlencoding", ] [[package]] -name = "des" -version = "0.7.0" +name = "aws-smithy-runtime" +version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac41dd49fb554432020d52c875fc290e110113f864c6b1b525cd62c7e7747a5d" +checksum = "d1ce695746394772e7000b39fe073095db6d45a862d0767dd5ad0ac0d7f8eb87" dependencies = [ - "byteorder", - "cipher", - "opaque-debug 0.3.0", + "aws-smithy-async", + "aws-smithy-http", + "aws-smithy-runtime-api", + "aws-smithy-types", + "bytes", + "fastrand 2.1.1", + "h2 0.3.26", + "http 0.2.12", + "http-body 0.4.6", + "http-body 1.0.1", + "httparse", + "hyper 0.14.30", + "hyper-rustls 0.24.2", + "once_cell", + "pin-project-lite", + "pin-utils", + "rustls 0.21.12", + "tokio", + "tracing", ] [[package]] -name = "diff" -version = "0.1.12" +name = "aws-smithy-runtime-api" +version = "1.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e25ea47919b1560c4e3b7fe0aaab9becf5b84a10325ddf7db0f0ba5e1026499" +checksum = "e086682a53d3aa241192aa110fa8dfce98f2f5ac2ead0de84d41582c7e8fdb96" +dependencies = [ + "aws-smithy-async", + "aws-smithy-types", + "bytes", + "http 0.2.12", + "http 1.1.0", + "pin-project-lite", + "tokio", + "tracing", + "zeroize", +] [[package]] -name = "digest" -version = "0.8.1" +name = "aws-smithy-types" +version = "1.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5" +checksum = "147100a7bea70fa20ef224a6bad700358305f5dc0f84649c53769761395b355b" dependencies = [ - "generic-array 0.12.4", + "base64-simd 0.8.0", + "bytes", + "bytes-utils", + "futures-core", + "http 0.2.12", + "http 1.1.0", + "http-body 0.4.6", + "http-body 1.0.1", + "http-body-util", + "itoa", + "num-integer", + "pin-project-lite", + "pin-utils", + "ryu", + "serde", + "time", + "tokio", + "tokio-util", ] [[package]] -name = "digest" -version = "0.9.0" +name = "aws-smithy-xml" +version = "0.60.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" +checksum = "ab0b0166827aa700d3dc519f72f8b3a91c35d0b8d042dc5d643a91e6f80648fc" dependencies = [ - "generic-array 0.14.5", + "xmlparser", ] [[package]] -name = "digest" -version = "0.10.3" +name = "aws-types" +version = "1.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2fb860ca6fafa5552fb6d0e816a69c8e49f0908bf524e30a90d97c85892d506" +checksum = "5221b91b3e441e6675310829fd8984801b772cb1546ef6c0e54dec9f1ac13fef" dependencies = [ - "block-buffer 0.10.2", - "crypto-common", - "subtle 2.4.1", + "aws-credential-types", + "aws-smithy-async", + "aws-smithy-runtime-api", + "aws-smithy-types", + "rustc_version 0.4.1", + "tracing", ] [[package]] -name = "dirs" -version = "1.0.5" +name = "axum" +version = "0.7.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fd78930633bd1c6e35c4b42b1df7b0cbc6bc191146e512bb3bedf243fcc3901" +checksum = "504e3947307ac8326a5437504c517c4b56716c9d98fac0028c2acc7ca47d70ae" dependencies = [ - "libc", - "redox_users 0.3.5", - "winapi 0.3.9", + "async-trait", + "axum-core", + "bytes", + "futures-util", + "http 1.1.0", + "http-body 1.0.1", + "http-body-util", + "hyper 1.4.1", + "hyper-util", + "itoa", + "matchit", + "memchr", + "mime", + "multer", + "percent-encoding", + "pin-project-lite", + "rustversion", + "serde", + "serde_json", + "serde_path_to_error", + "serde_urlencoded", + "sync_wrapper 1.0.1", + "tokio", + "tower 0.5.1", + "tower-layer", + "tower-service", + "tracing", ] [[package]] -name = "dirs" -version = "4.0.0" +name = "axum-core" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca3aa72a6f96ea37bbc5aa912f6788242832f75369bdfdadcb0e38423f100059" +checksum = "09f2bd6146b97ae3359fa0cc6d6b376d9539582c7b4220f041a33ec24c226199" dependencies = [ - "dirs-sys", + "async-trait", + "bytes", + "futures-util", + "http 1.1.0", + "http-body 1.0.1", + "http-body-util", + "mime", + "pin-project-lite", + "rustversion", + "sync_wrapper 1.0.1", + "tower-layer", + "tower-service", + "tracing", ] [[package]] -name = "dirs-sys" -version = "0.3.7" +name = "backtrace" +version = "0.3.74" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6" +checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" dependencies = [ + "addr2line", + "cfg-if", "libc", - "redox_users 0.4.3", - "winapi 0.3.9", + "miniz_oxide 0.8.0", + "object", + "rustc-demangle", + "windows-targets 0.52.6", ] [[package]] -name = "docopt" -version = "1.1.1" +name = "base16ct" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f3f119846c823f9eafcf953a8f6ffb6ed69bf6240883261a7f13b634579a51f" -dependencies = [ - "lazy_static", - "regex", - "serde", - "strsim", -] +checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" [[package]] -name = "dotenv" -version = "0.15.0" +name = "base32" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77c90badedccf4105eca100756a0b1289e191f6fcbdadd3cee1d2f614f97da8f" +checksum = "022dfe9eb35f19ebbcb51e0b40a5ab759f46ad60cadf7297e0bd085afb50e076" [[package]] -name = "either" -version = "1.6.1" +name = "base64" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457" -dependencies = [ - "serde", -] +checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" [[package]] -name = "email-encoding" -version = "0.1.0" +name = "base64" +version = "0.21.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6690291166824e467790ac08ba42f241791567e8337bbf00c5a6e87889629f98" -dependencies = [ - "base64", -] +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" [[package]] -name = "ena" -version = "0.13.1" +name = "base64" +version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8944dc8fa28ce4a38f778bd46bf7d923fe73eed5a439398507246c8e017e6f36" -dependencies = [ - "log", -] +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" [[package]] -name = "encoding_rs" -version = "0.8.31" +name = "base64-simd" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9852635589dc9f9ea1b6fe9f05b50ef208c85c834a562f0c6abb1c475736ec2b" +checksum = "781dd20c3aff0bd194fe7d2a977dd92f21c173891f3a03b677359e5fa457e5d5" dependencies = [ - "cfg-if 1.0.0", + "simd-abstraction", ] [[package]] -name = "enum-as-inner" -version = "0.3.4" +name = "base64-simd" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "570d109b813e904becc80d8d5da38376818a143348413f7149f1340fe04754d4" +checksum = "339abbe78e73178762e23bea9dfd08e697eb3f3301cd4be981c0f78ba5859195" dependencies = [ - "heck", - "proc-macro2", - "quote", - "syn", + "outref 0.5.1", + "vsimd", ] [[package]] -name = "event-listener" -version = "2.5.2" +name = "base64ct" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77f3309417938f28bf8228fcff79a4a37103981e3e186d2ccd19c74b38f4eb71" +checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" [[package]] -name = "external-ip" -version = "4.1.0" +name = "bb8" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2406194c5c4be3678bd7c1c128237ec589a6a3b7a3b05786971998bda7693c27" +checksum = "b10cf871f3ff2ce56432fddc2615ac7acc3aa22ca321f8fea800846fbb32f188" dependencies = [ - "futures", - "http", - "hyper 0.14.18", - "hyper-tls 0.5.0", - "igd", - "log", - "rand 0.8.5", - "trust-dns-resolver", + "async-trait", + "futures-util", + "parking_lot", + "tokio", ] [[package]] -name = "fake-simd" -version = "0.1.2" +name = "better_scoped_tls" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed" +checksum = "794edcc9b3fb07bb4aecaa11f093fd45663b4feadb782d68303a2268bc2701de" +dependencies = [ + "scoped-tls", +] [[package]] -name = "fastrand" -version = "1.7.0" +name = "bigdecimal" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3fcf0cee53519c866c09b5de1f6c56ff9d647101f81c1964fa632e148896cdf" +checksum = "51d712318a27c7150326677b321a5fa91b55f6d9034ffd67f20319e147d40cee" dependencies = [ - "instant", + "autocfg", + "libm", + "num-bigint", + "num-integer", + "num-traits", ] [[package]] -name = "filetime" -version = "0.2.15" +name = "bincode" +version = "1.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "975ccf83d8d9d0d84682850a38c8169027be83368805971cc4f238c2b245bc98" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" dependencies = [ - "cfg-if 1.0.0", - "libc", - "redox_syscall 0.2.13", - "winapi 0.3.9", + "serde", ] [[package]] -name = "fixedbitset" -version = "0.1.9" +name = "bindgen" +version = "0.69.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86d4de0081402f5e88cdac65c8dcdcc73118c1a7a465e2a05f0da05843a8ea33" +checksum = "a00dc851838a2120612785d195287475a3ac45514741da670b735818822129a0" +dependencies = [ + "bitflags 2.6.0", + "cexpr", + "clang-sys", + "itertools 0.12.1", + "lazy_static", + "lazycell", + "log", + "prettyplease 0.2.22", + "proc-macro2", + "quote", + "regex", + "rustc-hash 1.1.0", + "shlex", + "syn 2.0.79", + "which 4.4.2", +] [[package]] -name = "flate2" -version = "1.0.23" +name = "bindgen" +version = "0.70.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b39522e96686d38f4bc984b9198e3a0613264abaebaff2c5c918bfa6b6da09af" +checksum = "f49d8fed880d473ea71efb9bf597651e77201bdd4893efe54c9e5d65ae04ce6f" dependencies = [ - "cfg-if 1.0.0", - "crc32fast", - "libc", - "miniz_oxide", + "bitflags 2.6.0", + "cexpr", + "clang-sys", + "itertools 0.13.0", + "proc-macro2", + "quote", + "regex", + "rustc-hash 1.1.0", + "shlex", + "syn 2.0.79", ] [[package]] -name = "fnv" -version = "1.0.7" +name = "bit-set" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" +checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1" +dependencies = [ + "bit-vec", +] [[package]] -name = "foreign-types" -version = "0.3.2" +name = "bit-vec" +version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" -dependencies = [ - "foreign-types-shared", -] +checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" [[package]] -name = "foreign-types-shared" -version = "0.1.1" +name = "bitflags" +version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] -name = "form_urlencoded" -version = "1.0.1" +name = "bitflags" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191" +checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" dependencies = [ - "matches", - "percent-encoding", + "serde", ] [[package]] -name = "fslock" -version = "0.1.8" +name = "bitpacking" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57eafdd0c16f57161105ae1b98a1238f97645f2f588438b2949c99a2af9616bf" +checksum = "4c1d3e2bfd8d06048a179f7b17afc3188effa10385e7b00dc65af6aae732ea92" dependencies = [ - "libc", - "winapi 0.3.9", + "crunchy", ] [[package]] -name = "fuchsia-cprng" -version = "0.1.1" +name = "bitvec" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" +checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" +dependencies = [ + "funty", + "radium", + "tap", + "wyz", +] [[package]] -name = "fuchsia-zircon" -version = "0.3.3" +name = "blake2" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82" +checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" dependencies = [ - "bitflags", - "fuchsia-zircon-sys", + "digest 0.10.7", ] [[package]] -name = "fuchsia-zircon-sys" -version = "0.3.3" +name = "blake3" +version = "1.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7" +checksum = "d82033247fd8e890df8f740e407ad4d038debb9eb1f40533fffb32e7d17dc6f7" +dependencies = [ + "arrayref", + "arrayvec", + "cc", + "cfg-if", + "constant_time_eq 0.3.1", +] [[package]] -name = "futures" -version = "0.3.21" +name = "block-buffer" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f73fe65f54d1e12b726f517d3e2135ca3125a437b6d998caf1962961f7172d9e" +checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" dependencies = [ - "futures-channel", - "futures-core", - "futures-executor", - "futures-io", - "futures-sink", - "futures-task", - "futures-util", + "block-padding", + "generic-array", ] [[package]] -name = "futures-channel" -version = "0.3.21" +name = "block-buffer" +version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3083ce4b914124575708913bca19bfe887522d6e2e6d0952943f5eac4a74010" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" dependencies = [ - "futures-core", - "futures-sink", + "generic-array", ] [[package]] -name = "futures-core" -version = "0.3.21" +name = "block-modes" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c09fd04b7e4073ac7156a9539b57a484a8ea920f79c7c675d05d289ab6110d3" +checksum = "2cb03d1bed155d89dce0f845b7899b18a9a163e148fd004e1c28421a783e2d8e" +dependencies = [ + "block-padding", + "cipher 0.3.0", +] [[package]] -name = "futures-executor" -version = "0.3.21" +name = "block-padding" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9420b90cfa29e327d0429f19be13e7ddb68fa1cccb09d65e5706b8c7a749b8a6" -dependencies = [ - "futures-core", - "futures-task", - "futures-util", -] +checksum = "8d696c370c750c948ada61c69a0ee2cbbb9c50b1019ddb86d9317157a99c2cae" [[package]] -name = "futures-intrusive" -version = "0.4.0" +name = "blocking" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62007592ac46aa7c2b6416f7deb9a8a8f63a01e0f1d6e1787d5630170db2b63e" +checksum = "703f41c54fc768e63e091340b424302bb1c29ef4aa0c7f10fe849dfb114d29ea" dependencies = [ - "futures-core", - "lock_api", - "parking_lot 0.11.2", + "async-channel 2.3.1", + "async-task", + "futures-io", + "futures-lite 2.3.0", + "piper", ] [[package]] -name = "futures-io" -version = "0.3.21" +name = "borsh" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc4045962a5a5e935ee2fdedaa4e08284547402885ab326734432bed5d12966b" +checksum = "a6362ed55def622cddc70a4746a68554d7b687713770de539e59a739b249f8ed" +dependencies = [ + "borsh-derive", + "cfg_aliases", +] [[package]] -name = "futures-macro" -version = "0.3.21" +name = "borsh-derive" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33c1e13800337f4d4d7a316bf45a567dbcb6ffe087f16424852d97e97a91f512" +checksum = "c3ef8005764f53cd4dca619f5bf64cafd4664dada50ece25e4d81de54c80cc0b" dependencies = [ + "once_cell", + "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 2.0.79", + "syn_derive", ] [[package]] -name = "futures-sink" -version = "0.3.21" +name = "brotli" +version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21163e139fa306126e6eedaf49ecdb4588f939600f0b1e770f4205ee4b7fa868" +checksum = "74f7971dbd9326d58187408ab83117d8ac1bb9c17b085fdacd1cf2f598719b6b" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", + "brotli-decompressor", +] [[package]] -name = "futures-task" -version = "0.3.21" +name = "brotli-decompressor" +version = "4.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57c66a976bf5909d801bbef33416c41372779507e7a6b3a5e25e4749c58f776a" +checksum = "9a45bd2e4095a8b518033b128020dd4a55aab1c0a381ba4404a472630f4bc362" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", +] [[package]] -name = "futures-util" -version = "0.3.21" +name = "btoi" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8b7abd5d659d9b90c8cba917f6ec750a74e2dc23902ef9cd4cc8c8b22e6036a" +checksum = "9dd6407f73a9b8b6162d8a2ef999fe6afd7cc15902ebf42c5cd296addf17e0ad" dependencies = [ - "futures-channel", - "futures-core", - "futures-io", - "futures-macro", - "futures-sink", - "futures-task", - "memchr", - "pin-project-lite 0.2.8", - "pin-utils", - "slab", + "num-traits", ] [[package]] -name = "generic-array" -version = "0.12.4" +name = "built" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffdf9f34f1447443d37393cc6c2b8313aebddcd96906caf34e54c68d8e57d7bd" +checksum = "b99c4cdc7b2c2364182331055623bdf45254fcb679fea565c40c3c11c101889a" dependencies = [ - "typenum", + "cargo-lock", + "git2", ] [[package]] -name = "generic-array" -version = "0.14.5" +name = "bumpalo" +version = "3.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd48d33ec7f05fbfa152300fdad764757cbded343c1aa1cff2fbaf4134851803" -dependencies = [ - "typenum", - "version_check", -] +checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" [[package]] -name = "getrandom" -version = "0.1.16" +name = "bytecheck" +version = "0.6.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" +checksum = "23cdc57ce23ac53c931e88a43d06d070a6fd142f2617be5855eb75efc9beb1c2" dependencies = [ - "cfg-if 1.0.0", - "libc", - "wasi 0.9.0+wasi-snapshot-preview1", + "bytecheck_derive", + "ptr_meta", + "simdutf8", ] [[package]] -name = "getrandom" -version = "0.2.6" +name = "bytecheck_derive" +version = "0.6.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9be70c98951c83b8d2f8f60d7065fa6d5146873094452a1008da8c2f1e4205ad" +checksum = "3db406d29fbcd95542e92559bed4d8ad92636d1ca8b3b72ede10b4bcc010e659" dependencies = [ - "cfg-if 1.0.0", - "js-sys", - "libc", - "wasi 0.10.2+wasi-snapshot-preview1", - "wasm-bindgen", + "proc-macro2", + "quote", + "syn 1.0.109", ] [[package]] -name = "git-version" -version = "0.3.5" +name = "bytemuck" +version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6b0decc02f4636b9ccad390dcbe77b722a77efedfa393caf8379a51d5c61899" +checksum = "94bbb0ad554ad961ddc5da507a12a29b14e4ae5bda06b19f575a3e6079d2e2ae" dependencies = [ - "git-version-macro", - "proc-macro-hack", + "bytemuck_derive", ] [[package]] -name = "git-version-macro" -version = "0.3.5" +name = "bytemuck_derive" +version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe69f1cbdb6e28af2bac214e943b99ce8a0a06b447d15d3e61161b0423139f3f" +checksum = "0cc8b54b395f2fcfbb3d90c47b01c7f444d94d05bdeb775811dec868ac3bbc26" dependencies = [ - "proc-macro-hack", "proc-macro2", "quote", - "syn", + "syn 2.0.79", ] [[package]] -name = "h2" -version = "0.2.7" +name = "byteorder" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e4728fd124914ad25e99e3d15a9361a879f6620f63cb56bbb08f95abb97a535" -dependencies = [ - "bytes 0.5.6", - "fnv", - "futures-core", - "futures-sink", - "futures-util", - "http", - "indexmap", - "slab", - "tokio 0.2.25", - "tokio-util 0.3.1", - "tracing", - "tracing-futures", -] +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] -name = "h2" -version = "0.3.13" +name = "bytes" +version = "1.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37a82c6d637fc9515a4694bbf1cb2457b79d81ce52b3108bdeea58b07dd34a57" -dependencies = [ - "bytes 1.1.0", - "fnv", - "futures-core", - "futures-sink", - "futures-util", - "http", - "indexmap", - "slab", - "tokio 1.17.0", - "tokio-util 0.7.1", - "tracing", -] +checksum = "428d9aa8fbc0670b7b8d6030a7fadd0f86151cae55e4dbbece15f3780a3dfaf3" [[package]] -name = "hashbrown" -version = "0.9.1" +name = "bytes-utils" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7afe4a420e3fe79967a00898cc1f4db7c8a49a9333a29f8a4bd76a253d5cd04" +checksum = "7dafe3a8757b027e2be6e4e5601ed563c55989fcf1546e933c66c8eb3a058d35" +dependencies = [ + "bytes", + "either", +] [[package]] -name = "hashbrown" -version = "0.11.2" +name = "bzip2" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" +checksum = "bdb116a6ef3f6c3698828873ad02c3014b3c85cadb88496095628e3ef1e347f8" dependencies = [ - "ahash", + "bzip2-sys", + "libc", ] [[package]] -name = "hashlink" -version = "0.7.0" +name = "bzip2-sys" +version = "0.1.11+1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7249a3129cbc1ffccd74857f81464a323a152173cdb134e0fd81bc803b29facf" +checksum = "736a955f3fa7875102d57c82b8cac37ec45224a07fd32d58f9f7a186b6cd4cdc" dependencies = [ - "hashbrown 0.11.2", + "cc", + "libc", + "pkg-config", ] [[package]] -name = "hdrhistogram" -version = "7.5.0" +name = "candle-core" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31672b7011be2c4f7456c4ddbcb40e7e9a4a9fad8efe49a6ebaf5f307d0109c0" +checksum = "6db8659ea87ee8197d2fc627348916cce0561330ee7ae3874e771691d3cecb2f" dependencies = [ - "base64", "byteorder", - "flate2", - "nom", + "gemm", + "half", + "memmap2", "num-traits", + "num_cpus", + "rand 0.8.5", + "rand_distr", + "rayon", + "safetensors", + "thiserror", + "yoke", + "zip", ] [[package]] -name = "headers" -version = "0.3.7" +name = "candle-nn" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cff78e5788be1e0ab65b04d306b2ed5092c815ec97ec70f4ebd5aee158aa55d" +checksum = "7ddce8312032760a6791d6adc9c56dc54fd7c1be38d85dcc4862f1c75228bbc7" dependencies = [ - "base64", - "bitflags", - "bytes 1.1.0", - "headers-core", - "http", - "httpdate 1.0.2", - "mime", - "sha-1", + "candle-core", + "half", + "num-traits", + "rayon", + "safetensors", + "serde", + "thiserror", ] [[package]] -name = "headers-core" -version = "0.2.0" +name = "candle-transformers" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7f66481bfee273957b1f20485a4ff3362987f85b2c236580d81b4eb7a326429" +checksum = "68834a0cacb7e002d1f4abfe26a7cd1237e2ba342fddcf2e30913c4edb96409d" dependencies = [ - "http", + "byteorder", + "candle-core", + "candle-nn", + "num-traits", + "rand 0.8.5", + "rayon", + "serde", + "serde_json", + "serde_plain", + "tracing", + "wav", ] [[package]] -name = "heck" -version = "0.4.0" +name = "cargo-lock" +version = "9.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9" +checksum = "e11c675378efb449ed3ce8de78d75d0d80542fc98487c26aba28eb3b82feac72" dependencies = [ - "unicode-segmentation", + "semver 1.0.23", + "serde", + "toml 0.7.8", + "url", ] [[package]] -name = "hermit-abi" -version = "0.1.19" +name = "cc" +version = "1.1.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" +checksum = "9540e661f81799159abee814118cc139a2004b3a3aa3ea37724a1b66530b90e0" dependencies = [ + "jobserver", "libc", + "shlex", ] [[package]] -name = "hex" -version = "0.4.3" +name = "census" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" +checksum = "4f4c707c6a209cbe82d10abd08e1ea8995e9ea937d2550646e02798948992be0" [[package]] -name = "hkdf" -version = "0.12.3" +name = "cexpr" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "791a029f6b9fc27657f6f188ec6e5e43f6911f6f878e0dc5501396e09809d437" +checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766" dependencies = [ - "hmac 0.12.1", + "nom", ] [[package]] -name = "hmac" -version = "0.7.1" +name = "cfg-if" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dcb5e64cda4c23119ab41ba960d1e170a774c8e4b9d9e6a9bc18aabf5e59695" -dependencies = [ - "crypto-mac", - "digest 0.8.1", -] +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] -name = "hmac" -version = "0.12.1" +name = "cfg_aliases" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" -dependencies = [ - "digest 0.10.3", -] +checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" [[package]] -name = "hostname" -version = "0.3.1" +name = "chrono" +version = "0.4.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c731c3e10504cc8ed35cfe2f1db4c9274c3d35fa486e3b31df46f068ef3e867" +checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" dependencies = [ - "libc", - "match_cfg", - "winapi 0.3.9", + "android-tzdata", + "iana-time-zone", + "js-sys", + "num-traits", + "serde", + "wasm-bindgen", + "windows-targets 0.52.6", ] [[package]] -name = "http" -version = "0.2.6" +name = "chrono-tz" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31f4c6746584866f0feabcc69893c5b51beef3831656a968ed7ae254cdc4fd03" +checksum = "93698b29de5e97ad0ae26447b344c482a7284c737d9ddc5f9e52b74a336671bb" dependencies = [ - "bytes 1.1.0", - "fnv", - "itoa 1.0.1", + "chrono", + "chrono-tz-build 0.3.0", + "phf", ] [[package]] -name = "http-body" -version = "0.3.1" +name = "chrono-tz" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13d5ff830006f7646652e057693569bfe0d51760c0085a071769d142a205111b" +checksum = "cd6dd8046d00723a59a2f8c5f295c515b9bb9a331ee4f8f3d4dd49e428acd3b6" dependencies = [ - "bytes 0.5.6", - "http", + "chrono", + "chrono-tz-build 0.4.0", + "phf", ] [[package]] -name = "http-body" -version = "0.4.4" +name = "chrono-tz-build" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ff4f84919677303da5f147645dbea6b1881f368d03ac84e1dc09031ebd7b2c6" +checksum = "0c088aee841df9c3041febbb73934cfc39708749bf96dc827e3359cd39ef11b1" dependencies = [ - "bytes 1.1.0", - "http", - "pin-project-lite 0.2.8", + "parse-zoneinfo", + "phf", + "phf_codegen", ] [[package]] -name = "http-range-header" -version = "0.3.0" +name = "chrono-tz-build" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bfe8eed0a9285ef776bb792479ea3834e8b94e13d615c2f66d03dd50a435a29" +checksum = "e94fea34d77a245229e7746bd2beb786cd2a896f306ff491fb8cecb3074b10a7" +dependencies = [ + "parse-zoneinfo", + "phf_codegen", +] [[package]] -name = "httparse" -version = "1.7.0" +name = "cipher" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6330e8a36bd8c859f3fa6d9382911fbb7147ec39807f63b923933a247240b9ba" +checksum = "7ee52072ec15386f770805afd189a01c8841be8696bed250fa2f13c4c0d6dfb7" +dependencies = [ + "generic-array", +] [[package]] -name = "httpdate" -version = "0.3.2" +name = "cipher" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "494b4d60369511e7dea41cf646832512a94e542f68bb9c49e54518e0f468eb47" +checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" +dependencies = [ + "crypto-common", + "inout", +] [[package]] -name = "httpdate" -version = "1.0.2" +name = "clang-sys" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" +checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4" +dependencies = [ + "glob", + "libc", + "libloading", +] [[package]] -name = "humantime" -version = "2.1.0" +name = "clap" +version = "4.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" +checksum = "b0956a43b323ac1afaffc053ed5c4b7c1f1800bacd1683c353aabbb752515dd3" +dependencies = [ + "clap_builder", + "clap_derive", +] [[package]] -name = "hyper" -version = "0.13.10" +name = "clap_builder" +version = "4.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a6f157065790a3ed2f88679250419b5cdd96e714a0d65f7797fd337186e96bb" +checksum = "4d72166dd41634086d5803a47eb71ae740e61d84709c36f3c34110173db3961b" dependencies = [ - "bytes 0.5.6", - "futures-channel", - "futures-core", - "futures-util", - "h2 0.2.7", - "http", - "http-body 0.3.1", - "httparse", - "httpdate 0.3.2", - "itoa 0.4.8", - "pin-project", - "socket2 0.3.19", - "tokio 0.2.25", - "tower-service", - "tracing", - "want", + "anstream", + "anstyle", + "clap_lex", + "strsim 0.11.1", ] [[package]] -name = "hyper" -version = "0.14.18" +name = "clap_derive" +version = "4.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b26ae0a80afebe130861d90abf98e3814a4f28a4c6ffeb5ab8ebb2be311e0ef2" +checksum = "4ac6a0c7b1a9e9a5186361f67dfa1b88213572f427fb9ab038efb2bd8c582dab" dependencies = [ - "bytes 1.1.0", - "futures-channel", - "futures-core", - "futures-util", - "h2 0.3.13", - "http", - "http-body 0.4.4", - "httparse", - "httpdate 1.0.2", - "itoa 1.0.1", - "pin-project-lite 0.2.8", - "socket2 0.4.4", - "tokio 1.17.0", - "tower-service", - "tracing", - "want", + "heck 0.5.0", + "proc-macro2", + "quote", + "syn 2.0.79", ] [[package]] -name = "hyper-rustls" -version = "0.23.0" +name = "clap_lex" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d87c48c02e0dc5e3b849a2041db3029fd066650f8f717c07bf8ed78ccb895cac" -dependencies = [ - "http", - "hyper 0.14.18", - "rustls 0.20.4", - "tokio 1.17.0", - "tokio-rustls 0.23.3", -] +checksum = "1462739cb27611015575c0c11df5df7601141071f07518d56fcc1be504cbec97" [[package]] -name = "hyper-timeout" -version = "0.4.1" +name = "cmake" +version = "0.1.51" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbb958482e8c7be4bc3cf272a766a2b0bf1a6755e7a6ae777f017a31d11b13b1" +checksum = "fb1e43aa7fd152b1f968787f7dbcdeb306d1867ff373c69955211876c053f91a" dependencies = [ - "hyper 0.14.18", - "pin-project-lite 0.2.8", - "tokio 1.17.0", - "tokio-io-timeout", + "cc", ] [[package]] -name = "hyper-tls" -version = "0.4.3" +name = "colorchoice" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d979acc56dcb5b8dddba3917601745e877576475aa046df3226eabdecef78eed" -dependencies = [ - "bytes 0.5.6", - "hyper 0.13.10", - "native-tls", - "tokio 0.2.25", - "tokio-tls", -] +checksum = "d3fd119d74b830634cea2a0f58bbd0d54540518a14397557951e79340abc28c0" [[package]] -name = "hyper-tls" -version = "0.5.0" +name = "combine" +version = "4.6.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" +checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" dependencies = [ - "bytes 1.1.0", - "hyper 0.14.18", - "native-tls", - "tokio 1.17.0", - "tokio-native-tls", + "bytes", + "futures-core", + "memchr", + "pin-project-lite", + "tokio", + "tokio-util", ] [[package]] -name = "idna" -version = "0.2.3" +name = "comfy-table" +version = "7.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8" +checksum = "b34115915337defe99b2aff5c2ce6771e5fbc4079f4b506301f5cf394c8452f7" dependencies = [ - "matches", - "unicode-bidi", - "unicode-normalization", + "strum 0.26.3", + "strum_macros 0.26.4", + "unicode-width", ] [[package]] -name = "igd" -version = "0.12.0" +name = "concurrent-queue" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c4e7ee8b51e541486d7040883fe1f00e2a9954bcc24fd155b7e4f03ed4b93dd" +checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" dependencies = [ - "attohttpc", - "log", - "rand 0.8.5", - "url", - "xmltree", + "crossbeam-utils", ] [[package]] -name = "indexmap" -version = "1.6.2" +name = "connection-string" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "824845a0bf897a9042383849b02c1bc219c2383772efcd5c6f9766fa4b81aef3" -dependencies = [ - "autocfg 1.1.0", - "hashbrown 0.9.1", -] +checksum = "510ca239cf13b7f8d16a2b48f263de7b4f8c566f0af58d901031473c76afb1e3" [[package]] -name = "instant" -version = "0.1.12" +name = "console" +version = "0.15.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" +checksum = "0e1f83fc076bd6dd27517eacdf25fef6c4dfe5f1d7448bafaaf3a26f13b5e4eb" dependencies = [ - "cfg-if 1.0.0", + "encode_unicode", + "lazy_static", + "libc", + "unicode-width", + "windows-sys 0.52.0", ] [[package]] -name = "iovec" -version = "0.1.4" +name = "console_error_panic_hook" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2b3ea6ff95e175473f8ffe6a7eb7c00d054240321b84c57051175fe3c1e075e" +checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc" dependencies = [ - "libc", + "cfg-if", + "wasm-bindgen", ] [[package]] -name = "ipconfig" -version = "0.2.2" +name = "const-oid" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" + +[[package]] +name = "const-random" +version = "0.1.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7e2f18aece9709094573a9f24f483c4f65caa4298e2f7ae1b71cc65d853fad7" +checksum = "87e00182fe74b066627d63b85fd550ac2998d4b0bd86bfed477a0ae4c7c71359" dependencies = [ - "socket2 0.3.19", - "widestring", - "winapi 0.3.9", - "winreg 0.6.2", + "const-random-macro", ] [[package]] -name = "ipnet" -version = "2.4.0" +name = "const-random-macro" +version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35e70ee094dc02fd9c13fdad4940090f22dbd6ac7c9e7094a46cf0232a50bc7c" +checksum = "f9d839f2a20b0aee515dc581a6172f2321f96cab76c1a38a4c584a194955390e" +dependencies = [ + "getrandom 0.2.15", + "once_cell", + "tiny-keccak", +] [[package]] -name = "itertools" -version = "0.8.2" +name = "const_format" +version = "0.2.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f56a2d0bc861f9165be4eb3442afd3c236d8a98afd426f65d92324ae1091a484" +checksum = "50c655d81ff1114fb0dcdea9225ea9f0cc712a6f8d189378e82bdf62a473a64b" dependencies = [ - "either", + "const_format_proc_macros", + "konst", ] [[package]] -name = "itertools" -version = "0.10.3" +name = "const_format_proc_macros" +version = "0.2.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9a9d19fa1e79b6215ff29b9d6880b706147f16e9b1dbb1e4e5947b5b02bc5e3" +checksum = "eff1a44b93f47b1bac19a27932f5c591e43d1ba357ee4f61526c8a25603f0eb1" dependencies = [ - "either", + "proc-macro2", + "quote", + "unicode-xid", ] [[package]] -name = "itoa" -version = "0.4.8" +name = "constant_time_eq" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" +checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" [[package]] -name = "itoa" -version = "1.0.1" +name = "constant_time_eq" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1aab8fc367588b89dcee83ab0fd66b72b50b72fa1904d7095045ace2b0c81c35" +checksum = "7c74b8349d32d297c9134b8c88677813a227df8f779daa29bfc29c183fe3dca6" [[package]] -name = "js-sys" -version = "0.3.57" +name = "convert_case" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" + +[[package]] +name = "convert_case" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "671a26f820db17c2a2750743f1dd03bafd15b98c9f30c7c2628c024c05d73397" +checksum = "ec182b0ca2f35d8fc196cf3404988fd8b8c739a4d270ff118a398feb0cbec1ca" dependencies = [ - "wasm-bindgen", + "unicode-segmentation", ] [[package]] -name = "json-pointer" -version = "0.3.4" +name = "cooked-waker" +version = "5.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147be55d677052dabc6b22252d5dd0fd4c29c8c27aa4f2fbef0f94aa003b406f" + +[[package]] +name = "cookie" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5fe841b94e719a482213cee19dd04927cf412f26d8dc84c5a446c081e49c2997" +checksum = "7efb37c3e1ccb1ff97164ad95ac1606e8ccd35b3fa0a7d99a304c7f4a428cc24" dependencies = [ - "serde_json", + "time", + "version_check", ] [[package]] -name = "kernel32-sys" -version = "0.2.2" +name = "cookie" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" +checksum = "4ddef33a339a91ea89fb53151bd0a4689cfce27055c291dfa69945475d22c747" dependencies = [ - "winapi 0.2.8", - "winapi-build", + "percent-encoding", + "time", + "version_check", ] [[package]] -name = "lalrpop" -version = "0.17.2" +name = "core-foundation" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64dc3698e75d452867d9bd86f4a723f452ce9d01fe1d55990b79f0c790aa67db" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" dependencies = [ - "ascii-canvas", - "atty", - "bit-set", - "diff", - "docopt", - "ena", - "itertools 0.8.2", - "lalrpop-util", - "petgraph", - "regex", - "regex-syntax", - "serde", - "serde_derive", - "sha2 0.8.2", - "string_cache", - "term", - "unicode-xid 0.1.0", + "core-foundation-sys", + "libc", ] [[package]] -name = "lalrpop-util" -version = "0.17.2" +name = "core-foundation-sys" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c277d18683b36349ab5cd030158b54856fca6bb2d5dc5263b06288f486958b7c" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] -name = "lazy_static" -version = "1.4.0" +name = "cpufeatures" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" +checksum = "608697df725056feaccfa42cffdaeeec3fccc4ffc38358ecd19b243e716a78e0" +dependencies = [ + "libc", +] [[package]] -name = "lettre" -version = "0.10.0-rc.5" +name = "crc" +version = "3.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5144148f337be14dabfc0f0d85b691a68ac6c77ef22a5c47c5504b70a7c9fcf3" +checksum = "69e6e4d7b33a94f0991c26729976b10ebde1d34c3ee82408fb536164fa10d636" dependencies = [ - "async-trait", - "base64", - "email-encoding", - "fastrand", - "futures-io", - "futures-util", - "httpdate 1.0.2", - "idna", - "mime", - "nom", - "once_cell", - "quoted_printable", - "regex", - "rustls 0.20.4", - "rustls-pemfile", - "tokio 1.17.0", - "tokio-rustls 0.23.3", - "webpki-roots 0.22.3", + "crc-catalog", ] [[package]] -name = "libc" -version = "0.2.123" +name = "crc-any" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb691a747a7ab48abc15c5b42066eaafde10dc427e3b6ee2a1cf43db04c763bd" +checksum = "a62ec9ff5f7965e4d7280bd5482acd20aadb50d632cf6c1d74493856b011fa73" +dependencies = [ + "debug-helper", +] [[package]] -name = "linked-hash-map" -version = "0.5.4" +name = "crc-catalog" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fb9b38af92608140b86b693604b9ffcc5824240a484d1ecd4795bacb2fe88f3" +checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" [[package]] -name = "lock_api" -version = "0.4.7" +name = "crc32fast" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "327fa5b6a6940e4699ec49a9beae1ea4845c6bab9314e4f84ac68742139d8c53" +checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" dependencies = [ - "autocfg 1.1.0", - "scopeguard", + "cfg-if", ] [[package]] -name = "log" -version = "0.4.16" +name = "cron" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6389c490849ff5bc16be905ae24bc913a9c8892e19b2341dbc175e14c341c2b8" +checksum = "6f8c3e73077b4b4a6ab1ea5047c37c57aee77657bc8ecd6f29b0af082d0b0c07" dependencies = [ - "cfg-if 1.0.0", + "chrono", + "nom", + "once_cell", ] [[package]] -name = "lru-cache" -version = "0.1.2" +name = "crossbeam" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31e24f1ad8321ca0e8a1e0ac13f23cb668e6f5466c2c57319f6a5cf1cc8e3b1c" +checksum = "1137cd7e7fc0fb5d3c5a8678be38ec56e819125d8d7907411fe24ccb943faca8" dependencies = [ - "linked-hash-map", + "crossbeam-channel", + "crossbeam-deque", + "crossbeam-epoch", + "crossbeam-queue", + "crossbeam-utils", ] [[package]] -name = "magic-crypt" -version = "3.1.10" +name = "crossbeam-channel" +version = "0.5.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c913782c21b53ad246863641fffbaf73a9eb32ff0d939b10d361b7294e2ea9c" +checksum = "33480d6946193aa8033910124896ca395333cae7e2d1113d1fef6c3272217df2" dependencies = [ - "aes", - "base64", - "block-modes", - "crc-any", - "des", - "digest 0.9.0", - "md-5 0.9.1", - "sha2 0.9.9", - "tiger", + "crossbeam-utils", ] [[package]] -name = "match_cfg" -version = "0.1.0" +name = "crossbeam-deque" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4" +checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils", +] [[package]] -name = "matchers" -version = "0.1.0" +name = "crossbeam-epoch" +version = "0.9.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" dependencies = [ - "regex-automata", + "crossbeam-utils", ] [[package]] -name = "matches" -version = "0.1.9" +name = "crossbeam-queue" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f" +checksum = "df0346b5d5e76ac2fe4e327c5fd1118d6be7c51dfb18f9b7922923f287471e35" +dependencies = [ + "crossbeam-utils", +] [[package]] -name = "matchit" -version = "0.5.0" +name = "crossbeam-utils" +version = "0.8.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73cbba799671b762df5a175adf59ce145165747bb891505c43d09aefbbf38beb" +checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" [[package]] -name = "md-5" -version = "0.9.1" +name = "crunchy" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b5a279bb9607f9f53c22d496eade00d138d1bdcccd07d74650387cf94942a15" -dependencies = [ - "block-buffer 0.9.0", - "digest 0.9.0", - "opaque-debug 0.3.0", -] +checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" [[package]] -name = "md-5" -version = "0.10.1" +name = "crypto-bigint" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "658646b21e0b72f7866c7038ab086d3d5e1cd6271f060fd37defb241949d0582" +checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" dependencies = [ - "digest 0.10.3", + "generic-array", + "rand_core 0.6.4", + "subtle", + "zeroize", ] [[package]] -name = "memchr" -version = "2.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a" - -[[package]] -name = "mime" -version = "0.3.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" - -[[package]] -name = "mime_guess" -version = "2.0.4" +name = "crypto-common" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4192263c238a5f0d0c6bfd21f336a313a4ce1c450542449ca191bb657b4642ef" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" dependencies = [ - "mime", - "unicase", + "generic-array", + "typenum", ] [[package]] -name = "minimal-lexical" -version = "0.2.1" +name = "csv" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" +checksum = "ac574ff4d437a7b5ad237ef331c17ccca63c46479e5b5453eb8e10bb99a759fe" +dependencies = [ + "csv-core", + "itoa", + "ryu", + "serde", +] [[package]] -name = "miniz_oxide" -version = "0.5.1" +name = "csv-core" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2b29bd4bc3f33391105ebee3589c19197c4271e3e5a9ec9bfe8127eeff8f082" +checksum = "5efa2b3d7902f4b634a20cae3c9c4e6209dc4779feb6863329607560143efa70" dependencies = [ - "adler", + "memchr", ] [[package]] -name = "mio" -version = "0.6.23" +name = "curve25519-dalek" +version = "4.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4afd66f5b91bf2a3bc13fad0e21caedac168ca4c707504e75585648ae80e4cc4" +checksum = "97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be" dependencies = [ - "cfg-if 0.1.10", - "fuchsia-zircon", - "fuchsia-zircon-sys", - "iovec", - "kernel32-sys", - "libc", - "log", - "miow 0.2.2", - "net2", - "slab", - "winapi 0.2.8", + "cfg-if", + "cpufeatures", + "curve25519-dalek-derive", + "digest 0.10.7", + "fiat-crypto", + "rustc_version 0.4.1", + "subtle", + "zeroize", ] [[package]] -name = "mio" -version = "0.8.2" +name = "curve25519-dalek-derive" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52da4364ffb0e4fe33a9841a98a3f3014fb964045ce4f7a45a398243c8d6b0c9" +checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ - "libc", - "log", - "miow 0.3.7", - "ntapi", - "wasi 0.11.0+wasi-snapshot-preview1", - "winapi 0.3.9", + "proc-macro2", + "quote", + "syn 2.0.79", ] [[package]] -name = "miow" -version = "0.2.2" +name = "darling" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebd808424166322d4a38da87083bfddd3ac4c131334ed55856112eb06d46944d" +checksum = "7b750cb3417fd1b327431a470f388520309479ab0bf5e323505daf0290cd3850" dependencies = [ - "kernel32-sys", - "net2", - "winapi 0.2.8", - "ws2_32-sys", + "darling_core 0.14.4", + "darling_macro 0.14.4", ] [[package]] -name = "miow" -version = "0.3.7" +name = "darling" +version = "0.20.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9f1c5b025cda876f66ef43a113f91ebc9f4ccef34843000e0adf6ebbab84e21" +checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" dependencies = [ - "winapi 0.3.9", + "darling_core 0.20.10", + "darling_macro 0.20.10", ] [[package]] -name = "native-tls" -version = "0.2.10" +name = "darling_core" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd7e2f3618557f980e0b17e8856252eee3c97fa12c54dff0ca290fb6266ca4a9" +checksum = "109c1ca6e6b7f82cc233a97004ea8ed7ca123a9af07a8230878fcfda9b158bf0" dependencies = [ - "lazy_static", - "libc", - "log", - "openssl", - "openssl-probe", - "openssl-sys", - "schannel", - "security-framework", - "security-framework-sys", - "tempfile", + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim 0.10.0", + "syn 1.0.109", ] [[package]] -name = "net2" -version = "0.2.37" +name = "darling_core" +version = "0.20.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "391630d12b68002ae1e25e8f974306474966550ad82dac6886fb8910c19568ae" +checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5" dependencies = [ - "cfg-if 0.1.10", - "libc", - "winapi 0.3.9", + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim 0.11.1", + "syn 2.0.79", ] [[package]] -name = "new_debug_unreachable" -version = "1.0.4" +name = "darling_macro" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54" +checksum = "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e" +dependencies = [ + "darling_core 0.14.4", + "quote", + "syn 1.0.109", +] [[package]] -name = "nom" -version = "7.1.1" +name = "darling_macro" +version = "0.20.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8903e5a29a317527874d0402f867152a3d21c908bb0b933e416c65e301d4c36" +checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" dependencies = [ - "memchr", - "minimal-lexical", + "darling_core 0.20.10", + "quote", + "syn 2.0.79", ] [[package]] -name = "ntapi" -version = "0.3.7" +name = "dashmap" +version = "5.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c28774a7fd2fbb4f0babd8237ce554b73af68021b5f695a3cebd6c59bac0980f" +checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" dependencies = [ - "winapi 0.3.9", + "cfg-if", + "hashbrown 0.14.5", + "lock_api", + "once_cell", + "parking_lot_core", ] [[package]] -name = "num-bigint" -version = "0.2.6" +name = "data-encoding" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "090c7f9998ee0ff65aa5b723e4009f7b217707f1fb5ea551329cc4d6231fb304" -dependencies = [ - "autocfg 1.1.0", - "num-integer", - "num-traits", -] +checksum = "e8566979429cf69b49a5c740c60791108e86440e8be149bbea4fe54d2c32d6e2" [[package]] -name = "num-integer" -version = "0.1.44" +name = "data-url" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db" -dependencies = [ - "autocfg 1.1.0", - "num-traits", -] +checksum = "41b319d1b62ffbd002e057f36bebd1f42b9f97927c9577461d855f3513c4289f" [[package]] -name = "num-traits" -version = "0.2.14" +name = "datafusion" +version = "39.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290" +checksum = "2f92d2d7a9cba4580900b32b009848d9eb35f1028ac84cdd6ddcf97612cd0068" dependencies = [ - "autocfg 1.1.0", + "ahash 0.8.11", + "arrow", + "arrow-array", + "arrow-ipc", + "arrow-schema", + "async-compression 0.4.12", + "async-trait", + "bytes", + "bzip2", + "chrono", + "dashmap", + "datafusion-common", + "datafusion-common-runtime", + "datafusion-execution", + "datafusion-expr", + "datafusion-functions", + "datafusion-functions-aggregate", + "datafusion-functions-array", + "datafusion-optimizer", + "datafusion-physical-expr", + "datafusion-physical-expr-common", + "datafusion-physical-plan", + "datafusion-sql", + "flate2", + "futures", + "glob", + "half", + "hashbrown 0.14.5", + "indexmap 2.5.0", + "itertools 0.12.1", + "log", + "num_cpus", + "object_store", + "parking_lot", + "parquet", + "paste", + "pin-project-lite", + "rand 0.8.5", + "sqlparser", + "tempfile", + "tokio", + "tokio-util", + "url", + "uuid 1.10.0", + "xz2", + "zstd 0.13.2", ] [[package]] -name = "num_cpus" -version = "1.13.1" +name = "datafusion-common" +version = "39.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1" +checksum = "effed030d2c1667eb1e11df5372d4981eaf5d11a521be32220b3985ae5ba6971" dependencies = [ - "hermit-abi", + "ahash 0.8.11", + "arrow", + "arrow-array", + "arrow-buffer", + "arrow-schema", + "chrono", + "half", + "hashbrown 0.14.5", + "instant", "libc", + "num_cpus", + "object_store", + "parquet", + "sqlparser", ] [[package]] -name = "num_threads" -version = "0.1.5" +name = "datafusion-common-runtime" +version = "39.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aba1801fb138d8e85e11d0fc70baf4fe1cdfffda7c6cd34a854905df588e5ed0" +checksum = "d0091318129dad1359f08e4c6c71f855163c35bba05d1dbf983196f727857894" dependencies = [ - "libc", + "tokio", ] [[package]] -name = "oauth2" -version = "4.1.0" +name = "datafusion-execution" +version = "39.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80e47cfc4c0a1a519d9a025ebfbac3a2439d1b5cdf397d72dcb79b11d9920dab" +checksum = "8385aba84fc4a06d3ebccfbcbf9b4f985e80c762fac634b49079f7cc14933fb1" dependencies = [ - "base64", + "arrow", "chrono", - "getrandom 0.2.6", - "http", + "dashmap", + "datafusion-common", + "datafusion-expr", + "futures", + "hashbrown 0.14.5", + "log", + "object_store", + "parking_lot", "rand 0.8.5", - "reqwest 0.11.10", - "serde", - "serde_json", - "serde_path_to_error", - "sha2 0.9.9", - "thiserror", + "tempfile", "url", ] [[package]] -name = "once_cell" -version = "1.10.0" +name = "datafusion-expr" +version = "39.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87f3e037eac156d1775da914196f0f37741a274155e34a0b7e427c35d2a2ecb9" +checksum = "ebb192f0055d2ce64e38ac100abc18e4e6ae9734d3c28eee522bbbd6a32108a3" +dependencies = [ + "ahash 0.8.11", + "arrow", + "arrow-array", + "arrow-buffer", + "chrono", + "datafusion-common", + "paste", + "serde_json", + "sqlparser", + "strum 0.26.3", + "strum_macros 0.26.4", +] [[package]] -name = "opaque-debug" -version = "0.2.3" +name = "datafusion-functions" +version = "39.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c" +checksum = "27c081ae5b7edd712b92767fb8ed5c0e32755682f8075707666cd70835807c0b" +dependencies = [ + "arrow", + "base64 0.22.1", + "blake2", + "blake3", + "chrono", + "datafusion-common", + "datafusion-execution", + "datafusion-expr", + "datafusion-physical-expr", + "hashbrown 0.14.5", + "hex", + "itertools 0.12.1", + "log", + "md-5 0.10.6", + "rand 0.8.5", + "regex", + "sha2 0.10.8", + "unicode-segmentation", + "uuid 1.10.0", +] [[package]] -name = "opaque-debug" -version = "0.3.0" +name = "datafusion-functions-aggregate" +version = "39.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" +checksum = "feb28a4ea52c28a26990646986a27c4052829a2a2572386258679e19263f8b78" +dependencies = [ + "ahash 0.8.11", + "arrow", + "arrow-schema", + "datafusion-common", + "datafusion-execution", + "datafusion-expr", + "datafusion-physical-expr-common", + "log", + "paste", + "sqlparser", +] [[package]] -name = "openssl" -version = "0.10.38" +name = "datafusion-functions-array" +version = "39.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c7ae222234c30df141154f159066c5093ff73b63204dcda7121eb082fc56a95" +checksum = "89b17c02a74cdc87380a56758ec27e7d417356bf806f33062700908929aedb8a" dependencies = [ - "bitflags", - "cfg-if 1.0.0", - "foreign-types", - "libc", - "once_cell", - "openssl-sys", + "arrow", + "arrow-array", + "arrow-buffer", + "arrow-ord", + "arrow-schema", + "datafusion-common", + "datafusion-execution", + "datafusion-expr", + "datafusion-functions", + "itertools 0.12.1", + "log", + "paste", ] [[package]] -name = "openssl-probe" -version = "0.1.5" +name = "datafusion-optimizer" +version = "39.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" +checksum = "12172f2a6c9eb4992a51e62d709eeba5dedaa3b5369cce37ff6c2260e100ba76" +dependencies = [ + "arrow", + "async-trait", + "chrono", + "datafusion-common", + "datafusion-expr", + "datafusion-physical-expr", + "hashbrown 0.14.5", + "indexmap 2.5.0", + "itertools 0.12.1", + "log", + "regex-syntax 0.8.4", +] [[package]] -name = "openssl-sys" -version = "0.9.72" +name = "datafusion-physical-expr" +version = "39.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e46109c383602735fa0a2e48dd2b7c892b048e1bf69e5c3b1d804b7d9c203cb" +checksum = "7a3fce531b623e94180f6cd33d620ef01530405751b6ddd2fd96250cdbd78e2e" dependencies = [ - "autocfg 1.1.0", - "cc", - "libc", - "pkg-config", - "vcpkg", + "ahash 0.8.11", + "arrow", + "arrow-array", + "arrow-buffer", + "arrow-ord", + "arrow-schema", + "arrow-string", + "base64 0.22.1", + "chrono", + "datafusion-common", + "datafusion-execution", + "datafusion-expr", + "datafusion-functions-aggregate", + "datafusion-physical-expr-common", + "half", + "hashbrown 0.14.5", + "hex", + "indexmap 2.5.0", + "itertools 0.12.1", + "log", + "paste", + "petgraph", + "regex", ] [[package]] -name = "ordermap" -version = "0.3.5" +name = "datafusion-physical-expr-common" +version = "39.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a86ed3f5f244b372d6b1a00b72ef7f8876d0bc6a78a4c9985c53614041512063" +checksum = "046400b6a2cc3ed57a7c576f5ae6aecc77804ac8e0186926b278b189305b2a77" +dependencies = [ + "arrow", + "datafusion-common", + "datafusion-expr", + "rand 0.8.5", +] [[package]] -name = "parking_lot" -version = "0.11.2" +name = "datafusion-physical-plan" +version = "39.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" +checksum = "4aed47f5a2ad8766260befb375b201592e86a08b260256e168ae4311426a2bff" dependencies = [ - "instant", - "lock_api", - "parking_lot_core 0.8.5", + "ahash 0.8.11", + "arrow", + "arrow-array", + "arrow-buffer", + "arrow-ord", + "arrow-schema", + "async-trait", + "chrono", + "datafusion-common", + "datafusion-common-runtime", + "datafusion-execution", + "datafusion-expr", + "datafusion-functions-aggregate", + "datafusion-physical-expr", + "datafusion-physical-expr-common", + "futures", + "half", + "hashbrown 0.14.5", + "indexmap 2.5.0", + "itertools 0.12.1", + "log", + "once_cell", + "parking_lot", + "pin-project-lite", + "rand 0.8.5", + "tokio", ] [[package]] -name = "parking_lot" -version = "0.12.0" +name = "datafusion-sql" +version = "39.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87f5ec2493a61ac0506c0f4199f99070cbe83857b0337006a30f3e6719b8ef58" +checksum = "7fa92bb1fd15e46ce5fb6f1c85f3ac054592560f294429a28e392b5f9cd4255e" dependencies = [ - "lock_api", - "parking_lot_core 0.9.2", + "arrow", + "arrow-array", + "arrow-schema", + "datafusion-common", + "datafusion-expr", + "log", + "regex", + "sqlparser", + "strum 0.26.3", ] [[package]] -name = "parking_lot_core" -version = "0.8.5" +name = "debug-helper" +version = "0.3.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f578e8e2c440e7297e008bb5486a3a8a194775224bbc23729b0dbdfaeebf162e" + +[[package]] +name = "debugid" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d76e8e1493bcac0d2766c42737f34458f1c8c50c0d23bcb24ea953affb273216" +checksum = "bef552e6f588e446098f6ba40d89ac146c8c7b64aade83c051ee00bb5d2bc18d" dependencies = [ - "cfg-if 1.0.0", - "instant", - "libc", - "redox_syscall 0.2.13", - "smallvec", - "winapi 0.3.9", + "serde", + "uuid 1.10.0", ] [[package]] -name = "parking_lot_core" -version = "0.9.2" +name = "deno_ast" +version = "0.40.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "995f667a6c822200b0433ac218e05582f0e2efa1b922a3fd2fbaadc5f87bab37" +checksum = "4d08372522975cce97fe0efbe42fea508c76eea4421619de6d63baae32792f7d" dependencies = [ - "cfg-if 1.0.0", - "libc", - "redox_syscall 0.2.13", - "smallvec", - "windows-sys", + "anyhow", + "base64 0.21.7", + "deno_media_type", + "deno_terminal 0.1.1", + "dprint-swc-ext", + "once_cell", + "percent-encoding", + "serde", + "swc_atoms", + "swc_common 0.34.4", + "swc_config", + "swc_config_macro", + "swc_ecma_ast 0.115.1", + "swc_ecma_codegen", + "swc_ecma_codegen_macros", + "swc_ecma_loader", + "swc_ecma_parser 0.146.12", + "swc_ecma_transforms_base", + "swc_ecma_transforms_classes", + "swc_ecma_transforms_macros", + "swc_ecma_transforms_proposal", + "swc_ecma_transforms_react", + "swc_ecma_transforms_typescript", + "swc_ecma_utils", + "swc_ecma_visit 0.101.0", + "swc_eq_ignore_macros", + "swc_macros_common", + "swc_visit", + "swc_visit_macros", + "text_lines", + "thiserror", + "unicode-width", + "url", ] [[package]] -name = "password-hash" -version = "0.4.0" +name = "deno_console" +version = "0.163.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa26fd5c3cd6e6bb83dd9c0cef40fbeb77d7596339ca46c18a6f66919bb07769" +checksum = "a4eea4d3eeb96874c63fde5001d0242042957b600000f179af4ad3235a411139" dependencies = [ - "base64ct", - "rand_core 0.6.3", - "subtle 2.4.1", + "deno_core", ] [[package]] -name = "paste" -version = "1.0.7" +name = "deno_core" +version = "0.299.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c520e05135d6e763148b6426a837e239041653ba7becd2e538c076c738025fc" +checksum = "428488cc6b392a199a159054da754f56a1fdc63ee03f16be2c21cbd22e936e7b" +dependencies = [ + "anyhow", + "bincode", + "bit-set", + "bit-vec", + "bytes", + "cooked-waker", + "deno_core_icudata", + "deno_ops", + "deno_unsync", + "futures", + "libc", + "memoffset", + "parking_lot", + "percent-encoding", + "pin-project", + "serde", + "serde_json", + "serde_v8", + "smallvec", + "sourcemap", + "static_assertions", + "tokio", + "url", + "v8", +] [[package]] -name = "percent-encoding" -version = "2.1.0" +name = "deno_core_icudata" +version = "0.0.73" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" +checksum = "a13951ea98c0a4c372f162d669193b4c9d991512de9f2381dd161027f34b26b1" [[package]] -name = "petgraph" -version = "0.4.13" +name = "deno_fetch" +version = "0.187.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c3659d1ee90221741f65dd128d9998311b0e40c5d3c23a62445938214abce4f" +checksum = "7f11f1ca946366c42e7daaab0d747720710dbb11511d9bfce1b328dd71b58f87" dependencies = [ - "fixedbitset", - "ordermap", + "base64 0.21.7", + "bytes", + "data-url", + "deno_core", + "deno_permissions", + "deno_tls", + "dyn-clone", + "http 1.1.0", + "http-body-util", + "hyper 1.4.1", + "hyper-rustls 0.27.3", + "hyper-util", + "ipnet", + "percent-encoding", + "rustls-webpki 0.102.8", + "serde", + "serde_json", + "tokio", + "tokio-rustls 0.26.0", + "tokio-socks", + "tokio-util", + "tower 0.4.13", + "tower-http", + "tower-service", ] [[package]] -name = "phf_generator" -version = "0.7.24" +name = "deno_media_type" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09364cc93c159b8b06b1f4dd8a4398984503483891b0c26b867cf431fb132662" +checksum = "a8978229b82552bf8457a0125aa20863f023619cfc21ebb007b1e571d68fd85b" dependencies = [ - "phf_shared", - "rand 0.6.5", + "data-url", + "serde", + "url", ] [[package]] -name = "phf_shared" -version = "0.7.24" +name = "deno_native_certs" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "234f71a15de2288bcb7e3b6515828d22af7ec8598ee6d24c3b526fa0a80b67a0" +checksum = "86bc737e098a45aa5742d51ce694ac7236a1e69fb0d9df8c862e9b4c9583c5f9" dependencies = [ - "siphasher", + "dlopen2", + "dlopen2_derive", + "once_cell", + "rustls-native-certs 0.7.3", + "rustls-pemfile 2.1.3", ] [[package]] -name = "pin-project" -version = "1.0.10" +name = "deno_net" +version = "0.155.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58ad3879ad3baf4e44784bc6a718a8698867bb991f8ce24d1bcbe2cfb4c3a75e" +checksum = "db3f337ffe00186bc67f989f5ba2759418bb43e1352b045aa9e715e216c632dc" dependencies = [ - "pin-project-internal", + "deno_core", + "deno_permissions", + "deno_tls", + "pin-project", + "rustls-tokio-stream", + "serde", + "socket2 0.5.7", + "tokio", + "trust-dns-proto", + "trust-dns-resolver", ] [[package]] -name = "pin-project-internal" -version = "1.0.10" +name = "deno_ops" +version = "0.175.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "744b6f092ba29c3650faf274db506afd39944f48420f6c86b17cfe0ee1cb36bb" +checksum = "2d2b71759647722be6ae051919b75cb66b3dccafe61b53c75ad5a6fad9d0ee4a" dependencies = [ + "proc-macro-rules", "proc-macro2", "quote", - "syn", + "strum 0.25.0", + "strum_macros 0.25.3", + "syn 2.0.79", + "thiserror", ] [[package]] -name = "pin-project-lite" -version = "0.1.12" +name = "deno_permissions" +version = "0.23.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "257b64915a082f7811703966789728173279bdebb956b143dbcd23f6f970a777" +checksum = "15e67d40735d56445409349cec3eafe25668814c7f3794158c62dfd1b147b13c" +dependencies = [ + "deno_core", + "deno_terminal 0.2.0", + "fqdn", + "libc", + "log", + "once_cell", + "serde", + "which 4.4.2", + "winapi", +] [[package]] -name = "pin-project-lite" -version = "0.2.8" +name = "deno_terminal" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e280fbe77cc62c91527259e9442153f4688736748d24660126286329742b4c6c" +checksum = "7e6337d4e7f375f8b986409a76fbeecfa4bd8a1343e63355729ae4befa058eaf" +dependencies = [ + "once_cell", + "termcolor", +] [[package]] -name = "pin-utils" -version = "0.1.0" +name = "deno_terminal" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" +checksum = "daef12499e89ee99e51ad6000a91f600d3937fb028ad4918af76810c5bc9e0d5" +dependencies = [ + "once_cell", + "termcolor", +] [[package]] -name = "pkg-config" -version = "0.3.25" +name = "deno_tls" +version = "0.150.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1df8c4ec4b0627e53bdf214615ad287367e482558cf84b109250b37464dc03ae" +checksum = "2b995ce6016bc4f05453c8632a9d42a58536c1cbb7ece09f1aa66dda3f8d474b" +dependencies = [ + "deno_core", + "deno_native_certs", + "rustls 0.23.13", + "rustls-pemfile 2.1.3", + "rustls-tokio-stream", + "rustls-webpki 0.102.8", + "serde", + "tokio", + "webpki-roots 0.26.6", +] [[package]] -name = "ppv-lite86" -version = "0.2.16" +name = "deno_unsync" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872" +checksum = "2f36b4ef61a04ce201b925a5dffa90f88437d37fee4836c758470dd15ba7f05e" +dependencies = [ + "parking_lot", + "tokio", +] [[package]] -name = "precomputed-hash" -version = "0.1.1" +name = "deno_url" +version = "0.163.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" +checksum = "9a05423871cf79fc0e73b9117b114045b7936a60b87a188b673a2b377a65eaa1" +dependencies = [ + "deno_core", + "urlpattern", +] [[package]] -name = "proc-macro-hack" -version = "0.5.19" +name = "deno_web" +version = "0.194.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5" +checksum = "884761df6d0bbe2869a8bfb3f4437aef75686dcbedd82dd4d23d1e7b06d50b14" +dependencies = [ + "async-trait", + "base64-simd 0.8.0", + "bytes", + "deno_core", + "deno_permissions", + "encoding_rs", + "flate2", + "futures", + "serde", + "tokio", + "uuid 1.10.0", +] [[package]] -name = "proc-macro2" -version = "1.0.37" +name = "deno_webidl" +version = "0.163.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec757218438d5fda206afc041538b2f6d889286160d649a86a24d37e1235afd1" +checksum = "a564c240839f20b8808d0182a0c1a85428a92fb7fe6cc6ea256adda11ad08a8d" dependencies = [ - "unicode-xid 0.2.2", + "deno_core", ] [[package]] -name = "prost" -version = "0.10.1" +name = "der" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a07b0857a71a8cb765763950499cae2413c3f9cede1133478c43600d9e146890" +checksum = "f1a467a65c5e759bce6e65eaf91cc29f466cdc57cb65777bd646872a8a1fd4de" dependencies = [ - "bytes 1.1.0", - "prost-derive", + "const-oid", + "pem-rfc7468 0.6.0", + "zeroize", ] [[package]] -name = "prost-derive" -version = "0.10.1" +name = "der" +version = "0.7.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b670f45da57fb8542ebdbb6105a925fe571b67f9e7ed9f47a06a84e72b4e7cc" +checksum = "f55bf8e7b65898637379c1b74eb1551107c8294ed26d855ceb9fd1a09cfc9bc0" dependencies = [ - "anyhow", - "itertools 0.10.3", - "proc-macro2", - "quote", - "syn", + "const-oid", + "pem-rfc7468 0.7.0", + "zeroize", ] [[package]] -name = "prost-types" -version = "0.10.1" +name = "deranged" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d0a014229361011dc8e69c8a1ec6c2e8d0f2af7c91e3ea3f5b2170298461e68" +checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" dependencies = [ - "bytes 1.1.0", - "prost", + "powerfmt", + "serde", ] [[package]] -name = "quick-error" -version = "1.2.3" +name = "derive_builder" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" +checksum = "8d67778784b508018359cbc8696edb3db78160bab2c2a28ba7f56ef6932997f8" +dependencies = [ + "derive_builder_macro", +] [[package]] -name = "quote" -version = "1.0.18" +name = "derive_builder_core" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1feb54ed693b93a84e14094943b84b7c4eae204c512b7ccb95ab0c66d278ad1" +checksum = "c11bdc11a0c47bc7d37d582b5285da6849c96681023680b906673c5707af7b0f" dependencies = [ + "darling 0.14.4", "proc-macro2", + "quote", + "syn 1.0.109", ] [[package]] -name = "quoted_printable" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fee2dce59f7a43418e3382c766554c614e06a552d53a8f07ef499ea4b332c0f" - -[[package]] -name = "rand" -version = "0.6.5" +name = "derive_builder_macro" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d71dacdc3c88c1fde3885a3be3fbab9f35724e6ce99467f7d9c5026132184ca" +checksum = "ebcda35c7a396850a55ffeac740804b40ffec779b98fffbb1738f4033f0ee79e" dependencies = [ - "autocfg 0.1.8", - "libc", - "rand_chacha 0.1.1", - "rand_core 0.4.2", - "rand_hc", - "rand_isaac", - "rand_jitter", - "rand_os", - "rand_pcg", - "rand_xorshift", - "winapi 0.3.9", + "derive_builder_core", + "syn 1.0.109", ] [[package]] -name = "rand" -version = "0.8.5" +name = "derive_more" +version = "0.99.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +checksum = "5f33878137e4dafd7fa914ad4e259e18a4e8e532b9617a2d0150262bf53abfce" dependencies = [ - "libc", - "rand_chacha 0.3.1", - "rand_core 0.6.3", + "convert_case 0.4.0", + "proc-macro2", + "quote", + "rustc_version 0.4.1", + "syn 2.0.79", ] [[package]] -name = "rand_chacha" -version = "0.1.1" +name = "des" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "556d3a1ca6600bfcbab7c7c91ccb085ac7fbbcd70e008a98742e7847f4f7bcef" +checksum = "ac41dd49fb554432020d52c875fc290e110113f864c6b1b525cd62c7e7747a5d" dependencies = [ - "autocfg 0.1.8", - "rand_core 0.3.1", + "byteorder", + "cipher 0.3.0", + "opaque-debug", ] [[package]] -name = "rand_chacha" -version = "0.3.1" +name = "digest" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" dependencies = [ - "ppv-lite86", - "rand_core 0.6.3", + "generic-array", ] [[package]] -name = "rand_core" -version = "0.3.1" +name = "digest" +version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ - "rand_core 0.4.2", + "block-buffer 0.10.4", + "const-oid", + "crypto-common", + "subtle", ] [[package]] -name = "rand_core" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc" - -[[package]] -name = "rand_core" -version = "0.6.3" +name = "dirs" +version = "5.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7" +checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" dependencies = [ - "getrandom 0.2.6", + "dirs-sys", ] [[package]] -name = "rand_hc" -version = "0.1.0" +name = "dirs-next" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b40677c7be09ae76218dc623efbf7b18e34bced3f38883af07bb75630a21bc4" +checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1" dependencies = [ - "rand_core 0.3.1", + "cfg-if", + "dirs-sys-next", ] [[package]] -name = "rand_isaac" -version = "0.1.1" +name = "dirs-sys" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ded997c9d5f13925be2a6fd7e66bf1872597f759fd9dd93513dd7e92e5a5ee08" +checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c" dependencies = [ - "rand_core 0.3.1", + "libc", + "option-ext", + "redox_users", + "windows-sys 0.48.0", ] [[package]] -name = "rand_jitter" -version = "0.1.4" +name = "dirs-sys-next" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1166d5c91dc97b88d1decc3285bb0a99ed84b05cfd0bc2341bdf2d43fc41e39b" +checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" dependencies = [ "libc", - "rand_core 0.4.2", - "winapi 0.3.9", + "redox_users", + "winapi", ] [[package]] -name = "rand_os" -version = "0.1.3" +name = "dlopen2" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b75f676a1e053fc562eafbb47838d67c84801e38fc1ba459e8f180deabd5071" +checksum = "9e1297103d2bbaea85724fcee6294c2d50b1081f9ad47d0f6f6f61eda65315a6" dependencies = [ - "cloudabi", - "fuchsia-cprng", + "dlopen2_derive", "libc", - "rand_core 0.4.2", - "rdrand", - "winapi 0.3.9", + "once_cell", + "winapi", ] [[package]] -name = "rand_pcg" -version = "0.1.2" +name = "dlopen2_derive" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abf9b09b01790cfe0364f52bf32995ea3c39f4d2dd011eac241d2914146d0b44" +checksum = "f2b99bf03862d7f545ebc28ddd33a665b50865f4dfd84031a393823879bd4c54" dependencies = [ - "autocfg 0.1.8", - "rand_core 0.4.2", + "proc-macro2", + "quote", + "syn 2.0.79", ] [[package]] -name = "rand_xorshift" -version = "0.1.1" +name = "doc-comment" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbf7e9e623549b0e21f6e97cf8ecf247c1a8fd2e8a992ae265314300b2455d5c" -dependencies = [ - "rand_core 0.3.1", -] +checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" [[package]] -name = "rdrand" -version = "0.4.0" +name = "dotenv" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2" -dependencies = [ - "rand_core 0.3.1", -] +checksum = "77c90badedccf4105eca100756a0b1289e191f6fcbdadd3cee1d2f614f97da8f" [[package]] -name = "redox_syscall" -version = "0.1.57" +name = "dotenvy" +version = "0.15.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41cc0f7e4d5d4544e8861606a285bb08d3e70712ccc7d2b84d7c0ccfaf4b05ce" +checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" [[package]] -name = "redox_syscall" -version = "0.2.13" +name = "downcast-rs" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62f25bc4c7e55e0b0b7a1d43fb893f4fa1361d0abe38b9ce4f323c2adfe6ef42" -dependencies = [ - "bitflags", -] +checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" [[package]] -name = "redox_users" -version = "0.3.5" +name = "dprint-swc-ext" +version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de0737333e7a9502c789a36d7c7fa6092a49895d4faa31ca5df163857ded2e9d" +checksum = "2b909f9f9b22a6265839887544dce97b0b8e2b2635abf622f45613deb3de63e0" dependencies = [ - "getrandom 0.1.16", - "redox_syscall 0.1.57", - "rust-argon2", + "num-bigint", + "rustc-hash 1.1.0", + "swc_atoms", + "swc_common 0.34.4", + "swc_ecma_ast 0.115.1", + "swc_ecma_parser 0.146.12", + "text_lines", ] [[package]] -name = "redox_users" -version = "0.4.3" +name = "dyn-clone" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" -dependencies = [ - "getrandom 0.2.6", - "redox_syscall 0.2.13", - "thiserror", -] +checksum = "0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125" [[package]] -name = "regex" -version = "1.5.5" +name = "dyn-iter" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a11647b6b25ff05a515cb92c365cec08801e83423a235b51e231e1808747286" -dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax", -] +checksum = "131726693bce13b09331bee70734fe266666332b6ddfef23e9dca5b8bf6dea66" [[package]] -name = "regex-automata" -version = "0.1.10" +name = "dyn-stack" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" +checksum = "56e53799688f5632f364f8fb387488dd05db9fe45db7011be066fc20e7027f8b" dependencies = [ - "regex-syntax", + "bytemuck", + "reborrow", ] [[package]] -name = "regex-syntax" -version = "0.6.25" +name = "ecdsa" +version = "0.16.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b" +checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" +dependencies = [ + "der 0.7.9", + "digest 0.10.7", + "elliptic-curve", + "rfc6979", + "signature 2.2.0", + "spki 0.7.3", +] [[package]] -name = "remove_dir_all" -version = "0.5.3" +name = "ed25519" +version = "2.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7" +checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53" dependencies = [ - "winapi 0.3.9", + "pkcs8 0.10.2", + "signature 2.2.0", ] [[package]] -name = "reqwest" -version = "0.10.10" +name = "ed25519-dalek" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0718f81a8e14c4dbb3b34cf23dc6aaf9ab8a0dfec160c534b3dbca1aaa21f47c" +checksum = "4a3daa8e81a3963a60642bcc1f90a670680bd4a77535faa384e9d1c79d620871" dependencies = [ - "base64", - "bytes 0.5.6", - "encoding_rs", - "futures-core", - "futures-util", - "http", - "http-body 0.3.1", - "hyper 0.13.10", - "hyper-tls 0.4.3", - "ipnet", - "js-sys", - "lazy_static", - "log", - "mime", - "mime_guess", - "native-tls", - "percent-encoding", - "pin-project-lite 0.2.8", + "curve25519-dalek", + "ed25519", "serde", - "serde_urlencoded", - "tokio 0.2.25", - "tokio-tls", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", - "winreg 0.7.0", + "sha2 0.10.8", + "subtle", + "zeroize", ] [[package]] -name = "reqwest" -version = "0.11.10" +name = "either" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46a1f7aa4f35e5e8b4160449f51afc758f0ce6454315a9fa7d0d113e958c41eb" +checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" dependencies = [ - "base64", - "bytes 1.1.0", - "encoding_rs", - "futures-core", - "futures-util", - "h2 0.3.13", - "http", - "http-body 0.4.4", - "hyper 0.14.18", - "hyper-rustls", - "hyper-tls 0.5.0", - "ipnet", - "js-sys", - "lazy_static", - "log", - "mime", - "native-tls", - "percent-encoding", - "pin-project-lite 0.2.8", - "rustls 0.20.4", - "rustls-pemfile", "serde", - "serde_json", - "serde_urlencoded", - "tokio 1.17.0", - "tokio-native-tls", - "tokio-rustls 0.23.3", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", - "webpki-roots 0.22.3", - "winreg 0.10.1", ] [[package]] -name = "resolv-conf" -version = "0.7.0" +name = "elliptic-curve" +version = "0.13.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52e44394d2086d010551b14b53b1f24e31647570cd1deb0379e2c21b329aba00" +checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" dependencies = [ - "hostname", - "quick-error", + "base16ct", + "crypto-bigint", + "digest 0.10.7", + "ff", + "generic-array", + "group", + "hkdf", + "pem-rfc7468 0.7.0", + "pkcs8 0.10.2", + "rand_core 0.6.4", + "sec1", + "subtle", + "zeroize", ] [[package]] -name = "retainer" -version = "0.3.0" +name = "encode_unicode" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df8c01a8276c14d0f8d51ebcf8a48f0748f9f73f5f6b29e688126e6a52bcb145" -dependencies = [ - "async-lock", - "async-timer", - "log", - "rand 0.8.5", -] +checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" [[package]] -name = "ring" -version = "0.16.20" +name = "encoding_rs" +version = "0.8.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc" +checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1" dependencies = [ - "cc", - "libc", - "once_cell", - "spin", - "untrusted", - "web-sys", - "winapi 0.3.9", + "cfg-if", ] [[package]] -name = "rust-argon2" -version = "0.8.3" +name = "enum-as-inner" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b18820d944b33caa75a71378964ac46f58517c92b6ae5f762636247c09e78fb" +checksum = "a1e6a265c649f3f5979b601d26f1d05ada116434c87741c9493cb56218f76cbc" dependencies = [ - "base64", - "blake2b_simd", - "constant_time_eq", - "crossbeam-utils", + "heck 0.5.0", + "proc-macro2", + "quote", + "syn 2.0.79", ] [[package]] -name = "rust-embed" -version = "6.4.0" +name = "enumflags2" +version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a17e5ac65b318f397182ae94e532da0ba56b88dd1200b774715d36c4943b1c3" +checksum = "d232db7f5956f3f14313dc2f87985c58bd2c695ce124c8cdd984e08e15ac133d" dependencies = [ - "rust-embed-impl", - "rust-embed-utils", - "walkdir", + "enumflags2_derive", ] [[package]] -name = "rust-embed-impl" -version = "6.2.0" +name = "enumflags2_derive" +version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94e763e24ba2bf0c72bc6be883f967f794a019fafd1b86ba1daff9c91a7edd30" +checksum = "de0d48a183585823424a4ce1aa132d174a6a81bd540895822eb4c8373a8e49e8" dependencies = [ "proc-macro2", "quote", - "rust-embed-utils", - "syn", - "walkdir", + "syn 2.0.79", ] [[package]] -name = "rust-embed-utils" -version = "7.2.0" +name = "equivalent" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "756feca3afcbb1487a1d01f4ecd94cf8ec98ea074c55a69e7136d29fb6166029" -dependencies = [ - "sha2 0.9.9", - "walkdir", -] +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] -name = "rustls" -version = "0.19.1" +name = "errno" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35edb675feee39aec9c99fa5ff985081995a06d594114ae14cbe797ad7b7a6d7" +checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" dependencies = [ - "base64", - "log", - "ring", - "sct 0.6.1", - "webpki 0.21.4", + "libc", + "windows-sys 0.52.0", ] [[package]] -name = "rustls" -version = "0.20.4" +name = "esaxx-rs" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fbfeb8d0ddb84706bc597a5574ab8912817c52a397f819e5b614e2265206921" +checksum = "d817e038c30374a4bcb22f94d0a8a0e216958d4c3dcde369b1439fec4bdda6e6" dependencies = [ - "log", - "ring", - "sct 0.7.0", - "webpki 0.22.0", + "cc", ] [[package]] -name = "rustls-pemfile" -version = "0.3.0" +name = "etcetera" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ee86d63972a7c661d1536fefe8c3c8407321c3df668891286de28abcd087360" +checksum = "136d1b5283a1ab77bd9257427ffd09d8667ced0570b6f938942bc7568ed5b943" dependencies = [ - "base64", + "cfg-if", + "home", + "windows-sys 0.48.0", ] [[package]] -name = "rustpython-parser" -version = "0.1.2" +name = "event-listener" +version = "2.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d85b1038ecd8791bdae455ae784b48f522ebeca1b3323d0af2b251c5c8ff1c68" -dependencies = [ - "lalrpop", - "lalrpop-util", - "log", - "num-bigint", - "num-traits", - "unic-emoji-char", - "unic-ucd-ident", - "unicode_names2", -] +checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" [[package]] -name = "ryu" -version = "1.0.9" +name = "event-listener" +version = "5.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73b4b750c782965c211b42f022f59af1fbceabdd026623714f104152f1ec149f" +checksum = "6032be9bd27023a771701cc49f9f053c751055f71efb2e0ae5c15809093675ba" +dependencies = [ + "concurrent-queue", + "parking", + "pin-project-lite", +] [[package]] -name = "same-file" -version = "1.0.6" +name = "event-listener-strategy" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +checksum = "0f214dc438f977e6d4e3500aaa277f5ad94ca83fbbd9b1a15713ce2344ccc5a1" dependencies = [ - "winapi-util", + "event-listener 5.3.1", + "pin-project-lite", ] [[package]] -name = "schannel" -version = "0.1.19" +name = "fallible-iterator" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f05ba609c234e60bee0d547fe94a4c7e9da733d1c962cf6e59efa4cd9c8bc75" -dependencies = [ - "lazy_static", - "winapi 0.3.9", -] +checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" [[package]] -name = "scopeguard" -version = "1.1.0" +name = "fastdivide" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" +checksum = "59668941c55e5c186b8b58c391629af56774ec768f73c08bbcd56f09348eb00b" [[package]] -name = "sct" -version = "0.6.1" +name = "fastrand" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b362b83898e0e69f38515b82ee15aa80636befe47c3b6d3d89a911e78fc228ce" +checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be" dependencies = [ - "ring", - "untrusted", + "instant", ] [[package]] -name = "sct" -version = "0.7.0" +name = "fastrand" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4" -dependencies = [ - "ring", - "untrusted", -] +checksum = "e8c02a5121d4ea3eb16a80748c74f5549a5665e4c21333c6098f283870fbdea6" [[package]] -name = "security-framework" -version = "2.6.1" +name = "ff" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dc14f172faf8a0194a3aded622712b0de276821addc574fa54fc0a1167e10dc" +checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" dependencies = [ - "bitflags", - "core-foundation", - "core-foundation-sys", - "libc", - "security-framework-sys", + "rand_core 0.6.4", + "subtle", ] [[package]] -name = "security-framework-sys" -version = "2.6.1" +name = "fiat-crypto" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" + +[[package]] +name = "filetime" +version = "0.2.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0160a13a177a45bfb43ce71c01580998474f556ad854dcbca936dd2841a5c556" +checksum = "35c0522e981e68cbfa8c3f978441a5f34b30b96e146b33cd3359176b50fe8586" dependencies = [ - "core-foundation-sys", + "cfg-if", "libc", + "libredox", + "windows-sys 0.59.0", ] [[package]] -name = "serde" -version = "1.0.136" +name = "fixedbitset" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" + +[[package]] +name = "flatbuffers" +version = "24.3.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce31e24b01e1e524df96f1c2fdd054405f8d7376249a5110886fb4b658484789" +checksum = "8add37afff2d4ffa83bc748a70b4b1370984f6980768554182424ef71447c35f" dependencies = [ - "serde_derive", + "bitflags 1.3.2", + "rustc_version 0.4.1", ] [[package]] -name = "serde_bytes" -version = "0.11.5" +name = "flate2" +version = "1.0.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16ae07dd2f88a366f15bd0632ba725227018c69a1c8550a927324f8eb8368bb9" +checksum = "a1b589b4dc103969ad3cf85c950899926ec64300a1a46d76c03a6072957036f0" dependencies = [ - "serde", + "crc32fast", + "libz-sys", + "miniz_oxide 0.8.0", ] [[package]] -name = "serde_derive" -version = "1.0.136" +name = "flume" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08597e7152fcd306f41838ed3e37be9eaeed2b61c42e2117266a554fab4662f9" +checksum = "55ac459de2512911e4b674ce33cf20befaba382d05b62b008afc1c8b57cbf181" dependencies = [ - "proc-macro2", - "quote", - "syn", + "futures-core", + "futures-sink", + "spin 0.9.8", ] [[package]] -name = "serde_json" -version = "1.0.79" +name = "fnv" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e8d9fa5c3b304765ce1fd9c4c8a3de2c8db365a5b91be52f186efc675681d95" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "foreign-types" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1" dependencies = [ - "indexmap", - "itoa 1.0.1", - "ryu", - "serde", + "foreign-types-shared", ] [[package]] -name = "serde_path_to_error" -version = "0.1.7" +name = "foreign-types-shared" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" + +[[package]] +name = "form_urlencoded" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7868ad3b8196a8a0aea99a8220b124278ee5320a55e4fde97794b6f85b1a377" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" dependencies = [ - "serde", + "percent-encoding", ] [[package]] -name = "serde_urlencoded" -version = "0.7.1" +name = "fqdn" +version = "0.3.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +checksum = "eb540cf7bc4fe6df9d8f7f0c974cfd0dce8ed4e9e8884e73433b503ee78b4e7d" + +[[package]] +name = "from_variant" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32016f1242eb82af5474752d00fd8ebcd9004bd69b462b1c91de833972d08ed4" dependencies = [ - "form_urlencoded", - "itoa 1.0.1", - "ryu", - "serde", + "proc-macro2", + "swc_macros_common", + "syn 2.0.79", ] [[package]] -name = "serde_v8" -version = "0.21.0" +name = "frunk" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6217b505e32edf22e28516ac16ad36dc783f13053311f5fa11fbe95d47ec633" +checksum = "874b6a17738fc273ec753618bac60ddaeac48cb1d7684c3e7bd472e57a28b817" dependencies = [ + "frunk_core", + "frunk_derives", + "frunk_proc_macros", "serde", - "serde_bytes", - "v8", ] [[package]] -name = "sha-1" -version = "0.10.0" +name = "frunk_core" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "028f48d513f9678cda28f6e4064755b3fbb2af6acd672f2c209b62323f7aea0f" +checksum = "3529a07095650187788833d585c219761114005d5976185760cf794d265b6a5c" dependencies = [ - "cfg-if 1.0.0", - "cpufeatures", - "digest 0.10.3", + "serde", ] [[package]] -name = "sha2" -version = "0.8.2" +name = "frunk_derives" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a256f46ea78a0c0d9ff00077504903ac881a1dafdc20da66545699e7776b3e69" +checksum = "e99b8b3c28ae0e84b604c75f721c21dc77afb3706076af5e8216d15fd1deaae3" dependencies = [ - "block-buffer 0.7.3", - "digest 0.8.1", - "fake-simd", - "opaque-debug 0.2.3", + "frunk_proc_macro_helpers", + "quote", + "syn 2.0.79", ] [[package]] -name = "sha2" -version = "0.9.9" +name = "frunk_proc_macro_helpers" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" +checksum = "05a956ef36c377977e512e227dcad20f68c2786ac7a54dacece3746046fea5ce" dependencies = [ - "block-buffer 0.9.0", - "cfg-if 1.0.0", - "cpufeatures", - "digest 0.9.0", - "opaque-debug 0.3.0", + "frunk_core", + "proc-macro2", + "quote", + "syn 2.0.79", ] [[package]] -name = "sha2" -version = "0.10.2" +name = "frunk_proc_macros" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55deaec60f81eefe3cce0dc50bda92d6d8e88f2a27df7c5033b42afeb1ed2676" +checksum = "67e86c2c9183662713fea27ea527aad20fb15fee635a71081ff91bf93df4dc51" dependencies = [ - "cfg-if 1.0.0", - "cpufeatures", - "digest 0.10.3", + "frunk_core", + "frunk_proc_macro_helpers", + "quote", + "syn 2.0.79", ] [[package]] -name = "sharded-slab" -version = "0.1.4" +name = "fs4" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31" +checksum = "f7e180ac76c23b45e767bd7ae9579bc0bb458618c4bc71835926e098e61d15f8" dependencies = [ - "lazy_static", + "rustix", + "windows-sys 0.52.0", ] [[package]] -name = "signal-hook-registry" -version = "1.4.0" +name = "fslock" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0" +checksum = "04412b8935272e3a9bae6f48c7bfff74c2911f60525404edfdd28e49884c3bfb" dependencies = [ "libc", + "winapi", ] [[package]] -name = "siphasher" -version = "0.2.3" +name = "funty" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b8de496cf83d4ed58b6be86c3a275b8602f6ffe98d3024a869e124147a9a3ac" +checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" [[package]] -name = "slab" -version = "0.4.6" +name = "futures" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb703cfe953bccee95685111adeedb76fabe4e97549a58d16f03ea7b9367bb32" +checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] [[package]] -name = "slack-http-verifier" -version = "0.1.2" +name = "futures-channel" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2848741518fc1c58c7c28b0c4136e62a523438b3700311f7a1faffd37e756f8" +checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" dependencies = [ - "crypto-mac", - "hex", - "hmac 0.7.1", - "http", - "reqwest 0.10.10", - "sha2 0.8.2", + "futures-core", + "futures-sink", ] [[package]] -name = "smallvec" -version = "1.8.0" +name = "futures-core" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2dd574626839106c320a323308629dcb1acfc96e32a8cba364ddc61ac23ee83" +checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" [[package]] -name = "socket2" -version = "0.3.19" +name = "futures-executor" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "122e570113d28d773067fab24266b66753f6ea915758651696b6e35e49f88d6e" +checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" dependencies = [ - "cfg-if 1.0.0", - "libc", - "winapi 0.3.9", + "futures-core", + "futures-task", + "futures-util", ] [[package]] -name = "socket2" -version = "0.4.4" +name = "futures-intrusive" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66d72b759436ae32898a2af0a14218dbf55efde3feeb170eb623637db85ee1e0" +checksum = "1d930c203dd0b6ff06e0201a4a2fe9149b43c684fd4420555b26d21b1a02956f" dependencies = [ - "libc", - "winapi 0.3.9", + "futures-core", + "lock_api", + "parking_lot", ] [[package]] -name = "spin" -version = "0.5.2" +name = "futures-io" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" +checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" [[package]] -name = "sql-builder" -version = "3.1.1" +name = "futures-lite" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1008d95d2ec2d062959352527be30e10fec42a1aa5e5a48d990a5ff0fb9bdc0" +checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce" dependencies = [ - "anyhow", - "thiserror", + "fastrand 1.9.0", + "futures-core", + "futures-io", + "memchr", + "parking", + "pin-project-lite", + "waker-fn", ] [[package]] -name = "sqlformat" -version = "0.1.8" +name = "futures-lite" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4b7922be017ee70900be125523f38bdd644f4f06a1b16e8fa5a8ee8c34bffd4" +checksum = "52527eb5074e35e9339c6b4e8d12600c7128b68fb25dcb9fa9dec18f7c25f3a5" dependencies = [ - "itertools 0.10.3", - "nom", - "unicode_categories", + "fastrand 2.1.1", + "futures-core", + "futures-io", + "parking", + "pin-project-lite", ] [[package]] -name = "sqlx" -version = "0.5.12" +name = "futures-macro" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2be6e4d8b60285763c7a0c17f57839d5f1e864d948fe7ff26eaf38f04db95fc" +checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ - "sqlx-core", - "sqlx-macros", + "proc-macro2", + "quote", + "syn 2.0.79", ] [[package]] -name = "sqlx-core" -version = "0.5.12" +name = "futures-sink" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" + +[[package]] +name = "futures-task" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" + +[[package]] +name = "futures-util" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5728d5a4de38574e1a43139cf1d0124e978af8c19ea795d1d61c287785924cf2" +checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" dependencies = [ - "ahash", - "atoi", - "base64", - "bitflags", - "byteorder", - "bytes 1.1.0", - "chrono", - "crc", - "crossbeam-queue", - "dirs 4.0.0", - "either", - "event-listener", "futures-channel", "futures-core", - "futures-intrusive", - "futures-util", - "hashlink", - "hex", - "hkdf", - "hmac 0.12.1", - "indexmap", - "itoa 1.0.1", - "libc", - "log", - "md-5 0.10.1", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", "memchr", - "once_cell", - "paste", - "percent-encoding", - "rand 0.8.5", - "rustls 0.19.1", - "serde", - "serde_json", - "sha-1", - "sha2 0.10.2", - "smallvec", - "sqlformat", - "sqlx-rt", - "stringprep", - "thiserror", - "tokio-stream", - "url", - "uuid", - "webpki 0.21.4", - "webpki-roots 0.21.1", - "whoami", + "pin-project-lite", + "pin-utils", + "slab", ] [[package]] -name = "sqlx-macros" -version = "0.5.12" +name = "gcp_auth" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfce1fd7df05de96f76eb0d452e5ce8b106607933ac3c9a8f5c65c1ecc5955f5" +checksum = "7d3b20d3058763d26d88e6e7a49998841e5296735b00dbfb064ff7cb142933dd" dependencies = [ - "dotenv", - "either", - "heck", - "hex", - "once_cell", - "proc-macro2", - "quote", + "async-trait", + "base64 0.21.7", + "dirs-next", + "hyper 0.14.30", + "hyper-rustls 0.24.2", + "ring 0.16.20", + "rustls 0.21.12", + "rustls-pemfile 1.0.4", "serde", "serde_json", - "sha2 0.10.2", - "sqlx-core", - "sqlx-rt", - "syn", + "thiserror", + "time", + "tokio", + "tracing", + "tracing-futures", "url", + "which 4.4.2", ] [[package]] -name = "sqlx-rt" -version = "0.5.12" +name = "gemm" +version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f2cc78368bdd33ba6ad1c300f2b9ff4a844f9d7db140c34bc61ef304e1fc160" +checksum = "6ab24cc62135b40090e31a76a9b2766a501979f3070fa27f689c27ec04377d32" dependencies = [ - "once_cell", - "tokio 1.17.0", - "tokio-rustls 0.22.0", + "dyn-stack", + "gemm-c32", + "gemm-c64", + "gemm-common", + "gemm-f16", + "gemm-f32", + "gemm-f64", + "num-complex", + "num-traits", + "paste", + "raw-cpuid", + "seq-macro", ] [[package]] -name = "string_cache" -version = "0.7.5" +name = "gemm-c32" +version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89c058a82f9fd69b1becf8c274f412281038877c553182f1d02eb027045a2d67" +checksum = "b9c030d0b983d1e34a546b86e08f600c11696fde16199f971cd46c12e67512c0" dependencies = [ - "lazy_static", - "new_debug_unreachable", - "phf_shared", - "precomputed-hash", - "serde", - "string_cache_codegen", - "string_cache_shared", + "dyn-stack", + "gemm-common", + "num-complex", + "num-traits", + "paste", + "raw-cpuid", + "seq-macro", ] [[package]] -name = "string_cache_codegen" -version = "0.4.4" +name = "gemm-c64" +version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0f45ed1b65bf9a4bf2f7b7dc59212d1926e9eaf00fa998988e420fd124467c6" +checksum = "fbb5f2e79fefb9693d18e1066a557b4546cd334b226beadc68b11a8f9431852a" dependencies = [ - "phf_generator", - "phf_shared", - "proc-macro2", - "quote", - "string_cache_shared", + "dyn-stack", + "gemm-common", + "num-complex", + "num-traits", + "paste", + "raw-cpuid", + "seq-macro", ] [[package]] -name = "string_cache_shared" -version = "0.3.0" +name = "gemm-common" +version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1884d1bc09741d466d9b14e6d37ac89d6909cbcac41dd9ae982d4d063bbedfc" +checksum = "a2e7ea062c987abcd8db95db917b4ffb4ecdfd0668471d8dc54734fdff2354e8" +dependencies = [ + "bytemuck", + "dyn-stack", + "half", + "num-complex", + "num-traits", + "once_cell", + "paste", + "pulp", + "raw-cpuid", + "rayon", + "seq-macro", + "sysctl", +] [[package]] -name = "stringprep" -version = "0.1.2" +name = "gemm-f16" +version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ee348cb74b87454fff4b551cbf727025810a004f88aeacae7f85b87f4e9a1c1" +checksum = "7ca4c06b9b11952071d317604acb332e924e817bd891bec8dfb494168c7cedd4" dependencies = [ - "unicode-bidi", - "unicode-normalization", + "dyn-stack", + "gemm-common", + "gemm-f32", + "half", + "num-complex", + "num-traits", + "paste", + "raw-cpuid", + "rayon", + "seq-macro", ] [[package]] -name = "strsim" -version = "0.10.0" +name = "gemm-f32" +version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" +checksum = "e9a69f51aaefbd9cf12d18faf273d3e982d9d711f60775645ed5c8047b4ae113" +dependencies = [ + "dyn-stack", + "gemm-common", + "num-complex", + "num-traits", + "paste", + "raw-cpuid", + "seq-macro", +] [[package]] -name = "subtle" -version = "1.0.0" +name = "gemm-f64" +version = "0.17.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d67a5a62ba6e01cb2192ff309324cb4875d0c451d55fe2319433abe7a05a8ee" +checksum = "aa397a48544fadf0b81ec8741e5c0fba0043008113f71f2034def1935645d2b0" +dependencies = [ + "dyn-stack", + "gemm-common", + "num-complex", + "num-traits", + "paste", + "raw-cpuid", + "seq-macro", +] [[package]] -name = "subtle" -version = "2.4.1" +name = "generic-array" +version = "0.14.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", + "zeroize", +] [[package]] -name = "syn" -version = "1.0.91" +name = "gethostname" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b683b2b825c8eef438b77c36a06dc262294da3d5a5813fac20da149241dcd44d" +checksum = "0176e0459c2e4a1fe232f984bca6890e681076abb9934f6cea7c326f3fc47818" dependencies = [ - "proc-macro2", - "quote", - "unicode-xid 0.2.2", + "libc", + "windows-targets 0.48.5", ] [[package]] -name = "sync_wrapper" -version = "0.1.1" +name = "getopts" +version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20518fe4a4c9acf048008599e464deb21beeae3d3578418951a189c235a7a9a8" +checksum = "14dbbfd5c71d70241ecf9e6f13737f7b5ce823821063188d7e46c41d371eebd5" +dependencies = [ + "unicode-width", +] [[package]] -name = "tempfile" -version = "3.3.0" +name = "getrandom" +version = "0.1.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4" +checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce" dependencies = [ - "cfg-if 1.0.0", - "fastrand", + "cfg-if", "libc", - "redox_syscall 0.2.13", - "remove_dir_all", - "winapi 0.3.9", + "wasi 0.9.0+wasi-snapshot-preview1", ] [[package]] -name = "term" -version = "0.5.2" +name = "getrandom" +version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edd106a334b7657c10b7c540a0106114feadeb4dc314513e97df481d5d966f42" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" dependencies = [ - "byteorder", - "dirs 1.0.5", - "winapi 0.3.9", + "cfg-if", + "js-sys", + "libc", + "wasi 0.11.0+wasi-snapshot-preview1", + "wasm-bindgen", ] [[package]] -name = "thiserror" -version = "1.0.30" +name = "gimli" +version = "0.31.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32085ea23f3234fc7846555e85283ba4de91e21016dc0455a16286d87a292d64" + +[[package]] +name = "git-version" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "854babe52e4df1653706b98fcfc05843010039b406875930a70e4d9644e5c417" +checksum = "1ad568aa3db0fcbc81f2f116137f263d7304f512a1209b35b85150d3ef88ad19" dependencies = [ - "thiserror-impl", + "git-version-macro", ] [[package]] -name = "thiserror-impl" -version = "1.0.30" +name = "git-version-macro" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa32fd3f627f367fe16f893e2597ae3c05020f8bba2666a4e6ea73d377e5714b" +checksum = "53010ccb100b96a67bc32c0175f0ed1426b31b655d562898e57325f81c023ac0" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.79", ] [[package]] -name = "thread_local" -version = "1.1.4" +name = "git2" +version = "0.17.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5516c27b78311c50bf42c071425c560ac799b11c30b31f87e3081965fe5e0180" +checksum = "7b989d6a7ca95a362cf2cfc5ad688b3a467be1f87e480b8dad07fee8c79b0044" dependencies = [ - "once_cell", + "bitflags 1.3.2", + "libc", + "libgit2-sys", + "log", + "url", ] [[package]] -name = "tiger" -version = "0.1.0" +name = "glob" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "443e531cbcf9de83258cfef70bcd56c91188de5819ebd4b19c85f589e0617005" -dependencies = [ - "block-buffer 0.9.0", - "byteorder", - "digest 0.9.0", -] +checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" [[package]] -name = "time" -version = "0.1.43" +name = "gloo-timers" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca8a50ef2360fbd1eeb0ecd46795a87a19024eb4b53c5dc916ca1fd95fe62438" +checksum = "bbb143cf96099802033e0d4f4963b19fd2e0b728bcf076cd9cf7f6634f092994" dependencies = [ - "libc", - "winapi 0.3.9", + "futures-channel", + "futures-core", + "js-sys", + "wasm-bindgen", ] [[package]] -name = "time" -version = "0.3.9" +name = "gosyn" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2702e08a7a860f005826c6815dcac101b19b5eb330c27fe4a5928fec1d20ddd" +checksum = "5eb37859fda6792e95231aef1c5838f4043ec0ee352d8313421e311c606df612" dependencies = [ - "itoa 1.0.1", - "libc", - "num_threads", - "time-macros", + "anyhow", + "strum 0.25.0", + "thiserror", + "unic-ucd-category", ] [[package]] -name = "time-macros" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42657b1a6f4d817cda8e7a0ace261fe0cc946cf3a80314390b22cc61ae080792" - -[[package]] -name = "tinyvec" -version = "1.5.1" +name = "group" +version = "0.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c1c1d5a42b6245520c249549ec267180beaffcc0615401ac8e31853d4b6d8d2" +checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" dependencies = [ - "tinyvec_macros", + "ff", + "rand_core 0.6.4", + "subtle", ] [[package]] -name = "tinyvec_macros" -version = "0.1.0" +name = "gzip-header" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" +checksum = "95cc527b92e6029a62960ad99aa8a6660faa4555fe5f731aab13aa6a921795a2" +dependencies = [ + "crc32fast", +] [[package]] -name = "tokio" -version = "0.2.25" +name = "h2" +version = "0.3.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6703a273949a90131b290be1fe7b039d0fc884aa1935860dfcbe056f28cd8092" +checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" dependencies = [ - "bytes 0.5.6", + "bytes", "fnv", "futures-core", - "iovec", - "lazy_static", - "memchr", - "mio 0.6.23", - "num_cpus", - "pin-project-lite 0.1.12", + "futures-sink", + "futures-util", + "http 0.2.12", + "indexmap 2.5.0", "slab", + "tokio", + "tokio-util", + "tracing", ] [[package]] -name = "tokio" -version = "1.17.0" +name = "h2" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2af73ac49756f3f7c01172e34a23e5d0216f6c32333757c2c61feb2bbff5a5ee" +checksum = "524e8ac6999421f49a846c2d4411f337e53497d8ec55d67753beffa43c5d9205" dependencies = [ - "bytes 1.1.0", - "libc", - "memchr", - "mio 0.8.2", - "num_cpus", - "once_cell", - "parking_lot 0.12.0", - "pin-project-lite 0.2.8", - "signal-hook-registry", - "socket2 0.4.4", - "tokio-macros", + "atomic-waker", + "bytes", + "fnv", + "futures-core", + "futures-sink", + "http 1.1.0", + "indexmap 2.5.0", + "slab", + "tokio", + "tokio-util", "tracing", - "winapi 0.3.9", ] [[package]] -name = "tokio-io-timeout" -version = "1.2.0" +name = "half" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30b74022ada614a1b4834de765f9bb43877f910cc8ce4be40e89042c9223a8bf" +checksum = "6dd08c532ae367adf81c312a4580bc67f1d0fe8bc9c460520283f4c0ff277888" dependencies = [ - "pin-project-lite 0.2.8", - "tokio 1.17.0", + "bytemuck", + "cfg-if", + "crunchy", + "num-traits", + "rand 0.8.5", + "rand_distr", ] [[package]] -name = "tokio-macros" -version = "1.7.0" +name = "hashbrown" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b557f72f448c511a979e2564e55d74e6c4432fc96ff4f6241bc6bded342643b7" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" dependencies = [ - "proc-macro2", - "quote", - "syn", + "ahash 0.7.8", ] [[package]] -name = "tokio-native-tls" -version = "0.3.0" +name = "hashbrown" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7d995660bd2b7f8c1568414c1126076c13fbb725c40112dc0120b78eb9b717b" +checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e" dependencies = [ - "native-tls", - "tokio 1.17.0", + "ahash 0.8.11", ] [[package]] -name = "tokio-rustls" -version = "0.22.0" +name = "hashbrown" +version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc6844de72e57df1980054b38be3a9f4702aba4858be64dd700181a8a6d0e1b6" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" dependencies = [ - "rustls 0.19.1", - "tokio 1.17.0", - "webpki 0.21.4", + "ahash 0.8.11", + "allocator-api2", ] [[package]] -name = "tokio-rustls" -version = "0.23.3" +name = "hashlink" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4151fda0cf2798550ad0b34bcfc9b9dcc2a9d2471c895c68f3a8818e54f2389e" +checksum = "6ba4ff7128dee98c7dc9794b6a411377e1404dba1c97deb8d1a55297bd25d8af" dependencies = [ - "rustls 0.20.4", - "tokio 1.17.0", - "webpki 0.22.0", + "hashbrown 0.14.5", ] [[package]] -name = "tokio-stream" -version = "0.1.8" +name = "heck" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50145484efff8818b5ccd256697f36863f587da82cf8b409c53adf1e840798e3" -dependencies = [ - "futures-core", - "pin-project-lite 0.2.8", - "tokio 1.17.0", -] +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" [[package]] -name = "tokio-tar" -version = "0.3.0" +name = "heck" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a50188549787c32c1c3d9c8c71ad7e003ccf2f102489c5a96e385c84760477f4" -dependencies = [ - "filetime", - "futures-core", - "libc", - "redox_syscall 0.2.13", - "tokio 1.17.0", - "tokio-stream", - "xattr", -] +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" [[package]] -name = "tokio-tls" -version = "0.3.1" +name = "hermit-abi" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a70f4fcd7b3b24fb194f837560168208f669ca8cb70d0c4b862944452396343" -dependencies = [ - "native-tls", - "tokio 0.2.25", -] +checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" [[package]] -name = "tokio-util" -version = "0.3.1" +name = "hermit-abi" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbf6a919d6cf397374f7dfeeea91d974c7c0a7221d0d0f4f20d859d329e53fcc" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "hf-hub" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be8242891f2b6cbef26a2d7e8605133c2c554cd35b3e4948ea892d6d68436499" +checksum = "2b780635574b3d92f036890d8373433d6f9fc7abb320ee42a5c25897fc8ed732" dependencies = [ - "bytes 0.5.6", - "futures-core", - "futures-sink", + "dirs", + "indicatif", "log", - "pin-project-lite 0.1.12", - "tokio 0.2.25", + "native-tls", + "rand 0.8.5", + "serde", + "serde_json", + "thiserror", + "ureq", ] [[package]] -name = "tokio-util" -version = "0.7.1" +name = "hkdf" +version = "0.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0edfdeb067411dba2044da6d1cb2df793dd35add7888d73c16e3381ded401764" +checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7" dependencies = [ - "bytes 1.1.0", - "futures-core", - "futures-sink", - "pin-project-lite 0.2.8", - "tokio 1.17.0", - "tracing", + "hmac", ] [[package]] -name = "tonic" -version = "0.7.1" +name = "hmac" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30fb54bf1e446f44d870d260d99957e7d11fb9d0a0f5bd1a662ad1411cc103f9" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" dependencies = [ - "async-stream", - "async-trait", - "axum", - "base64", - "bytes 1.1.0", - "futures-core", - "futures-util", - "h2 0.3.13", - "http", - "http-body 0.4.4", - "hyper 0.14.18", - "hyper-timeout", - "percent-encoding", - "pin-project", - "prost", - "prost-derive", - "tokio 1.17.0", - "tokio-stream", - "tokio-util 0.7.1", - "tower", - "tower-layer", - "tower-service", - "tracing", - "tracing-futures", + "digest 0.10.7", ] [[package]] -name = "tower" -version = "0.4.12" +name = "home" +version = "0.5.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a89fd63ad6adf737582df5db40d286574513c69a11dac5214dc3b5603d6713e" +checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" dependencies = [ - "futures-core", - "futures-util", - "indexmap", - "pin-project", - "pin-project-lite 0.2.8", - "rand 0.8.5", - "slab", - "tokio 1.17.0", - "tokio-util 0.7.1", - "tower-layer", - "tower-service", - "tracing", + "windows-sys 0.52.0", ] [[package]] -name = "tower-cookies" -version = "0.6.0" +name = "hostname" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5bf1904fcf965b948ece576eae3cf85e5cad94f99acb6b5834148b61fbecd38e" +checksum = "3c731c3e10504cc8ed35cfe2f1db4c9274c3d35fa486e3b31df46f068ef3e867" dependencies = [ - "async-trait", - "axum-core", - "cookie", - "futures-util", - "http", - "parking_lot 0.12.0", - "pin-project-lite 0.2.8", - "tower-layer", - "tower-service", + "libc", + "match_cfg", + "winapi", ] [[package]] -name = "tower-http" -version = "0.2.5" +name = "hstr" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aba3f3efabf7fb41fae8534fc20a817013dd1c12cb45441efb6c82e6556b4cd8" +checksum = "dae404c0c5d4e95d4858876ab02eecd6a196bb8caa42050dfa809938833fc412" dependencies = [ - "bitflags", - "bytes 1.1.0", - "futures-core", - "futures-util", - "http", - "http-body 0.4.4", - "http-range-header", - "pin-project-lite 0.2.8", - "tower", - "tower-layer", - "tower-service", - "tracing", + "hashbrown 0.14.5", + "new_debug_unreachable", + "once_cell", + "phf", + "rustc-hash 1.1.0", + "triomphe", ] [[package]] -name = "tower-layer" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "343bc9466d3fe6b0f960ef45960509f84480bf4fd96f92901afe7ff3df9d3a62" - -[[package]] -name = "tower-service" +name = "htmlescape" version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "360dfd1d6d30e05fda32ace2c8c70e9c0a9da713275777f5a4dbb8a1893930c6" +checksum = "e9025058dae765dee5070ec375f591e2ba14638c63feff74f13805a72e523163" [[package]] -name = "tracing" -version = "0.1.34" +name = "http" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d0ecdcb44a79f0fe9844f0c4f33a342cbcbb5117de8001e6ba0dc2351327d09" +checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" dependencies = [ - "cfg-if 1.0.0", - "log", - "pin-project-lite 0.2.8", - "tracing-attributes", - "tracing-core", + "bytes", + "fnv", + "itoa", ] [[package]] -name = "tracing-attributes" -version = "0.1.20" +name = "http" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e65ce065b4b5c53e73bb28912318cb8c9e9ad3921f1d669eb0e68b4c8143a2b" +checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258" dependencies = [ - "proc-macro2", - "quote", - "syn", + "bytes", + "fnv", + "itoa", ] [[package]] -name = "tracing-core" -version = "0.1.26" +name = "http-body" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f54c8ca710e81886d498c2fd3331b56c93aa248d49de2222ad2742247c60072f" +checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" dependencies = [ - "lazy_static", - "valuable", + "bytes", + "http 0.2.12", + "pin-project-lite", ] [[package]] -name = "tracing-futures" -version = "0.2.5" +name = "http-body" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" dependencies = [ - "pin-project", - "tracing", + "bytes", + "http 1.1.0", ] [[package]] -name = "tracing-log" +name = "http-body-util" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6923477a48e41c1951f1999ef8bb5a3023eb723ceadafe78ffb65dc366761e3" +checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" dependencies = [ - "lazy_static", - "log", - "tracing-core", + "bytes", + "futures-util", + "http 1.1.0", + "http-body 1.0.1", + "pin-project-lite", ] [[package]] -name = "tracing-serde" -version = "0.1.3" +name = "http-types" +version = "2.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc6b213177105856957181934e4920de57730fc69bf42c37ee5bb664d406d9e1" +checksum = "6e9b187a72d63adbfba487f48095306ac823049cb504ee195541e91c7775f5ad" dependencies = [ + "anyhow", + "async-channel 1.9.0", + "base64 0.13.1", + "futures-lite 1.13.0", + "http 0.2.12", + "infer", + "pin-project-lite", + "rand 0.7.3", "serde", - "tracing-core", + "serde_json", + "serde_qs 0.8.5", + "serde_urlencoded", + "url", ] [[package]] -name = "tracing-subscriber" -version = "0.3.11" +name = "httparse" +version = "1.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fcc0b4a115bf80b728eb8ea024ad5bd707b615bfed49e0665b6e0f86fd082d9" + +[[package]] +name = "httpdate" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" + +[[package]] +name = "humantime" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" + +[[package]] +name = "hyper" +version = "0.14.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bc28f93baff38037f64e6f43d34cfa1605f27a49c34e8a04c5e78b0babf2596" +checksum = "a152ddd61dfaec7273fe8419ab357f33aee0d914c5f4efbf0d96fa749eea5ec9" dependencies = [ - "ansi_term", - "lazy_static", - "matchers", - "regex", - "serde", - "serde_json", - "sharded-slab", - "smallvec", - "thread_local", + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "h2 0.3.26", + "http 0.2.12", + "http-body 0.4.6", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "socket2 0.5.7", + "tokio", + "tower-service", "tracing", - "tracing-core", - "tracing-log", - "tracing-serde", + "want", ] [[package]] -name = "trust-dns-proto" -version = "0.20.4" +name = "hyper" +version = "1.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca94d4e9feb6a181c690c4040d7a24ef34018d8313ac5044a61d21222ae24e31" +checksum = "50dfd22e0e76d0f662d429a5f80fcaf3855009297eab6a0a9f8543834744ba05" dependencies = [ - "async-trait", - "cfg-if 1.0.0", - "data-encoding", - "enum-as-inner", + "bytes", "futures-channel", - "futures-io", "futures-util", - "idna", - "ipnet", - "lazy_static", - "log", - "rand 0.8.5", + "h2 0.4.6", + "http 1.1.0", + "http-body 1.0.1", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", "smallvec", - "thiserror", - "tinyvec", - "tokio 1.17.0", - "url", + "tokio", + "want", ] [[package]] -name = "trust-dns-resolver" -version = "0.20.4" +name = "hyper-rustls" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecae383baad9995efaa34ce8e57d12c3f305e545887472a492b838f4b5cfb77a" +checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" dependencies = [ - "cfg-if 1.0.0", "futures-util", - "ipconfig", - "lazy_static", + "http 0.2.12", + "hyper 0.14.30", "log", - "lru-cache", - "parking_lot 0.11.2", - "resolv-conf", - "smallvec", - "thiserror", - "tokio 1.17.0", - "trust-dns-proto", + "rustls 0.21.12", + "rustls-native-certs 0.6.3", + "tokio", + "tokio-rustls 0.24.1", ] [[package]] -name = "try-lock" -version = "0.2.3" +name = "hyper-rustls" +version = "0.27.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" +checksum = "08afdbb5c31130e3034af566421053ab03787c640246a446327f550d11bcb333" +dependencies = [ + "futures-util", + "http 1.1.0", + "hyper 1.4.1", + "hyper-util", + "rustls 0.23.13", + "rustls-native-certs 0.8.0", + "rustls-pki-types", + "tokio", + "tokio-rustls 0.26.0", + "tower-service", +] [[package]] -name = "typenum" -version = "1.15.0" +name = "hyper-tls" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" +dependencies = [ + "bytes", + "hyper 0.14.30", + "native-tls", + "tokio", + "tokio-native-tls", +] + +[[package]] +name = "hyper-tls" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987" +checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" +dependencies = [ + "bytes", + "http-body-util", + "hyper 1.4.1", + "hyper-util", + "native-tls", + "tokio", + "tokio-native-tls", + "tower-service", +] [[package]] -name = "ulid" -version = "0.5.0" +name = "hyper-util" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "220b18413e1fe5e85a5580b22f44241f82404a66c792c9f3c9eda74c52d9a22e" +checksum = "3ab92f4f49ee4fb4f997c784b7a2e0fa70050211e0b6a287f898c3c9785ca956" dependencies = [ - "chrono", - "rand 0.8.5", - "uuid", + "bytes", + "futures-channel", + "futures-util", + "http 1.1.0", + "http-body 1.0.1", + "hyper 1.4.1", + "pin-project-lite", + "socket2 0.5.7", + "tokio", + "tower 0.4.13", + "tower-service", + "tracing", ] [[package]] -name = "unic-char-property" -version = "0.9.0" +name = "iana-time-zone" +version = "0.1.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8c57a407d9b6fa02b4795eb81c5b6652060a15a7903ea981f3d723e6c0be221" +checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" dependencies = [ - "unic-char-range", + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows-core", ] [[package]] -name = "unic-char-range" -version = "0.9.0" +name = "iana-time-zone-haiku" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0398022d5f700414f6b899e10b8348231abf9173fa93144cbc1a43b9793c1fbc" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] [[package]] -name = "unic-common" -version = "0.9.0" +name = "ident_case" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80d7ff825a6a654ee85a63e80f92f054f904f21e7d12da4e22f9834a4aaa35bc" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" [[package]] -name = "unic-emoji-char" -version = "0.9.0" +name = "idna" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b07221e68897210270a38bde4babb655869637af0f69407f96053a34f76494d" +checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c" dependencies = [ - "unic-char-property", - "unic-char-range", - "unic-ucd-version", + "unicode-bidi", + "unicode-normalization", ] [[package]] -name = "unic-ucd-ident" -version = "0.9.0" +name = "idna" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e230a37c0381caa9219d67cf063aa3a375ffed5bf541a452db16e744bdab6987" +checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" dependencies = [ - "unic-char-property", - "unic-char-range", - "unic-ucd-version", + "unicode-bidi", + "unicode-normalization", ] [[package]] -name = "unic-ucd-version" -version = "0.9.0" +name = "if_chain" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96bd2f2237fe450fcd0a1d2f5f4e91711124f7857ba2e964247776ebeeb7b0c4" +checksum = "cb56e1aa765b4b4f3aadfab769793b7087bb03a4ea4920644a6d238e2df5b9ed" + +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" dependencies = [ - "unic-common", + "autocfg", + "hashbrown 0.12.3", + "serde", ] [[package]] -name = "unicase" -version = "2.6.0" +name = "indexmap" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6" +checksum = "68b900aa2f7301e21c36462b170ee99994de34dff39a4a6a528e80e7376d07e5" dependencies = [ - "version_check", + "equivalent", + "hashbrown 0.14.5", + "serde", ] [[package]] -name = "unicode-bidi" -version = "0.3.7" +name = "indicatif" +version = "0.17.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a01404663e3db436ed2746d9fefef640d868edae3cceb81c3b8d5732fda678f" +checksum = "763a5a8f45087d6bcea4222e7b72c291a054edf80e4ef6efd2a4979878c7bea3" +dependencies = [ + "console", + "instant", + "number_prefix", + "portable-atomic", + "unicode-width", +] [[package]] -name = "unicode-normalization" -version = "0.1.19" +name = "infer" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64e9829a50b42bb782c1df523f78d332fe371b10c661e78b7a3c34b0198e9fac" + +[[package]] +name = "inout" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d54590932941a9e9266f0832deed84ebe1bf2e4c9e4a3554d393d18f5e854bf9" +checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" dependencies = [ - "tinyvec", + "generic-array", ] [[package]] -name = "unicode-segmentation" -version = "1.9.0" +name = "instant" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" +dependencies = [ + "cfg-if", + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "integer-encoding" +version = "3.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8bb03732005da905c88227371639bf1ad885cc712789c011c31c5fb3ab3ccf02" + +[[package]] +name = "ipconfig" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b58db92f96b720de98181bbbe63c831e87005ab460c1bf306eb2622b4707997f" +dependencies = [ + "socket2 0.5.7", + "widestring", + "windows-sys 0.48.0", + "winreg", +] + +[[package]] +name = "ipnet" +version = "2.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "187674a687eed5fe42285b40c6291f9a01517d415fad1c3cbc6a9f778af7fcd4" + +[[package]] +name = "is-macro" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2069faacbe981460232f880d26bf3c7634e322d49053aa48c27e3ae642f728f1" +dependencies = [ + "Inflector", + "proc-macro2", + "quote", + "syn 2.0.79", +] + +[[package]] +name = "is_terminal_polyfill" +version = "1.70.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e8820f5d777f6224dc4be3632222971ac30164d4a258d595640799554ebfd99" +checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" + +[[package]] +name = "itertools" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" + +[[package]] +name = "jobserver" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" +dependencies = [ + "libc", +] + +[[package]] +name = "js-sys" +version = "0.3.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "jsonwebtoken" +version = "8.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6971da4d9c3aa03c3d8f3ff0f4155b534aad021292003895a469716b2a230378" +dependencies = [ + "base64 0.21.7", + "pem 1.1.1", + "ring 0.16.20", + "serde", + "serde_json", + "simple_asn1", +] + +[[package]] +name = "keyed_priority_queue" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ee7893dab2e44ae5f9d0173f26ff4aa327c10b01b06a72b52dd9405b628640d" +dependencies = [ + "indexmap 2.5.0", +] + +[[package]] +name = "konst" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "330f0e13e6483b8c34885f7e6c9f19b1a7bd449c673fbb948a51c99d66ef74f4" +dependencies = [ + "konst_macro_rules", +] + +[[package]] +name = "konst_macro_rules" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4933f3f57a8e9d9da04db23fb153356ecaf00cbd14aee46279c33dc80925c37" + +[[package]] +name = "kv-log-macro" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0de8b303297635ad57c9f5059fd9cee7a47f8e8daa09df0fcd07dd39fb22977f" +dependencies = [ + "log", +] + +[[package]] +name = "lalrpop-util" +version = "0.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "507460a910eb7b32ee961886ff48539633b788a36b65692b95f225b844c82553" + +[[package]] +name = "lazy_static" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" +dependencies = [ + "spin 0.9.8", +] + +[[package]] +name = "lazycell" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55" + +[[package]] +name = "levenshtein_automata" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c2cdeb66e45e9f36bfad5bbdb4d2384e70936afbee843c6f6543f0c551ebb25" + +[[package]] +name = "lexical-core" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2cde5de06e8d4c2faabc400238f9ae1c74d5412d03a7bd067645ccbc47070e46" +dependencies = [ + "lexical-parse-float", + "lexical-parse-integer", + "lexical-util", + "lexical-write-float", + "lexical-write-integer", +] + +[[package]] +name = "lexical-parse-float" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "683b3a5ebd0130b8fb52ba0bdc718cc56815b6a097e28ae5a6997d0ad17dc05f" +dependencies = [ + "lexical-parse-integer", + "lexical-util", + "static_assertions", +] + +[[package]] +name = "lexical-parse-integer" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d0994485ed0c312f6d965766754ea177d07f9c00c9b82a5ee62ed5b47945ee9" +dependencies = [ + "lexical-util", + "static_assertions", +] + +[[package]] +name = "lexical-util" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5255b9ff16ff898710eb9eb63cb39248ea8a5bb036bea8085b1a767ff6c4e3fc" +dependencies = [ + "static_assertions", +] + +[[package]] +name = "lexical-write-float" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accabaa1c4581f05a3923d1b4cfd124c329352288b7b9da09e766b0668116862" +dependencies = [ + "lexical-util", + "lexical-write-integer", + "static_assertions", +] + +[[package]] +name = "lexical-write-integer" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1b6f3d1f4422866b68192d62f77bc5c700bee84f3069f2469d7bc8c77852446" +dependencies = [ + "lexical-util", + "static_assertions", +] + +[[package]] +name = "libc" +version = "0.2.159" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "561d97a539a36e26a9a5fad1ea11a3039a67714694aaa379433e580854bc3dc5" + +[[package]] +name = "libgit2-sys" +version = "0.15.2+1.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a80df2e11fb4a61f4ba2ab42dbe7f74468da143f1a75c74e11dee7c813f694fa" +dependencies = [ + "cc", + "libc", + "libz-sys", + "pkg-config", +] + +[[package]] +name = "libloading" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4979f22fdb869068da03c9f7528f8297c6fd2606bc3a4affe42e6a823fdb8da4" +dependencies = [ + "cfg-if", + "windows-targets 0.52.6", +] + +[[package]] +name = "libm" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" + +[[package]] +name = "libredox" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" +dependencies = [ + "bitflags 2.6.0", + "libc", + "redox_syscall 0.5.6", +] + +[[package]] +name = "libsqlite3-sys" +version = "0.30.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e99fb7a497b1e3339bc746195567ed8d3e24945ecd636e3619d20b9de9e9149" +dependencies = [ + "cc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "libxml" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5fe73cdec2bcb36d25a9fe3f607ffcd44bb8907ca0100c4098d1aa342d1e7bec" +dependencies = [ + "libc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "libz-sys" +version = "1.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2d16453e800a8cf6dd2fc3eb4bc99b786a9b90c663b8559a5b1a041bf89e472" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "linked-hash-map" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" + +[[package]] +name = "linux-raw-sys" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" + +[[package]] +name = "lock_api" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" +dependencies = [ + "autocfg", + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" +dependencies = [ + "value-bag", +] + +[[package]] +name = "loki-api" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "674883a98273598ac3aad4301724c56734bea90574c5033af067e8f9fb5eb399" +dependencies = [ + "prost", + "prost-types", +] + +[[package]] +name = "lru" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37ee39891760e7d94734f6f63fedc29a2e4a152f836120753a72503f09fcf904" +dependencies = [ + "hashbrown 0.14.5", +] + +[[package]] +name = "lru-cache" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "31e24f1ad8321ca0e8a1e0ac13f23cb668e6f5466c2c57319f6a5cf1cc8e3b1c" +dependencies = [ + "linked-hash-map", +] + +[[package]] +name = "lz4_flex" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75761162ae2b0e580d7e7c390558127e5f01b4194debd6221fd8c207fc80e3f5" +dependencies = [ + "twox-hash", +] + +[[package]] +name = "lzma-sys" +version = "0.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5fda04ab3764e6cde78b9974eec4f779acaba7c4e84b36eca3cf77c581b85d27" +dependencies = [ + "cc", + "libc", + "pkg-config", +] + +[[package]] +name = "macro_rules_attribute" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a82271f7bc033d84bbca59a3ce3e4159938cb08a9c3aebbe54d215131518a13" +dependencies = [ + "macro_rules_attribute-proc_macro", + "paste", +] + +[[package]] +name = "macro_rules_attribute-proc_macro" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8dd856d451cc0da70e2ef2ce95a18e39a93b7558bedf10201ad28503f918568" + +[[package]] +name = "magic-crypt" +version = "3.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c42f95f9d296f2dcb50665f507ed5a68a171453142663ce44d77a4eb217b053" +dependencies = [ + "aes 0.7.5", + "base64 0.21.7", + "block-modes", + "crc-any", + "des", + "digest 0.9.0", + "md-5 0.9.1", + "sha2 0.9.9", + "tiger", +] + +[[package]] +name = "mail-builder" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25f5871d5270ed80f2ee750b95600c8d69b05f8653ad3be913b2ad2e924fefcb" +dependencies = [ + "gethostname", +] + +[[package]] +name = "mail-parser" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93c3b9e5d8b17faf573330bbc43b37d6e918c0a3bf8a88e7d0a220ebc84af9fc" +dependencies = [ + "encoding_rs", + "serde", +] + +[[package]] +name = "mail-send" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a575d25cf00ed68e5790b473b29242a47e991c6187785d47b45e31fc5816554" +dependencies = [ + "base64 0.22.1", + "gethostname", + "mail-builder", + "rustls 0.23.13", + "rustls-pki-types", + "smtp-proto", + "tokio", + "tokio-rustls 0.26.0", + "webpki-roots 0.26.6", +] + +[[package]] +name = "malachite" +version = "0.4.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5616515d632967cd329b6f6db96be9a03ea0b3a49cdbc45b0016803dad8a77b7" +dependencies = [ + "malachite-base", + "malachite-nz", + "malachite-q", +] + +[[package]] +name = "malachite-base" +version = "0.4.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46059721011b0458b7bd6d9179be5d0b60294281c23320c207adceaecc54d13b" +dependencies = [ + "hashbrown 0.14.5", + "itertools 0.11.0", + "libm", + "ryu", +] + +[[package]] +name = "malachite-bigint" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17703a19c80bbdd0b7919f0f104f3b0597f7de4fc4e90a477c15366a5ba03faa" +dependencies = [ + "derive_more", + "malachite", + "num-integer", + "num-traits", + "paste", +] + +[[package]] +name = "malachite-nz" +version = "0.4.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1503b27e825cabd1c3d0ff1e95a39fb2ec9eab6fd3da6cfa41aec7091d273e78" +dependencies = [ + "itertools 0.11.0", + "libm", + "malachite-base", +] + +[[package]] +name = "malachite-q" +version = "0.4.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a475503a70a3679dbe3b9b230a23622516742528ba614a7b2490f180ea9cb514" +dependencies = [ + "itertools 0.11.0", + "malachite-base", + "malachite-nz", +] + +[[package]] +name = "mappable-rc" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "204651f31b0a6a7b2128d2b92c372cd94607b210c3a6b6e542c57a8cfd4db996" + +[[package]] +name = "match_cfg" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4" + +[[package]] +name = "matchers" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +dependencies = [ + "regex-automata 0.1.10", +] + +[[package]] +name = "matches" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5" + +[[package]] +name = "matchit" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" + +[[package]] +name = "md-5" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b5a279bb9607f9f53c22d496eade00d138d1bdcccd07d74650387cf94942a15" +dependencies = [ + "block-buffer 0.9.0", + "digest 0.9.0", + "opaque-debug", +] + +[[package]] +name = "md-5" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" +dependencies = [ + "cfg-if", + "digest 0.10.7", +] + +[[package]] +name = "measure_time" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbefd235b0aadd181626f281e1d684e116972988c14c264e42069d5e8a5775cc" +dependencies = [ + "instant", + "log", +] + +[[package]] +name = "memchr" +version = "2.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" + +[[package]] +name = "memmap2" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd3f7eed9d3848f8b98834af67102b720745c4ec028fcd0aa0239277e7de374f" +dependencies = [ + "libc", + "stable_deref_trait", +] + +[[package]] +name = "memoffset" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "488016bfae457b036d996092f6cb448677611ce4449e970ceaf42695203f218a" +dependencies = [ + "autocfg", +] + +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "mime_guess" +version = "2.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" +dependencies = [ + "mime", + "unicase", +] + +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + +[[package]] +name = "miniz_oxide" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08" +dependencies = [ + "adler", +] + +[[package]] +name = "miniz_oxide" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1" +dependencies = [ + "adler2", +] + +[[package]] +name = "mio" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec" +dependencies = [ + "hermit-abi 0.3.9", + "libc", + "wasi 0.11.0+wasi-snapshot-preview1", + "windows-sys 0.52.0", +] + +[[package]] +name = "monostate" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d208407d7552cd041d8cdb69a1bc3303e029c598738177a3d87082004dc0e1e" +dependencies = [ + "monostate-impl", + "serde", +] + +[[package]] +name = "monostate-impl" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7ce64b975ed4f123575d11afd9491f2e37bbd5813fbfbc0f09ae1fbddea74e0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.79", +] + +[[package]] +name = "multer" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83e87776546dc87511aa5ee218730c92b666d7264ab6ed41f9d215af9cd5224b" +dependencies = [ + "bytes", + "encoding_rs", + "futures-util", + "http 1.1.0", + "httparse", + "memchr", + "mime", + "spin 0.9.8", + "version_check", +] + +[[package]] +name = "murmurhash32" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2195bf6aa996a481483b29d62a7663eed3fe39600c460e323f8ff41e90bdd89b" + +[[package]] +name = "mysql-common-derive" +version = "0.31.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "afe0450cc9344afff34915f8328600ab5ae19260802a334d0f72d2d5bdda3bfe" +dependencies = [ + "darling 0.20.10", + "heck 0.4.1", + "num-bigint", + "proc-macro-crate", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.79", + "termcolor", + "thiserror", +] + +[[package]] +name = "mysql_async" +version = "0.34.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0b66e411c31265e879d9814d03721f2daa7ad07337b6308cb4bb0cde7e6fd47" +dependencies = [ + "bytes", + "crossbeam", + "flate2", + "futures-core", + "futures-sink", + "futures-util", + "keyed_priority_queue", + "lru", + "mysql_common", + "native-tls", + "pem 3.0.4", + "percent-encoding", + "pin-project", + "rand 0.8.5", + "serde", + "serde_json", + "socket2 0.5.7", + "thiserror", + "tokio", + "tokio-native-tls", + "tokio-util", + "twox-hash", + "url", +] + +[[package]] +name = "mysql_common" +version = "0.32.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "478b0ff3f7d67b79da2b96f56f334431aef65e15ba4b29dd74a4236e29582bdc" +dependencies = [ + "base64 0.21.7", + "bigdecimal", + "bindgen 0.70.1", + "bitflags 2.6.0", + "bitvec", + "btoi", + "byteorder", + "bytes", + "cc", + "cmake", + "crc32fast", + "flate2", + "frunk", + "lazy_static", + "mysql-common-derive", + "num-bigint", + "num-traits", + "rand 0.8.5", + "regex", + "rust_decimal", + "saturating", + "serde", + "serde_json", + "sha1", + "sha2 0.10.8", + "smallvec", + "subprocess", + "thiserror", + "time", + "uuid 1.10.0", + "zstd 0.13.2", +] + +[[package]] +name = "native-tls" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8614eb2c83d59d1c8cc974dd3f920198647674a0a035e1af1fa58707e317466" +dependencies = [ + "libc", + "log", + "openssl", + "openssl-probe", + "openssl-sys", + "schannel", + "security-framework", + "security-framework-sys", + "tempfile", +] + +[[package]] +name = "new_debug_unreachable" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" + +[[package]] +name = "nix" +version = "0.27.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2eb04e9c688eff1c89d72b407f168cf79bb9e867a9d3323ed6c01519eb9cc053" +dependencies = [ + "bitflags 2.6.0", + "cfg-if", + "libc", +] + +[[package]] +name = "nom" +version = "7.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +dependencies = [ + "memchr", + "minimal-lexical", +] + +[[package]] +name = "nu-ansi-term" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +dependencies = [ + "overload", + "winapi", +] + +[[package]] +name = "num" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23" +dependencies = [ + "num-bigint", + "num-complex", + "num-integer", + "num-iter", + "num-rational", + "num-traits", +] + +[[package]] +name = "num-bigint" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" +dependencies = [ + "num-integer", + "num-traits", + "rand 0.8.5", + "serde", +] + +[[package]] +name = "num-bigint-dig" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc84195820f291c7697304f3cbdadd1cb7199c0efc917ff5eafd71225c136151" +dependencies = [ + "byteorder", + "lazy_static", + "libm", + "num-integer", + "num-iter", + "num-traits", + "rand 0.8.5", + "smallvec", + "zeroize", +] + +[[package]] +name = "num-complex" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495" +dependencies = [ + "bytemuck", + "num-traits", +] + +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + +[[package]] +name = "num-integer" +version = "0.1.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-iter" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f83d14da390562dca69fc84082e73e548e1ad308d24accdedd2720017cb37824" +dependencies = [ + "num-bigint", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", + "libm", +] + +[[package]] +name = "num_cpus" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" +dependencies = [ + "hermit-abi 0.3.9", + "libc", +] + +[[package]] +name = "number_prefix" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" + +[[package]] +name = "oauth2" +version = "4.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c38841cdd844847e3e7c8d29cef9dcfed8877f8f56f9071f77843ecf3baf937f" +dependencies = [ + "base64 0.13.1", + "chrono", + "getrandom 0.2.15", + "http 0.2.12", + "rand 0.8.5", + "reqwest 0.11.27", + "serde", + "serde_json", + "serde_path_to_error", + "sha2 0.10.8", + "thiserror", + "url", +] + +[[package]] +name = "object" +version = "0.36.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "084f1a5821ac4c651660a94a7153d27ac9d8a53736203f58b31945ded098070a" +dependencies = [ + "memchr", +] + +[[package]] +name = "object_store" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6da452820c715ce78221e8202ccc599b4a52f3e1eb3eedb487b680c81a8e3f3" +dependencies = [ + "async-trait", + "base64 0.22.1", + "bytes", + "chrono", + "futures", + "humantime", + "hyper 1.4.1", + "itertools 0.13.0", + "md-5 0.10.6", + "parking_lot", + "percent-encoding", + "quick-xml 0.36.2", + "rand 0.8.5", + "reqwest 0.12.7", + "ring 0.17.8", + "serde", + "serde_json", + "snafu", + "tokio", + "tracing", + "url", + "walkdir", +] + +[[package]] +name = "once_cell" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" + +[[package]] +name = "oneshot" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e296cf87e61c9cfc1a61c3c63a0f7f286ed4554e0e22be84e8a38e1d264a2a29" + +[[package]] +name = "onig" +version = "6.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c4b31c8722ad9171c6d77d3557db078cab2bd50afcc9d09c8b315c59df8ca4f" +dependencies = [ + "bitflags 1.3.2", + "libc", + "once_cell", + "onig_sys", +] + +[[package]] +name = "onig_sys" +version = "69.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b829e3d7e9cc74c7e315ee8edb185bf4190da5acde74afd7fc59c35b1f086e7" +dependencies = [ + "cc", + "pkg-config", +] + +[[package]] +name = "opaque-debug" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" + +[[package]] +name = "openapiv3" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b1a9f106eb0a780abd17ba9fca8e0843e3461630bcbe2af0ad4d5d3ba4e9aa4" +dependencies = [ + "indexmap 1.9.3", + "serde", + "serde_json", +] + +[[package]] +name = "openidconnect" +version = "3.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f47e80a9cfae4462dd29c41e987edd228971d6565553fbc14b8a11e666d91590" +dependencies = [ + "base64 0.13.1", + "chrono", + "dyn-clone", + "ed25519-dalek", + "hmac", + "http 0.2.12", + "itertools 0.10.5", + "log", + "oauth2", + "p256", + "p384", + "rand 0.8.5", + "rsa 0.9.6", + "serde", + "serde-value", + "serde_derive", + "serde_json", + "serde_path_to_error", + "serde_plain", + "serde_with", + "sha2 0.10.8", + "subtle", + "thiserror", + "url", +] + +[[package]] +name = "openssl" +version = "0.10.66" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9529f4786b70a3e8c61e11179af17ab6188ad8d0ded78c5529441ed39d4bd9c1" +dependencies = [ + "bitflags 2.6.0", + "cfg-if", + "foreign-types", + "libc", + "once_cell", + "openssl-macros", + "openssl-sys", +] + +[[package]] +name = "openssl-macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.79", +] + +[[package]] +name = "openssl-probe" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" + +[[package]] +name = "openssl-sys" +version = "0.9.103" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f9e8deee91df40a943c71b917e5874b951d32a802526c85721ce3b776c929d6" +dependencies = [ + "cc", + "libc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "option-ext" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" + +[[package]] +name = "ordered-float" +version = "2.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68f19d67e5a2795c94e73e0bb1cc1a7edeb2e28efd39e2e1c9b7a40c1108b11c" +dependencies = [ + "num-traits", +] + +[[package]] +name = "outref" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f222829ae9293e33a9f5e9f440c6760a3d450a64affe1846486b140db81c1f4" + +[[package]] +name = "outref" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4030760ffd992bef45b0ae3f10ce1aba99e33464c90d14dd7c039884963ddc7a" + +[[package]] +name = "overload" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" + +[[package]] +name = "ownedbytes" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3a059efb063b8f425b948e042e6b9bd85edfe60e913630ed727b23e2dfcc558" +dependencies = [ + "stable_deref_trait", +] + +[[package]] +name = "p256" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b" +dependencies = [ + "ecdsa", + "elliptic-curve", + "primeorder", + "sha2 0.10.8", +] + +[[package]] +name = "p384" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70786f51bcc69f6a4c0360e063a4cac5419ef7c5cd5b3c99ad70f3be5ba79209" +dependencies = [ + "ecdsa", + "elliptic-curve", + "primeorder", + "sha2 0.10.8", +] + +[[package]] +name = "parking" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" + +[[package]] +name = "parking_lot" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall 0.5.6", + "smallvec", + "windows-targets 0.52.6", +] + +[[package]] +name = "parquet" +version = "52.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e977b9066b4d3b03555c22bdc442f3fadebd96a39111249113087d0edb2691cd" +dependencies = [ + "ahash 0.8.11", + "arrow-array", + "arrow-buffer", + "arrow-cast", + "arrow-data", + "arrow-ipc", + "arrow-schema", + "arrow-select", + "base64 0.22.1", + "brotli", + "bytes", + "chrono", + "flate2", + "futures", + "half", + "hashbrown 0.14.5", + "lz4_flex", + "num", + "num-bigint", + "object_store", + "paste", + "seq-macro", + "snap", + "thrift", + "tokio", + "twox-hash", + "zstd 0.13.2", + "zstd-sys", +] + +[[package]] +name = "parse-zoneinfo" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f2a05b18d44e2957b88f96ba460715e295bc1d7510468a2f3d3b44535d26c24" +dependencies = [ + "regex", +] + +[[package]] +name = "password-hash" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7676374caaee8a325c9e7a2ae557f216c5563a171d6997b0ef8a65af35147700" +dependencies = [ + "base64ct", + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "password-hash" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "346f04948ba92c43e8469c1ee6736c7563d71012b17d40745260fe106aac2166" +dependencies = [ + "base64ct", + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "paste" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" + +[[package]] +name = "pathdiff" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd" + +[[package]] +name = "pbkdf2" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917" +dependencies = [ + "digest 0.10.7", + "hmac", + "password-hash 0.4.2", + "sha2 0.10.8", +] + +[[package]] +name = "pem" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8835c273a76a90455d7344889b0964598e3316e2a79ede8e36f16bdcf2228b8" +dependencies = [ + "base64 0.13.1", +] + +[[package]] +name = "pem" +version = "3.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e459365e590736a54c3fa561947c84837534b8e9af6fc5bf781307e82658fae" +dependencies = [ + "base64 0.22.1", + "serde", +] + +[[package]] +name = "pem-rfc7468" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d159833a9105500e0398934e205e0773f0b27529557134ecfc51c27646adac" +dependencies = [ + "base64ct", +] + +[[package]] +name = "pem-rfc7468" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412" +dependencies = [ + "base64ct", +] + +[[package]] +name = "percent-encoding" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" + +[[package]] +name = "petgraph" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" +dependencies = [ + "fixedbitset", + "indexmap 2.5.0", +] + +[[package]] +name = "pg-embed" +version = "0.7.2" +source = "git+https://github.com/faokunega/pg-embed#72db5e053f0afac6eee51d3baa2fd5c90803e02d" +dependencies = [ + "archiver-rs", + "async-trait", + "bytes", + "dirs", + "futures", + "lazy_static", + "log", + "reqwest 0.11.27", + "thiserror", + "tokio", + "zip", +] + +[[package]] +name = "phf" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc" +dependencies = [ + "phf_macros", + "phf_shared", +] + +[[package]] +name = "phf_codegen" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8d39688d359e6b34654d328e262234662d16cc0f60ec8dcbe5e718709342a5a" +dependencies = [ + "phf_generator", + "phf_shared", +] + +[[package]] +name = "phf_generator" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48e4cc64c2ad9ebe670cb8fd69dd50ae301650392e81c05f9bfcb2d5bdbc24b0" +dependencies = [ + "phf_shared", + "rand 0.8.5", +] + +[[package]] +name = "phf_macros" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3444646e286606587e49f3bcf1679b8cef1dc2c5ecc29ddacaffc305180d464b" +dependencies = [ + "phf_generator", + "phf_shared", + "proc-macro2", + "quote", + "syn 2.0.79", +] + +[[package]] +name = "phf_shared" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90fcb95eef784c2ac79119d1dd819e162b5da872ce6f3c3abe1e8ca1c082f72b" +dependencies = [ + "siphasher", +] + +[[package]] +name = "php-parser-rs" +version = "0.1.3" +source = "git+https://github.com/php-rust-tools/parser?rev=ec4cb411dec09450946ef57920b7ffced7f6495d#ec4cb411dec09450946ef57920b7ffced7f6495d" +dependencies = [ + "ariadne", + "clap", + "schemars", + "serde", + "serde_json", +] + +[[package]] +name = "pin-project" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3" +dependencies = [ + "pin-project-internal", +] + +[[package]] +name = "pin-project-internal" +version = "1.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.79", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "piper" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066" +dependencies = [ + "atomic-waker", + "fastrand 2.1.1", + "futures-io", +] + +[[package]] +name = "pkcs1" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eff33bdbdfc54cc98a2eca766ebdec3e1b8fb7387523d5c9c9a2891da856f719" +dependencies = [ + "der 0.6.1", + "pkcs8 0.9.0", + "spki 0.6.0", + "zeroize", +] + +[[package]] +name = "pkcs1" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f" +dependencies = [ + "der 0.7.9", + "pkcs8 0.10.2", + "spki 0.7.3", +] + +[[package]] +name = "pkcs8" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9eca2c590a5f85da82668fa685c09ce2888b9430e83299debf1f34b65fd4a4ba" +dependencies = [ + "der 0.6.1", + "spki 0.6.0", +] + +[[package]] +name = "pkcs8" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +dependencies = [ + "der 0.7.9", + "spki 0.7.3", +] + +[[package]] +name = "pkg-config" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" + +[[package]] +name = "polling" +version = "3.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc2790cd301dec6cd3b7a025e4815cf825724a51c98dccfe6a3e55f05ffb6511" +dependencies = [ + "cfg-if", + "concurrent-queue", + "hermit-abi 0.4.0", + "pin-project-lite", + "rustix", + "tracing", + "windows-sys 0.59.0", +] + +[[package]] +name = "portable-atomic" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc9c68a3f6da06753e9335d63e27f6b9754dd1920d941135b7ea8224f141adb2" + +[[package]] +name = "postgres-native-tls" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d442770e2b1e244bb5eb03b31c79b65bb2568f413b899eaba850fa945a65954" +dependencies = [ + "futures", + "native-tls", + "tokio", + "tokio-native-tls", + "tokio-postgres", +] + +[[package]] +name = "postgres-protocol" +version = "0.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acda0ebdebc28befa84bee35e651e4c5f09073d668c7aed4cf7e23c3cda84b23" +dependencies = [ + "base64 0.22.1", + "byteorder", + "bytes", + "fallible-iterator", + "hmac", + "md-5 0.10.6", + "memchr", + "rand 0.8.5", + "sha2 0.10.8", + "stringprep", +] + +[[package]] +name = "postgres-types" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f66ea23a2d0e5734297357705193335e0a957696f34bed2f2faefacb2fec336f" +dependencies = [ + "array-init", + "bit-vec", + "bytes", + "chrono", + "fallible-iterator", + "postgres-protocol", + "serde", + "serde_json", + "uuid 1.10.0", +] + +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + +[[package]] +name = "ppv-lite86" +version = "0.2.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +dependencies = [ + "zerocopy", +] + +[[package]] +name = "pretty-hex" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6fa0831dd7cc608c38a5e323422a0077678fa5744aa2be4ad91c4ece8eec8d5" + +[[package]] +name = "prettyplease" +version = "0.1.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c8646e95016a7a6c4adea95bafa8a16baab64b583356217f2c85db4a39d9a86" +dependencies = [ + "proc-macro2", + "syn 1.0.109", +] + +[[package]] +name = "prettyplease" +version = "0.2.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "479cf940fbbb3426c32c5d5176f62ad57549a0bb84773423ba8be9d089f5faba" +dependencies = [ + "proc-macro2", + "syn 2.0.79", +] + +[[package]] +name = "primeorder" +version = "0.13.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6" +dependencies = [ + "elliptic-curve", +] + +[[package]] +name = "proc-macro-crate" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecf48c7ca261d60b74ab1a7b20da18bede46776b2e55535cb958eb595c5fa7b" +dependencies = [ + "toml_edit 0.22.22", +] + +[[package]] +name = "proc-macro-error" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +dependencies = [ + "proc-macro-error-attr", + "proc-macro2", + "quote", + "syn 1.0.109", + "version_check", +] + +[[package]] +name = "proc-macro-error-attr" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +dependencies = [ + "proc-macro2", + "quote", + "version_check", +] + +[[package]] +name = "proc-macro-rules" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07c277e4e643ef00c1233393c673f655e3672cf7eb3ba08a00bdd0ea59139b5f" +dependencies = [ + "proc-macro-rules-macros", + "proc-macro2", + "syn 2.0.79", +] + +[[package]] +name = "proc-macro-rules-macros" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "207fffb0fe655d1d47f6af98cc2793405e85929bdbc420d685554ff07be27ac7" +dependencies = [ + "once_cell", + "proc-macro2", + "quote", + "syn 2.0.79", +] + +[[package]] +name = "proc-macro2" +version = "1.0.86" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "progenitor" +version = "0.3.0" +source = "git+https://github.com/oxidecomputer/progenitor?rev=3d96016ae8d422e90513b2d34fb5b63eeab30b01#3d96016ae8d422e90513b2d34fb5b63eeab30b01" +dependencies = [ + "anyhow", + "built", + "clap", + "openapiv3", + "progenitor-client", + "progenitor-impl", + "progenitor-macro", + "project-root", + "rustfmt-wrapper", + "serde", + "serde_json", + "serde_yaml", +] + +[[package]] +name = "progenitor-client" +version = "0.3.0" +source = "git+https://github.com/oxidecomputer/progenitor?rev=3d96016ae8d422e90513b2d34fb5b63eeab30b01#3d96016ae8d422e90513b2d34fb5b63eeab30b01" +dependencies = [ + "bytes", + "futures-core", + "percent-encoding", + "reqwest 0.11.27", + "serde", + "serde_json", + "serde_urlencoded", +] + +[[package]] +name = "progenitor-impl" +version = "0.3.0" +source = "git+https://github.com/oxidecomputer/progenitor?rev=3d96016ae8d422e90513b2d34fb5b63eeab30b01#3d96016ae8d422e90513b2d34fb5b63eeab30b01" +dependencies = [ + "getopts", + "heck 0.4.1", + "http 0.2.12", + "indexmap 1.9.3", + "openapiv3", + "proc-macro2", + "quote", + "regex", + "schemars", + "serde", + "serde_json", + "syn 2.0.79", + "thiserror", + "typify", + "unicode-ident", +] + +[[package]] +name = "progenitor-macro" +version = "0.3.0" +source = "git+https://github.com/oxidecomputer/progenitor?rev=3d96016ae8d422e90513b2d34fb5b63eeab30b01#3d96016ae8d422e90513b2d34fb5b63eeab30b01" +dependencies = [ + "openapiv3", + "proc-macro2", + "progenitor-impl", + "quote", + "schemars", + "serde", + "serde_json", + "serde_tokenstream", + "serde_yaml", + "syn 2.0.79", +] + +[[package]] +name = "project-root" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8bccbff07d5ed689c4087d20d7307a52ab6141edeedf487c3876a55b86cf63df" + +[[package]] +name = "prometheus" +version = "0.13.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d33c28a30771f7f96db69893f78b857f7450d7e0237e9c8fc6427a81bae7ed1" +dependencies = [ + "cfg-if", + "fnv", + "lazy_static", + "memchr", + "parking_lot", + "thiserror", +] + +[[package]] +name = "prost" +version = "0.12.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "deb1435c188b76130da55f17a466d252ff7b1418b2ad3e037d127b94e3411f29" +dependencies = [ + "bytes", + "prost-derive", +] + +[[package]] +name = "prost-derive" +version = "0.12.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81bddcdb20abf9501610992b6759a4c888aef7d1a7247ef75e2404275ac24af1" +dependencies = [ + "anyhow", + "itertools 0.12.1", + "proc-macro2", + "quote", + "syn 2.0.79", +] + +[[package]] +name = "prost-types" +version = "0.12.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9091c90b0a32608e984ff2fa4091273cbdd755d54935c51d520887f4a1dbd5b0" +dependencies = [ + "prost", +] + +[[package]] +name = "psm" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa37f80ca58604976033fae9515a8a2989fc13797d953f7c04fb8fa36a11f205" +dependencies = [ + "cc", +] + +[[package]] +name = "ptr_meta" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0738ccf7ea06b608c10564b31debd4f5bc5e197fc8bfe088f68ae5ce81e7a4f1" +dependencies = [ + "ptr_meta_derive", +] + +[[package]] +name = "ptr_meta_derive" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16b845dbfca988fa33db069c0e230574d15a3088f147a87b64c7589eb662c9ac" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "pulldown-cmark" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57206b407293d2bcd3af849ce869d52068623f19e1b5ff8e8778e3309439682b" +dependencies = [ + "bitflags 2.6.0", + "getopts", + "memchr", + "unicase", +] + +[[package]] +name = "pulp" +version = "0.18.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0a01a0dc67cf4558d279f0c25b0962bd08fc6dec0137699eae304103e882fe6" +dependencies = [ + "bytemuck", + "libm", + "num-complex", + "reborrow", +] + +[[package]] +name = "quick-error" +version = "1.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" + +[[package]] +name = "quick-xml" +version = "0.30.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eff6510e86862b57b210fd8cbe8ed3f0d7d600b9c2863cd4549a2e033c66e956" +dependencies = [ + "memchr", + "serde", +] + +[[package]] +name = "quick-xml" +version = "0.36.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7649a7b4df05aed9ea7ec6f628c67c9953a43869b8bc50929569b2999d443fe" +dependencies = [ + "memchr", + "serde", +] + +[[package]] +name = "quick_cache" +version = "0.6.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d7c94f8935a9df96bb6380e8592c70edf497a643f94bd23b2f76b399385dbf4" +dependencies = [ + "ahash 0.8.11", + "equivalent", + "hashbrown 0.14.5", + "parking_lot", +] + +[[package]] +name = "quinn" +version = "0.11.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c7c5fdde3cdae7203427dc4f0a68fe0ed09833edc525a03456b153b79828684" +dependencies = [ + "bytes", + "pin-project-lite", + "quinn-proto", + "quinn-udp", + "rustc-hash 2.0.0", + "rustls 0.23.13", + "socket2 0.5.7", + "thiserror", + "tokio", + "tracing", +] + +[[package]] +name = "quinn-proto" +version = "0.11.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fadfaed2cd7f389d0161bb73eeb07b7b78f8691047a6f3e73caaeae55310a4a6" +dependencies = [ + "bytes", + "rand 0.8.5", + "ring 0.17.8", + "rustc-hash 2.0.0", + "rustls 0.23.13", + "slab", + "thiserror", + "tinyvec", + "tracing", +] + +[[package]] +name = "quinn-udp" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fe68c2e9e1a1234e218683dbdf9f9dfcb094113c5ac2b938dfcb9bab4c4140b" +dependencies = [ + "libc", + "once_cell", + "socket2 0.5.7", + "tracing", + "windows-sys 0.59.0", +] + +[[package]] +name = "quote" +version = "1.0.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "radium" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" + +[[package]] +name = "radix_fmt" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce082a9940a7ace2ad4a8b7d0b1eac6aa378895f18be598230c5f2284ac05426" + +[[package]] +name = "rand" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" +dependencies = [ + "getrandom 0.1.16", + "libc", + "rand_chacha 0.2.2", + "rand_core 0.5.1", + "rand_hc", +] + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha 0.3.1", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_chacha" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" +dependencies = [ + "ppv-lite86", + "rand_core 0.5.1", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_core" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" +dependencies = [ + "getrandom 0.1.16", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom 0.2.15", +] + +[[package]] +name = "rand_distr" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32cb0b9bc82b0a0876c2dd994a7e7a2683d3e7390ca40e6886785ef0c7e3ee31" +dependencies = [ + "num-traits", + "rand 0.8.5", +] + +[[package]] +name = "rand_hc" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" +dependencies = [ + "rand_core 0.5.1", +] + +[[package]] +name = "raw-cpuid" +version = "10.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c297679cb867470fa8c9f67dbba74a78d78e3e98d7cf2b08d6d71540f797332" +dependencies = [ + "bitflags 1.3.2", +] + +[[package]] +name = "rayon" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-cond" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "059f538b55efd2309c9794130bc149c6a553db90e9d99c2030785c82f0bd7df9" +dependencies = [ + "either", + "itertools 0.11.0", + "rayon", +] + +[[package]] +name = "rayon-core" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] + +[[package]] +name = "reborrow" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03251193000f4bd3b042892be858ee50e8b3719f2b08e5833ac4353724632430" + +[[package]] +name = "redis" +version = "0.23.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f49cdc0bb3f412bf8e7d1bd90fe1d9eb10bc5c399ba90973c14662a27b3f8ba" +dependencies = [ + "async-std", + "async-trait", + "bytes", + "combine", + "futures-util", + "itoa", + "percent-encoding", + "pin-project-lite", + "ryu", + "sha1_smol", + "socket2 0.4.10", + "tokio", + "tokio-util", + "url", +] + +[[package]] +name = "redox_syscall" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" +dependencies = [ + "bitflags 1.3.2", +] + +[[package]] +name = "redox_syscall" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "355ae415ccd3a04315d3f8246e86d67689ea74d88d915576e1589a351062a13b" +dependencies = [ + "bitflags 2.6.0", +] + +[[package]] +name = "redox_users" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" +dependencies = [ + "getrandom 0.2.15", + "libredox", + "thiserror", +] + +[[package]] +name = "regex" +version = "1.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4219d74c6b67a3654a9fbebc4b419e22126d13d2f3c4a07ee0cb61ff79a79619" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata 0.4.7", + "regex-syntax 0.8.4", +] + +[[package]] +name = "regex-automata" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" +dependencies = [ + "regex-syntax 0.6.29", +] + +[[package]] +name = "regex-automata" +version = "0.4.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax 0.8.4", +] + +[[package]] +name = "regex-lite" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53a49587ad06b26609c52e423de037e7f57f20d53535d66e08c695f347df952a" + +[[package]] +name = "regex-syntax" +version = "0.6.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" + +[[package]] +name = "regex-syntax" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbb5fb1acd8a1a18b3dd5be62d25485eb770e05afb408a9627d14d451bae12da" + +[[package]] +name = "regex-syntax" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" + +[[package]] +name = "regress" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82a9ecfa0cb04d0b04dddb99b8ccf4f66bc8dfd23df694b398570bd8ae3a50fb" +dependencies = [ + "hashbrown 0.13.2", + "memchr", +] + +[[package]] +name = "rend" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71fe3824f5629716b1589be05dacd749f6aa084c87e00e016714a8cdfccc997c" +dependencies = [ + "bytecheck", +] + +[[package]] +name = "reqwest" +version = "0.11.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd67538700a17451e7cba03ac727fb961abb7607553461627b97de0b89cf4a62" +dependencies = [ + "base64 0.21.7", + "bytes", + "encoding_rs", + "futures-core", + "futures-util", + "h2 0.3.26", + "http 0.2.12", + "http-body 0.4.6", + "hyper 0.14.30", + "hyper-rustls 0.24.2", + "hyper-tls 0.5.0", + "ipnet", + "js-sys", + "log", + "mime", + "native-tls", + "once_cell", + "percent-encoding", + "pin-project-lite", + "rustls 0.21.12", + "rustls-pemfile 1.0.4", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper 0.1.2", + "system-configuration 0.5.1", + "tokio", + "tokio-native-tls", + "tokio-rustls 0.24.1", + "tokio-util", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-streams", + "web-sys", + "webpki-roots 0.25.4", + "winreg", +] + +[[package]] +name = "reqwest" +version = "0.12.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8f4955649ef5c38cc7f9e8aa41761d48fb9677197daea9984dc54f56aad5e63" +dependencies = [ + "async-compression 0.4.12", + "base64 0.22.1", + "bytes", + "encoding_rs", + "futures-core", + "futures-util", + "h2 0.4.6", + "http 1.1.0", + "http-body 1.0.1", + "http-body-util", + "hyper 1.4.1", + "hyper-rustls 0.27.3", + "hyper-tls 0.6.0", + "hyper-util", + "ipnet", + "js-sys", + "log", + "mime", + "native-tls", + "once_cell", + "percent-encoding", + "pin-project-lite", + "quinn", + "rustls 0.23.13", + "rustls-native-certs 0.7.3", + "rustls-pemfile 2.1.3", + "rustls-pki-types", + "serde", + "serde_json", + "serde_urlencoded", + "sync_wrapper 1.0.1", + "system-configuration 0.6.1", + "tokio", + "tokio-native-tls", + "tokio-rustls 0.26.0", + "tokio-util", + "tower-service", + "url", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-streams", + "web-sys", + "windows-registry", +] + +[[package]] +name = "resolv-conf" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52e44394d2086d010551b14b53b1f24e31647570cd1deb0379e2c21b329aba00" +dependencies = [ + "hostname", + "quick-error", +] + +[[package]] +name = "rfc6979" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" +dependencies = [ + "hmac", + "subtle", +] + +[[package]] +name = "riff" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9b1a3d5f46d53f4a3478e2be4a5a5ce5108ea58b100dcd139830eae7f79a3a1" + +[[package]] +name = "ring" +version = "0.16.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc" +dependencies = [ + "cc", + "libc", + "once_cell", + "spin 0.5.2", + "untrusted 0.7.1", + "web-sys", + "winapi", +] + +[[package]] +name = "ring" +version = "0.17.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" +dependencies = [ + "cc", + "cfg-if", + "getrandom 0.2.15", + "libc", + "spin 0.9.8", + "untrusted 0.9.0", + "windows-sys 0.52.0", +] + +[[package]] +name = "rkyv" +version = "0.7.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9008cd6385b9e161d8229e1f6549dd23c3d022f132a2ea37ac3a10ac4935779b" +dependencies = [ + "bitvec", + "bytecheck", + "bytes", + "hashbrown 0.12.3", + "ptr_meta", + "rend", + "rkyv_derive", + "seahash", + "tinyvec", + "uuid 1.10.0", +] + +[[package]] +name = "rkyv_derive" +version = "0.7.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "503d1d27590a2b0a3a4ca4c94755aa2875657196ecbf401a42eff41d7de532c0" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "rsa" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "094052d5470cbcef561cb848a7209968c9f12dfa6d668f4bca048ac5de51099c" +dependencies = [ + "byteorder", + "digest 0.10.7", + "num-bigint-dig", + "num-integer", + "num-iter", + "num-traits", + "pkcs1 0.4.1", + "pkcs8 0.9.0", + "rand_core 0.6.4", + "signature 1.6.4", + "smallvec", + "subtle", + "zeroize", +] + +[[package]] +name = "rsa" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d0e5124fcb30e76a7e79bfee683a2746db83784b86289f6251b54b7950a0dfc" +dependencies = [ + "const-oid", + "digest 0.10.7", + "num-bigint-dig", + "num-integer", + "num-traits", + "pkcs1 0.7.5", + "pkcs8 0.10.2", + "rand_core 0.6.4", + "signature 2.2.0", + "spki 0.7.3", + "subtle", + "zeroize", +] + +[[package]] +name = "rsmq_async" +version = "5.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b21409a26e25b1946ce3ab9903a2710fbae8727a05c17f79d165908592743cb" +dependencies = [ + "async-trait", + "bb8", + "lazy_static", + "radix_fmt", + "rand 0.8.5", + "redis", + "thiserror", +] + +[[package]] +name = "rust-embed" +version = "6.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a36224c3276f8c4ebc8c20f158eca7ca4359c8db89991c4925132aaaf6702661" +dependencies = [ + "rust-embed-impl", + "rust-embed-utils", + "walkdir", +] + +[[package]] +name = "rust-embed-impl" +version = "6.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49b94b81e5b2c284684141a2fb9e2a31be90638caf040bf9afbc5a0416afe1ac" +dependencies = [ + "proc-macro2", + "quote", + "rust-embed-utils", + "syn 2.0.79", + "walkdir", +] + +[[package]] +name = "rust-embed-utils" +version = "7.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d38ff6bf570dc3bb7100fce9f7b60c33fa71d80e88da3f2580df4ff2bdded74" +dependencies = [ + "sha2 0.10.8", + "walkdir", +] + +[[package]] +name = "rust-stemmers" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e46a2036019fdb888131db7a4c847a1063a7493f971ed94ea82c67eada63ca54" +dependencies = [ + "serde", + "serde_derive", +] + +[[package]] +name = "rust_decimal" +version = "1.36.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b082d80e3e3cc52b2ed634388d436fe1f4de6af5786cc2de9ba9737527bdf555" +dependencies = [ + "arrayvec", + "borsh", + "bytes", + "num-traits", + "postgres-types", + "rand 0.8.5", + "rkyv", + "serde", + "serde_json", +] + +[[package]] +name = "rustc-demangle" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" + +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + +[[package]] +name = "rustc-hash" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "583034fd73374156e66797ed8e5b0d5690409c9226b22d87cb7f19821c05d152" + +[[package]] +name = "rustc_version" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" +dependencies = [ + "semver 0.9.0", +] + +[[package]] +name = "rustc_version" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" +dependencies = [ + "semver 1.0.23", +] + +[[package]] +name = "rustfmt-wrapper" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1adc9dfed5cc999077978cc7163b9282c5751c8d39827c4ea8c8c220ca5a440" +dependencies = [ + "serde", + "tempfile", + "thiserror", + "toml 0.8.19", + "toolchain_find", +] + +[[package]] +name = "rustix" +version = "0.38.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8acb788b847c24f28525660c4d7758620a7210875711f79e7f663cc152726811" +dependencies = [ + "bitflags 2.6.0", + "errno", + "libc", + "linux-raw-sys", + "windows-sys 0.52.0", +] + +[[package]] +name = "rustls" +version = "0.21.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" +dependencies = [ + "log", + "ring 0.17.8", + "rustls-webpki 0.101.7", + "sct", +] + +[[package]] +name = "rustls" +version = "0.23.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2dabaac7466917e566adb06783a81ca48944c6898a1b08b9374106dd671f4c8" +dependencies = [ + "log", + "once_cell", + "ring 0.17.8", + "rustls-pki-types", + "rustls-webpki 0.102.8", + "subtle", + "zeroize", +] + +[[package]] +name = "rustls-native-certs" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9aace74cb666635c918e9c12bc0d348266037aa8eb599b5cba565709a8dff00" +dependencies = [ + "openssl-probe", + "rustls-pemfile 1.0.4", + "schannel", + "security-framework", +] + +[[package]] +name = "rustls-native-certs" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5bfb394eeed242e909609f56089eecfe5fda225042e8b171791b9c95f5931e5" +dependencies = [ + "openssl-probe", + "rustls-pemfile 2.1.3", + "rustls-pki-types", + "schannel", + "security-framework", +] + +[[package]] +name = "rustls-native-certs" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcaf18a4f2be7326cd874a5fa579fae794320a0f388d365dca7e480e55f83f8a" +dependencies = [ + "openssl-probe", + "rustls-pemfile 2.1.3", + "rustls-pki-types", + "schannel", + "security-framework", +] + +[[package]] +name = "rustls-pemfile" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" +dependencies = [ + "base64 0.21.7", +] + +[[package]] +name = "rustls-pemfile" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "196fe16b00e106300d3e45ecfcb764fa292a535d7326a29a5875c579c7417425" +dependencies = [ + "base64 0.22.1", + "rustls-pki-types", +] + +[[package]] +name = "rustls-pki-types" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e696e35370c65c9c541198af4543ccd580cf17fc25d8e05c5a242b202488c55" + +[[package]] +name = "rustls-tokio-stream" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22557157d7395bc30727745b365d923f1ecc230c4c80b176545f3f4f08c46e33" +dependencies = [ + "futures", + "rustls 0.23.13", + "socket2 0.5.7", + "tokio", +] + +[[package]] +name = "rustls-webpki" +version = "0.101.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" +dependencies = [ + "ring 0.17.8", + "untrusted 0.9.0", +] + +[[package]] +name = "rustls-webpki" +version = "0.102.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" +dependencies = [ + "ring 0.17.8", + "rustls-pki-types", + "untrusted 0.9.0", +] + +[[package]] +name = "rustpython-ast" +version = "0.3.1" +source = "git+https://github.com/RustPython/Parser?rev=9ce55aefdeb35e2f706ce0b02d5a2dfe6295fc57#9ce55aefdeb35e2f706ce0b02d5a2dfe6295fc57" +dependencies = [ + "is-macro", + "malachite-bigint", + "rustpython-parser-core", + "static_assertions", +] + +[[package]] +name = "rustpython-parser" +version = "0.3.1" +source = "git+https://github.com/RustPython/Parser?rev=9ce55aefdeb35e2f706ce0b02d5a2dfe6295fc57#9ce55aefdeb35e2f706ce0b02d5a2dfe6295fc57" +dependencies = [ + "anyhow", + "is-macro", + "itertools 0.11.0", + "lalrpop-util", + "log", + "malachite-bigint", + "num-traits", + "phf", + "phf_codegen", + "rustc-hash 1.1.0", + "rustpython-ast", + "rustpython-parser-core", + "tiny-keccak", + "unic-emoji-char", + "unic-ucd-ident", + "unicode_names2", +] + +[[package]] +name = "rustpython-parser-core" +version = "0.3.1" +source = "git+https://github.com/RustPython/Parser?rev=9ce55aefdeb35e2f706ce0b02d5a2dfe6295fc57#9ce55aefdeb35e2f706ce0b02d5a2dfe6295fc57" +dependencies = [ + "is-macro", + "memchr", + "rustpython-parser-vendored", +] + +[[package]] +name = "rustpython-parser-vendored" +version = "0.3.1" +source = "git+https://github.com/RustPython/Parser?rev=9ce55aefdeb35e2f706ce0b02d5a2dfe6295fc57#9ce55aefdeb35e2f706ce0b02d5a2dfe6295fc57" +dependencies = [ + "memchr", + "once_cell", +] + +[[package]] +name = "rustversion" +version = "1.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "955d28af4278de8121b7ebeb796b6a45735dc01436d898801014aced2773a3d6" + +[[package]] +name = "ryu" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" + +[[package]] +name = "ryu-js" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad97d4ce1560a5e27cec89519dc8300d1aa6035b099821261c651486a19e44d5" + +[[package]] +name = "safetensors" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44560c11236a6130a46ce36c836a62936dc81ebf8c36a37947423571be0e55b6" +dependencies = [ + "serde", + "serde_json", +] + +[[package]] +name = "samael" +version = "0.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b75583aad4a51c50fc0af69c230d18078c9d5a69a98d0f6013d01053acf744f4" +dependencies = [ + "base64 0.21.7", + "bindgen 0.69.4", + "chrono", + "data-encoding", + "derive_builder", + "flate2", + "lazy_static", + "libc", + "libxml", + "openssl", + "openssl-probe", + "openssl-sys", + "pkg-config", + "quick-xml 0.30.0", + "rand 0.8.5", + "serde", + "thiserror", + "url", + "uuid 1.10.0", +] + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "saturating" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ece8e78b2f38ec51c51f5d475df0a7187ba5111b2a28bdc761ee05b075d40a71" + +[[package]] +name = "schannel" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e9aaafd5a2b6e3d657ff009d82fbd630b6bd54dd4eb06f21693925cdf80f9b8b" +dependencies = [ + "windows-sys 0.59.0", +] + +[[package]] +name = "schemars" +version = "0.8.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09c024468a378b7e36765cd36702b7a90cc3cba11654f6685c8f233408e89e92" +dependencies = [ + "chrono", + "dyn-clone", + "schemars_derive", + "serde", + "serde_json", + "uuid 1.10.0", +] + +[[package]] +name = "schemars_derive" +version = "0.8.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1eee588578aff73f856ab961cd2f79e36bc45d7ded33a7562adba4667aecc0e" +dependencies = [ + "proc-macro2", + "quote", + "serde_derive_internals", + "syn 2.0.79", +] + +[[package]] +name = "scoped-tls" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "sct" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" +dependencies = [ + "ring 0.17.8", + "untrusted 0.9.0", +] + +[[package]] +name = "seahash" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b" + +[[package]] +name = "sec1" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" +dependencies = [ + "base16ct", + "der 0.7.9", + "generic-array", + "pkcs8 0.10.2", + "subtle", + "zeroize", +] + +[[package]] +name = "security-framework" +version = "2.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" +dependencies = [ + "bitflags 2.6.0", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", +] + +[[package]] +name = "security-framework-sys" +version = "2.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea4a292869320c0272d7bc55a5a6aafaff59b4f63404a003887b679a2e05b4b6" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "semver" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" +dependencies = [ + "semver-parser", +] + +[[package]] +name = "semver" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" +dependencies = [ + "serde", +] + +[[package]] +name = "semver-parser" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" + +[[package]] +name = "seq-macro" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3f0bf26fd526d2a95683cd0f87bf103b8539e2ca1ef48ce002d67aad59aa0b4" + +[[package]] +name = "serde" +version = "1.0.210" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8e3592472072e6e22e0a54d5904d9febf8508f65fb8552499a1abc7d1078c3a" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde-aux" +version = "4.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d2e8bfba469d06512e11e3311d4d051a4a387a5b42d010404fecf3200321c95" +dependencies = [ + "chrono", + "serde", + "serde_json", +] + +[[package]] +name = "serde-value" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3a1a3341211875ef120e117ea7fd5228530ae7e7036a779fdc9117be6b3282c" +dependencies = [ + "ordered-float", + "serde", +] + +[[package]] +name = "serde-wasm-bindgen" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8302e169f0eddcc139c70f139d19d6467353af16f9fce27e8c30158036a1e16b" +dependencies = [ + "js-sys", + "serde", + "wasm-bindgen", +] + +[[package]] +name = "serde_derive" +version = "1.0.210" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "243902eda00fad750862fc144cea25caca5e20d615af0a81bee94ca738f1df1f" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.79", +] + +[[package]] +name = "serde_derive_internals" +version = "0.29.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.79", +] + +[[package]] +name = "serde_json" +version = "1.0.128" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ff5456707a1de34e7e37f2a6fd3d3f808c318259cbd01ab6377795054b483d8" +dependencies = [ + "indexmap 2.5.0", + "itoa", + "memchr", + "ryu", + "serde", +] + +[[package]] +name = "serde_path_to_error" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af99884400da37c88f5e9146b7f1fd0fbcae8f6eec4e9da38b67d05486f814a6" +dependencies = [ + "itoa", + "serde", +] + +[[package]] +name = "serde_plain" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ce1fc6db65a611022b23a0dec6975d63fb80a302cb3388835ff02c097258d50" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_qs" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7715380eec75f029a4ef7de39a9200e0a63823176b759d055b613f5a87df6a6" +dependencies = [ + "percent-encoding", + "serde", + "thiserror", +] + +[[package]] +name = "serde_qs" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8cac3f1e2ca2fe333923a1ae72caca910b98ed0630bb35ef6f8c8517d6e81afa" +dependencies = [ + "percent-encoding", + "serde", + "thiserror", +] + +[[package]] +name = "serde_spanned" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_tokenstream" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64060d864397305347a78851c51588fd283767e7e7589829e8121d65512340f1" +dependencies = [ + "proc-macro2", + "quote", + "serde", + "syn 2.0.79", +] + +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "serde_v8" +version = "0.208.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "583f3c71a6f7acc1711ad718a33f6e799bacdc711d297b15bb28533f32264c58" +dependencies = [ + "num-bigint", + "serde", + "smallvec", + "thiserror", + "v8", +] + +[[package]] +name = "serde_with" +version = "3.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cecfa94848272156ea67b2b1a53f20fc7bc638c4a46d2f8abde08f05f4b857" +dependencies = [ + "base64 0.22.1", + "chrono", + "hex", + "indexmap 1.9.3", + "indexmap 2.5.0", + "serde", + "serde_derive", + "serde_json", + "serde_with_macros", + "time", +] + +[[package]] +name = "serde_with_macros" +version = "3.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8fee4991ef4f274617a51ad4af30519438dacb2f56ac773b08a1922ff743350" +dependencies = [ + "darling 0.20.10", + "proc-macro2", + "quote", + "syn 2.0.79", +] + +[[package]] +name = "serde_yaml" +version = "0.9.34+deprecated" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" +dependencies = [ + "indexmap 2.5.0", + "itoa", + "ryu", + "serde", + "unsafe-libyaml", +] + +[[package]] +name = "sha1" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest 0.10.7", +] + +[[package]] +name = "sha1_smol" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbfa15b3dddfee50a0fff136974b3e1bde555604ba463834a7eb7deb6417705d" + +[[package]] +name = "sha2" +version = "0.9.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800" +dependencies = [ + "block-buffer 0.9.0", + "cfg-if", + "cpufeatures", + "digest 0.9.0", + "opaque-debug", +] + +[[package]] +name = "sha2" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest 0.10.7", +] + +[[package]] +name = "sharded-slab" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + +[[package]] +name = "signal-hook-registry" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" +dependencies = [ + "libc", +] + +[[package]] +name = "signature" +version = "1.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7c" +dependencies = [ + "digest 0.10.7", + "rand_core 0.6.4", +] + +[[package]] +name = "signature" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" +dependencies = [ + "digest 0.10.7", + "rand_core 0.6.4", +] + +[[package]] +name = "simd-abstraction" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cadb29c57caadc51ff8346233b5cec1d240b68ce55cf1afc764818791876987" +dependencies = [ + "outref 0.1.0", +] + +[[package]] +name = "simdutf8" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e" + +[[package]] +name = "simple_asn1" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adc4e5204eb1910f40f9cfa375f6f05b68c3abac4b6fd879c8ff5e7ae8a0a085" +dependencies = [ + "num-bigint", + "num-traits", + "thiserror", + "time", +] + +[[package]] +name = "siphasher" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" + +[[package]] +name = "sketches-ddsketch" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85636c14b73d81f541e525f585c0a2109e6744e1565b5c1668e31c70c10ed65c" +dependencies = [ + "serde", +] + +[[package]] +name = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] + +[[package]] +name = "smallvec" +version = "1.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" +dependencies = [ + "serde", +] + +[[package]] +name = "smart-default" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "133659a15339456eeeb07572eb02a91c91e9815e9cbc89566944d2c8d3efdbf6" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "smartstring" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fb72c633efbaa2dd666986505016c32c3044395ceaf881518399d2f4127ee29" +dependencies = [ + "autocfg", + "static_assertions", + "version_check", +] + +[[package]] +name = "smol_str" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fad6c857cbab2627dcf01ec85a623ca4e7dcb5691cbaa3d7fb7653671f0d09c9" +dependencies = [ + "serde", +] + +[[package]] +name = "smtp-proto" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51b8ad3dd187f0d4debab02ad65405a9919d6a4f7bce25bd64a258781063a53a" + +[[package]] +name = "snafu" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4de37ad025c587a29e8f3f5605c00f70b98715ef90b9061a815b9e59e9042d6" +dependencies = [ + "doc-comment", + "snafu-derive", +] + +[[package]] +name = "snafu-derive" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "990079665f075b699031e9c08fd3ab99be5029b96f3b78dc0709e8f77e4efebf" +dependencies = [ + "heck 0.4.1", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "snap" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b6b67fb9a61334225b5b790716f609cd58395f895b3fe8b328786812a40bc3b" + +[[package]] +name = "socket2" +version = "0.4.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "socket2" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "sourcemap" +version = "8.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "208d40b9e8cad9f93613778ea295ed8f3c2b1824217c6cfc7219d3f6f45b96d4" +dependencies = [ + "base64-simd 0.7.0", + "bitvec", + "data-encoding", + "debugid", + "if_chain", + "rustc-hash 1.1.0", + "rustc_version 0.2.3", + "serde", + "serde_json", + "unicode-id-start", + "url", +] + +[[package]] +name = "spin" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" + +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +dependencies = [ + "lock_api", +] + +[[package]] +name = "spki" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67cf02bbac7a337dc36e4f5a693db6c21e7863f45070f7064577eb4367a3212b" +dependencies = [ + "base64ct", + "der 0.6.1", +] + +[[package]] +name = "spki" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" +dependencies = [ + "base64ct", + "der 0.7.9", +] + +[[package]] +name = "spm_precompiled" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5851699c4033c63636f7ea4cf7b7c1f1bf06d0cc03cfb42e711de5a5c46cf326" +dependencies = [ + "base64 0.13.1", + "nom", + "serde", + "unicode-segmentation", +] + +[[package]] +name = "sql-builder" +version = "3.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1008d95d2ec2d062959352527be30e10fec42a1aa5e5a48d990a5ff0fb9bdc0" +dependencies = [ + "anyhow", + "thiserror", +] + +[[package]] +name = "sqlformat" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7bba3a93db0cc4f7bdece8bb09e77e2e785c20bfebf79eb8340ed80708048790" +dependencies = [ + "nom", + "unicode_categories", +] + +[[package]] +name = "sqlparser" +version = "0.47.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "295e9930cd7a97e58ca2a070541a3ca502b17f5d1fa7157376d0fabd85324f25" +dependencies = [ + "log", + "sqlparser_derive", +] + +[[package]] +name = "sqlparser_derive" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01b2e185515564f15375f593fb966b5718bc624ba77fe49fa4616ad619690554" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.79", +] + +[[package]] +name = "sqlx" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93334716a037193fac19df402f8571269c84a00852f6a7066b5d2616dcd64d3e" +dependencies = [ + "sqlx-core", + "sqlx-macros", + "sqlx-mysql", + "sqlx-postgres", + "sqlx-sqlite", +] + +[[package]] +name = "sqlx-core" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4d8060b456358185f7d50c55d9b5066ad956956fddec42ee2e8567134a8936e" +dependencies = [ + "atoi", + "bigdecimal", + "byteorder", + "bytes", + "chrono", + "crc", + "crossbeam-queue", + "either", + "event-listener 5.3.1", + "futures-channel", + "futures-core", + "futures-intrusive", + "futures-io", + "futures-util", + "hashbrown 0.14.5", + "hashlink", + "hex", + "indexmap 2.5.0", + "log", + "memchr", + "once_cell", + "paste", + "percent-encoding", + "rustls 0.23.13", + "rustls-pemfile 2.1.3", + "serde", + "serde_json", + "sha2 0.10.8", + "smallvec", + "sqlformat", + "thiserror", + "tokio", + "tokio-stream", + "tracing", + "url", + "uuid 1.10.0", + "webpki-roots 0.26.6", +] + +[[package]] +name = "sqlx-macros" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cac0692bcc9de3b073e8d747391827297e075c7710ff6276d9f7a1f3d58c6657" +dependencies = [ + "proc-macro2", + "quote", + "sqlx-core", + "sqlx-macros-core", + "syn 2.0.79", +] + +[[package]] +name = "sqlx-macros-core" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1804e8a7c7865599c9c79be146dc8a9fd8cc86935fa641d3ea58e5f0688abaa5" +dependencies = [ + "dotenvy", + "either", + "heck 0.5.0", + "hex", + "once_cell", + "proc-macro2", + "quote", + "serde", + "serde_json", + "sha2 0.10.8", + "sqlx-core", + "sqlx-mysql", + "sqlx-postgres", + "sqlx-sqlite", + "syn 2.0.79", + "tempfile", + "tokio", + "url", +] + +[[package]] +name = "sqlx-mysql" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64bb4714269afa44aef2755150a0fc19d756fb580a67db8885608cf02f47d06a" +dependencies = [ + "atoi", + "base64 0.22.1", + "bigdecimal", + "bitflags 2.6.0", + "byteorder", + "bytes", + "chrono", + "crc", + "digest 0.10.7", + "dotenvy", + "either", + "futures-channel", + "futures-core", + "futures-io", + "futures-util", + "generic-array", + "hex", + "hkdf", + "hmac", + "itoa", + "log", + "md-5 0.10.6", + "memchr", + "once_cell", + "percent-encoding", + "rand 0.8.5", + "rsa 0.9.6", + "serde", + "sha1", + "sha2 0.10.8", + "smallvec", + "sqlx-core", + "stringprep", + "thiserror", + "tracing", + "uuid 1.10.0", + "whoami", +] + +[[package]] +name = "sqlx-postgres" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fa91a732d854c5d7726349bb4bb879bb9478993ceb764247660aee25f67c2f8" +dependencies = [ + "atoi", + "base64 0.22.1", + "bigdecimal", + "bitflags 2.6.0", + "byteorder", + "chrono", + "crc", + "dotenvy", + "etcetera", + "futures-channel", + "futures-core", + "futures-io", + "futures-util", + "hex", + "hkdf", + "hmac", + "home", + "itoa", + "log", + "md-5 0.10.6", + "memchr", + "num-bigint", + "once_cell", + "rand 0.8.5", + "serde", + "serde_json", + "sha2 0.10.8", + "smallvec", + "sqlx-core", + "stringprep", + "thiserror", + "tracing", + "uuid 1.10.0", + "whoami", +] + +[[package]] +name = "sqlx-sqlite" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5b2cf34a45953bfd3daaf3db0f7a7878ab9b7a6b91b422d24a7a9e4c857b680" +dependencies = [ + "atoi", + "chrono", + "flume", + "futures-channel", + "futures-core", + "futures-executor", + "futures-intrusive", + "futures-util", + "libsqlite3-sys", + "log", + "percent-encoding", + "serde", + "serde_urlencoded", + "sqlx-core", + "tracing", + "url", + "uuid 1.10.0", +] + +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + +[[package]] +name = "stacker" +version = "0.1.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "799c883d55abdb5e98af1a7b3f23b9b6de8ecada0ecac058672d7635eb48ca7b" +dependencies = [ + "cc", + "cfg-if", + "libc", + "psm", + "windows-sys 0.59.0", +] + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "string_enum" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05e383308aebc257e7d7920224fa055c632478d92744eca77f99be8fa1545b90" +dependencies = [ + "proc-macro2", + "quote", + "swc_macros_common", + "syn 2.0.79", +] + +[[package]] +name = "stringprep" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b4df3d392d81bd458a8a621b8bffbd2302a12ffe288a9d931670948749463b1" +dependencies = [ + "unicode-bidi", + "unicode-normalization", + "unicode-properties", +] + +[[package]] +name = "strsim" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" + +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + +[[package]] +name = "strum" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "290d54ea6f91c969195bdbcd7442c8c2a2ba87da8bf60a7ee86a235d4bc1e125" +dependencies = [ + "strum_macros 0.25.3", +] + +[[package]] +name = "strum" +version = "0.26.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" +dependencies = [ + "strum_macros 0.26.4", +] + +[[package]] +name = "strum_macros" +version = "0.25.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23dc1fa9ac9c169a78ba62f0b841814b7abae11bdd047b9c58f893439e309ea0" +dependencies = [ + "heck 0.4.1", + "proc-macro2", + "quote", + "rustversion", + "syn 2.0.79", +] + +[[package]] +name = "strum_macros" +version = "0.26.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c6bee85a5a24955dc440386795aa378cd9cf82acd5f764469152d2270e581be" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "rustversion", + "syn 2.0.79", +] + +[[package]] +name = "subprocess" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c2e86926081dda636c546d8c5e641661049d7562a68f5488be4a1f7f66f6086" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "subtle" +version = "2.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" + +[[package]] +name = "swc_atoms" +version = "0.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb6567e4e67485b3e7662b486f1565bdae54bd5b9d6b16b2ba1a9babb1e42125" +dependencies = [ + "hstr", + "once_cell", + "rustc-hash 1.1.0", + "serde", +] + +[[package]] +name = "swc_cached" +version = "0.3.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83406221c501860fce9c27444f44125eafe9e598b8b81be7563d7036784cd05c" +dependencies = [ + "ahash 0.8.11", + "anyhow", + "dashmap", + "once_cell", + "regex", + "serde", +] + +[[package]] +name = "swc_common" +version = "0.33.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2f9706038906e66f3919028f9f7a37f3ed552f1b85578e93f4468742e2da438" +dependencies = [ + "ast_node", + "better_scoped_tls", + "cfg-if", + "either", + "from_variant", + "new_debug_unreachable", + "num-bigint", + "once_cell", + "rustc-hash 1.1.0", + "serde", + "siphasher", + "swc_atoms", + "swc_eq_ignore_macros", + "swc_visit", + "tracing", + "unicode-width", + "url", +] + +[[package]] +name = "swc_common" +version = "0.34.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9087befec6b63911f9d2f239e4f91c9b21589c169b86ed2d616944d23cf4a243" +dependencies = [ + "ast_node", + "better_scoped_tls", + "cfg-if", + "either", + "from_variant", + "new_debug_unreachable", + "num-bigint", + "once_cell", + "rustc-hash 1.1.0", + "serde", + "siphasher", + "sourcemap", + "swc_atoms", + "swc_eq_ignore_macros", + "swc_visit", + "tracing", + "unicode-width", + "url", +] + +[[package]] +name = "swc_config" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84b67e115ab136fe0eb03558bb0508ca7782eeb446a96d165508c48617e3fd94" +dependencies = [ + "anyhow", + "indexmap 2.5.0", + "serde", + "serde_json", + "swc_cached", + "swc_config_macro", +] + +[[package]] +name = "swc_config_macro" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c5f56139042c1a95b54f5ca48baa0e0172d369bcc9d3d473dad1de36bae8399" +dependencies = [ + "proc-macro2", + "quote", + "swc_macros_common", + "syn 2.0.79", +] + +[[package]] +name = "swc_ecma_ast" +version = "0.113.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "98a534a8360a076a030989f6d121ba6044345594bdf0457c4629f432742026b8" +dependencies = [ + "bitflags 2.6.0", + "is-macro", + "num-bigint", + "phf", + "scoped-tls", + "string_enum", + "swc_atoms", + "swc_common 0.33.26", + "unicode-id-start", +] + +[[package]] +name = "swc_ecma_ast" +version = "0.115.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7be1306930c235435a892104c00c2b5e16231043c085d5a10bd3e7537b15659b" +dependencies = [ + "bitflags 2.6.0", + "is-macro", + "num-bigint", + "phf", + "scoped-tls", + "serde", + "string_enum", + "swc_atoms", + "swc_common 0.34.4", + "unicode-id-start", +] + +[[package]] +name = "swc_ecma_codegen" +version = "0.151.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5141a8cb4eb69e090e6aea5d49061b46919be5210f3d084f9d9ad63d30f5cff" +dependencies = [ + "memchr", + "num-bigint", + "once_cell", + "rustc-hash 1.1.0", + "serde", + "sourcemap", + "swc_atoms", + "swc_common 0.34.4", + "swc_ecma_ast 0.115.1", + "swc_ecma_codegen_macros", + "tracing", +] + +[[package]] +name = "swc_ecma_codegen_macros" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "090e409af49c8d1a3c13b3aab1ed09dd4eda982207eb3e63c2ad342f072b49c8" +dependencies = [ + "proc-macro2", + "quote", + "swc_macros_common", + "syn 2.0.79", +] + +[[package]] +name = "swc_ecma_loader" +version = "0.46.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a9febebf047d1286e7b723fa2758f3229da2c103834f3eaee69833f46692612" +dependencies = [ + "anyhow", + "pathdiff", + "serde", + "swc_atoms", + "swc_common 0.34.4", + "tracing", +] + +[[package]] +name = "swc_ecma_parser" +version = "0.144.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc0b4193b9c127db1990a5a08111aafe0122bc8b138646807c63f2a6521b7da4" +dependencies = [ + "either", + "new_debug_unreachable", + "num-bigint", + "num-traits", + "phf", + "serde", + "smallvec", + "smartstring", + "stacker", + "swc_atoms", + "swc_common 0.33.26", + "swc_ecma_ast 0.113.7", + "tracing", + "typed-arena", +] + +[[package]] +name = "swc_ecma_parser" +version = "0.146.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a4e0c2e85f12c63b85c805e923079b04d1fb3e25edd069d638eed5f2098de74" +dependencies = [ + "either", + "new_debug_unreachable", + "num-bigint", + "num-traits", + "phf", + "serde", + "smallvec", + "smartstring", + "stacker", + "swc_atoms", + "swc_common 0.34.4", + "swc_ecma_ast 0.115.1", + "tracing", + "typed-arena", +] + +[[package]] +name = "swc_ecma_transforms_base" +version = "0.140.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d37dc505c92af56d0f77cf6f31a6ccd37ac40cad1e01ff77277e0b1c70e8f8ff" +dependencies = [ + "better_scoped_tls", + "bitflags 2.6.0", + "indexmap 2.5.0", + "once_cell", + "phf", + "rustc-hash 1.1.0", + "serde", + "smallvec", + "swc_atoms", + "swc_common 0.34.4", + "swc_ecma_ast 0.115.1", + "swc_ecma_parser 0.146.12", + "swc_ecma_utils", + "swc_ecma_visit 0.101.0", + "tracing", +] + +[[package]] +name = "swc_ecma_transforms_classes" +version = "0.129.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3eab5f8179e5b0aedf385eacc2c033691c6d211a7babd1bbbff12cf794a824e" +dependencies = [ + "swc_atoms", + "swc_common 0.34.4", + "swc_ecma_ast 0.115.1", + "swc_ecma_transforms_base", + "swc_ecma_utils", + "swc_ecma_visit 0.101.0", +] + +[[package]] +name = "swc_ecma_transforms_macros" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "500a1dadad1e0e41e417d633b3d6d5de677c9e0d3159b94ba3348436cdb15aab" +dependencies = [ + "proc-macro2", + "quote", + "swc_macros_common", + "syn 2.0.79", +] + +[[package]] +name = "swc_ecma_transforms_proposal" +version = "0.174.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6df8aa6752cc2fcf3d78ac67827542fb666e52283f2b26802aa058906bb750d3" +dependencies = [ + "either", + "rustc-hash 1.1.0", + "serde", + "smallvec", + "swc_atoms", + "swc_common 0.34.4", + "swc_ecma_ast 0.115.1", + "swc_ecma_transforms_base", + "swc_ecma_transforms_classes", + "swc_ecma_transforms_macros", + "swc_ecma_utils", + "swc_ecma_visit 0.101.0", +] + +[[package]] +name = "swc_ecma_transforms_react" +version = "0.186.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "446da32cac8299973aaf1d37496562bfd0c1e4f3c3ab5d0af6f07f42e8184102" +dependencies = [ + "base64 0.21.7", + "dashmap", + "indexmap 2.5.0", + "once_cell", + "serde", + "sha1", + "string_enum", + "swc_atoms", + "swc_common 0.34.4", + "swc_config", + "swc_ecma_ast 0.115.1", + "swc_ecma_parser 0.146.12", + "swc_ecma_transforms_base", + "swc_ecma_transforms_macros", + "swc_ecma_utils", + "swc_ecma_visit 0.101.0", +] + +[[package]] +name = "swc_ecma_transforms_typescript" +version = "0.191.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1ce8af2865449e714ae56dacb6b54b3f6dc4cc25074da4e39b878bd93c5e39c" +dependencies = [ + "ryu-js", + "serde", + "swc_atoms", + "swc_common 0.34.4", + "swc_ecma_ast 0.115.1", + "swc_ecma_transforms_base", + "swc_ecma_transforms_react", + "swc_ecma_utils", + "swc_ecma_visit 0.101.0", +] + +[[package]] +name = "swc_ecma_utils" +version = "0.130.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13e62b199454a576c5fdbd7e1bef8ab88a395427456d8a713d994b7d469833aa" +dependencies = [ + "indexmap 2.5.0", + "num_cpus", + "once_cell", + "rustc-hash 1.1.0", + "ryu-js", + "swc_atoms", + "swc_common 0.34.4", + "swc_ecma_ast 0.115.1", + "swc_ecma_visit 0.101.0", + "tracing", + "unicode-id", +] + +[[package]] +name = "swc_ecma_visit" +version = "0.99.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28a6ce28ad8e591f8d627f1f9cb26b25e5d83052a9bc1b674d95fc28040cfa98" +dependencies = [ + "num-bigint", + "swc_atoms", + "swc_common 0.33.26", + "swc_ecma_ast 0.113.7", + "swc_visit", + "tracing", +] + +[[package]] +name = "swc_ecma_visit" +version = "0.101.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce0d997f0c9b4e181225f603d161f6757c2a97022258170982cfe005ec69ec92" +dependencies = [ + "num-bigint", + "swc_atoms", + "swc_common 0.34.4", + "swc_ecma_ast 0.115.1", + "swc_visit", + "tracing", +] + +[[package]] +name = "swc_eq_ignore_macros" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "695a1d8b461033d32429b5befbf0ad4d7a2c4d6ba9cd5ba4e0645c615839e8e4" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.79", +] + +[[package]] +name = "swc_macros_common" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91745f3561057493d2da768437c427c0e979dff7396507ae02f16c981c4a8466" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.79", +] + +[[package]] +name = "swc_visit" +version = "0.5.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "043d11fe683dcb934583ead49405c0896a5af5face522e4682c16971ef7871b9" +dependencies = [ + "either", + "swc_visit_macros", +] + +[[package]] +name = "swc_visit_macros" +version = "0.5.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ae9ef18ff8daffa999f729db056d2821cd2f790f3a11e46422d19f46bb193e7" +dependencies = [ + "Inflector", + "proc-macro2", + "quote", + "swc_macros_common", + "syn 2.0.79", +] + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.79" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89132cd0bf050864e1d38dc3bbc07a0eb8e7530af26344d3d2bbbef83499f590" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn_derive" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1329189c02ff984e9736652b1631330da25eaa6bc639089ed4915d25446cbe7b" +dependencies = [ + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.79", +] + +[[package]] +name = "sync_wrapper" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" + +[[package]] +name = "sync_wrapper" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7065abeca94b6a8a577f9bd45aa0867a2238b74e8eb67cf10d492bc39351394" +dependencies = [ + "futures-core", +] + +[[package]] +name = "synstructure" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.79", +] + +[[package]] +name = "sysctl" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec7dddc5f0fee506baf8b9fdb989e242f17e4b11c61dfbb0635b705217199eea" +dependencies = [ + "bitflags 2.6.0", + "byteorder", + "enum-as-inner", + "libc", + "thiserror", + "walkdir", +] + +[[package]] +name = "system-configuration" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "system-configuration-sys 0.5.0", +] + +[[package]] +name = "system-configuration" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" +dependencies = [ + "bitflags 2.6.0", + "core-foundation", + "system-configuration-sys 0.6.0", +] + +[[package]] +name = "system-configuration-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "system-configuration-sys" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "tantivy" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8d0582f186c0a6d55655d24543f15e43607299425c5ad8352c242b914b31856" +dependencies = [ + "aho-corasick", + "arc-swap", + "base64 0.22.1", + "bitpacking", + "byteorder", + "census", + "crc32fast", + "crossbeam-channel", + "downcast-rs", + "fastdivide", + "fnv", + "fs4", + "htmlescape", + "itertools 0.12.1", + "levenshtein_automata", + "log", + "lru", + "lz4_flex", + "measure_time", + "memmap2", + "num_cpus", + "once_cell", + "oneshot", + "rayon", + "regex", + "rust-stemmers", + "rustc-hash 1.1.0", + "serde", + "serde_json", + "sketches-ddsketch", + "smallvec", + "tantivy-bitpacker", + "tantivy-columnar", + "tantivy-common", + "tantivy-fst", + "tantivy-query-grammar", + "tantivy-stacker", + "tantivy-tokenizer-api", + "tempfile", + "thiserror", + "time", + "uuid 1.10.0", + "winapi", +] + +[[package]] +name = "tantivy-bitpacker" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "284899c2325d6832203ac6ff5891b297fc5239c3dc754c5bc1977855b23c10df" +dependencies = [ + "bitpacking", +] + +[[package]] +name = "tantivy-columnar" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12722224ffbe346c7fec3275c699e508fd0d4710e629e933d5736ec524a1f44e" +dependencies = [ + "downcast-rs", + "fastdivide", + "itertools 0.12.1", + "serde", + "tantivy-bitpacker", + "tantivy-common", + "tantivy-sstable", + "tantivy-stacker", +] + +[[package]] +name = "tantivy-common" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8019e3cabcfd20a1380b491e13ff42f57bb38bf97c3d5fa5c07e50816e0621f4" +dependencies = [ + "async-trait", + "byteorder", + "ownedbytes", + "serde", + "time", +] + +[[package]] +name = "tantivy-fst" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d60769b80ad7953d8a7b2c70cdfe722bbcdcac6bccc8ac934c40c034d866fc18" +dependencies = [ + "byteorder", + "regex-syntax 0.8.4", + "utf8-ranges", +] + +[[package]] +name = "tantivy-query-grammar" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "847434d4af57b32e309f4ab1b4f1707a6c566656264caa427ff4285c4d9d0b82" +dependencies = [ + "nom", +] + +[[package]] +name = "tantivy-sstable" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c69578242e8e9fc989119f522ba5b49a38ac20f576fc778035b96cc94f41f98e" +dependencies = [ + "tantivy-bitpacker", + "tantivy-common", + "tantivy-fst", + "zstd 0.13.2", +] + +[[package]] +name = "tantivy-stacker" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c56d6ff5591fc332739b3ce7035b57995a3ce29a93ffd6012660e0949c956ea8" +dependencies = [ + "murmurhash32", + "rand_distr", + "tantivy-common", +] + +[[package]] +name = "tantivy-tokenizer-api" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a0dcade25819a89cfe6f17d932c9cedff11989936bf6dd4f336d50392053b04" +dependencies = [ + "serde", +] + +[[package]] +name = "tap" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" + +[[package]] +name = "tar" +version = "0.4.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ff6c40d3aedb5e06b57c6f669ad17ab063dd1e63d977c6a88e7f4dfa4f04020" +dependencies = [ + "filetime", + "libc", + "xattr", +] + +[[package]] +name = "tempfile" +version = "3.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04cbcdd0c794ebb0d4cf35e88edd2f7d2c4c3e9a5a6dab322839b321c6a87a64" +dependencies = [ + "cfg-if", + "fastrand 2.1.1", + "once_cell", + "rustix", + "windows-sys 0.59.0", +] + +[[package]] +name = "termcolor" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "text_lines" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fd5828de7deaa782e1dd713006ae96b3bee32d3279b79eb67ecf8072c059bcf" +dependencies = [ + "serde", +] + +[[package]] +name = "thiserror" +version = "1.0.64" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d50af8abc119fb8bb6dbabcfa89656f46f84aa0ac7688088608076ad2b459a84" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.64" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08904e7672f5eb876eaaf87e0ce17857500934f4981c4a0ab2b4aa98baac7fc3" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.79", +] + +[[package]] +name = "thread_local" +version = "1.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" +dependencies = [ + "cfg-if", + "once_cell", +] + +[[package]] +name = "thrift" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e54bc85fc7faa8bc175c4bab5b92ba8d9a3ce893d0e9f42cc455c8ab16a9e09" +dependencies = [ + "byteorder", + "integer-encoding", + "ordered-float", +] + +[[package]] +name = "tiberius" +version = "0.12.2" +source = "git+https://github.com/prisma/tiberius?rev=8f66a699dfa041e7b5f736c7e94f92c945453c9e#8f66a699dfa041e7b5f736c7e94f92c945453c9e" +dependencies = [ + "async-trait", + "asynchronous-codec", + "byteorder", + "bytes", + "chrono", + "connection-string", + "encoding_rs", + "enumflags2", + "futures-util", + "num-traits", + "once_cell", + "pin-project-lite", + "pretty-hex", + "rustls-native-certs 0.6.3", + "rustls-pemfile 1.0.4", + "thiserror", + "tokio", + "tokio-rustls 0.24.1", + "tokio-util", + "tracing", + "uuid 1.10.0", +] + +[[package]] +name = "tiger" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "443e531cbcf9de83258cfef70bcd56c91188de5819ebd4b19c85f589e0617005" +dependencies = [ + "block-buffer 0.9.0", + "byteorder", + "digest 0.9.0", +] + +[[package]] +name = "tikv-jemalloc-ctl" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "619bfed27d807b54f7f776b9430d4f8060e66ee138a28632ca898584d462c31c" +dependencies = [ + "libc", + "paste", + "tikv-jemalloc-sys", +] + +[[package]] +name = "tikv-jemalloc-sys" +version = "0.5.4+5.3.0-patched" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9402443cb8fd499b6f327e40565234ff34dbda27460c5b47db0db77443dd85d1" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "tikv-jemallocator" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "965fe0c26be5c56c94e38ba547249074803efd52adfb66de62107d95aab3eaca" +dependencies = [ + "libc", + "tikv-jemalloc-sys", +] + +[[package]] +name = "time" +version = "0.3.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" +dependencies = [ + "deranged", + "itoa", + "num-conv", + "powerfmt", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" + +[[package]] +name = "time-macros" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf" +dependencies = [ + "num-conv", + "time-core", +] + +[[package]] +name = "tiny-keccak" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" +dependencies = [ + "crunchy", +] + +[[package]] +name = "tinyvec" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "tinyvector" +version = "0.1.0" +source = "git+https://github.com/windmill-labs/tinyvector?rev=20823b94c20f2b9093f318badd24026cf54dcc85#20823b94c20f2b9093f318badd24026cf54dcc85" +dependencies = [ + "anyhow", + "bincode", + "lazy_static", + "rayon", + "schemars", + "serde", + "thiserror", + "tracing", +] + +[[package]] +name = "tokenizers" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9be88c795d8b9f9c4002b3a8f26a6d0876103a6f523b32ea3bac52d8560c17c" +dependencies = [ + "aho-corasick", + "clap", + "derive_builder", + "esaxx-rs", + "getrandom 0.2.15", + "indicatif", + "itertools 0.11.0", + "lazy_static", + "log", + "macro_rules_attribute", + "monostate", + "onig", + "paste", + "rand 0.8.5", + "rayon", + "rayon-cond", + "regex", + "regex-syntax 0.7.5", + "serde", + "serde_json", + "spm_precompiled", + "thiserror", + "unicode-normalization-alignments", + "unicode-segmentation", + "unicode_categories", +] + +[[package]] +name = "tokio" +version = "1.40.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2b070231665d27ad9ec9b8df639893f46727666c6767db40317fbe920a5d998" +dependencies = [ + "backtrace", + "bytes", + "libc", + "mio", + "parking_lot", + "pin-project-lite", + "signal-hook-registry", + "socket2 0.5.7", + "tokio-macros", + "tracing", + "windows-sys 0.52.0", +] + +[[package]] +name = "tokio-macros" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.79", +] + +[[package]] +name = "tokio-native-tls" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2" +dependencies = [ + "native-tls", + "tokio", +] + +[[package]] +name = "tokio-postgres" +version = "0.7.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b5d3742945bc7d7f210693b0c58ae542c6fd47b17adbbda0885f3dcb34a6bdb" +dependencies = [ + "async-trait", + "byteorder", + "bytes", + "fallible-iterator", + "futures-channel", + "futures-util", + "log", + "parking_lot", + "percent-encoding", + "phf", + "pin-project-lite", + "postgres-protocol", + "postgres-types", + "rand 0.8.5", + "socket2 0.5.7", + "tokio", + "tokio-util", + "whoami", +] + +[[package]] +name = "tokio-rustls" +version = "0.24.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" +dependencies = [ + "rustls 0.21.12", + "tokio", +] + +[[package]] +name = "tokio-rustls" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" +dependencies = [ + "rustls 0.23.13", + "rustls-pki-types", + "tokio", +] + +[[package]] +name = "tokio-socks" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d4770b8024672c1101b3f6733eab95b18007dbe0847a8afe341fcf79e06043f" +dependencies = [ + "either", + "futures-util", + "thiserror", + "tokio", +] + +[[package]] +name = "tokio-stream" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f4e6ce100d0eb49a2734f8c0812bcd324cf357d21810932c5df6b96ef2b86f1" +dependencies = [ + "futures-core", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "tokio-tar" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d5714c010ca3e5c27114c1cdeb9d14641ace49874aa5626d7149e47aedace75" +dependencies = [ + "filetime", + "futures-core", + "libc", + "redox_syscall 0.3.5", + "tokio", + "tokio-stream", + "xattr", +] + +[[package]] +name = "tokio-util" +version = "0.7.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61e7c3654c13bcd040d4a03abee2c75b1d14a37b423cf5a813ceae1cc903ec6a" +dependencies = [ + "bytes", + "futures-core", + "futures-io", + "futures-sink", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "toml" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd79e69d3b627db300ff956027cc6c3798cef26d22526befdfcd12feeb6d2257" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit 0.19.15", +] + +[[package]] +name = "toml" +version = "0.8.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1ed1f98e3fdc28d6d910e6737ae6ab1a93bf1985935a1193e68f93eeb68d24e" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit 0.22.22", +] + +[[package]] +name = "toml_datetime" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" +dependencies = [ + "serde", +] + +[[package]] +name = "toml_edit" +version = "0.19.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" +dependencies = [ + "indexmap 2.5.0", + "serde", + "serde_spanned", + "toml_datetime", + "winnow 0.5.40", +] + +[[package]] +name = "toml_edit" +version = "0.22.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5" +dependencies = [ + "indexmap 2.5.0", + "serde", + "serde_spanned", + "toml_datetime", + "winnow 0.6.20", +] + +[[package]] +name = "toolchain_find" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc8c9a7f0a2966e1acdaf0461023d0b01471eeead645370cf4c3f5cff153f2a" +dependencies = [ + "home", + "once_cell", + "regex", + "semver 1.0.23", + "walkdir", +] + +[[package]] +name = "tower" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" +dependencies = [ + "futures-core", + "futures-util", + "pin-project", + "pin-project-lite", + "tokio", + "tower-layer", + "tower-service", +] + +[[package]] +name = "tower" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2873938d487c3cfb9aed7546dc9f2711d867c9f90c46b889989a2cb84eba6b4f" +dependencies = [ + "futures-core", + "futures-util", + "pin-project-lite", + "sync_wrapper 0.1.2", + "tokio", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower-cookies" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fd0118512cf0b3768f7fcccf0bef1ae41d68f2b45edc1e77432b36c97c56c6d" +dependencies = [ + "async-trait", + "axum-core", + "cookie 0.18.1", + "futures-util", + "http 1.1.0", + "parking_lot", + "pin-project-lite", + "tower-layer", + "tower-service", +] + +[[package]] +name = "tower-http" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e9cd434a998747dd2c4276bc96ee2e0c7a2eadf3cae88e52be55a05fa9053f5" +dependencies = [ + "async-compression 0.4.12", + "bitflags 2.6.0", + "bytes", + "futures-core", + "http 1.1.0", + "http-body 1.0.1", + "http-body-util", + "pin-project-lite", + "tokio", + "tokio-util", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower-layer" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" + +[[package]] +name = "tower-service" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" + +[[package]] +name = "tracing" +version = "0.1.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +dependencies = [ + "log", + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-appender" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3566e8ce28cc0a3fe42519fc80e6b4c943cc4c8cef275620eb8dac2d3d4e06cf" +dependencies = [ + "crossbeam-channel", + "thiserror", + "time", + "tracing-subscriber", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.79", +] + +[[package]] +name = "tracing-core" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +dependencies = [ + "once_cell", + "valuable", +] + +[[package]] +name = "tracing-flame" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bae117ee14789185e129aaee5d93750abe67fdc5a9a62650452bfe4e122a3a9" +dependencies = [ + "lazy_static", + "tracing", + "tracing-subscriber", +] + +[[package]] +name = "tracing-futures" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2" +dependencies = [ + "pin-project", + "tracing", +] + +[[package]] +name = "tracing-log" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f751112709b4e791d8ce53e32c4ed2d353565a795ce84da2285393f41557bdf2" +dependencies = [ + "log", + "once_cell", + "tracing-core", +] + +[[package]] +name = "tracing-log" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" +dependencies = [ + "log", + "once_cell", + "tracing-core", +] + +[[package]] +name = "tracing-loki" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fea6023f9fe4b69267ccd3ed7d203d931c43c5f82dbaa0f07202bc17193a5f43" +dependencies = [ + "loki-api", + "reqwest 0.12.7", + "serde", + "serde_json", + "snap", + "tokio", + "tokio-stream", + "tracing", + "tracing-core", + "tracing-log 0.1.4", + "tracing-serde", + "tracing-subscriber", + "url", +] + +[[package]] +name = "tracing-serde" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc6b213177105856957181934e4920de57730fc69bf42c37ee5bb664d406d9e1" +dependencies = [ + "serde", + "tracing-core", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" +dependencies = [ + "matchers", + "nu-ansi-term", + "once_cell", + "regex", + "serde", + "serde_json", + "sharded-slab", + "smallvec", + "thread_local", + "tracing", + "tracing-core", + "tracing-log 0.2.0", + "tracing-serde", +] + +[[package]] +name = "triomphe" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "859eb650cfee7434994602c3a68b25d77ad9e68c8a6cd491616ef86661382eb3" +dependencies = [ + "serde", + "stable_deref_trait", +] + +[[package]] +name = "trust-dns-proto" +version = "0.23.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3119112651c157f4488931a01e586aa459736e9d6046d3bd9105ffb69352d374" +dependencies = [ + "async-trait", + "cfg-if", + "data-encoding", + "enum-as-inner", + "futures-channel", + "futures-io", + "futures-util", + "idna 0.4.0", + "ipnet", + "once_cell", + "rand 0.8.5", + "serde", + "smallvec", + "thiserror", + "tinyvec", + "tokio", + "tracing", + "url", +] + +[[package]] +name = "trust-dns-resolver" +version = "0.23.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10a3e6c3aff1718b3c73e395d1f35202ba2ffa847c6a62eea0db8fb4cfe30be6" +dependencies = [ + "cfg-if", + "futures-util", + "ipconfig", + "lru-cache", + "once_cell", + "parking_lot", + "rand 0.8.5", + "resolv-conf", + "serde", + "smallvec", + "thiserror", + "tokio", + "tracing", + "trust-dns-proto", +] + +[[package]] +name = "try-lock" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" + +[[package]] +name = "twox-hash" +version = "1.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97fee6b57c6a41524a810daee9286c02d7752c4253064d0b05472833a438f675" +dependencies = [ + "cfg-if", + "rand 0.8.5", + "static_assertions", +] + +[[package]] +name = "typed-arena" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6af6ae20167a9ece4bcb41af5b80f8a1f1df981f6391189ce00fd257af04126a" + +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + +[[package]] +name = "typify" +version = "0.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6658d09e71bfe59e7987dc95ee7f71809fdb5793ab0cdc1503cc0073990484d" +dependencies = [ + "typify-impl", + "typify-macro", +] + +[[package]] +name = "typify-impl" +version = "0.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34d3bb47587b13edf526d6ed02bf360ecefe083ab47a4ef29fc43112828b2bef" +dependencies = [ + "heck 0.4.1", + "log", + "proc-macro2", + "quote", + "regress", + "schemars", + "serde_json", + "syn 2.0.79", + "thiserror", + "unicode-ident", +] + +[[package]] +name = "typify-macro" +version = "0.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3f7e627c18be12d53bc1f261830b9c2763437b6a86ac57293b9085af2d32ffe" +dependencies = [ + "proc-macro2", + "quote", + "schemars", + "serde", + "serde_json", + "serde_tokenstream", + "syn 2.0.79", + "typify-impl", +] + +[[package]] +name = "ulid" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04f903f293d11f31c0c29e4148f6dc0d033a7f80cebc0282bea147611667d289" +dependencies = [ + "getrandom 0.2.15", + "rand 0.8.5", + "uuid 1.10.0", + "web-time", +] + +[[package]] +name = "unic-char-property" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8c57a407d9b6fa02b4795eb81c5b6652060a15a7903ea981f3d723e6c0be221" +dependencies = [ + "unic-char-range", +] + +[[package]] +name = "unic-char-range" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0398022d5f700414f6b899e10b8348231abf9173fa93144cbc1a43b9793c1fbc" + +[[package]] +name = "unic-common" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80d7ff825a6a654ee85a63e80f92f054f904f21e7d12da4e22f9834a4aaa35bc" + +[[package]] +name = "unic-emoji-char" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b07221e68897210270a38bde4babb655869637af0f69407f96053a34f76494d" +dependencies = [ + "unic-char-property", + "unic-char-range", + "unic-ucd-version", +] + +[[package]] +name = "unic-ucd-category" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b8d4591f5fcfe1bd4453baaf803c40e1b1e69ff8455c47620440b46efef91c0" +dependencies = [ + "matches", + "unic-char-property", + "unic-char-range", + "unic-ucd-version", +] + +[[package]] +name = "unic-ucd-ident" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e230a37c0381caa9219d67cf063aa3a375ffed5bf541a452db16e744bdab6987" +dependencies = [ + "unic-char-property", + "unic-char-range", + "unic-ucd-version", +] + +[[package]] +name = "unic-ucd-version" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96bd2f2237fe450fcd0a1d2f5f4e91711124f7857ba2e964247776ebeeb7b0c4" +dependencies = [ + "unic-common", +] + +[[package]] +name = "unicase" +version = "2.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7d2d4dafb69621809a81864c9c1b864479e1235c0dd4e199924b9742439ed89" +dependencies = [ + "version_check", +] + +[[package]] +name = "unicode-bidi" +version = "0.3.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" + +[[package]] +name = "unicode-id" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "10103c57044730945224467c09f71a4db0071c123a0648cc3e818913bde6b561" + +[[package]] +name = "unicode-id-start" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "02aebfa694eccbbbffdd92922c7de136b9fe764396d2f10e21bce1681477cfc1" + +[[package]] +name = "unicode-ident" +version = "1.0.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe" + +[[package]] +name = "unicode-normalization" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5033c97c4262335cded6d6fc3e5c18ab755e1a3dc96376350f3d8e9f009ad956" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "unicode-normalization-alignments" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43f613e4fa046e69818dd287fdc4bc78175ff20331479dab6e1b0f98d57062de" +dependencies = [ + "smallvec", +] + +[[package]] +name = "unicode-properties" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52ea75f83c0137a9b98608359a5f1af8144876eb67bcb1ce837368e906a9f524" + +[[package]] +name = "unicode-segmentation" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" + +[[package]] +name = "unicode-width" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" + +[[package]] +name = "unicode-xid" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" + +[[package]] +name = "unicode_categories" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39ec24b3121d976906ece63c9daad25b85969647682eee313cb5779fdd69e14e" + +[[package]] +name = "unicode_names2" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1673eca9782c84de5f81b82e4109dcfb3611c8ba0d52930ec4a9478f547b2dd" +dependencies = [ + "phf", + "unicode_names2_generator", +] + +[[package]] +name = "unicode_names2_generator" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b91e5b84611016120197efd7dc93ef76774f4e084cd73c9fb3ea4a86c570c56e" +dependencies = [ + "getopts", + "log", + "phf_codegen", + "rand 0.8.5", +] + +[[package]] +name = "unsafe-libyaml" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861" + +[[package]] +name = "untrusted" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" + +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + +[[package]] +name = "ureq" +version = "2.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b74fc6b57825be3373f7054754755f03ac3a8f5d70015ccad699ba2029956f4a" +dependencies = [ + "base64 0.22.1", + "flate2", + "log", + "native-tls", + "once_cell", + "rustls 0.23.13", + "rustls-pki-types", + "serde", + "serde_json", + "url", + "webpki-roots 0.26.6", +] + +[[package]] +name = "url" +version = "2.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22784dbdf76fdde8af1aeda5622b546b422b6fc585325248a2bf9f5e41e94d6c" +dependencies = [ + "form_urlencoded", + "idna 0.5.0", + "percent-encoding", + "serde", +] + +[[package]] +name = "urlencoding" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" + +[[package]] +name = "urlpattern" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9bd5ff03aea02fa45b13a7980151fe45009af1980ba69f651ec367121a31609" +dependencies = [ + "derive_more", + "regex", + "serde", + "unic-ucd-ident", + "url", +] + +[[package]] +name = "utf8-ranges" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fcfc827f90e53a02eaef5e535ee14266c1d569214c6aa70133a624d8a3164ba" + +[[package]] +name = "utf8parse" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" + +[[package]] +name = "uuid" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7" +dependencies = [ + "getrandom 0.2.15", +] + +[[package]] +name = "uuid" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81dfa00651efa65069b0b6b651f4aaa31ba9e3c3ce0137aaad053604ee7e0314" +dependencies = [ + "getrandom 0.2.15", + "serde", +] + +[[package]] +name = "v8" +version = "0.99.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa3fc0608a78f0c7d4ec88025759cb78c90a29984b48540060355a626ae329c1" +dependencies = [ + "bindgen 0.69.4", + "bitflags 2.6.0", + "fslock", + "gzip-header", + "home", + "miniz_oxide 0.7.4", + "once_cell", + "paste", + "which 6.0.3", +] + +[[package]] +name = "valuable" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" + +[[package]] +name = "value-bag" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a84c137d37ab0142f0f2ddfe332651fdbf252e7b7dbb4e67b6c1f1b2e925101" + +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + +[[package]] +name = "version_check" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + +[[package]] +name = "vsimd" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c3082ca00d5a5ef149bb8b555a72ae84c9c59f7250f013ac822ac2e49b19c64" + +[[package]] +name = "waker-fn" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "317211a0dc0ceedd78fb2ca9a44aed3d7b9b26f81870d485c07122b4350673b7" + +[[package]] +name = "walkdir" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" +dependencies = [ + "same-file", + "winapi-util", +] + +[[package]] +name = "want" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +dependencies = [ + "try-lock", +] + +[[package]] +name = "wasi" +version = "0.9.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasite" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b" + +[[package]] +name = "wasm-bindgen" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" +dependencies = [ + "cfg-if", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn 2.0.79", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76bc14366121efc8dbb487ab05bcc9d346b3b5ec0eaa76e46594cabbe51762c0" +dependencies = [ + "cfg-if", + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.79", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" + +[[package]] +name = "wasm-bindgen-test" +version = "0.3.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9bf62a58e0780af3e852044583deee40983e5886da43a271dd772379987667b" +dependencies = [ + "console_error_panic_hook", + "js-sys", + "scoped-tls", + "wasm-bindgen", + "wasm-bindgen-futures", + "wasm-bindgen-test-macro", +] + +[[package]] +name = "wasm-bindgen-test-macro" +version = "0.3.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7f89739351a2e03cb94beb799d47fb2cac01759b40ec441f7de39b00cbf7ef0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.79", +] + +[[package]] +name = "wasm-streams" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e072d4e72f700fb3443d8fe94a39315df013eef1104903cdb0a2abd322bbecd" +dependencies = [ + "futures-util", + "js-sys", + "wasm-bindgen", + "wasm-bindgen-futures", + "web-sys", +] + +[[package]] +name = "wav" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99d97402f69875b579ec37f2aa52d1f455a1d6224251edba32e8c18a5da2698d" +dependencies = [ + "riff", +] + +[[package]] +name = "web-sys" +version = "0.3.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "web-time" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "webpki-roots" +version = "0.25.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" + +[[package]] +name = "webpki-roots" +version = "0.26.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "841c67bff177718f1d4dfefde8d8f0e78f9b6589319ba88312f567fc5841a958" +dependencies = [ + "rustls-pki-types", +] + +[[package]] +name = "which" +version = "4.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87ba24419a2078cd2b0f2ede2691b6c66d8e47836da3b6db8265ebad47afbfc7" +dependencies = [ + "either", + "home", + "once_cell", + "rustix", +] + +[[package]] +name = "which" +version = "6.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4ee928febd44d98f2f459a4a79bd4d928591333a494a10a868418ac1b39cf1f" +dependencies = [ + "either", + "home", + "rustix", + "winsafe", +] + +[[package]] +name = "whoami" +version = "1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "372d5b87f58ec45c384ba03563b03544dc5fadc3983e434b286913f5b4a9bb6d" +dependencies = [ + "redox_syscall 0.5.6", + "wasite", + "web-sys", +] + +[[package]] +name = "widestring" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7219d36b6eac893fa81e84ebe06485e7dcbb616177469b142df14f1f4deb1311" + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" +dependencies = [ + "windows-sys 0.59.0", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windmill" +version = "1.402.1" +dependencies = [ + "anyhow", + "axum", + "base64 0.21.7", + "chrono", + "deno_core", + "dotenv", + "futures", + "gethostname", + "git-version", + "lazy_static", + "object_store", + "once_cell", + "pg-embed", + "prometheus", + "quote", + "rand 0.8.5", + "reqwest 0.12.7", + "rsmq_async", + "serde", + "serde_json", + "sha2 0.10.8", + "sqlx", + "tikv-jemalloc-ctl", + "tikv-jemalloc-sys", + "tikv-jemallocator", + "tokio", + "tracing", + "url", + "uuid 1.10.0", + "windmill-api", + "windmill-api-client", + "windmill-common", + "windmill-git-sync", + "windmill-indexer", + "windmill-queue", + "windmill-worker", +] + +[[package]] +name = "windmill-api" +version = "1.402.1" +dependencies = [ + "anyhow", + "argon2", + "async-oauth2", + "async-recursion", + "async-stream", + "async-stripe", + "async_zip", + "axum", + "base32", + "base64 0.21.7", + "bytes", + "candle-core", + "candle-nn", + "candle-transformers", + "chrono", + "chrono-tz 0.10.0", + "cookie 0.17.0", + "crc", + "cron", + "datafusion", + "futures", + "git-version", + "hex", + "hf-hub", + "hmac", + "http 1.1.0", + "hyper 1.4.1", + "itertools 0.13.0", + "jsonwebtoken", + "lazy_static", + "magic-crypt", + "mail-parser", + "matchit", + "mime_guess", + "native-tls", + "object_store", + "openidconnect", + "openssl", + "pin-project", + "prometheus", + "quick_cache", + "rand 0.8.5", + "regex", + "reqwest 0.12.7", + "rsa 0.7.2", + "rsmq_async", + "rust-embed", + "samael", + "serde", + "serde_json", + "serde_urlencoded", + "sha2 0.10.8", + "sql-builder", + "sqlx", + "tempfile", + "time", + "tinyvector", + "tokenizers", + "tokio", + "tokio-native-tls", + "tokio-tar", + "tokio-util", + "tower 0.5.1", + "tower-cookies", + "tower-http", + "tracing", + "tracing-subscriber", + "ulid", + "url", + "urlencoding", + "uuid 1.10.0", + "windmill-audit", + "windmill-common", + "windmill-git-sync", + "windmill-indexer", + "windmill-parser", + "windmill-parser-py-imports", + "windmill-parser-ts", + "windmill-queue", +] + +[[package]] +name = "windmill-api-client" +version = "1.402.1" +dependencies = [ + "base64 0.21.7", + "chrono", + "openapiv3", + "prettyplease 0.1.25", + "progenitor", + "progenitor-client", + "rand 0.8.5", + "reqwest 0.11.27", + "serde", + "serde_json", + "syn 1.0.109", + "uuid 1.10.0", +] + +[[package]] +name = "windmill-audit" +version = "1.402.1" +dependencies = [ + "chrono", + "serde", + "serde_json", + "sql-builder", + "sqlx", + "tracing", + "windmill-common", +] + +[[package]] +name = "windmill-common" +version = "1.402.1" +dependencies = [ + "anyhow", + "async-stream", + "aws-config", + "aws-sdk-sts", + "axum", + "bytes", + "chrono", + "const_format", + "cron", + "futures-core", + "gethostname", + "git-version", + "hex", + "hmac", + "hyper 1.4.1", + "indexmap 2.5.0", + "itertools 0.13.0", + "lazy_static", + "magic-crypt", + "mail-send", + "object_store", + "prometheus", + "rand 0.8.5", + "regex", + "reqwest 0.12.7", + "serde", + "serde_json", + "sha2 0.10.8", + "sqlx", + "thiserror", + "tikv-jemalloc-ctl", + "tokio", + "tracing", + "tracing-appender", + "tracing-flame", + "tracing-loki", + "tracing-subscriber", + "uuid 1.10.0", +] + +[[package]] +name = "windmill-git-sync" +version = "1.402.1" +dependencies = [ + "regex", + "rsmq_async", + "serde", + "serde_json", + "sqlx", + "tracing", + "uuid 1.10.0", + "windmill-common", + "windmill-queue", +] + +[[package]] +name = "windmill-indexer" +version = "1.402.1" +dependencies = [ + "anyhow", + "bytes", + "chrono", + "futures", + "object_store", + "serde", + "serde_json", + "sqlx", + "tantivy", + "tempfile", + "tokio", + "tokio-tar", + "tracing", + "uuid 1.10.0", + "windmill-common", +] + +[[package]] +name = "windmill-parser" +version = "1.402.1" +dependencies = [ + "convert_case 0.6.0", + "serde", + "serde_json", +] + +[[package]] +name = "windmill-parser-bash" +version = "1.402.1" +dependencies = [ + "anyhow", + "lazy_static", + "regex", + "regex-lite", + "serde_json", + "windmill-parser", +] + +[[package]] +name = "windmill-parser-go" +version = "1.402.1" +dependencies = [ + "anyhow", + "gosyn", + "itertools 0.13.0", + "lazy_static", + "regex", + "windmill-parser", +] + +[[package]] +name = "windmill-parser-graphql" +version = "1.402.1" +dependencies = [ + "anyhow", + "lazy_static", + "regex", + "regex-lite", + "serde_json", + "windmill-parser", +] + +[[package]] +name = "windmill-parser-php" +version = "1.402.1" +dependencies = [ + "anyhow", + "itertools 0.13.0", + "php-parser-rs", + "serde_json", + "windmill-parser", +] + +[[package]] +name = "windmill-parser-py" +version = "1.402.1" +dependencies = [ + "anyhow", + "itertools 0.13.0", + "rustpython-parser", + "serde_json", + "windmill-parser", +] + +[[package]] +name = "windmill-parser-py-imports" +version = "1.402.1" +dependencies = [ + "anyhow", + "async-recursion", + "itertools 0.13.0", + "lazy_static", + "phf", + "regex", + "regex-lite", + "rustpython-parser", + "serde_json", + "sqlx", + "windmill-common", + "windmill-parser", +] + +[[package]] +name = "windmill-parser-rust" +version = "1.402.1" +dependencies = [ + "anyhow", + "convert_case 0.6.0", + "itertools 0.13.0", + "lazy_static", + "pulldown-cmark", + "quote", + "regex", + "serde_json", + "syn 2.0.79", + "toml 0.8.19", + "windmill-parser", +] + +[[package]] +name = "windmill-parser-sql" +version = "1.402.1" +dependencies = [ + "anyhow", + "lazy_static", + "regex", + "regex-lite", + "serde_json", + "windmill-parser", +] + +[[package]] +name = "windmill-parser-ts" +version = "1.402.1" +dependencies = [ + "anyhow", + "lazy_static", + "regex", + "serde-wasm-bindgen", + "serde_json", + "swc_common 0.33.26", + "swc_ecma_ast 0.113.7", + "swc_ecma_parser 0.144.3", + "swc_ecma_visit 0.99.1", + "triomphe", + "wasm-bindgen", + "windmill-parser", +] + +[[package]] +name = "windmill-parser-wasm" +version = "1.402.1" +dependencies = [ + "anyhow", + "getrandom 0.2.15", + "serde_json", + "wasm-bindgen", + "wasm-bindgen-test", + "windmill-parser", + "windmill-parser-bash", + "windmill-parser-go", + "windmill-parser-graphql", + "windmill-parser-php", + "windmill-parser-py", + "windmill-parser-rust", + "windmill-parser-sql", + "windmill-parser-ts", + "windmill-parser-yaml", +] + +[[package]] +name = "windmill-parser-yaml" +version = "1.402.1" +dependencies = [ + "anyhow", + "serde_json", + "windmill-parser", + "yaml-rust", +] + +[[package]] +name = "windmill-queue" +version = "1.402.1" +dependencies = [ + "anyhow", + "async-recursion", + "axum", + "bigdecimal", + "chrono", + "chrono-tz 0.10.0", + "cron", + "futures-core", + "hex", + "hmac", + "itertools 0.13.0", + "lazy_static", + "prometheus", + "regex", + "reqwest 0.12.7", + "rsmq_async", + "serde", + "serde_json", + "serde_urlencoded", + "sql-builder", + "sqlx", + "tokio", + "tracing", + "ulid", + "uuid 1.10.0", + "windmill-audit", + "windmill-common", +] + +[[package]] +name = "windmill-sql-datatype-parser-wasm" +version = "1.402.1" +dependencies = [ + "wasm-bindgen", + "wasm-bindgen-test", + "windmill-parser", + "windmill-parser-sql", +] + +[[package]] +name = "windmill-worker" +version = "1.402.1" +dependencies = [ + "anyhow", + "async-recursion", + "base64 0.21.7", + "bit-vec", + "bytes", + "chrono", + "const_format", + "convert_case 0.6.0", + "deno_ast", + "deno_console", + "deno_core", + "deno_fetch", + "deno_net", + "deno_tls", + "deno_url", + "deno_web", + "deno_webidl", + "dotenv", + "dyn-iter", + "futures", + "gcp_auth", + "git-version", + "hex", + "itertools 0.13.0", + "jsonwebtoken", + "lazy_static", + "mappable-rc", + "mysql_async", + "native-tls", + "nix", + "object_store", + "once_cell", + "openidconnect", + "pem 3.0.4", + "postgres-native-tls", + "prometheus", + "rand 0.8.5", + "regex", + "reqwest 0.12.7", + "rsmq_async", + "rust_decimal", + "serde", + "serde_json", + "sha2 0.10.8", + "sqlx", + "tar", + "tiberius", + "tokio", + "tokio-postgres", + "tokio-util", + "tracing", + "urlencoding", + "uuid 1.10.0", + "windmill-audit", + "windmill-common", + "windmill-git-sync", + "windmill-parser", + "windmill-parser-bash", + "windmill-parser-go", + "windmill-parser-graphql", + "windmill-parser-php", + "windmill-parser-py", + "windmill-parser-py-imports", + "windmill-parser-rust", + "windmill-parser-sql", + "windmill-parser-ts", + "windmill-parser-yaml", + "windmill-queue", + "yaml-rust", + "zstd 0.12.4", +] [[package]] -name = "unicode-xid" -version = "0.1.0" +name = "windows-core" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +dependencies = [ + "windows-targets 0.52.6", +] [[package]] -name = "unicode-xid" -version = "0.2.2" +name = "windows-registry" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" +checksum = "e400001bb720a623c1c69032f8e3e4cf09984deec740f007dd2b03ec864804b0" +dependencies = [ + "windows-result", + "windows-strings", + "windows-targets 0.52.6", +] [[package]] -name = "unicode_categories" -version = "0.1.1" +name = "windows-result" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39ec24b3121d976906ece63c9daad25b85969647682eee313cb5779fdd69e14e" +checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" +dependencies = [ + "windows-targets 0.52.6", +] [[package]] -name = "unicode_names2" -version = "0.4.0" +name = "windows-strings" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87d6678d7916394abad0d4b19df4d3802e1fd84abd7d701f39b75ee71b9e8cf1" +checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" +dependencies = [ + "windows-result", + "windows-targets 0.52.6", +] [[package]] -name = "untrusted" -version = "0.7.1" +name = "windows-sys" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.5", +] [[package]] -name = "url" -version = "2.2.2" +name = "windows-sys" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a507c383b2d33b5fc35d1861e77e6b383d158b2da5e14fe51b83dfedf6fd578c" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ - "form_urlencoded", - "idna", - "matches", - "percent-encoding", - "serde", + "windows-targets 0.52.6", ] [[package]] -name = "urlencoding" -version = "2.1.0" +name = "windows-sys" +version = "0.59.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68b90931029ab9b034b300b797048cf23723400aa757e8a2bfb9d748102f9821" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets 0.52.6", +] [[package]] -name = "uuid" -version = "0.8.2" +name = "windows-targets" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" dependencies = [ - "getrandom 0.2.6", - "serde", + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", ] [[package]] -name = "v8" -version = "0.36.0" +name = "windows-targets" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "506523e86ccc15982be412bdde87a142771c139e94a8ecedda1da051a079b81d" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" dependencies = [ - "bitflags", - "fslock", - "lazy_static", - "libc", - "which", + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", + "windows_i686_gnullvm", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", ] [[package]] -name = "valuable" -version = "0.1.0" +name = "windows_aarch64_gnullvm" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" [[package]] -name = "vcpkg" -version = "0.2.15" +name = "windows_aarch64_gnullvm" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" [[package]] -name = "version_check" -version = "0.9.4" +name = "windows_aarch64_msvc" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" [[package]] -name = "walkdir" -version = "2.3.2" +name = "windows_aarch64_msvc" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56" -dependencies = [ - "same-file", - "winapi 0.3.9", - "winapi-util", -] +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" [[package]] -name = "want" -version = "0.3.0" +name = "windows_i686_gnu" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" -dependencies = [ - "log", - "try-lock", -] +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" [[package]] -name = "wasi" -version = "0.9.0+wasi-snapshot-preview1" +name = "windows_i686_gnu" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" [[package]] -name = "wasi" -version = "0.10.2+wasi-snapshot-preview1" +name = "windows_i686_gnullvm" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" [[package]] -name = "wasi" -version = "0.11.0+wasi-snapshot-preview1" +name = "windows_i686_msvc" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" [[package]] -name = "wasm-bindgen" -version = "0.2.80" +name = "windows_i686_msvc" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "27370197c907c55e3f1a9fbe26f44e937fe6451368324e009cba39e139dc08ad" -dependencies = [ - "cfg-if 1.0.0", - "serde", - "serde_json", - "wasm-bindgen-macro", -] +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" [[package]] -name = "wasm-bindgen-backend" -version = "0.2.80" +name = "windows_x86_64_gnu" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53e04185bfa3a779273da532f5025e33398409573f348985af9a1cbf3774d3f4" -dependencies = [ - "bumpalo", - "lazy_static", - "log", - "proc-macro2", - "quote", - "syn", - "wasm-bindgen-shared", -] +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" [[package]] -name = "wasm-bindgen-futures" -version = "0.4.30" +name = "windows_x86_64_gnu" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f741de44b75e14c35df886aff5f1eb73aa114fa5d4d00dcd37b5e01259bf3b2" -dependencies = [ - "cfg-if 1.0.0", - "js-sys", - "wasm-bindgen", - "web-sys", -] +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" [[package]] -name = "wasm-bindgen-macro" -version = "0.2.80" +name = "windows_x86_64_gnullvm" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17cae7ff784d7e83a2fe7611cfe766ecf034111b49deb850a3dc7699c08251f5" -dependencies = [ - "quote", - "wasm-bindgen-macro-support", -] +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" [[package]] -name = "wasm-bindgen-macro-support" -version = "0.2.80" +name = "windows_x86_64_gnullvm" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99ec0dc7a4756fffc231aab1b9f2f578d23cd391390ab27f952ae0c9b3ece20b" -dependencies = [ - "proc-macro2", - "quote", - "syn", - "wasm-bindgen-backend", - "wasm-bindgen-shared", -] +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" [[package]] -name = "wasm-bindgen-shared" -version = "0.2.80" +name = "windows_x86_64_msvc" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d554b7f530dee5964d9a9468d95c1f8b8acae4f282807e7d27d4b03099a46744" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" [[package]] -name = "web-sys" -version = "0.3.57" +name = "windows_x86_64_msvc" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b17e741662c70c8bd24ac5c5b18de314a2c26c32bf8346ee1e6f53de919c283" -dependencies = [ - "js-sys", - "wasm-bindgen", -] +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] -name = "webpki" -version = "0.21.4" +name = "winnow" +version = "0.5.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8e38c0608262c46d4a56202ebabdeb094cef7e560ca7a226c6bf055188aa4ea" +checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" dependencies = [ - "ring", - "untrusted", + "memchr", ] [[package]] -name = "webpki" -version = "0.22.0" +name = "winnow" +version = "0.6.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f095d78192e208183081cc07bc5515ef55216397af48b873e5edcd72637fa1bd" +checksum = "36c1fec1a2bb5866f07c25f68c26e565c4c200aebb96d7e55710c19d3e8ac49b" dependencies = [ - "ring", - "untrusted", + "memchr", ] [[package]] -name = "webpki-roots" -version = "0.21.1" +name = "winreg" +version = "0.50.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aabe153544e473b775453675851ecc86863d2a81d786d741f6b76778f2a48940" +checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" dependencies = [ - "webpki 0.21.4", + "cfg-if", + "windows-sys 0.48.0", ] [[package]] -name = "webpki-roots" -version = "0.22.3" +name = "winsafe" +version = "0.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44d8de8415c823c8abd270ad483c6feeac771fad964890779f9a8cb24fbbc1bf" -dependencies = [ - "webpki 0.22.0", -] +checksum = "d135d17ab770252ad95e9a872d365cf3090e3be864a34ab46f48555993efc904" [[package]] -name = "which" -version = "4.2.5" +name = "wyz" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c4fb54e6113b6a8772ee41c3404fb0301ac79604489467e0a9ce1f3e97c24ae" +checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" dependencies = [ - "either", - "lazy_static", - "libc", + "tap", ] [[package]] -name = "whoami" -version = "1.2.1" +name = "xattr" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "524b58fa5a20a2fb3014dd6358b70e6579692a56ef6fce928834e488f42f65e8" +checksum = "8da84f1a25939b27f6820d92aed108f83ff920fdf11a7b19366c27c4cda81d4f" dependencies = [ - "wasm-bindgen", - "web-sys", + "libc", + "linux-raw-sys", + "rustix", ] [[package]] -name = "widestring" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c168940144dd21fd8046987c16a46a33d5fc84eec29ef9dcddc2ac9e31526b7c" - -[[package]] -name = "wildmatch" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f44b95f62d34113cf558c93511ac93027e03e9c29a60dd0fd70e6e025c7270a" - -[[package]] -name = "winapi" -version = "0.2.8" +name = "xmlparser" +version = "0.13.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" +checksum = "66fee0b777b0f5ac1c69bb06d361268faafa61cd4682ae064a171c16c433e9e4" [[package]] -name = "winapi" -version = "0.3.9" +name = "xz2" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +checksum = "388c44dc09d76f1536602ead6d325eb532f5c122f17782bd57fb47baeeb767e2" dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", + "lzma-sys", ] [[package]] -name = "winapi-build" -version = "0.1.1" +name = "yaml-rust" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" +checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85" +dependencies = [ + "linked-hash-map", +] [[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" +name = "yansi" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" +checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec" [[package]] -name = "winapi-util" -version = "0.1.5" +name = "yoke" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" +checksum = "6c5b1314b079b0930c31e3af543d8ee1757b1951ae1e1565ec704403a7240ca5" dependencies = [ - "winapi 0.3.9", + "serde", + "stable_deref_trait", + "yoke-derive", + "zerofrom", ] [[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" +name = "yoke-derive" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" - -[[package]] -name = "windmill" -version = "1.5.0" +checksum = "28cc31741b18cb6f1d5ff12f5b7523e3d6eb0852bbbad19d73905511d9849b95" dependencies = [ - "anyhow", - "argon2", - "async-recursion", - "axum", - "chrono", - "console-subscriber", - "cron", - "deno_core", - "dotenv", - "external-ip", - "futures", - "git-version", - "headers", - "hex", - "hyper 0.14.18", - "indexmap", - "itertools 0.10.3", - "json-pointer", - "lettre", - "magic-crypt", - "mime_guess", - "oauth2", - "rand 0.8.5", - "rand_core 0.6.3", - "regex", - "reqwest 0.11.10", - "retainer", - "rust-embed", - "rustpython-parser", - "serde", - "serde_json", - "serde_urlencoded", - "slack-http-verifier", - "sql-builder", - "sqlx", - "tempfile", - "thiserror", - "time 0.3.9", - "tokio 1.17.0", - "tokio-tar", - "tokio-util 0.7.1", - "tower", - "tower-cookies", - "tower-http", - "tracing", - "tracing-subscriber", - "ulid", - "url", - "urlencoding", - "uuid", + "proc-macro2", + "quote", + "syn 2.0.79", + "synstructure", ] [[package]] -name = "windows-sys" -version = "0.34.0" +name = "zerocopy" +version = "0.7.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5acdd78cb4ba54c0045ac14f62d8f94a03d10047904ae2a40afa1e99d8f70825" +checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" dependencies = [ - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_msvc", + "byteorder", + "zerocopy-derive", ] [[package]] -name = "windows_aarch64_msvc" -version = "0.34.0" +name = "zerocopy-derive" +version = "0.7.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17cffbe740121affb56fad0fc0e421804adf0ae00891205213b5cecd30db881d" +checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.79", +] [[package]] -name = "windows_i686_gnu" -version = "0.34.0" +name = "zerofrom" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2564fde759adb79129d9b4f54be42b32c89970c18ebf93124ca8870a498688ed" +checksum = "91ec111ce797d0e0784a1116d0ddcdbea84322cd79e5d5ad173daeba4f93ab55" +dependencies = [ + "zerofrom-derive", +] [[package]] -name = "windows_i686_msvc" -version = "0.34.0" +name = "zerofrom-derive" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cd9d32ba70453522332c14d38814bceeb747d80b3958676007acadd7e166956" +checksum = "0ea7b4a3637ea8669cedf0f1fd5c286a17f3de97b8dd5a70a6c167a1730e63a5" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.79", + "synstructure", +] [[package]] -name = "windows_x86_64_gnu" -version = "0.34.0" +name = "zeroize" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfce6deae227ee8d356d19effc141a509cc503dfd1f850622ec4b0f84428e1f4" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" [[package]] -name = "windows_x86_64_msvc" -version = "0.34.0" +name = "zip" +version = "0.6.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d19538ccc21819d01deaf88d6a17eae6596a12e9aafdbb97916fb49896d89de9" +checksum = "760394e246e4c28189f19d488c058bf16f564016aefac5d32bb1f3b51d5e9261" +dependencies = [ + "aes 0.8.4", + "byteorder", + "bzip2", + "constant_time_eq 0.1.5", + "crc32fast", + "crossbeam-utils", + "flate2", + "hmac", + "pbkdf2", + "sha1", + "time", + "zstd 0.11.2+zstd.1.5.2", +] [[package]] -name = "winreg" -version = "0.6.2" +name = "zstd" +version = "0.11.2+zstd.1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2986deb581c4fe11b621998a5e53361efe6b48a151178d0cd9eeffa4dc6acc9" +checksum = "20cc960326ece64f010d2d2107537f26dc589a6573a316bd5b1dba685fa5fde4" dependencies = [ - "winapi 0.3.9", + "zstd-safe 5.0.2+zstd.1.5.2", ] [[package]] -name = "winreg" -version = "0.7.0" +name = "zstd" +version = "0.12.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0120db82e8a1e0b9fb3345a539c478767c0048d842860994d96113d5b667bd69" +checksum = "1a27595e173641171fc74a1232b7b1c7a7cb6e18222c11e9dfb9888fa424c53c" dependencies = [ - "winapi 0.3.9", + "zstd-safe 6.0.6", ] [[package]] -name = "winreg" -version = "0.10.1" +name = "zstd" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d" +checksum = "fcf2b778a664581e31e389454a7072dab1647606d44f7feea22cd5abb9c9f3f9" dependencies = [ - "winapi 0.3.9", + "zstd-safe 7.2.1", ] [[package]] -name = "ws2_32-sys" -version = "0.2.1" +name = "zstd-safe" +version = "5.0.2+zstd.1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e" +checksum = "1d2a5585e04f9eea4b2a3d1eca508c4dee9592a89ef6f450c11719da0726f4db" dependencies = [ - "winapi 0.2.8", - "winapi-build", + "libc", + "zstd-sys", ] [[package]] -name = "xattr" -version = "0.2.2" +name = "zstd-safe" +version = "6.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "244c3741f4240ef46274860397c7c74e50eb23624996930e484c16679633a54c" +checksum = "ee98ffd0b48ee95e6c5168188e44a54550b1564d9d530ee21d5f0eaed1069581" dependencies = [ "libc", + "zstd-sys", ] [[package]] -name = "xml-rs" -version = "0.8.4" +name = "zstd-safe" +version = "7.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2d7d3948613f75c98fd9328cfdcc45acc4d360655289d0a7d4ec931392200a3" +checksum = "54a3ab4db68cea366acc5c897c7b4d4d1b8994a9cd6e6f841f8964566a419059" +dependencies = [ + "zstd-sys", +] [[package]] -name = "xmltree" -version = "0.10.3" +name = "zstd-sys" +version = "2.0.12+zstd.1.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7d8a75eaf6557bb84a65ace8609883db44a29951042ada9b393151532e41fcb" +checksum = "0a4e40c320c3cb459d9a9ff6de98cff88f4751ee9275d140e2be94a2b74e4c13" dependencies = [ - "xml-rs", + "cc", + "pkg-config", ] diff --git a/backend/Cargo.toml b/backend/Cargo.toml index d5d21cc89f730..8451f65710a12 100644 --- a/backend/Cargo.toml +++ b/backend/Cargo.toml @@ -1,62 +1,283 @@ [package] name = "windmill" -version = "1.5.0" -authors = ["Ruben Fiszel "] +version = "1.402.1" +authors.workspace = true +edition.workspace = true + +[workspace] +resolver = "2" +members = [ + "./windmill-api", + "./windmill-queue", + "./windmill-worker", + "./windmill-common", + "./windmill-audit", + "./windmill-git-sync", + "./windmill-indexer", + "./parsers/windmill-parser", + "./parsers/windmill-parser-ts", + "./parsers/windmill-parser-wasm", + "./parsers/windmill-parser-go", + "./parsers/windmill-parser-rust", + "./parsers/windmill-parser-bash", + "./parsers/windmill-parser-py", + "./parsers/windmill-parser-py-imports", + "./parsers/windmill-sql-datatype-parser-wasm", + "./parsers/windmill-parser-yaml", +] + +[workspace.package] +version = "1.402.1" +authors = ["Ruben Fiszel "] edition = "2021" -[build-dependencies] -deno_core = "^0" +[[bin]] +name = "windmill" +path = "./src/main.rs" + +[profile.dev] +opt-level = 0 +incremental = true + +[features] +default = [] +enterprise = ["windmill-worker/enterprise", "windmill-queue/enterprise", "windmill-api/enterprise", "windmill-git-sync/enterprise", "windmill-common/prometheus", "windmill-common/enterprise", "windmill-indexer/enterprise"] +enterprise_saml = ["windmill-api/enterprise_saml"] +stripe = ["windmill-api/stripe"] +benchmark = ["windmill-api/benchmark", "windmill-worker/benchmark", "windmill-queue/benchmark", "windmill-common/benchmark"] +flamegraph = ["windmill-common/flamegraph", "windmill-worker/flamegraph"] +loki = ["windmill-common/loki"] +pg_embed = ["dep:pg-embed"] +embedding = ["windmill-api/embedding"] +parquet = ["windmill-api/parquet", "windmill-common/parquet", "windmill-worker/parquet", "windmill-indexer/parquet", "dep:object_store"] +prometheus = ["windmill-common/prometheus", "windmill-api/prometheus", "windmill-worker/prometheus", "windmill-queue/prometheus"] +flow_testing = ["windmill-worker/flow_testing"] +openidconnect = ["windmill-api/openidconnect"] +cloud = ["windmill-queue/cloud", "windmill-worker/cloud"] +jemalloc = ["windmill-common/jemalloc", "dep:tikv-jemallocator", "dep:tikv-jemalloc-sys", "dep:tikv-jemalloc-ctl"] +tantivy = ["dep:windmill-indexer", "windmill-api/tantivy"] +sqlx = ["windmill-worker/sqlx"] [dependencies] -axum = { version = "^0", features = ["headers"] } +anyhow.workspace = true +tokio.workspace = true +dotenv.workspace = true +windmill-queue.workspace = true +windmill-common = { workspace = true, default-features = false } +windmill-git-sync.workspace = true +windmill-api = { workspace = true, default-features = false } +windmill-worker.workspace = true +windmill-indexer = { workspace = true, optional = true } +futures.workspace = true +tracing.workspace = true +sqlx.workspace = true +rand.workspace = true +chrono.workspace = true +git-version.workspace = true +base64.workspace = true +sha2.workspace = true +rsmq_async.workspace = true +url.workspace = true +lazy_static.workspace = true +once_cell.workspace = true +prometheus.workspace = true +uuid.workspace = true +gethostname.workspace = true +serde_json.workspace = true +serde.workspace = true +deno_core.workspace = true +object_store = { workspace = true, optional = true } +pg-embed = {git = "https://github.com/faokunega/pg-embed", optional = true, default-features = false, features = ['rt_tokio']} +quote.workspace = true + + +[target.'cfg(not(target_env = "msvc"))'.dependencies] +tikv-jemallocator = { optional = true, workspace = true } +tikv-jemalloc-sys = { optional = true, workspace = true } +tikv-jemalloc-ctl = { optional = true, workspace = true } + +[dev-dependencies] +serde_json.workspace = true +reqwest.workspace = true +windmill-queue.workspace = true +axum.workspace = true +serde.workspace = true +windmill-api-client.workspace = true +deno_core = { workspace = true, features = ["include_js_files_for_snapshotting", "unsafe_use_unprotected_platform"] } + +[workspace.dependencies] +windmill-api = { path = "./windmill-api", default-features = false } +windmill-queue = { path = "./windmill-queue" } +windmill-worker = { path = "./windmill-worker" } +windmill-common = { path = "./windmill-common", default-features = false } +windmill-audit = { path = "./windmill-audit" } +windmill-git-sync = { path = "./windmill-git-sync" } +windmill-indexer = {path = "./windmill-indexer"} +windmill-parser = { path = "./parsers/windmill-parser" } +windmill-parser-ts = { path = "./parsers/windmill-parser-ts" } +windmill-parser-py = { path = "./parsers/windmill-parser-py" } +windmill-parser-py-imports = { path = "./parsers/windmill-parser-py-imports" } +windmill-parser-go = { path = "./parsers/windmill-parser-go" } +windmill-parser-rust = { path = "./parsers/windmill-parser-rust" } +windmill-parser-yaml = { path = "./parsers/windmill-parser-yaml" } +windmill-parser-bash = { path = "./parsers/windmill-parser-bash" } +windmill-parser-sql = { path = "./parsers/windmill-parser-sql" } +windmill-parser-graphql = { path = "./parsers/windmill-parser-graphql" } +windmill-parser-php = { path = "./parsers/windmill-parser-php" } +windmill-api-client = { path = "./windmill-api-client" } + +axum = { version = "^0.7", features = ["multipart"] } headers = "^0" -hyper = { version = "^0", features = ["full"] } +hyper = { version = "^1", features = ["full"] } tokio = { version = "^1", features = ["full", "tracing"] } tower = "^0" -tower-http = { version = "^0", features = ["trace"] } -tower-cookies = "^0" +tower-http = { version = "^0.5", features = ["trace", "cors"] } +tower-cookies = "^0.10" serde = "^1" -serde_json = { version = "^1", features = ["preserve_order"] } -uuid = { version = "^0", features = ["serde", "v4"] } +serde_json = { version = "^1", features = ["preserve_order", "raw_value"] } +uuid = { version = "^1", features = ["serde", "v4"] } thiserror = "^1" anyhow = "^1" -chrono = { version = "^0", features = ["serde"]} +chrono = { version = "0.4.35", features = ["serde"] } +chrono-tz = "^0" tracing = "^0" -tracing-subscriber = { version = "^0", features = ["env-filter", "json"]} -console-subscriber = "^0" - +tracing-subscriber = { version = "^0", features = ["env-filter", "json"] } +tracing-appender = "^0" +prometheus = { version = "^0", default-features = false } +cookie = { version = "0.17.0" } +phf = { version = "0.11", features = ["macros"] } rust-embed = "^6" mime_guess = "^2" hex = "^0" sql-builder = "^3" argon2 = "^0" -retainer = "^0" -rand = "^0.8.4" -rand_core = { version = "^0.6.3", features = ["std"] } +quick_cache = "^0" +rand = "0.8.5" +rand_core = { version = "^0", features = ["std"] } magic-crypt = "^3" git-version = "^0" -rustpython-parser = "^0" +rustpython-parser = { git = "https://github.com/RustPython/Parser", rev = "9ce55aefdeb35e2f706ce0b02d5a2dfe6295fc57" } +php-parser-rs = { git = "https://github.com/php-rust-tools/parser", rev = "ec4cb411dec09450946ef57920b7ffced7f6495d" } cron = "^0" -external-ip = "^4" -lettre = { version = "^0.10.0-rc.4", features = ["rustls-tls", "tokio1", "tokio1-rustls-tls", "builder", "smtp-transport"], default-features = false} +mail-send = { version = "0.4.0", features = ["builder"], default-features=false } urlencoding = "^2" -oauth2 = "^4" url = "^2" -reqwest = { version = "^0", features = ["json"] } -time = "0.3.7" -slack-http-verifier = "^0" +async-oauth2 = "^0" +reqwest = { version = "^0.12", features = ["json", "stream", "gzip"] } +time = "0.3.16" serde_urlencoded = "^0" tokio-tar = "^0" tempfile = "^3" -tokio-util = { version = "0.7.0", features = ["io"] } +tokio-util = { version = "^0", features = ["io"] } json-pointer = "^0" itertools = "^0" regex = "^1" -deno_core = "^0" -indexmap = "~1.6.2" +deno_fetch = "0.187.0" +deno_tls = "0.150.0" +deno_console = "0.163.0" +deno_url = "0.163.0" +deno_webidl = "0.163.0" +deno_web = "0.194.0" +deno_net = "0.155.0" +deno_core = "0.299.0" +deno_ast = { version = "=0.40.0", features = ["transpiling"] } async-recursion = "^1" - -sqlx = { version = "^0", features = ["macros", "offline", "migrate", "uuid", "json", "chrono", "postgres", "runtime-tokio-rustls"]} +swc_common = "=0.33.26" +swc_ecma_parser = "=0.144.3" +swc_ecma_ast = "=0.113.7" +swc_ecma_visit = "=0.99.1" +base64 = "0.21.0" +base32 = "^0" +hmac = "0.12.1" +sha2 = "0.10.6" +sqlx = { version = "0.8.0", features = [ + "macros", + "migrate", + "uuid", + "json", + "chrono", + "postgres", + "runtime-tokio-rustls", + "bigdecimal" +] } +bigdecimal = "^0" dotenv = "^0" -ulid = { version = "^0", features = ["uuid"] } +ulid = { version = "^1", features = ["uuid"] } futures = "^0" +futures-core = "^0" +lazy_static = "1.4.0" +serde_derive = "1.0.147" +const_format = { version = "0.2", features = ["rust_1_64", "rust_1_51"] } +dyn-iter = "0.2.0" +rsa = "0.7.2" +async-stripe = { version = "0.34.1", features = [ + "runtime-tokio-hyper", + "checkout", + "billing", +] } +async_zip = { version = "0.0.11", features = ["full"] } +once_cell = "1.17.1" +rsmq_async = { version = "5.1.5" } +gosyn = "0.2.6" +bytes = "1.4.0" +gethostname = "0.4.3" +wasm-bindgen = "=0.2.92" +serde-wasm-bindgen = "0.6.5" +wasm-bindgen-test = "0.3.42" +convert_case = "0.6.0" +getrandom = "0.2" +tokio-postgres = {version = "^0.7", features = ["array-impls", "with-serde_json-1", "with-chrono-0_4", "with-uuid-1", "with-bit-vec-0_6"]} +bit-vec = "=0.6.3" +mappable-rc = "^0" +mysql_async = { version = "*", default-features = false, features = ["minimal", "default", "native-tls-tls"]} +postgres-native-tls = "^0" +native-tls = "^0" +# samael will break compilation on MacOS. Use this fork instead to make it work +# samael = { git="https://github.com/njaremko/samael", rev="464d015e3ae393e4b5dd00b4d6baa1b617de0dd6", features = ["xmlsec"] } +samael = { version="0.0.14", features = ["xmlsec"] } +gcp_auth = "0.9.0" +rust_decimal = { version = "^1", features = ["db-postgres"]} +jsonwebtoken = "8.3.0" +pem = "3.0.1" +nix = { version = "0.27.1", features = ["process", "signal"] } +tinyvector = { git = "https://github.com/windmill-labs/tinyvector", rev = "20823b94c20f2b9093f318badd24026cf54dcc85" } +hf-hub = "0.3.2" +tokenizers = "0.14.1" +candle-core = "0.3.0" +candle-transformers = "0.3.0" +candle-nn = "0.3.0" +tiberius = { git = "https://github.com/prisma/tiberius", rev = "8f66a699dfa041e7b5f736c7e94f92c945453c9e", default-features = false, features = ["rustls", "tds73", "chrono", "sql-browser-tokio"]} +pin-project = "1" +indexmap = { version = "2.2.5", features = ["serde"]} +tokio-native-tls = "^0" +openssl = "=0.10" +mail-parser = "^0" +matchit = "=0.7.3" + +datafusion = "39.0.0" +object_store = { version = "0.10.0", features = ["aws", "azure"] } +openidconnect = { version = "3.4.0" } +zstd = "=0.12.4" +aws-config = "^1" +aws-sdk-sts = "^1" + +crc = "^3" +tar = "^0" +http = "^1" +async-stream = "^0" + +tikv-jemallocator = { version = "0.5" } +tikv-jemalloc-sys = { version = "^0.5" } +tikv-jemalloc-ctl = { version = "^0.5" } + +# 0.1.12 broken (nested dependency of swc_common) +triomphe = "<0.1.12" + +tantivy = "0.22.0" + +pulldown-cmark = "0.9" +toml = "0.8" +syn = { version = "2.0.74", features = ["full"] } +quote = "1.0.36" +regex-lite = "0.1.6" +yaml-rust = "0.4.5" diff --git a/backend/NOTICE b/backend/NOTICE index d38ba879b2a8e..da578d1c63b22 100644 --- a/backend/NOTICE +++ b/backend/NOTICE @@ -1,5 +1,5 @@ -Ruben Fiszel +Windmill Labs, Inc -Copyright (c) 2021 Ruben Fiszel +Copyright (c) 2021 Windmill Labs, Inc Source code in this directory is licensed the GNU Affero General Public License. diff --git a/backend/README.md b/backend/README.md new file mode 100644 index 0000000000000..a184290c5d966 --- /dev/null +++ b/backend/README.md @@ -0,0 +1,21 @@ +# Windmill Backend + +This folder holds all backend components, the [src/](./src/) folder only +contains files used to build the "root" binary. + +## Components + +| name | description | +| ------------------------------------- | --------------------------------------------------------------------------------------------------------- | +| [windmill-api](./windmill-api/) | The API server, exposing functionality to other components and the frontend | +| [windmill-audit](./windmill-audit/) | Contains audit functionality, allowing different components to record important actions | +| [windmill-common](./windmill-common/) | Common code shared by all crates | +| [windmill-queue](./windmill-queue/) | Contains job & flow queuing functionality, commonly written to by the API server and read from by workers | +| [windmill-worker](./windmill-worker/) | The worker. Used to process and execute flows & jobs. | +| [parsers](./parsers/) | Contains code to parse signatures in different langauges. | + +### Compile sqlx for offline ci + +``` +cargo sqlx prepare --workspace -- --bin windmill --features enterprise +``` diff --git a/backend/api/windmill_api.gen.go b/backend/api/windmill_api.gen.go new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/backend/build.rs b/backend/build.rs index aca8d19f2cf3e..d5068697c779d 100644 --- a/backend/build.rs +++ b/backend/build.rs @@ -1,17 +1,5 @@ -use std::fs::File; -use std::io::Write; - -use deno_core::{JsRuntime, RuntimeOptions}; - +// generated by `sqlx migrate build-script` fn main() { - println!("cargo:rerun-if-changed=build.rs"); - let options = RuntimeOptions { - will_snapshot: true, - ..Default::default() - }; - let mut runtime = JsRuntime::new(options); - - let mut snap = File::create("v8.snap").expect("can create snap file"); - snap.write_all(&runtime.snapshot()) - .expect("can write content to snap"); + // trigger recompilation when a new migration is added + println!("cargo:rerun-if-changed=migrations"); } diff --git a/backend/check_no_symlink.sh b/backend/check_no_symlink.sh new file mode 100755 index 0000000000000..43ed70e480887 --- /dev/null +++ b/backend/check_no_symlink.sh @@ -0,0 +1,47 @@ +#!/bin/bash +set -euo pipefail +script_dirpath="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +root_dirpath="$(cd "${script_dirpath}/.." && pwd)" + +EE_CODE_DIR="../windmill-ee-private/" + +while [[ $# -gt 0 ]]; do + case $1 in + -d|--dir) + EE_CODE_DIR="$2" + shift # past argument + shift # past value + ;; + -*|--*) + echo "Unknown option $1" + exit 1 + ;; + *) + POSITIONAL_ARGS+=("$1") # save positional arg + shift # past argument + ;; + esac +done + +if [[ $EE_CODE_DIR == /* ]]; then + EE_CODE_DIR="${EE_CODE_DIR}" +else + EE_CODE_DIR="${root_dirpath}/${EE_CODE_DIR}" +fi +echo "EE code directory = ${EE_CODE_DIR}" + +if [ ! -d "${EE_CODE_DIR}" ]; then + echo "Windmill EE repo not found, nothing to do" + exit 0 +fi + +for ee_file in $(find "${EE_CODE_DIR}" -name "*.rs"); do + ce_file="${ee_file/${EE_CODE_DIR}/.}" + ce_file="${root_dirpath}/backend/${ce_file}" + echo "Checking if '${ce_file}' is a symlink" + if [[ -L "${ce_file}" ]]; then + echo "File ${ce_file} is a symlink, cannot commit symlinks" + exit 1 + fi +done +echo "All good!" diff --git a/backend/custom_migrations/bypassrls_1.sql b/backend/custom_migrations/bypassrls_1.sql new file mode 100644 index 0000000000000..1918b26b0b47d --- /dev/null +++ b/backend/custom_migrations/bypassrls_1.sql @@ -0,0 +1,14 @@ +CREATE POLICY admin_policy ON account TO windmill_admin USING (true); +CREATE POLICY admin_policy ON app TO windmill_admin USING (true); +CREATE POLICY admin_policy ON audit TO windmill_admin USING (true); +CREATE POLICY admin_policy ON capture TO windmill_admin USING (true); +CREATE POLICY admin_policy ON completed_job TO windmill_admin USING (true); +CREATE POLICY admin_policy ON flow TO windmill_admin USING (true); +CREATE POLICY admin_policy ON folder TO windmill_admin USING (true); +CREATE POLICY admin_policy ON queue TO windmill_admin USING (true); +CREATE POLICY admin_policy ON raw_app TO windmill_admin USING (true); +CREATE POLICY admin_policy ON resource TO windmill_admin USING (true); +CREATE POLICY admin_policy ON schedule TO windmill_admin USING (true); +CREATE POLICY admin_policy ON script TO windmill_admin USING (true); +CREATE POLICY admin_policy ON usr_to_group TO windmill_admin USING (true); +CREATE POLICY admin_policy ON variable TO windmill_admin USING (true); \ No newline at end of file diff --git a/backend/custom_migrations/fix_flow_versioning_2.sql b/backend/custom_migrations/fix_flow_versioning_2.sql new file mode 100644 index 0000000000000..c19e98d49bb2b --- /dev/null +++ b/backend/custom_migrations/fix_flow_versioning_2.sql @@ -0,0 +1,20 @@ +INSERT INTO flow_version (workspace_id, path, value, schema, created_by, created_at) +SELECT workspace_id, path, value, schema, edited_by, edited_at + FROM flow + WHERE NOT EXISTS (SELECT 1 FROM flow_version WHERE flow_version.workspace_id = flow.workspace_id AND flow_version.path = flow.path); +UPDATE flow +SET versions = subquery.versions +FROM ( + SELECT + path, + workspace_id, + array_agg(id ORDER BY created_at ASC) AS versions + FROM + flow_version + GROUP BY + path, + workspace_id +) subquery +WHERE + flow.path = subquery.path + AND flow.workspace_id = subquery.workspace_id; \ No newline at end of file diff --git a/backend/ee-repo-ref.txt b/backend/ee-repo-ref.txt new file mode 100644 index 0000000000000..994e59747a0f4 --- /dev/null +++ b/backend/ee-repo-ref.txt @@ -0,0 +1 @@ +3d37b6c31155265d8d026ae9d6ced0b433078f87 \ No newline at end of file diff --git a/backend/migrations/20220123221901_migrate_root.down.sql b/backend/migrations/20220123221901_migrate_root.down.sql new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/backend/migrations/20220123221901_migrate_root.up.sql b/backend/migrations/20220123221901_migrate_root.up.sql new file mode 100644 index 0000000000000..ce6d0b26f3e7d --- /dev/null +++ b/backend/migrations/20220123221901_migrate_root.up.sql @@ -0,0 +1,56 @@ +DO +$do$ +BEGIN + + CREATE ROLE windmill_user; + +EXCEPTION WHEN OTHERS THEN + RAISE NOTICE 'error creating the windmill_user role: %', SQLERRM; +END +$do$; + +DO +$do$ +BEGIN + + GRANT ALL + ON ALL TABLES IN SCHEMA public + TO windmill_user; + + GRANT ALL PRIVILEGES + ON ALL SEQUENCES IN SCHEMA public + TO windmill_user; + + ALTER DEFAULT PRIVILEGES + IN SCHEMA public + GRANT ALL ON TABLES TO windmill_user; + + ALTER DEFAULT PRIVILEGES + IN SCHEMA public + GRANT ALL ON SEQUENCES TO windmill_user; + +EXCEPTION WHEN OTHERS THEN + RAISE NOTICE 'error granting proper permission to windmill_user: %', SQLERRM; +END +$do$; + +DO +$do$ +BEGIN + + CREATE ROLE windmill_admin WITH BYPASSRLS; + +EXCEPTION WHEN OTHERS THEN + RAISE NOTICE 'error creating the windmill_admin role: %', SQLERRM; +END +$do$; + + +DO +$do$ +BEGIN + GRANT windmill_user TO windmill_admin; +EXCEPTION WHEN OTHERS THEN + RAISE NOTICE 'error granting windmill_user to windmill_admin: %', SQLERRM; +END +$do$; diff --git a/backend/migrations/20220123221902_migrate_root.down.sql b/backend/migrations/20220123221902_migrate_root.down.sql new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/backend/migrations/20220123221902_migrate_root.up.sql b/backend/migrations/20220123221902_migrate_root.up.sql new file mode 100644 index 0000000000000..cbc76b462a524 --- /dev/null +++ b/backend/migrations/20220123221902_migrate_root.up.sql @@ -0,0 +1,72 @@ +DO +$do$ +BEGIN + IF NOT EXISTS ( + SELECT + FROM pg_catalog.pg_roles + WHERE rolname = 'windmill_user') THEN + + LOCK TABLE pg_catalog.pg_roles; + + CREATE ROLE windmill_user; + + END IF; +EXCEPTION WHEN OTHERS THEN + RAISE NOTICE 'error creating the windmill_user role: %', SQLERRM; +END +$do$; + +DO +$do$ +BEGIN + LOCK TABLE pg_catalog.pg_roles; + + GRANT ALL + ON ALL TABLES IN SCHEMA public + TO windmill_user; + + GRANT ALL PRIVILEGES + ON ALL SEQUENCES IN SCHEMA public + TO windmill_user; + + ALTER DEFAULT PRIVILEGES + IN SCHEMA public + GRANT ALL ON TABLES TO windmill_user; + + ALTER DEFAULT PRIVILEGES + IN SCHEMA public + GRANT ALL ON SEQUENCES TO windmill_user; + +EXCEPTION WHEN OTHERS THEN + RAISE NOTICE 'error granting proper permission to windmill_user: %', SQLERRM; +END +$do$; + +DO +$do$ +BEGIN + IF NOT EXISTS ( + SELECT + FROM pg_catalog.pg_roles + WHERE rolname = 'windmill_admin') THEN + + LOCK TABLE pg_catalog.pg_roles; + + CREATE ROLE windmill_admin WITH BYPASSRLS; + + + END IF; +EXCEPTION WHEN OTHERS THEN + RAISE NOTICE 'error creating the windmill_admin role: %', SQLERRM; +END +$do$; + + +DO +$do$ +BEGIN + GRANT windmill_user TO windmill_admin; +EXCEPTION WHEN OTHERS THEN + RAISE NOTICE 'error granting windmill_user to windmill_admin: %', SQLERRM; +END +$do$; diff --git a/backend/migrations/20220123221903_first.up.sql b/backend/migrations/20220123221903_first.up.sql index 52d7d23cc7969..5a372f9d3dc17 100644 --- a/backend/migrations/20220123221903_first.up.sql +++ b/backend/migrations/20220123221903_first.up.sql @@ -2,6 +2,7 @@ create SCHEMA IF NOT exists extensions; create extension if not exists "uuid-ossp" with schema extensions; + CREATE TABLE workspace ( id VARCHAR(50) PRIMARY KEY, name VARCHAR(50) NOT NULL, @@ -205,12 +206,6 @@ CREATE TABLE password ( company VARCHAR(30) ); --- CREATE TABLE invite_code ( --- code VARCHAR(20) PRIMARY KEY, --- seats_left INTEGER NOT NULL DEFAULT 0, --- seats_given INTEGER NOT NULL DEFAULT 1 --- ); - CREATE TABLE workspace_settings ( workspace_id VARCHAR(50) PRIMARY KEY REFERENCES workspace(id), @@ -277,17 +272,6 @@ CREATE TABLE variable ( CONSTRAINT proper_id CHECK (path ~ '^[ug](\/[\w-]+){2,}$') ); --- CREATE TABLE oauth( --- id VARCHAR(150) NOT NULL PRIMARY KEY, --- owner VARCHAR(50), --- workspace_id VARCHAR(50) NOT NULL REFERENCES workspace(id), --- type VARCHAR(50) NOT NULL, --- refresh_token VARCHAR(255), --- access_token VARCHAR(255) NOT NULL --- ); - --- CREATE INDEX index_oauth ON oauth (workspace_id, type, owner); - CREATE TYPE ACTION_KIND AS ENUM ('create', 'update', 'delete', 'execute'); CREATE TABLE audit ( @@ -420,35 +404,6 @@ CREATE INDEX worker_ping_on_ping_at ON worker_ping (ping_at); ALTER TABLE audit ENABLE ROW LEVEL SECURITY; CREATE POLICY audit_log_see_own ON audit FOR SELECT USING(audit.username = current_setting('session.user') or current_setting('session.is_admin')::boolean); --- USING(current_setting('session.is_admin')::boolean); - - -DO -$do$ -BEGIN - IF NOT EXISTS ( - SELECT FROM pg_catalog.pg_roles - WHERE rolname = 'app') THEN - - CREATE ROLE app LOGIN PASSWORD 'changeme'; - END IF; -END -$do$; - -GRANT SELECT ON audit TO app; - -REVOKE ALL -ON ALL TABLES IN SCHEMA public -FROM PUBLIC; - -GRANT ALL -ON ALL TABLES IN SCHEMA public -TO admin; - -ALTER DEFAULT PRIVILEGES - FOR ROLE admin - IN SCHEMA public - GRANT ALL ON TABLES TO admin; INSERT INTO usr_to_group @@ -456,12 +411,10 @@ SELECT workspace_id, 'all', username FROM (SELECT workspace_id, username from us ; DROP POLICY audit_log_see_own on audit; -GRANT ALL ON audit TO app; CREATE POLICY see_own ON audit FOR ALL USING (audit.username = current_setting('session.user')); -GRANT ALL ON queue TO app; ALTER TABLE queue ENABLE ROW LEVEL SECURITY; CREATE POLICY see_own ON queue FOR ALL @@ -470,7 +423,6 @@ USING (SPLIT_PART(queue.permissioned_as, '/', 1) = 'u' AND SPLIT_PART(queue.perm CREATE POLICY see_member ON queue FOR ALL USING (SPLIT_PART(queue.permissioned_as, '/', 1) = 'g' AND SPLIT_PART(queue.permissioned_as, '/', 2) = any(regexp_split_to_array(current_setting('session.groups'), ',')::text[])); -GRANT ALL ON completed_job TO app; ALTER TABLE completed_job ENABLE ROW LEVEL SECURITY; @@ -483,16 +435,6 @@ USING (SPLIT_PART(completed_job.permissioned_as, '/', 1) = 'u' AND SPLIT_PART(co CREATE POLICY see_member ON completed_job FOR ALL USING (SPLIT_PART(completed_job.permissioned_as, '/', 1) = 'g' AND SPLIT_PART(completed_job.permissioned_as, '/', 2) = any(regexp_split_to_array(current_setting('session.groups'), ',')::text[])); -GRANT SELECT ON pipenv to app; -GRANT SELECT (email, username, is_admin, workspace_id) ON usr to app; - -GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA public to app; -GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA public to admin; -GRANT SELECT, INSERT ON resource_type to app; - -GRANT SELECT ON worker_ping to app; -GRANT SELECT ON worker_ping to admin; - CREATE POLICY schedule ON audit FOR INSERT WITH CHECK (audit.username LIKE 'schedule-%'); @@ -508,7 +450,6 @@ $do$ EXECUTE FORMAT( $$ - GRANT ALL ON %1$I TO app; ALTER TABLE %1$I ENABLE ROW LEVEL SECURITY; CREATE POLICY see_starter ON %1$I FOR SELECT @@ -542,13 +483,11 @@ $do$ END $do$; -GRANT ALL ON group_ TO app; ALTER TABLE group_ ADD COLUMN extra_perms JSONB NOT NULL DEFAULT '{}'; CREATE INDEX group_extra_perms ON group_ USING GIN (extra_perms); -GRANT ALL ON usr_to_group TO app; ALTER TABLE usr_to_group ENABLE ROW LEVEL SECURITY; CREATE POLICY see_extra_perms_user ON usr_to_group FOR ALL @@ -566,10 +505,62 @@ WITH CHECK (exists( DO $do$ BEGIN - IF NOT EXISTS ( - SELECT FROM pg_catalog.pg_roles -- SELECT list can be empty for this - WHERE rolname = 'admin') THEN - CREATE ROLE admin WITH BYPASSRLS LOGIN PASSWORD 'changeme'; - END IF; + IF EXISTS ( + select usesuper from pg_user where usename = CURRENT_USER AND usesuper = 't') + AND NOT EXISTS ( + SELECT + FROM pg_catalog.pg_roles + WHERE rolname = 'windmill_user') THEN + + LOCK TABLE pg_catalog.pg_roles; + + CREATE ROLE windmill_user; + + GRANT ALL + ON ALL TABLES IN SCHEMA public + TO windmill_user; + + GRANT ALL PRIVILEGES + ON ALL SEQUENCES IN SCHEMA public + TO windmill_user; + + ALTER DEFAULT PRIVILEGES + IN SCHEMA public + GRANT ALL ON TABLES TO windmill_user; + + ALTER DEFAULT PRIVILEGES + IN SCHEMA public + GRANT ALL ON SEQUENCES TO windmill_user; + + END IF; +END +$do$; + +DO +$do$ +BEGIN + IF EXISTS (select usesuper from pg_user where usename = CURRENT_USER AND usesuper = 't') + AND NOT EXISTS ( + SELECT + FROM pg_catalog.pg_roles + WHERE rolname = 'windmill_admin') THEN + CREATE ROLE windmill_admin WITH BYPASSRLS; + + GRANT ALL + ON ALL TABLES IN SCHEMA public + TO windmill_admin; + + GRANT ALL PRIVILEGES + ON ALL SEQUENCES IN SCHEMA public + TO windmill_admin; + + ALTER DEFAULT PRIVILEGES + IN SCHEMA public + GRANT ALL ON TABLES TO windmill_admin; + + ALTER DEFAULT PRIVILEGES + IN SCHEMA public + GRANT ALL ON SEQUENCES TO windmill_admin; + END IF; END $do$; diff --git a/backend/migrations/20220321004844_flow_preview.down.sql b/backend/migrations/20220321004844_flow_preview.down.sql index d2f607c5b8bd6..c41799613410a 100644 --- a/backend/migrations/20220321004844_flow_preview.down.sql +++ b/backend/migrations/20220321004844_flow_preview.down.sql @@ -1 +1,2 @@ -- Add down migration script here + diff --git a/backend/migrations/20220428085013_private_key.up.sql b/backend/migrations/20220428085013_private_key.up.sql index dd6dcdee701eb..7cb668b1c3559 100644 --- a/backend/migrations/20220428085013_private_key.up.sql +++ b/backend/migrations/20220428085013_private_key.up.sql @@ -9,8 +9,5 @@ CREATE TABLE workspace_key ( PRIMARY KEY (workspace_id, kind) ); -GRANT SELECT ON workspace_key TO app; -GRANT SELECT ON workspace_key TO admin; - INSERT INTO workspace_key SELECT id as workspace_id, 'cloud' as kind, 'changeme' as key FROM workspace; diff --git a/backend/migrations/20220504193929_typescript_support.down.sql b/backend/migrations/20220504193929_typescript_support.down.sql new file mode 100644 index 0000000000000..ffee7499ecf39 --- /dev/null +++ b/backend/migrations/20220504193929_typescript_support.down.sql @@ -0,0 +1,12 @@ +-- Add down migration script here +DROP TYPE SCRIPT_LANG; + +ALTER TABLE script +DROP COLUMN language SCRIPT_LANG; + +ALTER TABLE queue +DROP COLUMN language SCRIPT_LANG; + +ALTER TABLE completed_job +DROP COLUMN language SCRIPT_LANG; + diff --git a/backend/migrations/20220504193929_typescript_support.up.sql b/backend/migrations/20220504193929_typescript_support.up.sql new file mode 100644 index 0000000000000..7be9d8339078c --- /dev/null +++ b/backend/migrations/20220504193929_typescript_support.up.sql @@ -0,0 +1,11 @@ +-- Add up migration script here +CREATE TYPE SCRIPT_LANG AS ENUM ('python3', 'deno'); + +ALTER TABLE script +ADD COLUMN language SCRIPT_LANG NOT NULL DEFAULT 'python3'; + +ALTER TABLE queue +ADD COLUMN language SCRIPT_LANG NOT NULL DEFAULT 'python3'; + +ALTER TABLE completed_job +ADD COLUMN language SCRIPT_LANG NOT NULL DEFAULT 'python3'; diff --git a/backend/migrations/20220508150023_changeme_passwords.down.sql b/backend/migrations/20220508150023_changeme_passwords.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20220508150023_changeme_passwords.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20220508150023_changeme_passwords.up.sql b/backend/migrations/20220508150023_changeme_passwords.up.sql new file mode 100644 index 0000000000000..fd5308cce3b6d --- /dev/null +++ b/backend/migrations/20220508150023_changeme_passwords.up.sql @@ -0,0 +1,4 @@ +-- Add up migration script here +UPDATE password +SET password_hash = '$argon2id$v=19$m=4096,t=3,p=1$oLJo/lPn/gezXCuFOEyaNw$i0T2tCkw3xUFsrBIKZwr8jVNHlIfoxQe+HfDnLtd12I' +WHERE password_hash = '$argon2id$v=19$m=4096,t=3,p=1$z0Kg3qyaS14e+YHeihkJLQ$N69flI6yQ/U98pjAHtbNxbdz2f4PrJEi9Tx1VoYk1as'; diff --git a/backend/migrations/20220508152326_create_role_if_not_exists.down.sql b/backend/migrations/20220508152326_create_role_if_not_exists.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20220508152326_create_role_if_not_exists.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20220508152326_create_role_if_not_exists.up.sql b/backend/migrations/20220508152326_create_role_if_not_exists.up.sql new file mode 100644 index 0000000000000..0da0a538a399f --- /dev/null +++ b/backend/migrations/20220508152326_create_role_if_not_exists.up.sql @@ -0,0 +1 @@ +-- Add up migration script here diff --git a/backend/migrations/20220508155403_delete_starter_scripts.down.sql b/backend/migrations/20220508155403_delete_starter_scripts.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20220508155403_delete_starter_scripts.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20220508155403_delete_starter_scripts.up.sql b/backend/migrations/20220508155403_delete_starter_scripts.up.sql new file mode 100644 index 0000000000000..50c68be9f605d --- /dev/null +++ b/backend/migrations/20220508155403_delete_starter_scripts.up.sql @@ -0,0 +1,3 @@ +-- Add up migration script here +DELETE FROM script WHERE lock IS NULL; + diff --git a/backend/migrations/20220509191845_started_at_completed_job.down.sql b/backend/migrations/20220509191845_started_at_completed_job.down.sql new file mode 100644 index 0000000000000..3180e0cb7318e --- /dev/null +++ b/backend/migrations/20220509191845_started_at_completed_job.down.sql @@ -0,0 +1,3 @@ +-- Add down migration script here +ALTER TABLE completed_job +DROP COLUMN started_at; diff --git a/backend/migrations/20220509191845_started_at_completed_job.up.sql b/backend/migrations/20220509191845_started_at_completed_job.up.sql new file mode 100644 index 0000000000000..03d4e4b11929e --- /dev/null +++ b/backend/migrations/20220509191845_started_at_completed_job.up.sql @@ -0,0 +1,4 @@ +-- Add up migration script here +ALTER TABLE completed_job +ADD COLUMN started_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW(); + diff --git a/backend/migrations/20220518211432_make_lang_nullable.down.sql b/backend/migrations/20220518211432_make_lang_nullable.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20220518211432_make_lang_nullable.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20220518211432_make_lang_nullable.up.sql b/backend/migrations/20220518211432_make_lang_nullable.up.sql new file mode 100644 index 0000000000000..9d3c0b1c86a3d --- /dev/null +++ b/backend/migrations/20220518211432_make_lang_nullable.up.sql @@ -0,0 +1,6 @@ +-- Add up migration script here +ALTER TABLE queue +ALTER COLUMN language DROP NOT NULL; + +ALTER TABLE completed_job +ALTER COLUMN language DROP NOT NULL; diff --git a/backend/migrations/20220610181005_add_script_hub.down.sql b/backend/migrations/20220610181005_add_script_hub.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20220610181005_add_script_hub.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20220610181005_add_script_hub.up.sql b/backend/migrations/20220610181005_add_script_hub.up.sql new file mode 100644 index 0000000000000..897b84bc5d634 --- /dev/null +++ b/backend/migrations/20220610181005_add_script_hub.up.sql @@ -0,0 +1,2 @@ +-- Add up migration script here +ALTER TYPE JOB_KIND ADD VALUE 'script_hub'; diff --git a/backend/migrations/20220615151034_accounts.down.sql b/backend/migrations/20220615151034_accounts.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20220615151034_accounts.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20220615151034_accounts.up.sql b/backend/migrations/20220615151034_accounts.up.sql new file mode 100644 index 0000000000000..e7c0356554dad --- /dev/null +++ b/backend/migrations/20220615151034_accounts.up.sql @@ -0,0 +1,13 @@ +-- Add up migration script here + +CREATE TABLE account ( + workspace_id VARCHAR(50) NOT NULL REFERENCES workspace(id), + id SERIAL NOT NULL, + expires_at TIMESTAMP, + refresh_token VARCHAR(255), + PRIMARY KEY (workspace_id, id) +); + +ALTER TABLE resource ADD COLUMN account INTEGER; +ALTER TABLE variable ADD COLUMN account INTEGER; +ALTER TABLE password ALTER COLUMN login_type TYPE VARCHAR(50); diff --git a/backend/migrations/20220620210708_regex_fix.down.sql b/backend/migrations/20220620210708_regex_fix.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20220620210708_regex_fix.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20220620210708_regex_fix.up.sql b/backend/migrations/20220620210708_regex_fix.up.sql new file mode 100644 index 0000000000000..651af8a036884 --- /dev/null +++ b/backend/migrations/20220620210708_regex_fix.up.sql @@ -0,0 +1,9 @@ +-- Add up migration script here + +ALTER TABLE usr DROP CONSTRAINT proper_email; +ALTER TABLE usr ADD CONSTRAINT proper_email +CHECK (email ~* '^(?:[a-z0-9!#$%&''*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&''*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9]))\.){3}(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9])|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])$'); + +ALTER TABLE workspace_invite DROP CONSTRAINT proper_email; +ALTER TABLE workspace_invite ADD CONSTRAINT proper_email +CHECK (email ~* '^(?:[a-z0-9!#$%&''*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&''*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9]))\.){3}(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9])|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])$'); diff --git a/backend/migrations/20220624170622_workspace_premium.down.sql b/backend/migrations/20220624170622_workspace_premium.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20220624170622_workspace_premium.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20220624170622_workspace_premium.up.sql b/backend/migrations/20220624170622_workspace_premium.up.sql new file mode 100644 index 0000000000000..ae56dfcb47aad --- /dev/null +++ b/backend/migrations/20220624170622_workspace_premium.up.sql @@ -0,0 +1,2 @@ +-- Add up migration script here +ALTER TABLE workspace ADD COLUMN premium BOOLEAN NOT NULL DEFAULT false; diff --git a/backend/migrations/20220624180013_workspace_premium_grant.down.sql b/backend/migrations/20220624180013_workspace_premium_grant.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20220624180013_workspace_premium_grant.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20220624180013_workspace_premium_grant.up.sql b/backend/migrations/20220624180013_workspace_premium_grant.up.sql new file mode 100644 index 0000000000000..763abdc9b96ad --- /dev/null +++ b/backend/migrations/20220624180013_workspace_premium_grant.up.sql @@ -0,0 +1,2 @@ +-- Add up migration script here + diff --git a/backend/migrations/20220707094935_add_client_to_account.down.sql b/backend/migrations/20220707094935_add_client_to_account.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20220707094935_add_client_to_account.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20220707094935_add_client_to_account.up.sql b/backend/migrations/20220707094935_add_client_to_account.up.sql new file mode 100644 index 0000000000000..94e0b275baa98 --- /dev/null +++ b/backend/migrations/20220707094935_add_client_to_account.up.sql @@ -0,0 +1,20 @@ +-- Add up migration script here +ALTER TABLE account ADD COLUMN owner VARCHAR(50) NOT NULL; +ALTER TABLE account ADD COLUMN client VARCHAR(50) NOT NULL; +ALTER TABLE resource ADD COLUMN is_oauth BOOLEAN NOT NULL DEFAULT false; +ALTER TABLE variable ADD COLUMN is_oauth BOOLEAN NOT NULL DEFAULT false; +ALTER TABLE resource DROP COLUMN account; + +ALTER TABLE account ALTER COLUMN expires_at TYPE TIMESTAMP WITH TIME ZONE; + +ALTER TABLE account ALTER COLUMN expires_at SET NOT NULL; +ALTER TABLE account ALTER COLUMN refresh_token SET NOT NULL; + +ALTER TABLE account ENABLE ROW LEVEL SECURITY; + + +CREATE POLICY see_own ON account FOR ALL +USING (SPLIT_PART(account.owner, '/', 1) = 'u' AND SPLIT_PART(account.owner, '/', 2) = current_setting('session.user')); + +CREATE POLICY see_member ON account FOR ALL +USING (SPLIT_PART(account.owner, '/', 1) = 'g' AND SPLIT_PART(account.owner, '/', 2) = any(regexp_split_to_array(current_setting('session.groups'), ',')::text[])); diff --git a/backend/migrations/20220713142758_script_trigger.down.sql b/backend/migrations/20220713142758_script_trigger.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20220713142758_script_trigger.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20220713142758_script_trigger.up.sql b/backend/migrations/20220713142758_script_trigger.up.sql new file mode 100644 index 0000000000000..d9aaa2343c396 --- /dev/null +++ b/backend/migrations/20220713142758_script_trigger.up.sql @@ -0,0 +1,3 @@ +-- Add up migration script here +ALTER TABLE script ADD COLUMN trigger_reco_interval INTEGER; +ALTER TABLE completed_job ADD COLUMN is_skipped BOOLEAN NOT NULL DEFAULT FALSE; diff --git a/backend/migrations/20220719101639_script_trigger_2.down.sql b/backend/migrations/20220719101639_script_trigger_2.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20220719101639_script_trigger_2.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20220719101639_script_trigger_2.up.sql b/backend/migrations/20220719101639_script_trigger_2.up.sql new file mode 100644 index 0000000000000..5d53c35b041bc --- /dev/null +++ b/backend/migrations/20220719101639_script_trigger_2.up.sql @@ -0,0 +1,4 @@ +-- Add up migration script here +ALTER TABLE script DROP COLUMN trigger_reco_interval; +ALTER TABLE script ADD COLUMN is_trigger BOOLEAN NOT NULL DEFAULT false; + diff --git a/backend/migrations/20220728222351_job_duration_ms.down.sql b/backend/migrations/20220728222351_job_duration_ms.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20220728222351_job_duration_ms.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20220728222351_job_duration_ms.up.sql b/backend/migrations/20220728222351_job_duration_ms.up.sql new file mode 100644 index 0000000000000..567b5562c7555 --- /dev/null +++ b/backend/migrations/20220728222351_job_duration_ms.up.sql @@ -0,0 +1,4 @@ +ALTER TABLE completed_job + RENAME duration to duration_ms; +UPDATE completed_job + SET duration_ms = duration_ms * 1000; diff --git a/backend/migrations/20220802211304_capture.down.sql b/backend/migrations/20220802211304_capture.down.sql new file mode 100644 index 0000000000000..4cc134749c51c --- /dev/null +++ b/backend/migrations/20220802211304_capture.down.sql @@ -0,0 +1 @@ +DROP TABLE capture; diff --git a/backend/migrations/20220802211304_capture.up.sql b/backend/migrations/20220802211304_capture.up.sql new file mode 100644 index 0000000000000..12360a03f3831 --- /dev/null +++ b/backend/migrations/20220802211304_capture.up.sql @@ -0,0 +1,21 @@ +CREATE TABLE capture ( + workspace_id VARCHAR(50) NOT NULL, + path VARCHAR(255) NOT NULL, + created_at TIMESTAMPTZ NOT NULL DEFAULT now(), + created_by VARCHAR(50) NOT NULL, + payload JSONB NOT NULL DEFAULT 'null'::jsonb + CHECK (length(payload::text) < 10 * 1024), + + PRIMARY KEY (workspace_id, path), + FOREIGN KEY (workspace_id) REFERENCES workspace(id) +); + +ALTER TABLE capture ENABLE ROW LEVEL SECURITY; + +CREATE POLICY see_own ON capture FOR ALL +USING ( SPLIT_PART(capture.path, '/', 1) = 'u' + AND SPLIT_PART(capture.path, '/', 2) = current_setting('session.user')); + +CREATE POLICY see_member ON capture FOR ALL +USING ( SPLIT_PART(capture.path, '/', 1) = 'g' + AND SPLIT_PART(capture.path, '/', 2) = any(regexp_split_to_array(current_setting('session.groups'), ',')::text[])); diff --git a/backend/migrations/20220816185849_remove_non_admin_users.down.sql b/backend/migrations/20220816185849_remove_non_admin_users.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20220816185849_remove_non_admin_users.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20220816185849_remove_non_admin_users.up.sql b/backend/migrations/20220816185849_remove_non_admin_users.up.sql new file mode 100644 index 0000000000000..7afc23e7c2d7d --- /dev/null +++ b/backend/migrations/20220816185849_remove_non_admin_users.up.sql @@ -0,0 +1,2 @@ +-- Add up migration script here +DELETE FROM password WHERE email = 'user@windmill.dev' OR email = 'ruben@windmill.dev'; diff --git a/backend/migrations/20220818125523_longername.down.sql b/backend/migrations/20220818125523_longername.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20220818125523_longername.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20220818125523_longername.up.sql b/backend/migrations/20220818125523_longername.up.sql new file mode 100644 index 0000000000000..c82be6fbc5cf5 --- /dev/null +++ b/backend/migrations/20220818125523_longername.up.sql @@ -0,0 +1,3 @@ +-- Add up migration script here +ALTER TABLE queue ALTER COLUMN created_by TYPE varchar(255); +ALTER TABLE completed_job ALTER COLUMN created_by TYPE varchar(255); diff --git a/backend/migrations/20220901174503_openflow_changes.down.sql b/backend/migrations/20220901174503_openflow_changes.down.sql new file mode 100644 index 0000000000000..8269131b66677 --- /dev/null +++ b/backend/migrations/20220901174503_openflow_changes.down.sql @@ -0,0 +1,2 @@ +-- The corresponding migrate up isn't really reversible but should be +-- idempotent... diff --git a/backend/migrations/20220901174503_openflow_changes.up.sql b/backend/migrations/20220901174503_openflow_changes.up.sql new file mode 100644 index 0000000000000..9de0ce802770c --- /dev/null +++ b/backend/migrations/20220901174503_openflow_changes.up.sql @@ -0,0 +1,56 @@ +-- https://github.com/windmill-labs/windmill/pull/491 +CREATE FUNCTION migrate_flow(flow jsonb) + RETURNS jsonb +AS $$ +DECLARE module jsonb; + i integer := 0; +BEGIN + if flow->'value'?'modules' THEN + flow = JSONB_SET(flow, ARRAY['modules'], flow->'value'->'modules') - 'value'; + END IF; + + FOR module IN SELECT JSONB_ARRAY_ELEMENTS(flow->'modules') LOOP + flow = JSONB_SET(flow, ARRAY['modules', i::text], migrate_flow_module(module)); + i = i + 1; + END LOOP; + + RETURN flow; +END; +$$ LANGUAGE plpgsql; + +CREATE FUNCTION migrate_flow_module(module jsonb) + RETURNS jsonb +AS $$ +BEGIN + IF module?'input_transform' AND module->'input_transform' != 'null'::jsonb THEN + module = JSONB_SET(module, ARRAY['input_transforms'], module->'input_transform') + - 'input_transform'; + END IF; + + IF module?'stop_after_if_expr' AND module->'stop_after_if_expr' != 'null'::jsonb THEN + IF NOT module?'stop_after_if' THEN + module = JSONB_SET(module, ARRAY['stop_after_if'], '{}'::jsonb); + END IF; + module = JSONB_SET(module, ARRAY['stop_after_if', 'expr'], module->'stop_after_if_expr') + - 'stop_after_if_expr'; + END IF; + + IF module?'skip_if_stopped' AND module->'skip_if_stopped' != 'null'::jsonb THEN + IF NOT module?'stop_after_if' THEN + module = JSONB_SET(module, ARRAY['stop_after_if'], '{}'::jsonb); + END IF; + module = JSONB_SET(module, ARRAY['stop_after_if', 'skip_if_stopped'], module->'skip_if_stopped') + - 'skip_if_stopped'; + END IF; + + if module->'value'->>'type' = 'forloopflow' THEN + module = JSONB_SET(module, ARRAY['value'], migrate_flow(module->'value')); + END IF; + + RETURN module; +END; +$$ LANGUAGE plpgsql; + +UPDATE flow SET value = migrate_flow(value); + +DROP FUNCTION migrate_flow_module, migrate_flow; diff --git a/backend/migrations/20220902211654_job-resume.down.sql b/backend/migrations/20220902211654_job-resume.down.sql new file mode 100644 index 0000000000000..2d43a54e1d214 --- /dev/null +++ b/backend/migrations/20220902211654_job-resume.down.sql @@ -0,0 +1,5 @@ +DROP TABLE resume_job; + +ALTER TABLE queue +DROP COLUMN suspend, +DROP COLUMN suspend_until; diff --git a/backend/migrations/20220902211654_job-resume.up.sql b/backend/migrations/20220902211654_job-resume.up.sql new file mode 100644 index 0000000000000..b0a9fe77fa2e8 --- /dev/null +++ b/backend/migrations/20220902211654_job-resume.up.sql @@ -0,0 +1,16 @@ +CREATE TABLE resume_job ( + id uuid NOT NULL, + job uuid NOT NULL, + flow uuid NOT NULL, + created_at TIMESTAMPTZ NOT NULL DEFAULT now(), + value JSONB NOT NULL DEFAULT 'null'::jsonb + CHECK (length(value::text) < 10 * 1024), + is_cancel boolean NOT NULL default false, + + PRIMARY KEY (id), + FOREIGN KEY (flow) REFERENCES queue(id) ON DELETE CASCADE +); + +ALTER TABLE queue + ADD COLUMN suspend INTEGER NOT NULL DEFAULT 0, + ADD COLUMN suspend_until TIMESTAMPTZ; diff --git a/backend/migrations/20220903220634_audit_username.down.sql b/backend/migrations/20220903220634_audit_username.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20220903220634_audit_username.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20220903220634_audit_username.up.sql b/backend/migrations/20220903220634_audit_username.up.sql new file mode 100644 index 0000000000000..d7decc0eb712d --- /dev/null +++ b/backend/migrations/20220903220634_audit_username.up.sql @@ -0,0 +1,11 @@ +-- Add up migration script here +DROP POLICY see_own ON audit; +DROP POLICY schedule ON audit; + +ALTER TABLE audit ALTER COLUMN username TYPE varchar(255); + +CREATE POLICY see_own ON audit FOR ALL +USING (audit.username = current_setting('session.user')); +CREATE POLICY schedule ON audit FOR INSERT +WITH CHECK (audit.username LIKE 'schedule-%'); + diff --git a/backend/migrations/20220904123027_script_kind.down.sql b/backend/migrations/20220904123027_script_kind.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20220904123027_script_kind.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20220904123027_script_kind.up.sql b/backend/migrations/20220904123027_script_kind.up.sql new file mode 100644 index 0000000000000..aeb52483a88a5 --- /dev/null +++ b/backend/migrations/20220904123027_script_kind.up.sql @@ -0,0 +1,5 @@ +-- Add up migration script here +CREATE TYPE SCRIPT_KIND AS ENUM ('script', 'trigger', 'failure', 'command'); + +ALTER TABLE script ADD COLUMN kind SCRIPT_KIND NOT NULL DEFAULT 'script'; +ALTER TABLE script DROP COLUMN is_trigger; \ No newline at end of file diff --git a/backend/migrations/20220905175719_go_lang.down.sql b/backend/migrations/20220905175719_go_lang.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20220905175719_go_lang.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20220905175719_go_lang.up.sql b/backend/migrations/20220905175719_go_lang.up.sql new file mode 100644 index 0000000000000..9ac322b49267f --- /dev/null +++ b/backend/migrations/20220905175719_go_lang.up.sql @@ -0,0 +1,2 @@ +-- Add up migration script here +ALTER TYPE SCRIPT_LANG ADD VALUE 'go'; \ No newline at end of file diff --git a/backend/migrations/20221005022757_same_worker.down.sql b/backend/migrations/20221005022757_same_worker.down.sql new file mode 100644 index 0000000000000..85e0ac0391992 --- /dev/null +++ b/backend/migrations/20221005022757_same_worker.down.sql @@ -0,0 +1,2 @@ +-- Add down migration script here +ALTER TABLE queue DROP COLUMN same_worker; diff --git a/backend/migrations/20221005022757_same_worker.up.sql b/backend/migrations/20221005022757_same_worker.up.sql new file mode 100644 index 0000000000000..0f71520b44426 --- /dev/null +++ b/backend/migrations/20221005022757_same_worker.up.sql @@ -0,0 +1,2 @@ +-- Add up migration script here +ALTER TABLE queue ADD COLUMN same_worker BOOLEAN DEFAULT FALSE; diff --git a/backend/migrations/20221020164416_approval_script.down.sql b/backend/migrations/20221020164416_approval_script.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20221020164416_approval_script.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20221020164416_approval_script.up.sql b/backend/migrations/20221020164416_approval_script.up.sql new file mode 100644 index 0000000000000..5239ed3a5e64b --- /dev/null +++ b/backend/migrations/20221020164416_approval_script.up.sql @@ -0,0 +1,2 @@ +-- Add up migration script here +ALTER TYPE SCRIPT_KIND ADD VALUE 'approval'; \ No newline at end of file diff --git a/backend/migrations/20221023162721_remove_iscancel_resumejob.down.sql b/backend/migrations/20221023162721_remove_iscancel_resumejob.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20221023162721_remove_iscancel_resumejob.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20221023162721_remove_iscancel_resumejob.up.sql b/backend/migrations/20221023162721_remove_iscancel_resumejob.up.sql new file mode 100644 index 0000000000000..f74ce8587e922 --- /dev/null +++ b/backend/migrations/20221023162721_remove_iscancel_resumejob.up.sql @@ -0,0 +1,3 @@ +-- Add up migration script here +ALTER TABLE resume_job DROP COLUMN is_cancel; +ALTER TABLE resume_job ADD COLUMN approver VARCHAR(50); \ No newline at end of file diff --git a/backend/migrations/20221024110649_add_resume_id.down.sql b/backend/migrations/20221024110649_add_resume_id.down.sql new file mode 100644 index 0000000000000..f7bcbacddace5 --- /dev/null +++ b/backend/migrations/20221024110649_add_resume_id.down.sql @@ -0,0 +1,2 @@ +-- Add down migration script here +ALTER TABLE resume_job DROP resume_id; \ No newline at end of file diff --git a/backend/migrations/20221024110649_add_resume_id.up.sql b/backend/migrations/20221024110649_add_resume_id.up.sql new file mode 100644 index 0000000000000..6718104c24aa9 --- /dev/null +++ b/backend/migrations/20221024110649_add_resume_id.up.sql @@ -0,0 +1,3 @@ +-- Add up migration script here +ALTER TABLE resume_job ADD COLUMN resume_id INTEGER NOT NULL DEFAULT 0; +ALTER TYPE JOB_KIND ADD VALUE 'identity'; \ No newline at end of file diff --git a/backend/migrations/20221024225533_apps.down.sql b/backend/migrations/20221024225533_apps.down.sql new file mode 100644 index 0000000000000..bb187a9f8f771 --- /dev/null +++ b/backend/migrations/20221024225533_apps.down.sql @@ -0,0 +1,4 @@ +-- Add down migration script here +DROP TABLE app; +DROP TABLE app_version; +DROP TYPE EXECUTION_MODE; \ No newline at end of file diff --git a/backend/migrations/20221024225533_apps.up.sql b/backend/migrations/20221024225533_apps.up.sql new file mode 100644 index 0000000000000..3006fd715083b --- /dev/null +++ b/backend/migrations/20221024225533_apps.up.sql @@ -0,0 +1,25 @@ +-- Add up migration script here +CREATE TABLE app ( + id BIGSERIAL PRIMARY KEY, + workspace_id VARCHAR(50) NOT NULL REFERENCES workspace(id), + path varchar(255) NOT NULL, + summary VARCHAR(1000) NOT NULL DEFAULT '', + policy JSONB NOT NULL, + versions BIGINT[] NOT NULL, + extra_perms JSONB NOT NULL DEFAULT '{}' +); + +CREATE TABLE app_version( + id BIGSERIAL PRIMARY KEY, + flow_id BIGINT NOT NULL, + value JSONB NOT NULL, + created_by VARCHAR(50) NOT NULL, + created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(), + FOREIGN KEY (flow_id) REFERENCES app(id) ON DELETE CASCADE +); + +CREATE POLICY see_own ON app FOR ALL +USING (SPLIT_PART(app.path, '/', 1) = 'u' AND SPLIT_PART(app.path, '/', 2) = current_setting('session.user')); + +CREATE POLICY see_member ON app FOR ALL +USING (SPLIT_PART(app.path, '/', 1) = 'g' AND SPLIT_PART(app.path, '/', 2) = any(regexp_split_to_array(current_setting('session.groups'), ',')::text[])); diff --git a/backend/migrations/20221104105107_queue-raw_lock.down.sql b/backend/migrations/20221104105107_queue-raw_lock.down.sql new file mode 100644 index 0000000000000..5adb91b8f9b5c --- /dev/null +++ b/backend/migrations/20221104105107_queue-raw_lock.down.sql @@ -0,0 +1,2 @@ +-- Add down migration script here +ALTER TABLE queue DROP raw_lock; \ No newline at end of file diff --git a/backend/migrations/20221104105107_queue-raw_lock.up.sql b/backend/migrations/20221104105107_queue-raw_lock.up.sql new file mode 100644 index 0000000000000..cd54f175e0f3a --- /dev/null +++ b/backend/migrations/20221104105107_queue-raw_lock.up.sql @@ -0,0 +1,2 @@ +-- Add up migration script here +ALTER TABLE queue ADD COLUMN raw_lock TEXT DEFAULT NULL; \ No newline at end of file diff --git a/backend/migrations/20221104111317_completed_job-raw_lock.down.sql b/backend/migrations/20221104111317_completed_job-raw_lock.down.sql new file mode 100644 index 0000000000000..5adb91b8f9b5c --- /dev/null +++ b/backend/migrations/20221104111317_completed_job-raw_lock.down.sql @@ -0,0 +1,2 @@ +-- Add down migration script here +ALTER TABLE queue DROP raw_lock; \ No newline at end of file diff --git a/backend/migrations/20221104111317_completed_job-raw_lock.up.sql b/backend/migrations/20221104111317_completed_job-raw_lock.up.sql new file mode 100644 index 0000000000000..22825a8f292a2 --- /dev/null +++ b/backend/migrations/20221104111317_completed_job-raw_lock.up.sql @@ -0,0 +1,2 @@ +-- Add up migration script here +ALTER TABLE completed_job ADD COLUMN raw_lock TEXT DEFAULT NULL; \ No newline at end of file diff --git a/backend/migrations/20221104135246_flow-dependency_job.down.sql b/backend/migrations/20221104135246_flow-dependency_job.down.sql new file mode 100644 index 0000000000000..1971cac83f24f --- /dev/null +++ b/backend/migrations/20221104135246_flow-dependency_job.down.sql @@ -0,0 +1,2 @@ +-- Add down migration script here +ALTER TABLE flow DROP dependency_job; \ No newline at end of file diff --git a/backend/migrations/20221104135246_flow-dependency_job.up.sql b/backend/migrations/20221104135246_flow-dependency_job.up.sql new file mode 100644 index 0000000000000..aac424983ffc6 --- /dev/null +++ b/backend/migrations/20221104135246_flow-dependency_job.up.sql @@ -0,0 +1,3 @@ +-- Add up migration script here +ALTER TABLE flow ADD COLUMN dependency_job UUID DEFAULT NULL; +ALTER TYPE JOB_KIND ADD VALUE IF NOT EXISTS 'flowdependencies'; \ No newline at end of file diff --git a/backend/migrations/20221105003256_grant_all.down.sql b/backend/migrations/20221105003256_grant_all.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20221105003256_grant_all.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20221105003256_grant_all.up.sql b/backend/migrations/20221105003256_grant_all.up.sql new file mode 100644 index 0000000000000..916fdcbbfbf98 --- /dev/null +++ b/backend/migrations/20221105003256_grant_all.up.sql @@ -0,0 +1,13 @@ +-- Add up migration script here + + +GRANT ALL +ON ALL TABLES IN SCHEMA public +TO windmill_user; + + +GRANT ALL +ON ALL TABLES IN SCHEMA public +TO windmill_admin; + +DELETE FROM workspace_invite WHERE workspace_id = 'demo' AND email = 'ruben@windmill.dev'; \ No newline at end of file diff --git a/backend/migrations/20221106081530_bash.down.sql b/backend/migrations/20221106081530_bash.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20221106081530_bash.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20221106081530_bash.up.sql b/backend/migrations/20221106081530_bash.up.sql new file mode 100644 index 0000000000000..922cf28104de0 --- /dev/null +++ b/backend/migrations/20221106081530_bash.up.sql @@ -0,0 +1,2 @@ +-- Add up migration script here +ALTER TYPE SCRIPT_LANG ADD VALUE 'bash'; \ No newline at end of file diff --git a/backend/migrations/20221123151919_grant_sequence_privileges.down.sql b/backend/migrations/20221123151919_grant_sequence_privileges.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20221123151919_grant_sequence_privileges.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20221123151919_grant_sequence_privileges.up.sql b/backend/migrations/20221123151919_grant_sequence_privileges.up.sql new file mode 100644 index 0000000000000..8bc2c8fe3dc70 --- /dev/null +++ b/backend/migrations/20221123151919_grant_sequence_privileges.up.sql @@ -0,0 +1,8 @@ +-- Add up migration script here + +GRANT ALL +ON ALL SEQUENCES IN SCHEMA public +TO windmill_user; +GRANT ALL +ON ALL SEQUENCES IN SCHEMA public +TO windmill_admin; \ No newline at end of file diff --git a/backend/migrations/20221126181131_pg_rt_name.down.sql b/backend/migrations/20221126181131_pg_rt_name.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20221126181131_pg_rt_name.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20221126181131_pg_rt_name.up.sql b/backend/migrations/20221126181131_pg_rt_name.up.sql new file mode 100644 index 0000000000000..b15a0e91fa2a7 --- /dev/null +++ b/backend/migrations/20221126181131_pg_rt_name.up.sql @@ -0,0 +1,6 @@ +-- Add up migration script here +UPDATE resource_type rt SET name = 'postgresql' WHERE name = 'postgres' AND NOT EXISTS ( + SELECT 1 FROM resource_type WHERE name = 'postgresql' AND rt.workspace_id = workspace_id +); + +UPDATE resource SET resource_type = 'postgresql' WHERE resource_type = 'postgres'; diff --git a/backend/migrations/20221127093847_add_account_error.down.sql b/backend/migrations/20221127093847_add_account_error.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20221127093847_add_account_error.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20221127093847_add_account_error.up.sql b/backend/migrations/20221127093847_add_account_error.up.sql new file mode 100644 index 0000000000000..92393c7fd32ea --- /dev/null +++ b/backend/migrations/20221127093847_add_account_error.up.sql @@ -0,0 +1,2 @@ +-- Add up migration script here +ALTER TABLE account ADD COLUMN refresh_error TEXT; diff --git a/backend/migrations/20221127143814_remove_oauth_from_res.down.sql b/backend/migrations/20221127143814_remove_oauth_from_res.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20221127143814_remove_oauth_from_res.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20221127143814_remove_oauth_from_res.up.sql b/backend/migrations/20221127143814_remove_oauth_from_res.up.sql new file mode 100644 index 0000000000000..8df025dc5de31 --- /dev/null +++ b/backend/migrations/20221127143814_remove_oauth_from_res.up.sql @@ -0,0 +1,2 @@ +-- Add up migration script here +ALTER TABLE resource DROP COLUMN is_oauth; diff --git a/backend/migrations/20221128210151_favorites.down.sql b/backend/migrations/20221128210151_favorites.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20221128210151_favorites.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20221128210151_favorites.up.sql b/backend/migrations/20221128210151_favorites.up.sql new file mode 100644 index 0000000000000..3aa002f66afed --- /dev/null +++ b/backend/migrations/20221128210151_favorites.up.sql @@ -0,0 +1,11 @@ +-- Add up migration script here + +CREATE TYPE FAVORITE_KIND AS ENUM ('app', 'script', 'flow'); + +CREATE TABLE favorite ( + usr VARCHAR(50) NOT NULL, + workspace_id VARCHAR(50) NOT NULL, + path VARCHAR(255) NOT NULL, + favorite_kind FAVORITE_KIND NOT NULL, + PRIMARY KEY (usr, workspace_id, favorite_kind, path) +); \ No newline at end of file diff --git a/backend/migrations/20221203080006_apps_2.down.sql b/backend/migrations/20221203080006_apps_2.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20221203080006_apps_2.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20221203080006_apps_2.up.sql b/backend/migrations/20221203080006_apps_2.up.sql new file mode 100644 index 0000000000000..95d8fd6c56a80 --- /dev/null +++ b/backend/migrations/20221203080006_apps_2.up.sql @@ -0,0 +1,3 @@ +-- Add up migration script here +ALTER TABLE app ADD CONSTRAINT unique_path_workspace_id UNIQUE (workspace_id, path); +ALTER TABLE app ENABLE ROW LEVEL SECURITY; diff --git a/backend/migrations/20221207103910_admins_workspace.down.sql b/backend/migrations/20221207103910_admins_workspace.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20221207103910_admins_workspace.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20221207103910_admins_workspace.up.sql b/backend/migrations/20221207103910_admins_workspace.up.sql new file mode 100644 index 0000000000000..43c7b599a2b56 --- /dev/null +++ b/backend/migrations/20221207103910_admins_workspace.up.sql @@ -0,0 +1,9 @@ +INSERT INTO workspace(id, name, owner) VALUES + ('admins', 'Admins', 'admin@windmill.dev'); + +INSERT INTO workspace_settings (workspace_id) VALUES + ('admins'); + +INSERT INTO workspace_key + (workspace_id, kind, key) + VALUES ('admins', 'cloud', md5(random()::text) || md5(random()::text)) \ No newline at end of file diff --git a/backend/migrations/20221207125219_admins_hub_sync.down.sql b/backend/migrations/20221207125219_admins_hub_sync.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20221207125219_admins_hub_sync.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20221207125219_admins_hub_sync.up.sql b/backend/migrations/20221207125219_admins_hub_sync.up.sql new file mode 100644 index 0000000000000..d7017f690f9ce --- /dev/null +++ b/backend/migrations/20221207125219_admins_hub_sync.up.sql @@ -0,0 +1,20 @@ +INSERT INTO script(workspace_id, created_by, content, schema, summary, description, path, hash, language, lock) VALUES ( +'admins', +'system', +'import wmill from "https://deno.land/x/wmill@v1.55.0/main.ts"; + +export async function main() { + await run( + "workspace", "add", "__automation", "starter", Deno.env.get("WM_BASE_URL") + "/", "--token", Deno.env.get("WM_TOKEN")); + + await run("hub", "pull"); +} + +async function run(...cmd: string[]) { + console.log("Running \"" + cmd.join('' '') + "\""); + await wmill.parse(cmd); +}', +'{"$schema":"https://json-schema.org/draft/2020-12/schema","properties":{},"required":[],"type":"object"}', +'Syncronize Hub Resource types with starter workspace', +'Basic administrative script to sync latest resource types from hub. Recommended to run at least once. On a schedule by default.', +'u/admin/hub_sync', -28028598712388162, 'deno', ''); \ No newline at end of file diff --git a/backend/migrations/20221208135921_job_pre_run_error.down.sql b/backend/migrations/20221208135921_job_pre_run_error.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20221208135921_job_pre_run_error.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20221208135921_job_pre_run_error.up.sql b/backend/migrations/20221208135921_job_pre_run_error.up.sql new file mode 100644 index 0000000000000..79952e795909a --- /dev/null +++ b/backend/migrations/20221208135921_job_pre_run_error.up.sql @@ -0,0 +1,2 @@ +-- Add up migration script here +ALTER TABLE queue ADD COLUMN pre_run_error text; \ No newline at end of file diff --git a/backend/migrations/20221210125521_increase_variable_length.down.sql b/backend/migrations/20221210125521_increase_variable_length.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20221210125521_increase_variable_length.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20221210125521_increase_variable_length.up.sql b/backend/migrations/20221210125521_increase_variable_length.up.sql new file mode 100644 index 0000000000000..999ffdc11bf7a --- /dev/null +++ b/backend/migrations/20221210125521_increase_variable_length.up.sql @@ -0,0 +1,2 @@ +-- Add up migration script here +ALTER TABLE variable ALTER COLUMN value TYPE VARCHAR(15000); diff --git a/backend/migrations/20221210194626_usage_tracker.down.sql b/backend/migrations/20221210194626_usage_tracker.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20221210194626_usage_tracker.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20221210194626_usage_tracker.up.sql b/backend/migrations/20221210194626_usage_tracker.up.sql new file mode 100644 index 0000000000000..da67eccb8a4a8 --- /dev/null +++ b/backend/migrations/20221210194626_usage_tracker.up.sql @@ -0,0 +1,8 @@ +-- Add up migration script here +CREATE TABLE usage ( + id VARCHAR(50) NOT NULL, + is_workspace BOOLEAN NOT NULL, + month_ INTEGER NOT NULL, + usage INTEGER NOT NULL, + PRIMARY KEY (id, is_workspace, month_) +); \ No newline at end of file diff --git a/backend/migrations/20221211055346_emails_everywhere.down.sql b/backend/migrations/20221211055346_emails_everywhere.down.sql new file mode 100644 index 0000000000000..44f1bdaacac2f --- /dev/null +++ b/backend/migrations/20221211055346_emails_everywhere.down.sql @@ -0,0 +1,5 @@ +-- Add down migration script here +ALTER TABLE queue DROP COLUMN email; +ALTER TABLE workspace_settings DROP COLUMN slack_email; +ALTER TABLE schedule DROP COLUMN email; +ALTER TABLE schedule DROP COLUMN error; \ No newline at end of file diff --git a/backend/migrations/20221211055346_emails_everywhere.up.sql b/backend/migrations/20221211055346_emails_everywhere.up.sql new file mode 100644 index 0000000000000..9ab6b205d2c61 --- /dev/null +++ b/backend/migrations/20221211055346_emails_everywhere.up.sql @@ -0,0 +1,6 @@ +-- Add up migration script here +ALTER TABLE queue ADD COLUMN email VARCHAR(50) NOT NULL DEFAULT 'missing@email.xyz'; +ALTER TABLE workspace_settings ADD COLUMN slack_email VARCHAR(50) NOT NULL DEFAULT 'missing@email.xyz';; +ALTER TABLE schedule ADD COLUMN email VARCHAR(50) NOT NULL DEFAULT 'missing@email.xyz'; +ALTER TABLE schedule ADD COLUMN error TEXT; + diff --git a/backend/migrations/20221211192539_grant_usage.down.sql b/backend/migrations/20221211192539_grant_usage.down.sql new file mode 100644 index 0000000000000..4ba7e709ebe99 --- /dev/null +++ b/backend/migrations/20221211192539_grant_usage.down.sql @@ -0,0 +1,2 @@ +-- Add down migration script here +ALTER TABLE workspace_settings DROP COLUMN auto_invite_domain; diff --git a/backend/migrations/20221211192539_grant_usage.up.sql b/backend/migrations/20221211192539_grant_usage.up.sql new file mode 100644 index 0000000000000..a72d18d5126b2 --- /dev/null +++ b/backend/migrations/20221211192539_grant_usage.up.sql @@ -0,0 +1,4 @@ +-- Add up migration script here + +GRANT ALL PRIVILEGES ON TABLE usage TO windmill_admin; +GRANT ALL PRIVILEGES ON TABLE usage TO windmill_user; \ No newline at end of file diff --git a/backend/migrations/20221211200923_remove_admin_from_starters.down.sql b/backend/migrations/20221211200923_remove_admin_from_starters.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20221211200923_remove_admin_from_starters.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20221211200923_remove_admin_from_starters.up.sql b/backend/migrations/20221211200923_remove_admin_from_starters.up.sql new file mode 100644 index 0000000000000..e4c32bdb3d6f4 --- /dev/null +++ b/backend/migrations/20221211200923_remove_admin_from_starters.up.sql @@ -0,0 +1,2 @@ +-- Add up migration script here +DELETE FROM usr WHERE workspace_id = 'starter' AND email = 'admin@windmill.dev'; \ No newline at end of file diff --git a/backend/migrations/20221212114409_add_all_group_to_admins.down.sql b/backend/migrations/20221212114409_add_all_group_to_admins.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20221212114409_add_all_group_to_admins.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20221212114409_add_all_group_to_admins.up.sql b/backend/migrations/20221212114409_add_all_group_to_admins.up.sql new file mode 100644 index 0000000000000..a1a962ba32ccd --- /dev/null +++ b/backend/migrations/20221212114409_add_all_group_to_admins.up.sql @@ -0,0 +1,2 @@ +-- Add up migration script here +INSERT INTO group_ SELECT id, 'all', 'The group that always contains all users of this workspace' FROM workspace ON CONFLICT DO NOTHING; diff --git a/backend/migrations/20221212130731_add_autoinvite.down.sql b/backend/migrations/20221212130731_add_autoinvite.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20221212130731_add_autoinvite.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20221212130731_add_autoinvite.up.sql b/backend/migrations/20221212130731_add_autoinvite.up.sql new file mode 100644 index 0000000000000..c52f9c404da4f --- /dev/null +++ b/backend/migrations/20221212130731_add_autoinvite.up.sql @@ -0,0 +1,3 @@ +-- Add up migration script here +ALTER TABLE workspace_settings ADD COLUMN auto_invite_domain VARCHAR(50); +ALTER TABLE workspace DROP COLUMN domain; \ No newline at end of file diff --git a/backend/migrations/20221213112420_add_operator.down.sql b/backend/migrations/20221213112420_add_operator.down.sql new file mode 100644 index 0000000000000..5423277f84cfe --- /dev/null +++ b/backend/migrations/20221213112420_add_operator.down.sql @@ -0,0 +1,3 @@ +-- Add down migration script here +ALTER TABLE workspace_invite DROP COLUMN operator; +ALTER TABLE workspace_settings DROP COLUMN auto_invite_operator; diff --git a/backend/migrations/20221213112420_add_operator.up.sql b/backend/migrations/20221213112420_add_operator.up.sql new file mode 100644 index 0000000000000..dbc95ca8b044f --- /dev/null +++ b/backend/migrations/20221213112420_add_operator.up.sql @@ -0,0 +1,4 @@ +-- Add up migration script here +ALTER TABLE workspace_invite ADD COLUMN operator BOOLEAN NOT NULL DEFAULT false; +ALTER TABLE workspace_settings ADD COLUMN auto_invite_operator BOOLEAN DEFAULT false; +ALTER TABLE completed_job ADD COLUMN email VARCHAR(50) NOT NULL DEFAULT 'missing@email.xyz'; diff --git a/backend/migrations/20221214105402_first_time_users.down.sql b/backend/migrations/20221214105402_first_time_users.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20221214105402_first_time_users.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20221214105402_first_time_users.up.sql b/backend/migrations/20221214105402_first_time_users.up.sql new file mode 100644 index 0000000000000..89f572dc3a7e3 --- /dev/null +++ b/backend/migrations/20221214105402_first_time_users.up.sql @@ -0,0 +1,12 @@ +-- Add up migration script here +ALTER TABLE + password +ADD + first_time_user boolean NOT NULL DEFAULT (false); + +UPDATE + password +SET + first_time_user = true +WHERE + email = 'admin@windmill.dev'; \ No newline at end of file diff --git a/backend/migrations/20221215101605_share_job_to_owner.down.sql b/backend/migrations/20221215101605_share_job_to_owner.down.sql new file mode 100644 index 0000000000000..0bf4bab40c5fd --- /dev/null +++ b/backend/migrations/20221215101605_share_job_to_owner.down.sql @@ -0,0 +1,5 @@ +-- Add down migration script here +ALTER TABLE queue DROP COLUMN visible_to_owner; +ALTER TABLE completed_job DROP COLUMN visible_to_owner; + +DROP POLICY see_own_path ON queue; \ No newline at end of file diff --git a/backend/migrations/20221215101605_share_job_to_owner.up.sql b/backend/migrations/20221215101605_share_job_to_owner.up.sql new file mode 100644 index 0000000000000..53206dc613e39 --- /dev/null +++ b/backend/migrations/20221215101605_share_job_to_owner.up.sql @@ -0,0 +1,15 @@ +-- Add up migration script here +ALTER TABLE queue ADD COLUMN visible_to_owner BOOLEAN DEFAULT true; +ALTER TABLE completed_job ADD COLUMN visible_to_owner BOOLEAN DEFAULT true; + +CREATE POLICY see_own_path ON queue FOR ALL +USING (queue.visible_to_owner IS true AND SPLIT_PART(queue.script_path, '/', 1) = 'u' AND SPLIT_PART(queue.script_path, '/', 2) = current_setting('session.user')); + +CREATE POLICY see_member_path ON queue FOR ALL +USING (queue.visible_to_owner IS true AND SPLIT_PART(queue.script_path, '/', 1) = 'g' AND SPLIT_PART(queue.script_path, '/', 2) = any(regexp_split_to_array(current_setting('session.groups'), ',')::text[])); + +CREATE POLICY see_own_path ON completed_job FOR ALL +USING (completed_job.visible_to_owner IS true AND SPLIT_PART(completed_job.script_path, '/', 1) = 'u' AND SPLIT_PART(completed_job.script_path, '/', 2) = current_setting('session.user')); + +CREATE POLICY see_member_path ON completed_job FOR ALL +USING (completed_job.visible_to_owner IS true AND SPLIT_PART(completed_job.script_path, '/', 1) = 'g' AND SPLIT_PART(completed_job.script_path, '/', 2) = any(regexp_split_to_array(current_setting('session.groups'), ',')::text[])); diff --git a/backend/migrations/20221219032311_folders.down.sql b/backend/migrations/20221219032311_folders.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20221219032311_folders.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20221219032311_folders.up.sql b/backend/migrations/20221219032311_folders.up.sql new file mode 100644 index 0000000000000..c64fbf1ae3cc0 --- /dev/null +++ b/backend/migrations/20221219032311_folders.up.sql @@ -0,0 +1,19 @@ +-- Add up migration script here +ALTER TABLE app_version +RENAME COLUMN flow_id TO app_id; + +CREATE TABLE folder ( + name VARCHAR(255), + workspace_id VARCHAR(50) NOT NULL, + display_name VARCHAR(100) NOT NULL, + owners VARCHAR(255)[] NOT NULL, + extra_perms JSONB NOT NULL DEFAULT '{}', + FOREIGN KEY (workspace_id) REFERENCES workspace(id) ON DELETE CASCADE, + PRIMARY KEY (workspace_id, name) +); + +CREATE INDEX folder_extra_perms ON folder USING GIN (extra_perms); +CREATE INDEX folder_owners ON folder USING GIN (owners); + +GRANT ALL ON folder TO windmill_user; +GRANT ALL ON folder TO windmill_admin; diff --git a/backend/migrations/20221219051235_folders_2.down.sql b/backend/migrations/20221219051235_folders_2.down.sql new file mode 100644 index 0000000000000..44b8aaa3652b1 --- /dev/null +++ b/backend/migrations/20221219051235_folders_2.down.sql @@ -0,0 +1,21 @@ +-- Add down migration script here +DO +$do$ + DECLARE + i text; + arr text[] := array['resource', 'script', 'variable', 'schedule', 'flow', 'app']; + BEGIN + FOREACH i IN ARRAY arr + LOOP + EXECUTE FORMAT( + $$ + DROP POLICY see_folder_extra_perms_user ON %1$I; + $$, + i + ); + END LOOP; + END +$do$; + +DROP POLICY see_extra_perms_user ON folder; +DROP POLICY see_extra_perms_groups ON folder; \ No newline at end of file diff --git a/backend/migrations/20221219051235_folders_2.up.sql b/backend/migrations/20221219051235_folders_2.up.sql new file mode 100644 index 0000000000000..de89abe73d1d3 --- /dev/null +++ b/backend/migrations/20221219051235_folders_2.up.sql @@ -0,0 +1,52 @@ +-- Add up migration script here +DO +$do$ + DECLARE + i text; + arr text[] := array['resource', 'script', 'variable', 'schedule', 'flow', 'app']; + BEGIN + FOREACH i IN ARRAY arr + LOOP + EXECUTE FORMAT( + $$ + CREATE POLICY see_folder_extra_perms_user ON %1$I FOR ALL + USING (SPLIT_PART(%1$I.path, '/', 1) = 'f' AND SPLIT_PART(%1$I.path, '/', 2) = any(regexp_split_to_array(current_setting('session.folders_read'), ',')::text[])) + WITH CHECK (SPLIT_PART(%1$I.path, '/', 1) = 'f' AND SPLIT_PART(%1$I.path, '/', 2) = any(regexp_split_to_array(current_setting('session.folders_write'), ',')::text[])); + $$, + i + ); + END LOOP; + END +$do$; +ALTER TABLE folder ENABLE ROW LEVEL SECURITY; + +CREATE POLICY see_extra_perms_user ON folder FOR ALL +USING (extra_perms ? CONCAT('u/', current_setting('session.user')) or (CONCAT('u/', current_setting('session.user')) = ANY(owners))) +WITH CHECK ((CONCAT('u/', current_setting('session.user')) = ANY(owners))); + +CREATE POLICY see_extra_perms_groups ON folder FOR ALL +USING (extra_perms ?| regexp_split_to_array(current_setting('session.pgroups'), ',')::text[] or (exists( + SELECT o FROM unnest(owners) as o + WHERE o = ANY(regexp_split_to_array(current_setting('session.pgroups'), ',')::text[])))) +WITH CHECK (exists( + SELECT o FROM unnest(owners) as o + WHERE o = ANY(regexp_split_to_array(current_setting('session.pgroups'), ',')::text[]))); + +DO +$do$ + DECLARE + i text; + arr text[] := array['script', 'flow', 'variable', 'resource', 'schedule']; + BEGIN + FOREACH i IN ARRAY arr + LOOP + EXECUTE FORMAT( + $$ + ALTER TABLE %1$I DROP CONSTRAINT proper_id; + ALTER TABLE %1$I ADD CONSTRAINT proper_id CHECK (path ~ '^[ufg](\/[\w-]+){2,}$'); + $$, + i + ); + END LOOP; + END +$do$; diff --git a/backend/migrations/20230101074836_sync_from_admin.down.sql b/backend/migrations/20230101074836_sync_from_admin.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20230101074836_sync_from_admin.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20230101074836_sync_from_admin.up.sql b/backend/migrations/20230101074836_sync_from_admin.up.sql new file mode 100644 index 0000000000000..de073b06d3c08 --- /dev/null +++ b/backend/migrations/20230101074836_sync_from_admin.up.sql @@ -0,0 +1,15 @@ +-- Add up migration script here +UPDATE script SET content = 'import wmill from "https://deno.land/x/wmill@v1.57.0/main.ts"; +export async function main() { + await run( + "workspace", "add", "__automation", "admins", Deno.env.get("WM_BASE_URL") + "/", "--token", Deno.env.get("WM_TOKEN")); + + await run("hub", "pull"); +} + +async function run(...cmd: string[]) { + console.log("Running \"" + cmd.join('' '') + "\""); + await wmill.parse(cmd); +}', summary = 'Synchronize Hub Resource types with admins workspace', +description = 'Basic administrative script to sync latest resource types from hub to share to every workspace. Recommended to run at least once. On a schedule by default.' +WHERE hash = -28028598712388162 AND workspace_id = 'admins'; \ No newline at end of file diff --git a/backend/migrations/20230107075643_use_internal_url_sync.down.sql b/backend/migrations/20230107075643_use_internal_url_sync.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20230107075643_use_internal_url_sync.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20230107075643_use_internal_url_sync.up.sql b/backend/migrations/20230107075643_use_internal_url_sync.up.sql new file mode 100644 index 0000000000000..76132f55cf5b1 --- /dev/null +++ b/backend/migrations/20230107075643_use_internal_url_sync.up.sql @@ -0,0 +1,16 @@ +-- Add up migration script here +-- Add up migration script here +UPDATE script SET content = 'import wmill from "https://deno.land/x/wmill@v1.57.0/main.ts"; +export async function main() { + await run( + "workspace", "add", "__automation", "admins", Deno.env.get("BASE_INTERNAL_URL") + "/", "--token", Deno.env.get("WM_TOKEN")); + + await run("hub", "pull"); +} + +async function run(...cmd: string[]) { + console.log("Running \"" + cmd.join('' '') + "\""); + await wmill.parse(cmd); +}', summary = 'Synchronize Hub Resource types with admins workspace', +description = 'Basic administrative script to sync latest resource types from hub to share to every workspace. Recommended to run at least once. On a schedule by default.' +WHERE hash = -28028598712388162 AND workspace_id = 'admins'; \ No newline at end of file diff --git a/backend/migrations/20230119194229_customer_id.down.sql b/backend/migrations/20230119194229_customer_id.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20230119194229_customer_id.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20230119194229_customer_id.up.sql b/backend/migrations/20230119194229_customer_id.up.sql new file mode 100644 index 0000000000000..74696214f6369 --- /dev/null +++ b/backend/migrations/20230119194229_customer_id.up.sql @@ -0,0 +1,3 @@ +-- Add up migration script here +ALTER TABLE workspace_settings ADD COLUMN customer_id VARCHAR(100); +ALTER TABLE workspace_settings ADD COLUMN plan VARCHAR(40); diff --git a/backend/migrations/20230126023323_webhook.down.sql b/backend/migrations/20230126023323_webhook.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20230126023323_webhook.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20230126023323_webhook.up.sql b/backend/migrations/20230126023323_webhook.up.sql new file mode 100644 index 0000000000000..ea29fe8122d0b --- /dev/null +++ b/backend/migrations/20230126023323_webhook.up.sql @@ -0,0 +1,5 @@ +-- Add up migration script here +ALTER TABLE + workspace_settings +ADD + COLUMN webhook text; \ No newline at end of file diff --git a/backend/migrations/20230127175428_increase_token_size.down.sql b/backend/migrations/20230127175428_increase_token_size.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20230127175428_increase_token_size.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20230127175428_increase_token_size.up.sql b/backend/migrations/20230127175428_increase_token_size.up.sql new file mode 100644 index 0000000000000..e557be47544b9 --- /dev/null +++ b/backend/migrations/20230127175428_increase_token_size.up.sql @@ -0,0 +1,2 @@ +-- Add up migration script here +ALTER TABLE account ALTER COLUMN refresh_token TYPE VARCHAR(1500); diff --git a/backend/migrations/20230127210757_favorite_privilege.down.sql b/backend/migrations/20230127210757_favorite_privilege.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20230127210757_favorite_privilege.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20230127210757_favorite_privilege.up.sql b/backend/migrations/20230127210757_favorite_privilege.up.sql new file mode 100644 index 0000000000000..00d761d1b4729 --- /dev/null +++ b/backend/migrations/20230127210757_favorite_privilege.up.sql @@ -0,0 +1,4 @@ +-- Add up migration script here + +GRANT ALL PRIVILEGES ON TABLE favorite TO windmill_admin; +GRANT ALL PRIVILEGES ON TABLE favorite TO windmill_user; \ No newline at end of file diff --git a/backend/migrations/20230131143413_more_folders_privilege.down.sql b/backend/migrations/20230131143413_more_folders_privilege.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20230131143413_more_folders_privilege.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20230131143413_more_folders_privilege.up.sql b/backend/migrations/20230131143413_more_folders_privilege.up.sql new file mode 100644 index 0000000000000..2f2d22e70fa84 --- /dev/null +++ b/backend/migrations/20230131143413_more_folders_privilege.up.sql @@ -0,0 +1,25 @@ +-- Add up migration script here + + +CREATE POLICY see_folder_extra_perms_user ON capture FOR ALL +USING (SPLIT_PART(capture.path, '/', 1) = 'f' AND SPLIT_PART(capture.path, '/', 2) = any(regexp_split_to_array(current_setting('session.folders_read'), ',')::text[])) +WITH CHECK (SPLIT_PART(capture.path, '/', 1) = 'f' AND SPLIT_PART(capture.path, '/', 2) = any(regexp_split_to_array(current_setting('session.folders_write'), ',')::text[])); + +DO +$do$ + DECLARE + i text; + arr text[] := array['queue', 'completed_job']; + BEGIN + FOREACH i IN ARRAY arr + LOOP + EXECUTE FORMAT( + $$ + CREATE POLICY see_folder_extra_perms_user ON %1$I FOR ALL + USING (%1$I.visible_to_owner IS true AND SPLIT_PART(%1$I.script_path, '/', 1) = 'f' AND SPLIT_PART(%1$I.script_path, '/', 2) = any(regexp_split_to_array(current_setting('session.folders_read'), ',')::text[])); + $$, + i + ); + END LOOP; + END +$do$; \ No newline at end of file diff --git a/backend/migrations/20230131145602_more_folders_privilege_2.down.sql b/backend/migrations/20230131145602_more_folders_privilege_2.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20230131145602_more_folders_privilege_2.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20230131145602_more_folders_privilege_2.up.sql b/backend/migrations/20230131145602_more_folders_privilege_2.up.sql new file mode 100644 index 0000000000000..d3ab0e729f77f --- /dev/null +++ b/backend/migrations/20230131145602_more_folders_privilege_2.up.sql @@ -0,0 +1,5 @@ +-- Add up migration script here + +CREATE POLICY see_folder_extra_perms_user ON account FOR ALL +USING (SPLIT_PART(account.owner, '/', 1) = 'f' AND SPLIT_PART(account.owner, '/', 2) = any(regexp_split_to_array(current_setting('session.folders_read'), ',')::text[])) +WITH CHECK (SPLIT_PART(account.owner, '/', 1) = 'f' AND SPLIT_PART(account.owner, '/', 2) = any(regexp_split_to_array(current_setting('session.folders_write'), ',')::text[])); diff --git a/backend/migrations/20230204182500_add_mem_peak.down.sql b/backend/migrations/20230204182500_add_mem_peak.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20230204182500_add_mem_peak.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20230204182500_add_mem_peak.up.sql b/backend/migrations/20230204182500_add_mem_peak.up.sql new file mode 100644 index 0000000000000..cd46c2c79dcfc --- /dev/null +++ b/backend/migrations/20230204182500_add_mem_peak.up.sql @@ -0,0 +1,3 @@ +-- Add up migration script here +ALTER TABLE queue ADD COLUMN mem_peak INTEGER; +ALTER TABLE completed_job ADD COLUMN mem_peak INTEGER; diff --git a/backend/migrations/20230210145514_first_time_app.down.sql b/backend/migrations/20230210145514_first_time_app.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20230210145514_first_time_app.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20230210145514_first_time_app.up.sql b/backend/migrations/20230210145514_first_time_app.up.sql new file mode 100644 index 0000000000000..447e589744bc0 --- /dev/null +++ b/backend/migrations/20230210145514_first_time_app.up.sql @@ -0,0 +1,1584 @@ +-- Add up migration script here +INSERT INTO + app( + workspace_id, + path, + summary, + policy, + versions, + extra_perms + ) +VALUES + ( + 'admins', + 'g/all/setup_app', + 'New User Setup App', + '{ "on_behalf_of": "u/admin@windmill.dev", "triggerables": { "rawscript/99240dbcb9a35539b60ca35b8ff04220b8e3463b1e6e25068eaa11f536195c87": { } }, "execution_mode": "publisher", "on_behalf_of_email": "admin@windmill.dev" }', + '{1}', + '{}' + ); + +INSERT INTO + app_version(app_id, created_by, created_at, value) +VALUES + ( + ( + SELECT + id + FROM + app + WHERE + workspace_id = 'admins' + AND path = 'g/all/setup_app' + ), + 'admin@windmill.dev', + '2023-01-01 00:00:00.000000 +00:00', + '{ "grid": [ + { + "3": { + "h": 1, + "w": 3, + "x": 0, + "y": 0, + "id": "a", + "max": { + "h": 100, + "w": 3 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "12": { + "h": 2, + "w": 12, + "x": 0, + "y": 0, + "id": "a", + "max": { + "h": 100, + "w": 12 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "id": "a", + "data": { + "id": "a", + "card": false, + "type": "textcomponent", + "softWrap": true, + "configuration": { + "style": { + "type": "static", + "value": "Title", + "fieldType": "select", + "onlyStatic": true, + "optionValuesKey": "textStyleOptions" + }, + "copyButton": { + "type": "static", + "value": false, + "fieldType": "boolean", + "onlyStatic": true + }, + "extraStyle": { + "type": "static", + "value": "", + "tooltip": "CSS rules like \"color: blue;\"", + "fieldType": "text" + } + }, + "componentInput": { + "eval": "Setup your Windmill instance", + "type": "template", + "value": "Hello ${ctx.username}", + "fieldType": "template" + }, + "verticalAlignment": "center", + "horizontalAlignment": "center" + } + }, + { + "3": { + "h": 1, + "w": 1, + "x": 0, + "y": 7, + "id": "b", + "max": { + "h": 100, + "w": 3 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "12": { + "h": 1, + "w": 4, + "x": 1, + "y": 7, + "id": "b", + "max": { + "h": 100, + "w": 12 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "id": "b", + "data": { + "id": "b", + "card": false, + "type": "textinputcomponent", + "softWrap": true, + "configuration": { + "placeholder": { + "type": "static", + "value": "Type...", + "fieldType": "text", + "onlyStatic": true + }, + "defaultValue": { + "type": "connected", + "fieldType": "text", + "connection": { + "path": "email", + "componentId": "ctx" + } + } + }, + "verticalAlignment": "center" + } + }, + { + "3": { + "h": 1, + "w": 1, + "x": 0, + "y": 6, + "id": "c", + "max": { + "h": 100, + "w": 3 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "12": { + "h": 1, + "w": 4, + "x": 1, + "y": 6, + "id": "c", + "max": { + "h": 100, + "w": 12 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "id": "c", + "data": { + "id": "c", + "card": false, + "type": "textcomponent", + "softWrap": true, + "configuration": { + "style": { + "type": "static", + "value": "Label", + "fieldType": "select", + "onlyStatic": true, + "optionValuesKey": "textStyleOptions" + }, + "copyButton": { + "type": "static", + "value": false, + "fieldType": "boolean", + "onlyStatic": true + }, + "extraStyle": { + "type": "static", + "value": "", + "tooltip": "CSS rules like \"color: blue;\"", + "fieldType": "text" + } + }, + "componentInput": { + "eval": "Old Email", + "type": "template", + "value": "Hello ${ctx.username}", + "fieldType": "template" + }, + "verticalAlignment": "center", + "horizontalAlignment": "left" + } + }, + { + "3": { + "h": 1, + "w": 1, + "x": 2, + "y": 6, + "id": "d", + "max": { + "h": 100, + "w": 3 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "12": { + "h": 1, + "w": 4, + "x": 7, + "y": 6, + "id": "d", + "max": { + "h": 100, + "w": 12 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "id": "d", + "data": { + "id": "d", + "card": false, + "type": "textcomponent", + "softWrap": true, + "configuration": { + "style": { + "type": "static", + "value": "Label", + "fieldType": "select", + "onlyStatic": true, + "optionValuesKey": "textStyleOptions" + }, + "copyButton": { + "type": "static", + "value": false, + "fieldType": "boolean", + "onlyStatic": true + }, + "extraStyle": { + "type": "static", + "value": "", + "tooltip": "CSS rules like \"color: blue;\"", + "fieldType": "text" + } + }, + "componentInput": { + "eval": "New Email", + "type": "template", + "value": "Hello ${ctx.username}", + "fieldType": "template" + }, + "verticalAlignment": "center", + "horizontalAlignment": "left" + } + }, + { + "3": { + "h": 1, + "w": 1, + "x": 2, + "y": 8, + "id": "e", + "max": { + "h": 100, + "w": 3 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "12": { + "h": 1, + "w": 4, + "x": 7, + "y": 8, + "id": "e", + "max": { + "h": 100, + "w": 12 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "id": "e", + "data": { + "id": "e", + "card": false, + "type": "textcomponent", + "softWrap": true, + "configuration": { + "style": { + "type": "static", + "value": "Label", + "fieldType": "select", + "onlyStatic": true, + "optionValuesKey": "textStyleOptions" + }, + "copyButton": { + "type": "static", + "value": false, + "fieldType": "boolean", + "onlyStatic": true + }, + "extraStyle": { + "type": "static", + "value": "", + "tooltip": "CSS rules like \"color: blue;\"", + "fieldType": "text" + } + }, + "componentInput": { + "eval": "New Password", + "type": "template", + "value": "Hello ${ctx.username}", + "fieldType": "template" + }, + "verticalAlignment": "center", + "horizontalAlignment": "left" + } + }, + { + "3": { + "h": 1, + "w": 1, + "x": 0, + "y": 8, + "id": "f", + "max": { + "h": 100, + "w": 3 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "12": { + "h": 1, + "w": 4, + "x": 1, + "y": 8, + "id": "f", + "max": { + "h": 100, + "w": 12 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "id": "f", + "data": { + "id": "f", + "card": false, + "type": "textcomponent", + "softWrap": true, + "configuration": { + "style": { + "type": "static", + "value": "Label", + "fieldType": "select", + "onlyStatic": true, + "optionValuesKey": "textStyleOptions" + }, + "copyButton": { + "type": "static", + "value": false, + "fieldType": "boolean", + "onlyStatic": true + }, + "extraStyle": { + "type": "static", + "value": "", + "tooltip": "CSS rules like \"color: blue;\"", + "fieldType": "text" + } + }, + "componentInput": { + "eval": "Old Password", + "type": "template", + "value": "Hello ${ctx.username}", + "fieldType": "template" + }, + "verticalAlignment": "center", + "horizontalAlignment": "left" + } + }, + { + "3": { + "h": 1, + "w": 1, + "x": 2, + "y": 7, + "id": "g", + "max": { + "h": 100, + "w": 3 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "12": { + "h": 1, + "w": 4, + "x": 7, + "y": 7, + "id": "g", + "max": { + "h": 100, + "w": 12 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "id": "g", + "data": { + "id": "g", + "card": false, + "type": "textinputcomponent", + "softWrap": true, + "configuration": { + "placeholder": { + "type": "static", + "value": "Type...", + "fieldType": "text", + "onlyStatic": true + }, + "defaultValue": { + "type": "static", + "fieldType": "text" + } + }, + "verticalAlignment": "center" + } + }, + { + "3": { + "h": 1, + "w": 1, + "x": 2, + "y": 9, + "id": "i", + "max": { + "h": 100, + "w": 3 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "12": { + "h": 1, + "w": 4, + "x": 7, + "y": 9, + "id": "i", + "max": { + "h": 100, + "w": 12 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "id": "i", + "data": { + "id": "i", + "card": false, + "type": "passwordinputcomponent", + "softWrap": true, + "configuration": { + "placeholder": { + "type": "static", + "value": "Password", + "fieldType": "text", + "onlyStatic": true + } + }, + "verticalAlignment": "center" + } + }, + { + "3": { + "h": 1, + "w": 1, + "x": 0, + "y": 9, + "id": "j", + "max": { + "h": 100, + "w": 3 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "12": { + "h": 1, + "w": 4, + "x": 1, + "y": 9, + "id": "j", + "max": { + "h": 100, + "w": 12 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "id": "j", + "data": { + "id": "j", + "card": false, + "type": "passwordinputcomponent", + "softWrap": true, + "configuration": { + "placeholder": { + "type": "static", + "value": "Password", + "fieldType": "text", + "onlyStatic": true + } + }, + "verticalAlignment": "center" + } + }, + { + "3": { + "h": 1, + "w": 3, + "x": 0, + "y": 1, + "id": "l", + "max": { + "h": 100, + "w": 3 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "12": { + "h": 1, + "w": 12, + "x": 0, + "y": 2, + "id": "l", + "max": { + "h": 100, + "w": 12 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "id": "l", + "data": { + "id": "l", + "card": false, + "type": "textcomponent", + "softWrap": true, + "configuration": { + "style": { + "type": "static", + "value": "Subtitle", + "fieldType": "select", + "onlyStatic": true, + "optionValuesKey": "textStyleOptions" + }, + "copyButton": { + "type": "static", + "value": false, + "fieldType": "boolean", + "onlyStatic": true + }, + "extraStyle": { + "type": "static", + "value": "", + "tooltip": "CSS rules like \"color: blue;\"", + "fieldType": "text" + } + }, + "componentInput": { + "eval": "Setup a secure account", + "type": "template", + "value": "Hello ${ctx.username}", + "fieldType": "template" + }, + "verticalAlignment": "center", + "horizontalAlignment": "center" + } + }, + { + "3": { + "h": 3, + "w": 3, + "x": 0, + "y": 2, + "id": "m", + "max": { + "h": 100, + "w": 3 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "12": { + "h": 3, + "w": 10, + "x": 1, + "y": 3, + "id": "m", + "max": { + "h": 100, + "w": 12 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "id": "m", + "data": { + "id": "m", + "card": false, + "type": "textcomponent", + "softWrap": true, + "configuration": { + "style": { + "type": "static", + "value": "Body", + "fieldType": "select", + "onlyStatic": true, + "optionValuesKey": "textStyleOptions" + }, + "copyButton": { + "type": "static", + "value": false, + "fieldType": "boolean", + "onlyStatic": true + }, + "extraStyle": { + "type": "static", + "value": "", + "tooltip": "CSS rules like \"color: blue;\"", + "fieldType": "text" + } + }, + "componentInput": { + "eval": "The below button will automatically delete the old account (likely the one you''re logged into now) and creates the new account.\nYou''ll have to log in again.", + "type": "template", + "value": "Hello ${ctx.username}", + "fieldType": "template" + }, + "verticalAlignment": "center", + "horizontalAlignment": "center" + } + }, + { + "3": { + "h": 1, + "w": 2, + "x": 0, + "y": 17, + "id": "n", + "max": { + "h": 100, + "w": 3 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "12": { + "h": 1, + "w": 4, + "x": 2, + "y": 17, + "id": "n", + "max": { + "h": 100, + "w": 12 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "id": "n", + "data": { + "id": "n", + "card": false, + "type": "checkboxcomponent", + "softWrap": true, + "configuration": { + "label": { + "type": "static", + "value": "Enable Hub Sync", + "fieldType": "text" + }, + "defaultValue": { + "type": "static", + "value": true, + "fieldType": "boolean" + } + }, + "verticalAlignment": "center", + "horizontalAlignment": "center" + } + }, + { + "3": { + "h": 3, + "w": 3, + "x": 0, + "y": 14, + "id": "o", + "max": { + "h": 100, + "w": 3 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "12": { + "h": 3, + "w": 8, + "x": 2, + "y": 14, + "id": "o", + "max": { + "h": 100, + "w": 12 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "id": "o", + "data": { + "id": "o", + "card": false, + "type": "textcomponent", + "softWrap": true, + "configuration": { + "style": { + "type": "static", + "value": "Body", + "fieldType": "select", + "onlyStatic": true, + "optionValuesKey": "textStyleOptions" + }, + "copyButton": { + "type": "static", + "value": false, + "fieldType": "boolean", + "onlyStatic": true + }, + "extraStyle": { + "type": "static", + "value": "", + "tooltip": "CSS rules like \"color: blue;\"", + "fieldType": "text" + } + }, + "componentInput": { + "eval": "We recommend enabling hub sync below. This will create a schedule in the admin workspace on behalf of the new user once you press the button. This schedule will automatically syncronize resource types from the hub to your local instance.", + "type": "template", + "value": "Hello ${ctx.username}", + "fieldType": "template" + }, + "verticalAlignment": "center", + "horizontalAlignment": "center" + } + }, + { + "3": { + "h": 1, + "w": 1, + "x": 2, + "y": 17, + "id": "p", + "max": { + "h": 100, + "w": 3 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "12": { + "h": 1, + "w": 4, + "x": 6, + "y": 17, + "id": "p", + "max": { + "h": 100, + "w": 12 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "id": "p", + "data": { + "id": "p", + "card": false, + "type": "textinputcomponent", + "softWrap": true, + "configuration": { + "placeholder": { + "type": "static", + "value": "Type...", + "fieldType": "text", + "onlyStatic": true + }, + "defaultValue": { + "type": "static", + "value": "0 0 0 * * *", + "fieldType": "text" + } + }, + "verticalAlignment": "center" + } + }, + { + "3": { + "h": 1, + "w": 1, + "x": 0, + "y": 11, + "id": "q", + "max": { + "h": 100, + "w": 3 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "12": { + "h": 1, + "w": 4, + "x": 1, + "y": 11, + "id": "q", + "max": { + "h": 100, + "w": 12 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "id": "q", + "data": { + "id": "q", + "card": false, + "type": "textinputcomponent", + "softWrap": true, + "configuration": { + "placeholder": { + "type": "static", + "value": "Type...", + "fieldType": "text", + "onlyStatic": true + }, + "defaultValue": { + "type": "connected", + "fieldType": "text", + "connection": { + "path": "username", + "componentId": "ctx" + } + } + }, + "verticalAlignment": "center" + } + }, + { + "3": { + "h": 1, + "w": 1, + "x": 2, + "y": 11, + "id": "r", + "max": { + "h": 100, + "w": 3 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "12": { + "h": 1, + "w": 4, + "x": 7, + "y": 11, + "id": "r", + "max": { + "h": 100, + "w": 12 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "id": "r", + "data": { + "id": "r", + "card": false, + "type": "textinputcomponent", + "softWrap": true, + "configuration": { + "placeholder": { + "type": "static", + "value": "Type...", + "fieldType": "text", + "onlyStatic": true + }, + "defaultValue": { + "type": "static", + "fieldType": "text" + } + }, + "verticalAlignment": "center" + } + }, + { + "3": { + "h": 1, + "w": 1, + "x": 0, + "y": 10, + "id": "s", + "max": { + "h": 100, + "w": 3 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "12": { + "h": 1, + "w": 4, + "x": 1, + "y": 10, + "id": "s", + "max": { + "h": 100, + "w": 12 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "id": "s", + "data": { + "id": "s", + "card": false, + "type": "textcomponent", + "softWrap": true, + "configuration": { + "style": { + "type": "static", + "value": "Label", + "fieldType": "select", + "onlyStatic": true, + "optionValuesKey": "textStyleOptions" + }, + "copyButton": { + "type": "static", + "value": false, + "fieldType": "boolean", + "onlyStatic": true + }, + "extraStyle": { + "type": "static", + "value": "", + "tooltip": "CSS rules like \"color: blue;\"", + "fieldType": "text" + } + }, + "componentInput": { + "eval": "Displayed Name", + "type": "template", + "value": "Hello ${ctx.username}", + "fieldType": "template" + }, + "verticalAlignment": "center", + "horizontalAlignment": "left" + } + }, + { + "3": { + "h": 1, + "w": 1, + "x": 2, + "y": 10, + "id": "t", + "max": { + "h": 100, + "w": 3 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "12": { + "h": 1, + "w": 4, + "x": 7, + "y": 10, + "id": "t", + "max": { + "h": 100, + "w": 12 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "id": "t", + "data": { + "id": "t", + "card": false, + "type": "textcomponent", + "softWrap": true, + "configuration": { + "style": { + "type": "static", + "value": "Label", + "fieldType": "select", + "onlyStatic": true, + "optionValuesKey": "textStyleOptions" + }, + "copyButton": { + "type": "static", + "value": false, + "fieldType": "boolean", + "onlyStatic": true + }, + "extraStyle": { + "type": "static", + "value": "", + "tooltip": "CSS rules like \"color: blue;\"", + "fieldType": "text" + } + }, + "componentInput": { + "eval": "Displayed Company Name", + "type": "template", + "value": "Hello ${ctx.username}", + "fieldType": "template" + }, + "verticalAlignment": "center", + "horizontalAlignment": "left" + } + }, + { + "3": { + "h": 3, + "w": 3, + "x": 0, + "y": 19, + "id": "u", + "max": { + "h": 100, + "w": 3 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "12": { + "h": 2, + "w": 8, + "x": 2, + "y": 19, + "id": "u", + "max": { + "h": 100, + "w": 12 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "id": "u", + "data": { + "id": "u", + "card": false, + "type": "buttoncomponent", + "softWrap": true, + "configuration": { + "size": { + "type": "static", + "value": "lg", + "fieldType": "select", + "onlyStatic": true, + "optionValuesKey": "buttonSizeOptions" + }, + "color": { + "type": "static", + "value": "red", + "fieldType": "select", + "onlyStatic": true, + "optionValuesKey": "buttonColorOptions" + }, + "label": { + "type": "static", + "value": "Change account and set hub sync - re-login necessary", + "fieldType": "text" + }, + "disabled": { + "expr": "false", + "type": "eval", + "fieldType": "boolean" + }, + "fillContainer": { + "type": "static", + "value": true, + "fieldType": "boolean", + "onlyStatic": true + } + }, + "componentInput": { + "type": "runnable", + "fields": { + "cron_str": { + "type": "connected", + "value": null, + "fieldType": "string", + "connection": { + "path": "result", + "componentId": "p" + } + }, + "newEmail": { + "type": "connected", + "value": null, + "format": "", + "fieldType": "string", + "connection": { + "path": "result", + "componentId": "g" + } + }, + "oldEmail": { + "type": "connected", + "value": null, + "format": "", + "fieldType": "string", + "connection": { + "path": "result", + "componentId": "b" + } + }, + "displayName": { + "type": "connected", + "value": null, + "format": "", + "fieldType": "string", + "connection": { + "path": "result", + "componentId": "q" + } + }, + "newPassword": { + "type": "connected", + "value": null, + "format": "", + "fieldType": "string", + "connection": { + "path": "result", + "componentId": "i" + } + }, + "oldPassword": { + "type": "connected", + "value": null, + "format": "", + "fieldType": "string", + "connection": { + "path": "result", + "componentId": "j" + } + }, + "displayCompany": { + "type": "connected", + "value": null, + "format": "", + "fieldType": "string", + "connection": { + "path": "result", + "componentId": "r" + } + }, + "enable_hub_sync": { + "type": "connected", + "value": null, + "format": "", + "fieldType": "boolean", + "connection": { + "path": "result", + "componentId": "n" + } + } + }, + "runnable": { + "name": "Change Account", + "type": "runnableByName", + "inlineScript": { + "path": "/inline-script/Inline Script 0", + "schema": { + "type": "object", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "required": [ + "oldEmail", + "oldPassword", + "newEmail", + "newPassword", + "enable_hub_sync", + "cron_str" + ], +"properties": { "cron_str": { "type": "string", +"default": null, +"description": "" }, +"newEmail": { "type": "string", +"format": "", +"default": null, +"description": "" }, +"oldEmail": { "type": "string", +"format": "", +"default": null, +"description": "" }, +"displayName": { "type": "string", +"format": "", +"default": null, +"description": "" }, +"newPassword": { "type": "string", +"format": "", +"default": null, +"description": "" }, +"oldPassword": { "type": "string", +"format": "", +"default": null, +"description": "" }, +"displayCompany": { "type": "string", +"format": "", +"default": null, +"description": "" }, +"enable_hub_sync": { "type": "boolean", +"format": "", +"default": null, +"description": "" } } }, +"content": "import * as wmill from \"https://deno.land/x/windmill@v1.60.0/mod.ts\";\n\nexport async function main(\n oldEmail: string,\n oldPassword: string,\n newEmail: string,\n newPassword: string,\n enable_hub_sync: boolean,\n cron_str: string,\n displayName?: string,\n displayCompany?: string,\n) {\n const old_token = await wmill.UserService.login({\n requestBody: {\n email: oldEmail,\n password: oldPassword,\n },\n });\n\n wmill.setClient(old_token, Deno.env.get(\"WM_BASE_URL\")!);\n const whoami = await wmill.UserService.globalWhoami();\n if (!whoami.super_admin) {\n console.log(\"Old User has to be superadmin!\");\n return;\n }\n\n await wmill.UserService.createUserGlobally({\n requestBody: {\n email: newEmail,\n password: newPassword,\n super_admin: true,\n name: displayName,\n company: displayCompany,\n },\n });\n\n const new_token = await wmill.UserService.login({\n requestBody: {\n email: newEmail,\n password: newPassword,\n },\n });\n wmill.setClient(new_token, Deno.env.get(\"WM_BASE_URL\")!);\n\n await wmill.ScheduleService.createSchedule({\n workspace: \"admins\",\n requestBody: {\n path: \"g/all/hub_sync\",\n schedule: cron_str,\n script_path: \"u/admin/hub_sync\",\n is_flow: false,\n args: {},\n enabled: true,\n offset: 0,\n },\n });\n\n await wmill.UserService.globalUserDelete({ email: oldEmail });\n}\n", +"language": "deno" } }, +"fieldType": "any" }, +"verticalAlignment": "center", +"horizontalAlignment": "center" } }, +{ "3": { "h": 1, +"w": 3, +"x": 0, +"y": 13, +"id": "v", +"max": { "h": 100, +"w": 3 }, +"min": { "h": 1, +"w": 1 }, +"fixed": true, +"draggable": true, +"resizable": true, +"customDragger": false, +"customResizer": false }, +"12": { "h": 1, +"w": 12, +"x": 0, +"y": 13, +"id": "v", +"max": { "h": 100, +"w": 12 }, +"min": { "h": 1, +"w": 1 }, +"fixed": true, +"draggable": true, +"resizable": true, +"customDragger": false, +"customResizer": false }, +"id": "v", +"data": { "id": "v", +"card": false, +"type": "textcomponent", +"softWrap": false, +"configuration": { "style": { "type": "static", +"value": "Subtitle", +"fieldType": "select", +"onlyStatic": true, +"optionValuesKey": "textStyleOptions" }, +"copyButton": { "type": "static", +"value": false, +"fieldType": "boolean", +"onlyStatic": true }, +"extraStyle": { "type": "static", +"value": "", +"tooltip": "CSS rules like \"color: blue;\"", +"fieldType": "text" } }, +"componentInput": { "eval": "Setup Hub Sync", +"type": "template", +"value": "Hello ${ctx.username}", +"fieldType": "template" }, +"verticalAlignment": "center", +"horizontalAlignment": "center" } } ], +"fullscreen": false, +"hiddenInlineScripts": [], +"unusedInlineScripts": [] }' + ) \ No newline at end of file diff --git a/backend/migrations/20230213145545_change_admin_app.down.sql b/backend/migrations/20230213145545_change_admin_app.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20230213145545_change_admin_app.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20230213145545_change_admin_app.up.sql b/backend/migrations/20230213145545_change_admin_app.up.sql new file mode 100644 index 0000000000000..31ff31a6ffff4 --- /dev/null +++ b/backend/migrations/20230213145545_change_admin_app.up.sql @@ -0,0 +1,1162 @@ +-- Add up migration script here + +with _insert as +( +INSERT INTO + app_version(app_id, created_by, created_at, value) +VALUES + ( + ( + SELECT + id + FROM + app + WHERE + workspace_id = 'admins' + AND path = 'g/all/setup_app' + ), + 'admin@windmill.dev', + '2023-01-01 00:00:00.000000 +00:00', + '{ + "grid": [ + { + "3": { + "h": 1, + "w": 3, + "x": 0, + "y": 0, + "id": "a", + "max": { + "h": 100, + "w": 3 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "12": { + "h": 2, + "w": 12, + "x": 0, + "y": 0, + "id": "a", + "max": { + "h": 100, + "w": 12 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "id": "a", + "data": { + "id": "a", + "card": false, + "type": "textcomponent", + "softWrap": true, + "configuration": { + "style": { + "type": "static", + "value": "Title", + "fieldType": "select", + "onlyStatic": true, + "optionValuesKey": "textStyleOptions" + }, + "copyButton": { + "type": "static", + "value": false, + "fieldType": "boolean", + "onlyStatic": true + }, + "extraStyle": { + "type": "static", + "value": "", + "tooltip": "CSS rules like \"color: blue;\"", + "fieldType": "text" + } + }, + "componentInput": { + "eval": "Setup your Windmill instance", + "type": "template", + "value": "Hello ${ctx.username}", + "fieldType": "template" + }, + "verticalAlignment": "center", + "horizontalAlignment": "center" + } + }, + { + "3": { + "h": 1, + "w": 1, + "x": 0, + "y": 6, + "id": "c", + "max": { + "h": 100, + "w": 3 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "12": { + "h": 1, + "w": 4, + "x": 1, + "y": 6, + "id": "c", + "max": { + "h": 100, + "w": 12 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "id": "c", + "data": { + "id": "c", + "card": false, + "type": "textcomponent", + "softWrap": true, + "configuration": { + "style": { + "type": "static", + "value": "Label", + "fieldType": "select", + "onlyStatic": true, + "optionValuesKey": "textStyleOptions" + }, + "copyButton": { + "type": "static", + "value": false, + "fieldType": "boolean", + "onlyStatic": true + }, + "extraStyle": { + "type": "static", + "value": "", + "tooltip": "CSS rules like \"color: blue;\"", + "fieldType": "text" + } + }, + "componentInput": { + "eval": "Old Email", + "type": "template", + "value": "Hello ${ctx.username}", + "fieldType": "template" + }, + "verticalAlignment": "center", + "horizontalAlignment": "left" + } + }, + { + "3": { + "h": 1, + "w": 1, + "x": 2, + "y": 6, + "id": "d", + "max": { + "h": 100, + "w": 3 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "12": { + "h": 1, + "w": 4, + "x": 7, + "y": 6, + "id": "d", + "max": { + "h": 100, + "w": 12 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "id": "d", + "data": { + "id": "d", + "card": false, + "type": "textcomponent", + "softWrap": true, + "configuration": { + "style": { + "type": "static", + "value": "Label", + "fieldType": "select", + "onlyStatic": true, + "optionValuesKey": "textStyleOptions" + }, + "copyButton": { + "type": "static", + "value": false, + "fieldType": "boolean", + "onlyStatic": true + }, + "extraStyle": { + "type": "static", + "value": "", + "tooltip": "CSS rules like \"color: blue;\"", + "fieldType": "text" + } + }, + "componentInput": { + "eval": "New Email", + "type": "template", + "value": "Hello ${ctx.username}", + "fieldType": "template" + }, + "verticalAlignment": "center", + "horizontalAlignment": "left" + } + }, + { + "3": { + "h": 1, + "w": 1, + "x": 2, + "y": 8, + "id": "e", + "max": { + "h": 100, + "w": 3 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "12": { + "h": 1, + "w": 4, + "x": 7, + "y": 8, + "id": "e", + "max": { + "h": 100, + "w": 12 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "id": "e", + "data": { + "id": "e", + "card": false, + "type": "textcomponent", + "softWrap": true, + "configuration": { + "style": { + "type": "static", + "value": "Label", + "fieldType": "select", + "onlyStatic": true, + "optionValuesKey": "textStyleOptions" + }, + "copyButton": { + "type": "static", + "value": false, + "fieldType": "boolean", + "onlyStatic": true + }, + "extraStyle": { + "type": "static", + "value": "", + "tooltip": "CSS rules like \"color: blue;\"", + "fieldType": "text" + } + }, + "componentInput": { + "eval": "New Password", + "type": "template", + "value": "Hello ${ctx.username}", + "fieldType": "template" + }, + "verticalAlignment": "center", + "horizontalAlignment": "left" + } + }, + { + "3": { + "h": 1, + "w": 1, + "x": 2, + "y": 7, + "id": "g", + "max": { + "h": 100, + "w": 3 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "12": { + "h": 1, + "w": 4, + "x": 7, + "y": 7, + "id": "g", + "max": { + "h": 100, + "w": 12 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "id": "g", + "data": { + "id": "g", + "card": false, + "type": "textinputcomponent", + "softWrap": true, + "configuration": { + "placeholder": { + "type": "static", + "value": "Type...", + "fieldType": "text", + "onlyStatic": true + }, + "defaultValue": { + "type": "static", + "fieldType": "text" + } + }, + "verticalAlignment": "center" + } + }, + { + "3": { + "h": 1, + "w": 1, + "x": 2, + "y": 9, + "id": "i", + "max": { + "h": 100, + "w": 3 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "12": { + "h": 1, + "w": 4, + "x": 7, + "y": 9, + "id": "i", + "max": { + "h": 100, + "w": 12 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "id": "i", + "data": { + "id": "i", + "card": false, + "type": "passwordinputcomponent", + "softWrap": true, + "configuration": { + "placeholder": { + "type": "static", + "value": "Password", + "fieldType": "text", + "onlyStatic": true + } + }, + "verticalAlignment": "center" + } + }, + { + "3": { + "h": 1, + "w": 3, + "x": 0, + "y": 1, + "id": "l", + "max": { + "h": 100, + "w": 3 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "12": { + "h": 1, + "w": 12, + "x": 0, + "y": 2, + "id": "l", + "max": { + "h": 100, + "w": 12 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "id": "l", + "data": { + "id": "l", + "card": false, + "type": "textcomponent", + "softWrap": true, + "configuration": { + "style": { + "type": "static", + "value": "Subtitle", + "fieldType": "select", + "onlyStatic": true, + "optionValuesKey": "textStyleOptions" + }, + "copyButton": { + "type": "static", + "value": false, + "fieldType": "boolean", + "onlyStatic": true + }, + "extraStyle": { + "type": "static", + "value": "", + "tooltip": "CSS rules like \"color: blue;\"", + "fieldType": "text" + } + }, + "componentInput": { + "eval": "Setup a secure account", + "type": "template", + "value": "Hello ${ctx.username}", + "fieldType": "template" + }, + "verticalAlignment": "center", + "horizontalAlignment": "center" + } + }, + { + "3": { + "h": 3, + "w": 3, + "x": 0, + "y": 2, + "id": "m", + "max": { + "h": 100, + "w": 3 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "12": { + "h": 3, + "w": 10, + "x": 1, + "y": 3, + "id": "m", + "max": { + "h": 100, + "w": 12 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "id": "m", + "data": { + "id": "m", + "card": false, + "type": "textcomponent", + "softWrap": true, + "configuration": { + "style": { + "type": "static", + "value": "Body", + "fieldType": "select", + "onlyStatic": true, + "optionValuesKey": "textStyleOptions" + }, + "copyButton": { + "type": "static", + "value": false, + "fieldType": "boolean", + "onlyStatic": true + }, + "extraStyle": { + "type": "static", + "value": "", + "tooltip": "CSS rules like \"color: blue;\"", + "fieldType": "text" + } + }, + "componentInput": { + "eval": "The below button will automatically delete the old account (likely the one you''re logged into now) and creates the new account.\nYou''ll have to log in again.", + "type": "template", + "value": "Hello ${ctx.username}", + "fieldType": "template" + }, + "verticalAlignment": "center", + "horizontalAlignment": "center" + } + }, + { + "3": { + "h": 1, + "w": 2, + "x": 0, + "y": 17, + "id": "n", + "max": { + "h": 100, + "w": 3 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "12": { + "h": 1, + "w": 4, + "x": 2, + "y": 17, + "id": "n", + "max": { + "h": 100, + "w": 12 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "id": "n", + "data": { + "id": "n", + "card": false, + "type": "checkboxcomponent", + "softWrap": true, + "configuration": { + "label": { + "type": "static", + "value": "Enable Hub Sync", + "fieldType": "text" + }, + "defaultValue": { + "type": "static", + "value": true, + "fieldType": "boolean" + } + }, + "verticalAlignment": "center", + "horizontalAlignment": "center" + } + }, + { + "3": { + "h": 3, + "w": 3, + "x": 0, + "y": 14, + "id": "o", + "max": { + "h": 100, + "w": 3 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "12": { + "h": 3, + "w": 8, + "x": 2, + "y": 14, + "id": "o", + "max": { + "h": 100, + "w": 12 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "id": "o", + "data": { + "id": "o", + "card": false, + "type": "textcomponent", + "softWrap": true, + "configuration": { + "style": { + "type": "static", + "value": "Body", + "fieldType": "select", + "onlyStatic": true, + "optionValuesKey": "textStyleOptions" + }, + "copyButton": { + "type": "static", + "value": false, + "fieldType": "boolean", + "onlyStatic": true + }, + "extraStyle": { + "type": "static", + "value": "", + "tooltip": "CSS rules like \"color: blue;\"", + "fieldType": "text" + } + }, + "componentInput": { + "eval": "We recommend enabling hub sync below. This will create a schedule in the admin workspace on behalf of the new user once you press the button. This schedule will automatically syncronize resource types from the hub to your local instance.", + "type": "template", + "value": "Hello ${ctx.username}", + "fieldType": "template" + }, + "verticalAlignment": "center", + "horizontalAlignment": "center" + } + }, + { + "3": { + "h": 1, + "w": 1, + "x": 2, + "y": 17, + "id": "p", + "max": { + "h": 100, + "w": 3 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "12": { + "h": 1, + "w": 4, + "x": 6, + "y": 17, + "id": "p", + "max": { + "h": 100, + "w": 12 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "id": "p", + "data": { + "id": "p", + "card": false, + "type": "textinputcomponent", + "softWrap": true, + "configuration": { + "placeholder": { + "type": "static", + "value": "Type...", + "fieldType": "text", + "onlyStatic": true + }, + "defaultValue": { + "type": "static", + "value": "0 0 0 * * *", + "fieldType": "text" + } + }, + "verticalAlignment": "center" + } + }, + { + "3": { + "h": 3, + "w": 3, + "x": 0, + "y": 19, + "id": "u", + "max": { + "h": 100, + "w": 3 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "12": { + "h": 2, + "w": 8, + "x": 2, + "y": 19, + "id": "u", + "max": { + "h": 100, + "w": 12 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "id": "u", + "data": { + "id": "u", + "card": false, + "type": "buttoncomponent", + "softWrap": true, + "configuration": { + "size": { + "type": "static", + "value": "lg", + "fieldType": "select", + "onlyStatic": true, + "optionValuesKey": "buttonSizeOptions" + }, + "color": { + "type": "static", + "value": "red", + "fieldType": "select", + "onlyStatic": true, + "optionValuesKey": "buttonColorOptions" + }, + "label": { + "type": "static", + "value": "Change account and set hub sync - re-login necessary", + "fieldType": "text" + }, + "disabled": { + "expr": "false", + "type": "eval", + "fieldType": "boolean" + }, + "fillContainer": { + "type": "static", + "value": true, + "fieldType": "boolean", + "onlyStatic": true + } + }, + "componentInput": { + "type": "runnable", + "fields": { + "oldEmail": { + "type": "connected", + "value": null, + "fieldType": "string", + "connection": { + "componentId": "ctx", + "path": "email" + } + }, + "newEmail": { + "type": "connected", + "value": null, + "format": "", + "fieldType": "string", + "connection": { + "path": "result", + "componentId": "g" + } + }, + "newPassword": { + "type": "connected", + "value": null, + "format": "", + "fieldType": "string", + "connection": { + "path": "result", + "componentId": "i" + } + }, + "enable_hub_sync": { + "type": "connected", + "value": null, + "format": "", + "fieldType": "boolean", + "connection": { + "path": "result", + "componentId": "n" + } + }, + "cron_str": { + "type": "connected", + "value": null, + "fieldType": "string", + "connection": { + "path": "result", + "componentId": "p" + } + } + }, + "runnable": { + "name": "Change Account", + "type": "runnableByName", + "inlineScript": { + "path": "/inline-script/Inline Script 0", + "schema": { + "type": "object", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "required": [ + "oldEmail", + "newEmail", + "newPassword", + "enable_hub_sync", + "cron_str" + ], + "properties": { + "oldEmail": { + "description": "", + "type": "string", + "default": null + }, + "newEmail": { + "type": "string", + "format": "", + "default": null, + "description": "" + }, + "newPassword": { + "type": "string", + "format": "", + "default": null, + "description": "" + }, + "enable_hub_sync": { + "type": "boolean", + "format": "", + "default": null, + "description": "" + }, + "cron_str": { + "type": "string", + "default": null, + "description": "" + } + } + }, + "content": "import * as wmill from \"https://deno.land/x/windmill@v1.60.0/mod.ts\";\n\nexport async function main(\n oldEmail: string,\n newEmail: string,\n newPassword: string,\n enable_hub_sync: boolean,\n cron_str: string,\n) {\n\n await wmill.UserService.createUserGlobally({\n requestBody: {\n email: newEmail,\n password: newPassword,\n super_admin: true,\n },\n });\n\n const new_token = await wmill.UserService.login({\n requestBody: {\n email: newEmail,\n password: newPassword,\n },\n });\n\n wmill.setClient(new_token, Deno.env.get(\"BASE_INTERNAL_URL\")!);\n try {\n await wmill.ScheduleService.createSchedule({\n workspace: \"admins\",\n requestBody: {\n path: \"g/all/hub_sync\",\n schedule: cron_str,\n script_path: \"u/admin/hub_sync\",\n is_flow: false,\n args: {},\n enabled: true,\n offset: 0,\n },\n });\n } catch {\n console.log(''Schedule already exists'')\n }\n\n await wmill.UserService.globalUserDelete({ email: oldEmail });\n}\n", + "language": "deno" + } + }, + "fieldType": "any" + }, + "verticalAlignment": "center", + "horizontalAlignment": "center" + } + }, + { + "3": { + "h": 1, + "w": 3, + "x": 0, + "y": 13, + "id": "v", + "max": { + "h": 100, + "w": 3 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "12": { + "h": 1, + "w": 12, + "x": 0, + "y": 13, + "id": "v", + "max": { + "h": 100, + "w": 12 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "id": "v", + "data": { + "id": "v", + "card": false, + "type": "textcomponent", + "softWrap": false, + "configuration": { + "style": { + "type": "static", + "value": "Subtitle", + "fieldType": "select", + "onlyStatic": true, + "optionValuesKey": "textStyleOptions" + }, + "copyButton": { + "type": "static", + "value": false, + "fieldType": "boolean", + "onlyStatic": true + }, + "extraStyle": { + "type": "static", + "value": "", + "tooltip": "CSS rules like \"color: blue;\"", + "fieldType": "text" + } + }, + "componentInput": { + "eval": "Setup Hub Sync", + "type": "template", + "value": "Hello ${ctx.username}", + "fieldType": "template" + }, + "verticalAlignment": "center", + "horizontalAlignment": "center" + } + }, + { + "3": { + "fixed": false, + "resizable": true, + "draggable": true, + "customDragger": false, + "customResizer": false, + "x": 0, + "y": 5, + "min": { + "w": 1, + "h": 1 + }, + "max": { + "w": 3, + "h": 100 + }, + "w": 1, + "h": 1 + }, + "12": { + "fixed": false, + "resizable": true, + "draggable": true, + "customDragger": false, + "customResizer": false, + "x": 1, + "y": 7, + "min": { + "w": 1, + "h": 1 + }, + "max": { + "w": 12, + "h": 100 + }, + "w": 4, + "h": 1, + "id": "w" + }, + "data": { + "softWrap": false, + "horizontalAlignment": "left", + "verticalAlignment": "center", + "id": "w", + "type": "textcomponent", + "componentInput": { + "type": "template", + "fieldType": "template", + "value": "Hello ${ctx.username}", + "eval": "${ctx.username}" + }, + "configuration": { + "style": { + "fieldType": "select", + "type": "static", + "onlyStatic": true, + "optionValuesKey": "textStyleOptions", + "value": "Body" + }, + "extraStyle": { + "type": "static", + "fieldType": "text", + "value": "", + "tooltip": "CSS rules like \"color: blue;\"" + }, + "copyButton": { + "type": "static", + "value": false, + "fieldType": "boolean", + "onlyStatic": true + } + }, + "card": false + }, + "id": "w" + } + ], + "fullscreen": false, + "hiddenInlineScripts": [], + "unusedInlineScripts": [] +}') RETURNING id) +UPDATE app SET versions = ARRAY((select id from _insert)), policy = '{ "execution_mode": "viewer", "triggerables": {} }' + WHERE workspace_id = 'admins' AND path = 'g/all/setup_app'; diff --git a/backend/migrations/20230214022802_goto_logout_setup.down.sql b/backend/migrations/20230214022802_goto_logout_setup.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20230214022802_goto_logout_setup.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20230214022802_goto_logout_setup.up.sql b/backend/migrations/20230214022802_goto_logout_setup.up.sql new file mode 100644 index 0000000000000..2bec8ff8e0c97 --- /dev/null +++ b/backend/migrations/20230214022802_goto_logout_setup.up.sql @@ -0,0 +1,1169 @@ +-- Add up migration script here +-- Add up migration script here + +with _insert as +( +INSERT INTO + app_version(app_id, created_by, created_at, value) +VALUES + ( + ( + SELECT + id + FROM + app + WHERE + workspace_id = 'admins' + AND path = 'g/all/setup_app' + ), + 'admin@windmill.dev', + '2023-01-01 00:00:00.000000 +00:00', + '{ + "grid": [ + { + "3": { + "h": 1, + "w": 3, + "x": 0, + "y": 0, + "id": "a", + "max": { + "h": 100, + "w": 3 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "12": { + "h": 2, + "w": 12, + "x": 0, + "y": 0, + "id": "a", + "max": { + "h": 100, + "w": 12 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "id": "a", + "data": { + "id": "a", + "card": false, + "type": "textcomponent", + "softWrap": true, + "configuration": { + "style": { + "type": "static", + "value": "Title", + "fieldType": "select", + "onlyStatic": true, + "optionValuesKey": "textStyleOptions" + }, + "copyButton": { + "type": "static", + "value": false, + "fieldType": "boolean", + "onlyStatic": true + }, + "extraStyle": { + "type": "static", + "value": "", + "tooltip": "CSS rules like \"color: blue;\"", + "fieldType": "text" + } + }, + "componentInput": { + "eval": "Setup your Windmill instance", + "type": "template", + "value": "Hello ${ctx.username}", + "fieldType": "template" + }, + "verticalAlignment": "center", + "horizontalAlignment": "center" + } + }, + { + "3": { + "h": 1, + "w": 1, + "x": 0, + "y": 6, + "id": "c", + "max": { + "h": 100, + "w": 3 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "12": { + "h": 1, + "w": 4, + "x": 1, + "y": 6, + "id": "c", + "max": { + "h": 100, + "w": 12 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "id": "c", + "data": { + "id": "c", + "card": false, + "type": "textcomponent", + "softWrap": true, + "configuration": { + "style": { + "type": "static", + "value": "Label", + "fieldType": "select", + "onlyStatic": true, + "optionValuesKey": "textStyleOptions" + }, + "copyButton": { + "type": "static", + "value": false, + "fieldType": "boolean", + "onlyStatic": true + }, + "extraStyle": { + "type": "static", + "value": "", + "tooltip": "CSS rules like \"color: blue;\"", + "fieldType": "text" + } + }, + "componentInput": { + "eval": "Old Email", + "type": "template", + "value": "Hello ${ctx.username}", + "fieldType": "template" + }, + "verticalAlignment": "center", + "horizontalAlignment": "left" + } + }, + { + "3": { + "h": 1, + "w": 1, + "x": 2, + "y": 6, + "id": "d", + "max": { + "h": 100, + "w": 3 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "12": { + "h": 1, + "w": 4, + "x": 7, + "y": 6, + "id": "d", + "max": { + "h": 100, + "w": 12 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "id": "d", + "data": { + "id": "d", + "card": false, + "type": "textcomponent", + "softWrap": true, + "configuration": { + "style": { + "type": "static", + "value": "Label", + "fieldType": "select", + "onlyStatic": true, + "optionValuesKey": "textStyleOptions" + }, + "copyButton": { + "type": "static", + "value": false, + "fieldType": "boolean", + "onlyStatic": true + }, + "extraStyle": { + "type": "static", + "value": "", + "tooltip": "CSS rules like \"color: blue;\"", + "fieldType": "text" + } + }, + "componentInput": { + "eval": "New Email", + "type": "template", + "value": "Hello ${ctx.username}", + "fieldType": "template" + }, + "verticalAlignment": "center", + "horizontalAlignment": "left" + } + }, + { + "3": { + "h": 1, + "w": 1, + "x": 2, + "y": 8, + "id": "e", + "max": { + "h": 100, + "w": 3 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "12": { + "h": 1, + "w": 4, + "x": 7, + "y": 8, + "id": "e", + "max": { + "h": 100, + "w": 12 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "id": "e", + "data": { + "id": "e", + "card": false, + "type": "textcomponent", + "softWrap": true, + "configuration": { + "style": { + "type": "static", + "value": "Label", + "fieldType": "select", + "onlyStatic": true, + "optionValuesKey": "textStyleOptions" + }, + "copyButton": { + "type": "static", + "value": false, + "fieldType": "boolean", + "onlyStatic": true + }, + "extraStyle": { + "type": "static", + "value": "", + "tooltip": "CSS rules like \"color: blue;\"", + "fieldType": "text" + } + }, + "componentInput": { + "eval": "New Password", + "type": "template", + "value": "Hello ${ctx.username}", + "fieldType": "template" + }, + "verticalAlignment": "center", + "horizontalAlignment": "left" + } + }, + { + "3": { + "h": 1, + "w": 1, + "x": 2, + "y": 7, + "id": "g", + "max": { + "h": 100, + "w": 3 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "12": { + "h": 1, + "w": 4, + "x": 7, + "y": 7, + "id": "g", + "max": { + "h": 100, + "w": 12 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "id": "g", + "data": { + "id": "g", + "card": false, + "type": "textinputcomponent", + "softWrap": true, + "configuration": { + "placeholder": { + "type": "static", + "value": "Type...", + "fieldType": "text", + "onlyStatic": true + }, + "defaultValue": { + "type": "static", + "fieldType": "text" + } + }, + "verticalAlignment": "center" + } + }, + { + "3": { + "h": 1, + "w": 1, + "x": 2, + "y": 9, + "id": "i", + "max": { + "h": 100, + "w": 3 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "12": { + "h": 1, + "w": 4, + "x": 7, + "y": 9, + "id": "i", + "max": { + "h": 100, + "w": 12 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "id": "i", + "data": { + "id": "i", + "card": false, + "type": "passwordinputcomponent", + "softWrap": true, + "configuration": { + "placeholder": { + "type": "static", + "value": "Password", + "fieldType": "text", + "onlyStatic": true + } + }, + "verticalAlignment": "center" + } + }, + { + "3": { + "h": 1, + "w": 3, + "x": 0, + "y": 1, + "id": "l", + "max": { + "h": 100, + "w": 3 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "12": { + "h": 1, + "w": 12, + "x": 0, + "y": 2, + "id": "l", + "max": { + "h": 100, + "w": 12 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "id": "l", + "data": { + "id": "l", + "card": false, + "type": "textcomponent", + "softWrap": true, + "configuration": { + "style": { + "type": "static", + "value": "Subtitle", + "fieldType": "select", + "onlyStatic": true, + "optionValuesKey": "textStyleOptions" + }, + "copyButton": { + "type": "static", + "value": false, + "fieldType": "boolean", + "onlyStatic": true + }, + "extraStyle": { + "type": "static", + "value": "", + "tooltip": "CSS rules like \"color: blue;\"", + "fieldType": "text" + } + }, + "componentInput": { + "eval": "Setup a secure account", + "type": "template", + "value": "Hello ${ctx.username}", + "fieldType": "template" + }, + "verticalAlignment": "center", + "horizontalAlignment": "center" + } + }, + { + "3": { + "h": 3, + "w": 3, + "x": 0, + "y": 2, + "id": "m", + "max": { + "h": 100, + "w": 3 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "12": { + "h": 3, + "w": 10, + "x": 1, + "y": 3, + "id": "m", + "max": { + "h": 100, + "w": 12 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "id": "m", + "data": { + "id": "m", + "card": false, + "type": "textcomponent", + "softWrap": true, + "configuration": { + "style": { + "type": "static", + "value": "Body", + "fieldType": "select", + "onlyStatic": true, + "optionValuesKey": "textStyleOptions" + }, + "copyButton": { + "type": "static", + "value": false, + "fieldType": "boolean", + "onlyStatic": true + }, + "extraStyle": { + "type": "static", + "value": "", + "tooltip": "CSS rules like \"color: blue;\"", + "fieldType": "text" + } + }, + "componentInput": { + "eval": "The below button will automatically delete the old account (likely the one you''re logged into now) and creates the new account.\nYou''ll have to log in again.", + "type": "template", + "value": "Hello ${ctx.username}", + "fieldType": "template" + }, + "verticalAlignment": "center", + "horizontalAlignment": "center" + } + }, + { + "3": { + "h": 1, + "w": 2, + "x": 0, + "y": 17, + "id": "n", + "max": { + "h": 100, + "w": 3 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "12": { + "h": 1, + "w": 4, + "x": 2, + "y": 17, + "id": "n", + "max": { + "h": 100, + "w": 12 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "id": "n", + "data": { + "id": "n", + "card": false, + "type": "checkboxcomponent", + "softWrap": true, + "configuration": { + "label": { + "type": "static", + "value": "Enable Hub Sync", + "fieldType": "text" + }, + "defaultValue": { + "type": "static", + "value": true, + "fieldType": "boolean" + } + }, + "verticalAlignment": "center", + "horizontalAlignment": "center" + } + }, + { + "3": { + "h": 3, + "w": 3, + "x": 0, + "y": 14, + "id": "o", + "max": { + "h": 100, + "w": 3 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "12": { + "h": 3, + "w": 8, + "x": 2, + "y": 14, + "id": "o", + "max": { + "h": 100, + "w": 12 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "id": "o", + "data": { + "id": "o", + "card": false, + "type": "textcomponent", + "softWrap": true, + "configuration": { + "style": { + "type": "static", + "value": "Body", + "fieldType": "select", + "onlyStatic": true, + "optionValuesKey": "textStyleOptions" + }, + "copyButton": { + "type": "static", + "value": false, + "fieldType": "boolean", + "onlyStatic": true + }, + "extraStyle": { + "type": "static", + "value": "", + "tooltip": "CSS rules like \"color: blue;\"", + "fieldType": "text" + } + }, + "componentInput": { + "eval": "We recommend enabling hub sync below. This will create a schedule in the admin workspace on behalf of the new user once you press the button. This schedule will automatically syncronize resource types from the hub to your local instance.", + "type": "template", + "value": "Hello ${ctx.username}", + "fieldType": "template" + }, + "verticalAlignment": "center", + "horizontalAlignment": "center" + } + }, + { + "3": { + "h": 1, + "w": 1, + "x": 2, + "y": 17, + "id": "p", + "max": { + "h": 100, + "w": 3 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "12": { + "h": 1, + "w": 4, + "x": 6, + "y": 17, + "id": "p", + "max": { + "h": 100, + "w": 12 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "id": "p", + "data": { + "id": "p", + "card": false, + "type": "textinputcomponent", + "softWrap": true, + "configuration": { + "placeholder": { + "type": "static", + "value": "Type...", + "fieldType": "text", + "onlyStatic": true + }, + "defaultValue": { + "type": "static", + "value": "0 0 0 * * *", + "fieldType": "text" + } + }, + "verticalAlignment": "center" + } + }, + { + "3": { + "h": 3, + "w": 3, + "x": 0, + "y": 19, + "id": "u", + "max": { + "h": 100, + "w": 3 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "12": { + "h": 2, + "w": 8, + "x": 2, + "y": 19, + "id": "u", + "max": { + "h": 100, + "w": 12 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "id": "u", + "data": { + "id": "u", + "card": false, + "type": "buttoncomponent", + "softWrap": true, + "configuration": { + "size": { + "type": "static", + "value": "lg", + "fieldType": "select", + "onlyStatic": true, + "optionValuesKey": "buttonSizeOptions" + }, + "color": { + "type": "static", + "value": "red", + "fieldType": "select", + "onlyStatic": true, + "optionValuesKey": "buttonColorOptions" + }, + "label": { + "type": "static", + "value": "Change account and set hub sync - re-login necessary", + "fieldType": "text" + }, + "disabled": { + "expr": "false", + "type": "eval", + "fieldType": "boolean" + }, + "fillContainer": { + "type": "static", + "value": true, + "fieldType": "boolean", + "onlyStatic": true + }, + "goto": { + "type": "static", + "value": "/user/logout", + "fieldType": "text", + "onlyStatic": true + } + }, + "componentInput": { + "type": "runnable", + "fields": { + "oldEmail": { + "type": "connected", + "value": null, + "fieldType": "string", + "connection": { + "componentId": "ctx", + "path": "email" + } + }, + "newEmail": { + "type": "connected", + "value": null, + "format": "", + "fieldType": "string", + "connection": { + "path": "result", + "componentId": "g" + } + }, + "newPassword": { + "type": "connected", + "value": null, + "format": "", + "fieldType": "string", + "connection": { + "path": "result", + "componentId": "i" + } + }, + "enable_hub_sync": { + "type": "connected", + "value": null, + "format": "", + "fieldType": "boolean", + "connection": { + "path": "result", + "componentId": "n" + } + }, + "cron_str": { + "type": "connected", + "value": null, + "fieldType": "string", + "connection": { + "path": "result", + "componentId": "p" + } + } + }, + "runnable": { + "name": "Change Account", + "type": "runnableByName", + "inlineScript": { + "path": "/inline-script/Inline Script 0", + "schema": { + "type": "object", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "required": [ + "oldEmail", + "newEmail", + "newPassword", + "enable_hub_sync", + "cron_str" + ], + "properties": { + "oldEmail": { + "description": "", + "type": "string", + "default": null + }, + "newEmail": { + "type": "string", + "format": "", + "default": null, + "description": "" + }, + "newPassword": { + "type": "string", + "format": "", + "default": null, + "description": "" + }, + "enable_hub_sync": { + "type": "boolean", + "format": "", + "default": null, + "description": "" + }, + "cron_str": { + "type": "string", + "default": null, + "description": "" + } + } + }, + "content": "import * as wmill from \"https://deno.land/x/windmill@v1.60.0/mod.ts\";\n\nexport async function main(\n oldEmail: string,\n newEmail: string,\n newPassword: string,\n enable_hub_sync: boolean,\n cron_str: string,\n) {\n\n await wmill.UserService.createUserGlobally({\n requestBody: {\n email: newEmail,\n password: newPassword,\n super_admin: true,\n },\n });\n\n const new_token = await wmill.UserService.login({\n requestBody: {\n email: newEmail,\n password: newPassword,\n },\n });\n\n wmill.setClient(new_token, Deno.env.get(\"BASE_INTERNAL_URL\")!);\n try {\n await wmill.ScheduleService.createSchedule({\n workspace: \"admins\",\n requestBody: {\n path: \"g/all/hub_sync\",\n schedule: cron_str,\n script_path: \"u/admin/hub_sync\",\n is_flow: false,\n args: {},\n enabled: true,\n offset: 0,\n },\n });\n } catch {\n console.log(''Schedule already exists'')\n }\n\n await wmill.UserService.globalUserDelete({ email: oldEmail });\n}\n", + "language": "deno" + } + }, + "fieldType": "any" + }, + "verticalAlignment": "center", + "horizontalAlignment": "center" + } + }, + { + "3": { + "h": 1, + "w": 3, + "x": 0, + "y": 13, + "id": "v", + "max": { + "h": 100, + "w": 3 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "12": { + "h": 1, + "w": 12, + "x": 0, + "y": 13, + "id": "v", + "max": { + "h": 100, + "w": 12 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "id": "v", + "data": { + "id": "v", + "card": false, + "type": "textcomponent", + "softWrap": false, + "configuration": { + "style": { + "type": "static", + "value": "Subtitle", + "fieldType": "select", + "onlyStatic": true, + "optionValuesKey": "textStyleOptions" + }, + "copyButton": { + "type": "static", + "value": false, + "fieldType": "boolean", + "onlyStatic": true + }, + "extraStyle": { + "type": "static", + "value": "", + "tooltip": "CSS rules like \"color: blue;\"", + "fieldType": "text" + } + }, + "componentInput": { + "eval": "Setup Hub Sync", + "type": "template", + "value": "Hello ${ctx.username}", + "fieldType": "template" + }, + "verticalAlignment": "center", + "horizontalAlignment": "center" + } + }, + { + "3": { + "fixed": false, + "resizable": true, + "draggable": true, + "customDragger": false, + "customResizer": false, + "x": 0, + "y": 5, + "min": { + "w": 1, + "h": 1 + }, + "max": { + "w": 3, + "h": 100 + }, + "w": 1, + "h": 1 + }, + "12": { + "fixed": false, + "resizable": true, + "draggable": true, + "customDragger": false, + "customResizer": false, + "x": 1, + "y": 7, + "min": { + "w": 1, + "h": 1 + }, + "max": { + "w": 12, + "h": 100 + }, + "w": 4, + "h": 1, + "id": "w" + }, + "data": { + "softWrap": false, + "horizontalAlignment": "left", + "verticalAlignment": "center", + "id": "w", + "type": "textcomponent", + "componentInput": { + "type": "template", + "fieldType": "template", + "value": "Hello ${ctx.username}", + "eval": "${ctx.username}" + }, + "configuration": { + "style": { + "fieldType": "select", + "type": "static", + "onlyStatic": true, + "optionValuesKey": "textStyleOptions", + "value": "Body" + }, + "extraStyle": { + "type": "static", + "fieldType": "text", + "value": "", + "tooltip": "CSS rules like \"color: blue;\"" + }, + "copyButton": { + "type": "static", + "value": false, + "fieldType": "boolean", + "onlyStatic": true + } + }, + "card": false + }, + "id": "w" + } + ], + "fullscreen": false, + "hiddenInlineScripts": [], + "unusedInlineScripts": [] +}') RETURNING id) +UPDATE app SET versions = ARRAY((select id from _insert)), policy = '{ "execution_mode": "viewer", "triggerables": {} }' + WHERE workspace_id = 'admins' AND path = 'g/all/setup_app'; diff --git a/backend/migrations/20230214135931_migrate_hub_sync_script.down.sql b/backend/migrations/20230214135931_migrate_hub_sync_script.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20230214135931_migrate_hub_sync_script.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20230214135931_migrate_hub_sync_script.up.sql b/backend/migrations/20230214135931_migrate_hub_sync_script.up.sql new file mode 100644 index 0000000000000..ca01842dbf85d --- /dev/null +++ b/backend/migrations/20230214135931_migrate_hub_sync_script.up.sql @@ -0,0 +1,16 @@ +-- Add up migration script here +-- Add up migration script here +UPDATE script SET content = 'import wmill from "https://deno.land/x/wmill@v1.63.1/main.ts"; +export async function main() { + await run( + "workspace", "add", "__automation", "admins", Deno.env.get("BASE_INTERNAL_URL") + "/", "--token", Deno.env.get("WM_TOKEN")); + + await run("hub", "pull"); +} + +async function run(...cmd: string[]) { + console.log("Running \"" + cmd.join('' '') + "\""); + await wmill.parse(cmd); +}', summary = 'Synchronize Hub Resource types with admins workspace', +description = 'Basic administrative script to sync latest resource types from hub to share to every workspace. Recommended to run at least once. On a schedule by default.' +WHERE hash = -28028598712388162 AND workspace_id = 'admins'; \ No newline at end of file diff --git a/backend/migrations/20230214144244_improve_app_setup.down.sql b/backend/migrations/20230214144244_improve_app_setup.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20230214144244_improve_app_setup.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20230214144244_improve_app_setup.up.sql b/backend/migrations/20230214144244_improve_app_setup.up.sql new file mode 100644 index 0000000000000..131c522de9eb4 --- /dev/null +++ b/backend/migrations/20230214144244_improve_app_setup.up.sql @@ -0,0 +1,1170 @@ +-- Add up migration script here +-- Add up migration script here +-- Add up migration script here + +with _insert as +( +INSERT INTO + app_version(app_id, created_by, created_at, value) +VALUES + ( + ( + SELECT + id + FROM + app + WHERE + workspace_id = 'admins' + AND path = 'g/all/setup_app' + ), + 'admin@windmill.dev', + '2023-01-01 00:00:00.000000 +00:00', + '{ + "grid": [ + { + "3": { + "h": 1, + "w": 3, + "x": 0, + "y": 0, + "id": "a", + "max": { + "h": 100, + "w": 3 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "12": { + "h": 2, + "w": 12, + "x": 0, + "y": 0, + "id": "a", + "max": { + "h": 100, + "w": 12 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "id": "a", + "data": { + "id": "a", + "card": false, + "type": "textcomponent", + "softWrap": true, + "configuration": { + "style": { + "type": "static", + "value": "Title", + "fieldType": "select", + "onlyStatic": true, + "optionValuesKey": "textStyleOptions" + }, + "copyButton": { + "type": "static", + "value": false, + "fieldType": "boolean", + "onlyStatic": true + }, + "extraStyle": { + "type": "static", + "value": "", + "tooltip": "CSS rules like \"color: blue;\"", + "fieldType": "text" + } + }, + "componentInput": { + "eval": "Setup your Windmill instance", + "type": "template", + "value": "Hello ${ctx.username}", + "fieldType": "template" + }, + "verticalAlignment": "center", + "horizontalAlignment": "center" + } + }, + { + "3": { + "h": 1, + "w": 1, + "x": 0, + "y": 6, + "id": "c", + "max": { + "h": 100, + "w": 3 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "12": { + "h": 1, + "w": 4, + "x": 1, + "y": 6, + "id": "c", + "max": { + "h": 100, + "w": 12 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "id": "c", + "data": { + "id": "c", + "card": false, + "type": "textcomponent", + "softWrap": true, + "configuration": { + "style": { + "type": "static", + "value": "Label", + "fieldType": "select", + "onlyStatic": true, + "optionValuesKey": "textStyleOptions" + }, + "copyButton": { + "type": "static", + "value": false, + "fieldType": "boolean", + "onlyStatic": true + }, + "extraStyle": { + "type": "static", + "value": "", + "tooltip": "CSS rules like \"color: blue;\"", + "fieldType": "text" + } + }, + "componentInput": { + "eval": "Old Email", + "type": "template", + "value": "Hello ${ctx.username}", + "fieldType": "template" + }, + "verticalAlignment": "center", + "horizontalAlignment": "left" + } + }, + { + "3": { + "h": 1, + "w": 1, + "x": 2, + "y": 6, + "id": "d", + "max": { + "h": 100, + "w": 3 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "12": { + "h": 1, + "w": 4, + "x": 7, + "y": 6, + "id": "d", + "max": { + "h": 100, + "w": 12 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "id": "d", + "data": { + "id": "d", + "card": false, + "type": "textcomponent", + "softWrap": true, + "configuration": { + "style": { + "type": "static", + "value": "Label", + "fieldType": "select", + "onlyStatic": true, + "optionValuesKey": "textStyleOptions" + }, + "copyButton": { + "type": "static", + "value": false, + "fieldType": "boolean", + "onlyStatic": true + }, + "extraStyle": { + "type": "static", + "value": "", + "tooltip": "CSS rules like \"color: blue;\"", + "fieldType": "text" + } + }, + "componentInput": { + "eval": "New Email", + "type": "template", + "value": "Hello ${ctx.username}", + "fieldType": "template" + }, + "verticalAlignment": "center", + "horizontalAlignment": "left" + } + }, + { + "3": { + "h": 1, + "w": 1, + "x": 2, + "y": 8, + "id": "e", + "max": { + "h": 100, + "w": 3 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "12": { + "h": 1, + "w": 4, + "x": 7, + "y": 8, + "id": "e", + "max": { + "h": 100, + "w": 12 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "id": "e", + "data": { + "id": "e", + "card": false, + "type": "textcomponent", + "softWrap": true, + "configuration": { + "style": { + "type": "static", + "value": "Label", + "fieldType": "select", + "onlyStatic": true, + "optionValuesKey": "textStyleOptions" + }, + "copyButton": { + "type": "static", + "value": false, + "fieldType": "boolean", + "onlyStatic": true + }, + "extraStyle": { + "type": "static", + "value": "", + "tooltip": "CSS rules like \"color: blue;\"", + "fieldType": "text" + } + }, + "componentInput": { + "eval": "New Password", + "type": "template", + "value": "Hello ${ctx.username}", + "fieldType": "template" + }, + "verticalAlignment": "center", + "horizontalAlignment": "left" + } + }, + { + "3": { + "h": 1, + "w": 1, + "x": 2, + "y": 7, + "id": "g", + "max": { + "h": 100, + "w": 3 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "12": { + "h": 1, + "w": 4, + "x": 7, + "y": 7, + "id": "g", + "max": { + "h": 100, + "w": 12 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "id": "g", + "data": { + "id": "g", + "card": false, + "type": "textinputcomponent", + "softWrap": true, + "configuration": { + "placeholder": { + "type": "static", + "value": "Type...", + "fieldType": "text", + "onlyStatic": true + }, + "defaultValue": { + "type": "static", + "fieldType": "text" + } + }, + "verticalAlignment": "center" + } + }, + { + "3": { + "h": 1, + "w": 1, + "x": 2, + "y": 9, + "id": "i", + "max": { + "h": 100, + "w": 3 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "12": { + "h": 1, + "w": 4, + "x": 7, + "y": 9, + "id": "i", + "max": { + "h": 100, + "w": 12 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "id": "i", + "data": { + "id": "i", + "card": false, + "type": "passwordinputcomponent", + "softWrap": true, + "configuration": { + "placeholder": { + "type": "static", + "value": "Password", + "fieldType": "text", + "onlyStatic": true + } + }, + "verticalAlignment": "center" + } + }, + { + "3": { + "h": 1, + "w": 3, + "x": 0, + "y": 1, + "id": "l", + "max": { + "h": 100, + "w": 3 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "12": { + "h": 1, + "w": 12, + "x": 0, + "y": 2, + "id": "l", + "max": { + "h": 100, + "w": 12 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "id": "l", + "data": { + "id": "l", + "card": false, + "type": "textcomponent", + "softWrap": true, + "configuration": { + "style": { + "type": "static", + "value": "Subtitle", + "fieldType": "select", + "onlyStatic": true, + "optionValuesKey": "textStyleOptions" + }, + "copyButton": { + "type": "static", + "value": false, + "fieldType": "boolean", + "onlyStatic": true + }, + "extraStyle": { + "type": "static", + "value": "", + "tooltip": "CSS rules like \"color: blue;\"", + "fieldType": "text" + } + }, + "componentInput": { + "eval": "Setup a secure account", + "type": "template", + "value": "Hello ${ctx.username}", + "fieldType": "template" + }, + "verticalAlignment": "center", + "horizontalAlignment": "center" + } + }, + { + "3": { + "h": 3, + "w": 3, + "x": 0, + "y": 2, + "id": "m", + "max": { + "h": 100, + "w": 3 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "12": { + "h": 3, + "w": 10, + "x": 1, + "y": 3, + "id": "m", + "max": { + "h": 100, + "w": 12 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "id": "m", + "data": { + "id": "m", + "card": false, + "type": "textcomponent", + "softWrap": true, + "configuration": { + "style": { + "type": "static", + "value": "Body", + "fieldType": "select", + "onlyStatic": true, + "optionValuesKey": "textStyleOptions" + }, + "copyButton": { + "type": "static", + "value": false, + "fieldType": "boolean", + "onlyStatic": true + }, + "extraStyle": { + "type": "static", + "value": "", + "tooltip": "CSS rules like \"color: blue;\"", + "fieldType": "text" + } + }, + "componentInput": { + "eval": "The below button will automatically delete the old account (likely the one you''re logged into now) and creates the new account.\nYou''ll have to log in again.", + "type": "template", + "value": "Hello ${ctx.username}", + "fieldType": "template" + }, + "verticalAlignment": "center", + "horizontalAlignment": "center" + } + }, + { + "3": { + "h": 1, + "w": 2, + "x": 0, + "y": 17, + "id": "n", + "max": { + "h": 100, + "w": 3 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "12": { + "h": 1, + "w": 4, + "x": 2, + "y": 17, + "id": "n", + "max": { + "h": 100, + "w": 12 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "id": "n", + "data": { + "id": "n", + "card": false, + "type": "checkboxcomponent", + "softWrap": true, + "configuration": { + "label": { + "type": "static", + "value": "Enable Hub Sync", + "fieldType": "text" + }, + "defaultValue": { + "type": "static", + "value": true, + "fieldType": "boolean" + } + }, + "verticalAlignment": "center", + "horizontalAlignment": "center" + } + }, + { + "3": { + "h": 3, + "w": 3, + "x": 0, + "y": 14, + "id": "o", + "max": { + "h": 100, + "w": 3 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "12": { + "h": 3, + "w": 8, + "x": 2, + "y": 14, + "id": "o", + "max": { + "h": 100, + "w": 12 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "id": "o", + "data": { + "id": "o", + "card": false, + "type": "textcomponent", + "softWrap": true, + "configuration": { + "style": { + "type": "static", + "value": "Body", + "fieldType": "select", + "onlyStatic": true, + "optionValuesKey": "textStyleOptions" + }, + "copyButton": { + "type": "static", + "value": false, + "fieldType": "boolean", + "onlyStatic": true + }, + "extraStyle": { + "type": "static", + "value": "", + "tooltip": "CSS rules like \"color: blue;\"", + "fieldType": "text" + } + }, + "componentInput": { + "eval": "We recommend enabling hub sync below. This will create a schedule in the admin workspace on behalf of the new user once you press the button. This schedule will automatically syncronize resource types from the hub to your local instance.", + "type": "template", + "value": "Hello ${ctx.username}", + "fieldType": "template" + }, + "verticalAlignment": "center", + "horizontalAlignment": "center" + } + }, + { + "3": { + "h": 1, + "w": 1, + "x": 2, + "y": 17, + "id": "p", + "max": { + "h": 100, + "w": 3 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "12": { + "h": 1, + "w": 4, + "x": 6, + "y": 17, + "id": "p", + "max": { + "h": 100, + "w": 12 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "id": "p", + "data": { + "id": "p", + "card": false, + "type": "textinputcomponent", + "softWrap": true, + "configuration": { + "placeholder": { + "type": "static", + "value": "Type...", + "fieldType": "text", + "onlyStatic": true + }, + "defaultValue": { + "type": "static", + "value": "0 0 0 * * *", + "fieldType": "text" + } + }, + "verticalAlignment": "center" + } + }, + { + "3": { + "h": 3, + "w": 3, + "x": 0, + "y": 19, + "id": "u", + "max": { + "h": 100, + "w": 3 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "12": { + "h": 2, + "w": 8, + "x": 2, + "y": 19, + "id": "u", + "max": { + "h": 100, + "w": 12 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "id": "u", + "data": { + "id": "u", + "card": false, + "type": "buttoncomponent", + "softWrap": true, + "configuration": { + "size": { + "type": "static", + "value": "lg", + "fieldType": "select", + "onlyStatic": true, + "optionValuesKey": "buttonSizeOptions" + }, + "color": { + "type": "static", + "value": "red", + "fieldType": "select", + "onlyStatic": true, + "optionValuesKey": "buttonColorOptions" + }, + "label": { + "type": "static", + "value": "Change account and set hub sync - re-login necessary", + "fieldType": "text" + }, + "disabled": { + "expr": "g.result == \"\" || i.result == \"\"", + "type": "eval", + "fieldType": "boolean" + }, + "fillContainer": { + "type": "static", + "value": true, + "fieldType": "boolean", + "onlyStatic": true + }, + "goto": { + "type": "static", + "value": "/user/logout", + "fieldType": "text", + "onlyStatic": true + } + }, + "componentInput": { + "type": "runnable", + "fields": { + "oldEmail": { + "type": "connected", + "value": null, + "fieldType": "string", + "connection": { + "componentId": "ctx", + "path": "email" + } + }, + "newEmail": { + "type": "connected", + "value": null, + "format": "", + "fieldType": "string", + "connection": { + "path": "result", + "componentId": "g" + } + }, + "newPassword": { + "type": "connected", + "value": null, + "format": "", + "fieldType": "string", + "connection": { + "path": "result", + "componentId": "i" + } + }, + "enable_hub_sync": { + "type": "connected", + "value": null, + "format": "", + "fieldType": "boolean", + "connection": { + "path": "result", + "componentId": "n" + } + }, + "cron_str": { + "type": "connected", + "value": null, + "fieldType": "string", + "connection": { + "path": "result", + "componentId": "p" + } + } + }, + "runnable": { + "name": "Change Account", + "type": "runnableByName", + "inlineScript": { + "path": "/inline-script/Inline Script 0", + "schema": { + "type": "object", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "required": [ + "oldEmail", + "newEmail", + "newPassword", + "enable_hub_sync", + "cron_str" + ], + "properties": { + "oldEmail": { + "description": "", + "type": "string", + "default": null + }, + "newEmail": { + "type": "string", + "format": "", + "default": null, + "description": "" + }, + "newPassword": { + "type": "string", + "format": "", + "default": null, + "description": "" + }, + "enable_hub_sync": { + "type": "boolean", + "format": "", + "default": null, + "description": "" + }, + "cron_str": { + "type": "string", + "default": null, + "description": "" + } + } + }, + "content": "import * as wmill from \"https://deno.land/x/windmill@v1.60.0/mod.ts\";\n\nexport async function main(\n oldEmail: string,\n newEmail: string,\n newPassword: string,\n enable_hub_sync: boolean,\n cron_str: string,\n) {\n await wmill.UserService.createUserGlobally({\n requestBody: {\n email: newEmail,\n password: newPassword,\n super_admin: true,\n },\n });\n\n const new_token = await wmill.UserService.login({\n requestBody: {\n email: newEmail,\n password: newPassword,\n },\n });\n\n wmill.setClient(new_token, Deno.env.get(\"BASE_INTERNAL_URL\")!);\n await wmill.JobService.runScriptByPath({\n workspace: \"admins\",\n path: \"u/admin/hub_sync\",\n requestBody: {},\n });\n \n if (enable_hub_sync) {\n try {\n await wmill.ScheduleService.createSchedule({\n workspace: \"admins\",\n requestBody: {\n path: \"g/all/hub_sync\",\n schedule: cron_str,\n script_path: \"u/admin/hub_sync\",\n is_flow: false,\n args: {},\n enabled: true,\n offset: 0,\n },\n });\n } catch {\n console.log(\"Schedule already exists\");\n }\n }\n\n await wmill.UserService.globalUserDelete({ email: oldEmail });\n}\n", + "language": "deno" + } + }, + "fieldType": "any" + }, + "verticalAlignment": "center", + "horizontalAlignment": "center" + } + }, + { + "3": { + "h": 1, + "w": 3, + "x": 0, + "y": 13, + "id": "v", + "max": { + "h": 100, + "w": 3 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "12": { + "h": 1, + "w": 12, + "x": 0, + "y": 13, + "id": "v", + "max": { + "h": 100, + "w": 12 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "id": "v", + "data": { + "id": "v", + "card": false, + "type": "textcomponent", + "softWrap": false, + "configuration": { + "style": { + "type": "static", + "value": "Subtitle", + "fieldType": "select", + "onlyStatic": true, + "optionValuesKey": "textStyleOptions" + }, + "copyButton": { + "type": "static", + "value": false, + "fieldType": "boolean", + "onlyStatic": true + }, + "extraStyle": { + "type": "static", + "value": "", + "tooltip": "CSS rules like \"color: blue;\"", + "fieldType": "text" + } + }, + "componentInput": { + "eval": "Setup Hub Sync", + "type": "template", + "value": "Hello ${ctx.username}", + "fieldType": "template" + }, + "verticalAlignment": "center", + "horizontalAlignment": "center" + } + }, + { + "3": { + "fixed": false, + "resizable": true, + "draggable": true, + "customDragger": false, + "customResizer": false, + "x": 0, + "y": 5, + "min": { + "w": 1, + "h": 1 + }, + "max": { + "w": 3, + "h": 100 + }, + "w": 1, + "h": 1 + }, + "12": { + "fixed": false, + "resizable": true, + "draggable": true, + "customDragger": false, + "customResizer": false, + "x": 1, + "y": 7, + "min": { + "w": 1, + "h": 1 + }, + "max": { + "w": 12, + "h": 100 + }, + "w": 4, + "h": 1, + "id": "w" + }, + "data": { + "softWrap": false, + "horizontalAlignment": "left", + "verticalAlignment": "center", + "id": "w", + "type": "textcomponent", + "componentInput": { + "type": "template", + "fieldType": "template", + "value": "Hello ${ctx.username}", + "eval": "${ctx.username}" + }, + "configuration": { + "style": { + "fieldType": "select", + "type": "static", + "onlyStatic": true, + "optionValuesKey": "textStyleOptions", + "value": "Body" + }, + "extraStyle": { + "type": "static", + "fieldType": "text", + "value": "", + "tooltip": "CSS rules like \"color: blue;\"" + }, + "copyButton": { + "type": "static", + "value": false, + "fieldType": "boolean", + "onlyStatic": true + } + }, + "card": false + }, + "id": "w" + } + ], + "fullscreen": false, + "hiddenInlineScripts": [], + "unusedInlineScripts": [] +}') RETURNING id) +UPDATE app SET versions = ARRAY((select id from _insert)), policy = '{ "execution_mode": "viewer", "triggerables": {} }' + WHERE workspace_id = 'admins' AND path = 'g/all/setup_app'; diff --git a/backend/migrations/20230226130307_update_included_scripts_with_deno_changes.down.sql b/backend/migrations/20230226130307_update_included_scripts_with_deno_changes.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20230226130307_update_included_scripts_with_deno_changes.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20230226130307_update_included_scripts_with_deno_changes.up.sql b/backend/migrations/20230226130307_update_included_scripts_with_deno_changes.up.sql new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/backend/migrations/20230227100232_update_included_scripts_with_deno_changes.down.sql b/backend/migrations/20230227100232_update_included_scripts_with_deno_changes.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20230227100232_update_included_scripts_with_deno_changes.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20230227100232_update_included_scripts_with_deno_changes.up.sql b/backend/migrations/20230227100232_update_included_scripts_with_deno_changes.up.sql new file mode 100644 index 0000000000000..f16861aac0afb --- /dev/null +++ b/backend/migrations/20230227100232_update_included_scripts_with_deno_changes.up.sql @@ -0,0 +1,1167 @@ + +with _insert as +( +INSERT INTO + app_version(app_id, created_by, created_at, value) +VALUES + ( + ( + SELECT + id + FROM + app + WHERE + workspace_id = 'admins' + AND path = 'g/all/setup_app' + ), + 'admin@windmill.dev', + '2023-01-01 00:00:00.000000 +00:00', + '{ + "grid": [ + { + "3": { + "h": 1, + "w": 3, + "x": 0, + "y": 0, + "id": "a", + "max": { + "h": 100, + "w": 3 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "12": { + "h": 2, + "w": 12, + "x": 0, + "y": 0, + "id": "a", + "max": { + "h": 100, + "w": 12 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "id": "a", + "data": { + "id": "a", + "card": false, + "type": "textcomponent", + "softWrap": true, + "configuration": { + "style": { + "type": "static", + "value": "Title", + "fieldType": "select", + "onlyStatic": true, + "optionValuesKey": "textStyleOptions" + }, + "copyButton": { + "type": "static", + "value": false, + "fieldType": "boolean", + "onlyStatic": true + }, + "extraStyle": { + "type": "static", + "value": "", + "tooltip": "CSS rules like \"color: blue;\"", + "fieldType": "text" + } + }, + "componentInput": { + "eval": "Setup your Windmill instance", + "type": "template", + "value": "Hello ${ctx.username}", + "fieldType": "template" + }, + "verticalAlignment": "center", + "horizontalAlignment": "center" + } + }, + { + "3": { + "h": 1, + "w": 1, + "x": 0, + "y": 6, + "id": "c", + "max": { + "h": 100, + "w": 3 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "12": { + "h": 1, + "w": 4, + "x": 1, + "y": 6, + "id": "c", + "max": { + "h": 100, + "w": 12 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "id": "c", + "data": { + "id": "c", + "card": false, + "type": "textcomponent", + "softWrap": true, + "configuration": { + "style": { + "type": "static", + "value": "Label", + "fieldType": "select", + "onlyStatic": true, + "optionValuesKey": "textStyleOptions" + }, + "copyButton": { + "type": "static", + "value": false, + "fieldType": "boolean", + "onlyStatic": true + }, + "extraStyle": { + "type": "static", + "value": "", + "tooltip": "CSS rules like \"color: blue;\"", + "fieldType": "text" + } + }, + "componentInput": { + "eval": "Old Email", + "type": "template", + "value": "Hello ${ctx.username}", + "fieldType": "template" + }, + "verticalAlignment": "center", + "horizontalAlignment": "left" + } + }, + { + "3": { + "h": 1, + "w": 1, + "x": 2, + "y": 6, + "id": "d", + "max": { + "h": 100, + "w": 3 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "12": { + "h": 1, + "w": 4, + "x": 7, + "y": 6, + "id": "d", + "max": { + "h": 100, + "w": 12 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "id": "d", + "data": { + "id": "d", + "card": false, + "type": "textcomponent", + "softWrap": true, + "configuration": { + "style": { + "type": "static", + "value": "Label", + "fieldType": "select", + "onlyStatic": true, + "optionValuesKey": "textStyleOptions" + }, + "copyButton": { + "type": "static", + "value": false, + "fieldType": "boolean", + "onlyStatic": true + }, + "extraStyle": { + "type": "static", + "value": "", + "tooltip": "CSS rules like \"color: blue;\"", + "fieldType": "text" + } + }, + "componentInput": { + "eval": "New Email", + "type": "template", + "value": "Hello ${ctx.username}", + "fieldType": "template" + }, + "verticalAlignment": "center", + "horizontalAlignment": "left" + } + }, + { + "3": { + "h": 1, + "w": 1, + "x": 2, + "y": 8, + "id": "e", + "max": { + "h": 100, + "w": 3 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "12": { + "h": 1, + "w": 4, + "x": 7, + "y": 8, + "id": "e", + "max": { + "h": 100, + "w": 12 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "id": "e", + "data": { + "id": "e", + "card": false, + "type": "textcomponent", + "softWrap": true, + "configuration": { + "style": { + "type": "static", + "value": "Label", + "fieldType": "select", + "onlyStatic": true, + "optionValuesKey": "textStyleOptions" + }, + "copyButton": { + "type": "static", + "value": false, + "fieldType": "boolean", + "onlyStatic": true + }, + "extraStyle": { + "type": "static", + "value": "", + "tooltip": "CSS rules like \"color: blue;\"", + "fieldType": "text" + } + }, + "componentInput": { + "eval": "New Password", + "type": "template", + "value": "Hello ${ctx.username}", + "fieldType": "template" + }, + "verticalAlignment": "center", + "horizontalAlignment": "left" + } + }, + { + "3": { + "h": 1, + "w": 1, + "x": 2, + "y": 7, + "id": "g", + "max": { + "h": 100, + "w": 3 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "12": { + "h": 1, + "w": 4, + "x": 7, + "y": 7, + "id": "g", + "max": { + "h": 100, + "w": 12 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "id": "g", + "data": { + "id": "g", + "card": false, + "type": "textinputcomponent", + "softWrap": true, + "configuration": { + "placeholder": { + "type": "static", + "value": "Type...", + "fieldType": "text", + "onlyStatic": true + }, + "defaultValue": { + "type": "static", + "fieldType": "text" + } + }, + "verticalAlignment": "center" + } + }, + { + "3": { + "h": 1, + "w": 1, + "x": 2, + "y": 9, + "id": "i", + "max": { + "h": 100, + "w": 3 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "12": { + "h": 1, + "w": 4, + "x": 7, + "y": 9, + "id": "i", + "max": { + "h": 100, + "w": 12 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "id": "i", + "data": { + "id": "i", + "card": false, + "type": "passwordinputcomponent", + "softWrap": true, + "configuration": { + "placeholder": { + "type": "static", + "value": "Password", + "fieldType": "text", + "onlyStatic": true + } + }, + "verticalAlignment": "center" + } + }, + { + "3": { + "h": 1, + "w": 3, + "x": 0, + "y": 1, + "id": "l", + "max": { + "h": 100, + "w": 3 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "12": { + "h": 1, + "w": 12, + "x": 0, + "y": 2, + "id": "l", + "max": { + "h": 100, + "w": 12 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "id": "l", + "data": { + "id": "l", + "card": false, + "type": "textcomponent", + "softWrap": true, + "configuration": { + "style": { + "type": "static", + "value": "Subtitle", + "fieldType": "select", + "onlyStatic": true, + "optionValuesKey": "textStyleOptions" + }, + "copyButton": { + "type": "static", + "value": false, + "fieldType": "boolean", + "onlyStatic": true + }, + "extraStyle": { + "type": "static", + "value": "", + "tooltip": "CSS rules like \"color: blue;\"", + "fieldType": "text" + } + }, + "componentInput": { + "eval": "Setup a secure account", + "type": "template", + "value": "Hello ${ctx.username}", + "fieldType": "template" + }, + "verticalAlignment": "center", + "horizontalAlignment": "center" + } + }, + { + "3": { + "h": 3, + "w": 3, + "x": 0, + "y": 2, + "id": "m", + "max": { + "h": 100, + "w": 3 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "12": { + "h": 3, + "w": 10, + "x": 1, + "y": 3, + "id": "m", + "max": { + "h": 100, + "w": 12 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "id": "m", + "data": { + "id": "m", + "card": false, + "type": "textcomponent", + "softWrap": true, + "configuration": { + "style": { + "type": "static", + "value": "Body", + "fieldType": "select", + "onlyStatic": true, + "optionValuesKey": "textStyleOptions" + }, + "copyButton": { + "type": "static", + "value": false, + "fieldType": "boolean", + "onlyStatic": true + }, + "extraStyle": { + "type": "static", + "value": "", + "tooltip": "CSS rules like \"color: blue;\"", + "fieldType": "text" + } + }, + "componentInput": { + "eval": "The below button will replace your account with a new one.\nYou''ll have to log in again.", + "type": "template", + "value": "Hello ${ctx.username}", + "fieldType": "template" + }, + "verticalAlignment": "center", + "horizontalAlignment": "center" + } + }, + { + "3": { + "h": 1, + "w": 2, + "x": 0, + "y": 17, + "id": "n", + "max": { + "h": 100, + "w": 3 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "12": { + "h": 1, + "w": 4, + "x": 2, + "y": 17, + "id": "n", + "max": { + "h": 100, + "w": 12 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "id": "n", + "data": { + "id": "n", + "card": false, + "type": "checkboxcomponent", + "softWrap": true, + "configuration": { + "label": { + "type": "static", + "value": "Enable Hub Sync", + "fieldType": "text" + }, + "defaultValue": { + "type": "static", + "value": true, + "fieldType": "boolean" + } + }, + "verticalAlignment": "center", + "horizontalAlignment": "center" + } + }, + { + "3": { + "h": 3, + "w": 3, + "x": 0, + "y": 14, + "id": "o", + "max": { + "h": 100, + "w": 3 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "12": { + "h": 3, + "w": 8, + "x": 2, + "y": 14, + "id": "o", + "max": { + "h": 100, + "w": 12 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "id": "o", + "data": { + "id": "o", + "card": false, + "type": "textcomponent", + "softWrap": true, + "configuration": { + "style": { + "type": "static", + "value": "Body", + "fieldType": "select", + "onlyStatic": true, + "optionValuesKey": "textStyleOptions" + }, + "copyButton": { + "type": "static", + "value": false, + "fieldType": "boolean", + "onlyStatic": true + }, + "extraStyle": { + "type": "static", + "value": "", + "tooltip": "CSS rules like \"color: blue;\"", + "fieldType": "text" + } + }, + "componentInput": { + "eval": "We recommend enabling hub sync below. This will create a schedule in the admin workspace on behalf of the new user once you press the button. This schedule will automatically syncronize resource types from the hub to your local instance.", + "type": "template", + "value": "Hello ${ctx.username}", + "fieldType": "template" + }, + "verticalAlignment": "center", + "horizontalAlignment": "center" + } + }, + { + "3": { + "h": 1, + "w": 1, + "x": 2, + "y": 17, + "id": "p", + "max": { + "h": 100, + "w": 3 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "12": { + "h": 1, + "w": 4, + "x": 6, + "y": 17, + "id": "p", + "max": { + "h": 100, + "w": 12 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "id": "p", + "data": { + "id": "p", + "card": false, + "type": "textinputcomponent", + "softWrap": true, + "configuration": { + "placeholder": { + "type": "static", + "value": "Type...", + "fieldType": "text", + "onlyStatic": true + }, + "defaultValue": { + "type": "static", + "value": "0 0 0 * * *", + "fieldType": "text" + } + }, + "verticalAlignment": "center" + } + }, + { + "3": { + "h": 3, + "w": 3, + "x": 0, + "y": 19, + "id": "u", + "max": { + "h": 100, + "w": 3 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "12": { + "h": 2, + "w": 8, + "x": 2, + "y": 19, + "id": "u", + "max": { + "h": 100, + "w": 12 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "id": "u", + "data": { + "id": "u", + "card": false, + "type": "buttoncomponent", + "softWrap": true, + "configuration": { + "size": { + "type": "static", + "value": "lg", + "fieldType": "select", + "onlyStatic": true, + "optionValuesKey": "buttonSizeOptions" + }, + "color": { + "type": "static", + "value": "red", + "fieldType": "select", + "onlyStatic": true, + "optionValuesKey": "buttonColorOptions" + }, + "label": { + "type": "static", + "value": "Change account and set hub sync - re-login necessary", + "fieldType": "text" + }, + "disabled": { + "expr": "g.result == \"\" || i.result == \"\"", + "type": "eval", + "fieldType": "boolean" + }, + "fillContainer": { + "type": "static", + "value": true, + "fieldType": "boolean", + "onlyStatic": true + }, + "goto": { + "type": "static", + "value": "/user/logout", + "fieldType": "text", + "onlyStatic": true + } + }, + "componentInput": { + "type": "runnable", + "fields": { + "oldEmail": { + "type": "connected", + "value": null, + "fieldType": "string", + "connection": { + "componentId": "ctx", + "path": "email" + } + }, + "newEmail": { + "type": "connected", + "value": null, + "format": "", + "fieldType": "string", + "connection": { + "path": "result", + "componentId": "g" + } + }, + "newPassword": { + "type": "connected", + "value": null, + "format": "", + "fieldType": "string", + "connection": { + "path": "result", + "componentId": "i" + } + }, + "enable_hub_sync": { + "type": "connected", + "value": null, + "format": "", + "fieldType": "boolean", + "connection": { + "path": "result", + "componentId": "n" + } + }, + "cron_str": { + "type": "connected", + "value": null, + "fieldType": "string", + "connection": { + "path": "result", + "componentId": "p" + } + } + }, + "runnable": { + "name": "Change Account", + "type": "runnableByName", + "inlineScript": { + "path": "/inline-script/Inline Script 0", + "schema": { + "type": "object", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "required": [ + "oldEmail", + "newEmail", + "newPassword", + "enable_hub_sync", + "cron_str" + ], + "properties": { + "oldEmail": { + "description": "", + "type": "string", + "default": null + }, + "newEmail": { + "type": "string", + "format": "", + "default": null, + "description": "" + }, + "newPassword": { + "type": "string", + "format": "", + "default": null, + "description": "" + }, + "enable_hub_sync": { + "type": "boolean", + "format": "", + "default": null, + "description": "" + }, + "cron_str": { + "type": "string", + "default": null, + "description": "" + } + } + }, + "content": "import * as wmill from \"https://deno.land/x/windmill@v1.69.3/mod.ts\";\n\nexport async function main(\n oldEmail: string,\n newEmail: string,\n newPassword: string,\n enable_hub_sync: boolean,\n cron_str: string,\n) {\n await wmill.UserService.createUserGlobally({\n requestBody: {\n email: newEmail,\n password: newPassword,\n super_admin: true,\n },\n });\n\n const new_token = await wmill.UserService.login({\n requestBody: {\n email: newEmail,\n password: newPassword,\n },\n });\n\n wmill.setClient(new_token, Deno.env.get(\"BASE_INTERNAL_URL\")!);\n await wmill.JobService.runScriptByPath({\n workspace: \"admins\",\n path: \"u/admin/hub_sync\",\n requestBody: {},\n });\n \n if (enable_hub_sync) {\n try {\n await wmill.ScheduleService.createSchedule({\n workspace: \"admins\",\n requestBody: {\n path: \"g/all/hub_sync\",\n schedule: cron_str,\n script_path: \"u/admin/hub_sync\",\n is_flow: false,\n args: {},\n enabled: true,\n offset: 0,\n },\n });\n } catch {\n console.log(\"Schedule already exists\");\n }\n }\n\n await wmill.UserService.globalUserDelete({ email: oldEmail });\n}\n", + "language": "deno" + } + }, + "fieldType": "any" + }, + "verticalAlignment": "center", + "horizontalAlignment": "center" + } + }, + { + "3": { + "h": 1, + "w": 3, + "x": 0, + "y": 13, + "id": "v", + "max": { + "h": 100, + "w": 3 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "12": { + "h": 1, + "w": 12, + "x": 0, + "y": 13, + "id": "v", + "max": { + "h": 100, + "w": 12 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "id": "v", + "data": { + "id": "v", + "card": false, + "type": "textcomponent", + "softWrap": false, + "configuration": { + "style": { + "type": "static", + "value": "Subtitle", + "fieldType": "select", + "onlyStatic": true, + "optionValuesKey": "textStyleOptions" + }, + "copyButton": { + "type": "static", + "value": false, + "fieldType": "boolean", + "onlyStatic": true + }, + "extraStyle": { + "type": "static", + "value": "", + "tooltip": "CSS rules like \"color: blue;\"", + "fieldType": "text" + } + }, + "componentInput": { + "eval": "Setup Hub Sync", + "type": "template", + "value": "Hello ${ctx.username}", + "fieldType": "template" + }, + "verticalAlignment": "center", + "horizontalAlignment": "center" + } + }, + { + "3": { + "fixed": false, + "resizable": true, + "draggable": true, + "customDragger": false, + "customResizer": false, + "x": 0, + "y": 5, + "min": { + "w": 1, + "h": 1 + }, + "max": { + "w": 3, + "h": 100 + }, + "w": 1, + "h": 1 + }, + "12": { + "fixed": false, + "resizable": true, + "draggable": true, + "customDragger": false, + "customResizer": false, + "x": 1, + "y": 7, + "min": { + "w": 1, + "h": 1 + }, + "max": { + "w": 12, + "h": 100 + }, + "w": 4, + "h": 1, + "id": "w" + }, + "data": { + "softWrap": false, + "horizontalAlignment": "left", + "verticalAlignment": "center", + "id": "w", + "type": "textcomponent", + "componentInput": { + "type": "template", + "fieldType": "template", + "value": "Hello ${ctx.username}", + "eval": "${ctx.username}" + }, + "configuration": { + "style": { + "fieldType": "select", + "type": "static", + "onlyStatic": true, + "optionValuesKey": "textStyleOptions", + "value": "Body" + }, + "extraStyle": { + "type": "static", + "fieldType": "text", + "value": "", + "tooltip": "CSS rules like \"color: blue;\"" + }, + "copyButton": { + "type": "static", + "value": false, + "fieldType": "boolean", + "onlyStatic": true + } + }, + "card": false + }, + "id": "w" + } + ], + "fullscreen": false, + "hiddenInlineScripts": [], + "unusedInlineScripts": [] +}') RETURNING id) +UPDATE app SET versions = ARRAY((select id from _insert)), policy = '{ "execution_mode": "viewer", "triggerables": {} }' + WHERE workspace_id = 'admins' AND path = 'g/all/setup_app'; diff --git a/backend/migrations/20230227131521_update_included_scripts_with_deno_changes.down.sql b/backend/migrations/20230227131521_update_included_scripts_with_deno_changes.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20230227131521_update_included_scripts_with_deno_changes.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20230227131521_update_included_scripts_with_deno_changes.up.sql b/backend/migrations/20230227131521_update_included_scripts_with_deno_changes.up.sql new file mode 100644 index 0000000000000..4e9da1bc03d0c --- /dev/null +++ b/backend/migrations/20230227131521_update_included_scripts_with_deno_changes.up.sql @@ -0,0 +1,16 @@ +-- Add up migration script here + +UPDATE script SET content = 'import wmill from "https://deno.land/x/wmill@v1.70.1/main.ts"; +export async function main() { + await run( + "workspace", "add", "__automation", "admins", Deno.env.get("BASE_INTERNAL_URL") + "/", "--token", Deno.env.get("WM_TOKEN")); + + await run("hub", "pull"); +} + +async function run(...cmd: string[]) { + console.log("Running \"" + cmd.join('' '') + "\""); + await wmill.parse(cmd); +}', summary = 'Synchronize Hub Resource types with admins workspace', +description = 'Basic administrative script to sync latest resource types from hub to share to every workspace. Recommended to run at least once. On a schedule by default.' +WHERE hash = -28028598712388162 AND workspace_id = 'admins'; \ No newline at end of file diff --git a/backend/migrations/20230303064952_add_root_leaf_jobs.down.sql b/backend/migrations/20230303064952_add_root_leaf_jobs.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20230303064952_add_root_leaf_jobs.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20230303064952_add_root_leaf_jobs.up.sql b/backend/migrations/20230303064952_add_root_leaf_jobs.up.sql new file mode 100644 index 0000000000000..0082c23344c27 --- /dev/null +++ b/backend/migrations/20230303064952_add_root_leaf_jobs.up.sql @@ -0,0 +1,3 @@ +-- Add up migration script here +ALTER TABLE queue ADD COLUMN root_job uuid; +ALTER TABLE queue ADD COLUMN leaf_jobs jsonb; diff --git a/backend/migrations/20230327115727_update_app_setup.down.sql b/backend/migrations/20230327115727_update_app_setup.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20230327115727_update_app_setup.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20230327115727_update_app_setup.up.sql b/backend/migrations/20230327115727_update_app_setup.up.sql new file mode 100644 index 0000000000000..13d5d96594090 --- /dev/null +++ b/backend/migrations/20230327115727_update_app_setup.up.sql @@ -0,0 +1,1143 @@ +-- Add up migration script here + +with _insert as +( +INSERT INTO + app_version(app_id, created_by, created_at, value) +VALUES + ( + ( + SELECT + id + FROM + app + WHERE + workspace_id = 'admins' + AND path = 'g/all/setup_app' + ), + 'admin@windmill.dev', + '2023-01-01 00:00:00.000000 +00:00', + '{ + "css": { + "containercomponent": { + "container": { + "style": "border: 1px solid #898989;" + } + } + }, + "grid": [ + { + "3": { + "h": 1, + "w": 3, + "x": 0, + "y": 0, + "fixed": false, + "id": "ab" + }, + "12": { + "h": 1, + "w": 7, + "x": 0, + "y": 1, + "id": "ab", + "fixed": false + }, + "id": "ab", + "data": { + "id": "ab", + "type": "textcomponent", + "customCss": {}, + "configuration": { + "style": { + "type": "static", + "value": "Title" + }, + "tooltip": { + "type": "static", + "value": "" + }, + "copyButton": { + "type": "static", + "value": false + } + }, + "componentInput": { + "eval": "Setup your Windmill Instance", + "type": "template", + "value": "Hello ${ctx.username}", + "fieldType": "template" + }, + "verticalAlignment": "top", + "horizontalAlignment": "left" + } + }, + { + "3": { + "h": 8, + "w": 3, + "x": 0, + "y": 1, + "fixed": false, + "id": "x" + }, + "12": { + "h": 7, + "w": 7, + "x": 0, + "y": 3, + "id": "x", + "fixed": false + }, + "id": "x", + "data": { + "id": "x", + "type": "containercomponent", + "customCss": { + "container": { + "class": "", + "style": "border: 1px solid #898989;" + } + }, + "configuration": {}, + "numberOfSubgrids": 1 + } + }, + { + "3": { + "h": 7, + "w": 3, + "x": 0, + "y": 9, + "fixed": true, + "id": "z" + }, + "12": { + "h": 7, + "w": 5, + "x": 7, + "y": 3, + "id": "z", + "fixed": true + }, + "id": "z", + "data": { + "id": "z", + "type": "containercomponent", + "customCss": { + "container": { + "class": "", + "style": "" + } + }, + "configuration": {}, + "numberOfSubgrids": 1 + } + }, + { + "3": { + "h": 3, + "w": 3, + "x": 0, + "y": 16, + "id": "u", + "max": { + "h": 100, + "w": 3 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": false, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "12": { + "h": 2, + "w": 12, + "x": 0, + "y": 12, + "id": "u", + "max": { + "h": 100, + "w": 12 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": false, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "id": "u", + "data": { + "id": "u", + "card": false, + "type": "buttoncomponent", + "softWrap": true, + "configuration": { + "goto": { + "type": "static", + "value": "/user/logout", + "fieldType": "text", + "onlyStatic": true + }, + "size": { + "type": "static", + "value": "lg", + "fieldType": "select", + "onlyStatic": true, + "optionValuesKey": "buttonSizeOptions" + }, + "color": { + "type": "static", + "value": "blue", + "fieldType": "select", + "onlyStatic": true, + "optionValuesKey": "buttonColorOptions" + }, + "label": { + "type": "static", + "value": "Setup instance", + "fieldType": "text" + }, + "disabled": { + "expr": "g.result == \"\" || i.result == \"\"", + "type": "eval", + "fieldType": "boolean" + }, + "afterIcon": { + "type": "static", + "value": "Zap" + }, + "onSuccess": { + "type": "oneOf", + "selected": "gotoUrl", + "configuration": { + "none": {}, + "setTab": { + "setTab": { + "type": "static", + "value": [] + } + }, + "gotoUrl": { + "url": { + "type": "connected", + "value": "", + "connection": { + "path": "result", + "componentId": "bg_0" + } + }, + "newTab": { + "type": "static", + "value": false + } + }, + "sendToast": { + "message": { + "type": "static", + "value": "" + } + } + } + }, + "beforeIcon": { + "type": "static" + }, + "fillContainer": { + "type": "static", + "value": true, + "fieldType": "boolean", + "onlyStatic": true + }, + "triggerOnAppLoad": { + "type": "static" + } + }, + "componentInput": { + "type": "runnable", + "fields": { + "cron_str": { + "type": "connected", + "value": null, + "fieldType": "string", + "connection": { + "path": "result", + "componentId": "p" + } + }, + "newEmail": { + "type": "connected", + "value": null, + "format": "", + "fieldType": "string", + "connection": { + "path": "result", + "componentId": "g" + } + }, + "oldEmail": { + "type": "connected", + "value": null, + "fieldType": "string", + "connection": { + "path": "email", + "componentId": "ctx" + } + }, + "newPassword": { + "type": "connected", + "value": null, + "format": "", + "fieldType": "string", + "connection": { + "path": "result", + "componentId": "i" + } + }, + "enable_hub_sync": { + "type": "connected", + "value": null, + "format": "", + "fieldType": "boolean", + "connection": { + "path": "result", + "componentId": "n" + } + } + }, + "runnable": { + "name": "Change Account", + "type": "runnableByName", + "inlineScript": { + "path": "u/user/effortless_app/Change Account", + "schema": { + "type": "object", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "required": [ + "oldEmail", + "newEmail", + "newPassword", + "enable_hub_sync", + "cron_str" + ], + "properties": { + "cron_str": { + "type": "string", + "default": null, + "description": "" + }, + "newEmail": { + "type": "string", + "format": "", + "default": null, + "description": "" + }, + "oldEmail": { + "type": "string", + "default": null, + "description": "" + }, + "newPassword": { + "type": "string", + "format": "", + "default": null, + "description": "" + }, + "enable_hub_sync": { + "type": "boolean", + "format": "", + "default": null, + "description": "" + } + } + }, + "content": "import * as wmill from \"https://deno.land/x/windmill@v1.69.3/mod.ts\";\n\nexport async function main(\n oldEmail: string,\n newEmail: string,\n newPassword: string,\n enable_hub_sync: boolean,\n cron_str: string,\n) {\n try {\n await wmill.UserService.createUserGlobally({\n requestBody: {\n email: newEmail,\n password: newPassword,\n super_admin: true,\n },\n });\n } catch (e) {\n throw Error(\"User already exist\")\n }\n const new_token = await wmill.UserService.login({\n requestBody: {\n email: newEmail,\n password: newPassword,\n },\n });\n\n wmill.setClient(new_token, Deno.env.get(\"BASE_INTERNAL_URL\")!);\n await wmill.JobService.runScriptByPath({\n workspace: \"admins\",\n path: \"u/admin/hub_sync\",\n requestBody: {},\n });\n\n if (enable_hub_sync) {\n try {\n await wmill.ScheduleService.createSchedule({\n workspace: \"admins\",\n requestBody: {\n path: \"g/all/hub_sync\",\n schedule: cron_str,\n script_path: \"u/admin/hub_sync\",\n is_flow: false,\n args: {},\n enabled: true,\n offset: 0,\n },\n });\n } catch {\n console.log(\"Schedule already exists\");\n }\n }\n\n await wmill.UserService.globalUserDelete({ email: oldEmail });\n\n}\n", + "language": "deno" + } + }, + "fieldType": "any", + "doNotRecomputeOnInputChanged": false + }, + "verticalAlignment": "center", + "horizontalAlignment": "center" + } + } + ], + "subgrids": { + "x-0": [ + { + "3": { + "h": 1, + "w": 3, + "x": 0, + "y": 0, + "id": "l", + "max": { + "h": 100, + "w": 3 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "12": { + "h": 1, + "w": 12, + "x": 0, + "y": 0, + "id": "l", + "max": { + "h": 100, + "w": 12 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "id": "l", + "data": { + "id": "l", + "card": false, + "type": "textcomponent", + "softWrap": true, + "configuration": { + "style": { + "type": "static", + "value": "Subtitle", + "fieldType": "select", + "onlyStatic": true, + "optionValuesKey": "textStyleOptions" + }, + "tooltip": { + "type": "static", + "value": "" + }, + "copyButton": { + "type": "static", + "value": false, + "fieldType": "boolean", + "onlyStatic": true + }, + "extraStyle": { + "type": "static", + "value": "", + "tooltip": "CSS rules like \"color: blue;\"", + "fieldType": "text" + } + }, + "componentInput": { + "eval": "Change superadmin account", + "type": "template", + "value": "Hello ${ctx.username}", + "fieldType": "template" + }, + "verticalAlignment": "center", + "horizontalAlignment": "left" + } + }, + { + "3": { + "h": 1, + "w": 1, + "x": 0, + "y": 1, + "id": "c", + "max": { + "h": 100, + "w": 3 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": false, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "12": { + "h": 1, + "w": 4, + "x": 0, + "y": 1, + "id": "c", + "max": { + "h": 100, + "w": 12 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": false, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "id": "c", + "data": { + "id": "c", + "card": false, + "type": "textcomponent", + "softWrap": true, + "configuration": { + "style": { + "type": "static", + "value": "Label", + "fieldType": "select", + "onlyStatic": true, + "optionValuesKey": "textStyleOptions" + }, + "tooltip": { + "type": "static", + "value": "" + }, + "copyButton": { + "type": "static", + "value": false, + "fieldType": "boolean", + "onlyStatic": true + }, + "extraStyle": { + "type": "static", + "value": "", + "tooltip": "CSS rules like \"color: blue;\"", + "fieldType": "text" + } + }, + "componentInput": { + "eval": "Old Email", + "type": "template", + "value": "Hello ${ctx.username}", + "fieldType": "template" + }, + "verticalAlignment": "center", + "horizontalAlignment": "left" + } + }, + { + "3": { + "h": 1, + "w": 1, + "x": 0, + "y": 2, + "max": { + "h": 100, + "w": 3 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": false, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false, + "id": "w" + }, + "12": { + "h": 1, + "w": 6, + "x": 0, + "y": 2, + "id": "w", + "max": { + "h": 100, + "w": 12 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": false, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "id": "w", + "data": { + "id": "w", + "card": false, + "type": "textcomponent", + "softWrap": false, + "configuration": { + "style": { + "type": "static", + "value": "Body", + "fieldType": "select", + "onlyStatic": true, + "optionValuesKey": "textStyleOptions" + }, + "tooltip": { + "type": "static", + "value": "" + }, + "copyButton": { + "type": "static", + "value": false, + "fieldType": "boolean", + "onlyStatic": true + }, + "extraStyle": { + "type": "static", + "value": "", + "tooltip": "CSS rules like \"color: blue;\"", + "fieldType": "text" + } + }, + "componentInput": { + "eval": "${ctx.username}", + "type": "template", + "value": "Hello ${ctx.username}", + "fieldType": "template" + }, + "verticalAlignment": "center", + "horizontalAlignment": "left" + } + }, + { + "3": { + "h": 1, + "w": 1, + "x": 0, + "y": 4, + "id": "d", + "max": { + "h": 100, + "w": 3 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": false, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "12": { + "h": 1, + "w": 5, + "x": 7, + "y": 1, + "id": "d", + "max": { + "h": 100, + "w": 12 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": false, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "id": "d", + "data": { + "id": "d", + "card": false, + "type": "textcomponent", + "softWrap": true, + "configuration": { + "style": { + "type": "static", + "value": "Label", + "fieldType": "select", + "onlyStatic": true, + "optionValuesKey": "textStyleOptions" + }, + "tooltip": { + "type": "static", + "value": "" + }, + "copyButton": { + "type": "static", + "value": false, + "fieldType": "boolean", + "onlyStatic": true + }, + "extraStyle": { + "type": "static", + "value": "", + "tooltip": "CSS rules like \"color: blue;\"", + "fieldType": "text" + } + }, + "componentInput": { + "eval": "New Email", + "type": "template", + "value": "Hello ${ctx.username}", + "fieldType": "template" + }, + "verticalAlignment": "center", + "horizontalAlignment": "left" + } + }, + { + "3": { + "h": 1, + "w": 1, + "x": 2, + "y": 4, + "id": "e", + "max": { + "h": 100, + "w": 3 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "12": { + "h": 1, + "w": 5, + "x": 7, + "y": 4, + "id": "e", + "max": { + "h": 100, + "w": 12 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "id": "e", + "data": { + "id": "e", + "card": false, + "type": "textcomponent", + "softWrap": true, + "configuration": { + "style": { + "type": "static", + "value": "Label", + "fieldType": "select", + "onlyStatic": true, + "optionValuesKey": "textStyleOptions" + }, + "tooltip": { + "type": "static", + "value": "" + }, + "copyButton": { + "type": "static", + "value": false, + "fieldType": "boolean", + "onlyStatic": true + }, + "extraStyle": { + "type": "static", + "value": "", + "tooltip": "CSS rules like \"color: blue;\"", + "fieldType": "text" + } + }, + "componentInput": { + "eval": "New Password", + "type": "template", + "value": "Hello ${ctx.username}", + "fieldType": "template" + }, + "verticalAlignment": "center", + "horizontalAlignment": "left" + } + }, + { + "3": { + "h": 1, + "w": 1, + "x": 0, + "y": 5, + "id": "g", + "max": { + "h": 100, + "w": 3 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": false, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "12": { + "h": 1, + "w": 5, + "x": 7, + "y": 2, + "id": "g", + "max": { + "h": 100, + "w": 12 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": false, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "id": "g", + "data": { + "id": "g", + "card": false, + "type": "textinputcomponent", + "softWrap": true, + "configuration": { + "placeholder": { + "type": "static", + "value": "good@corp.com", + "fieldType": "text", + "onlyStatic": true + }, + "defaultValue": { + "type": "static", + "fieldType": "text" + } + }, + "verticalAlignment": "center" + } + }, + { + "3": { + "h": 1, + "w": 1, + "x": 2, + "y": 5, + "id": "i", + "max": { + "h": 100, + "w": 3 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": false, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "12": { + "h": 1, + "w": 5, + "x": 7, + "y": 5, + "id": "i", + "max": { + "h": 100, + "w": 12 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": false, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "id": "i", + "data": { + "id": "i", + "card": false, + "type": "passwordinputcomponent", + "softWrap": true, + "configuration": { + "placeholder": { + "type": "static", + "value": "Password", + "fieldType": "text", + "onlyStatic": true + } + }, + "verticalAlignment": "center" + } + } + ], + "z-0": [ + { + "3": { + "h": 1, + "w": 3, + "x": 0, + "y": 0, + "id": "aa", + "max": { + "h": 100, + "w": 3 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "12": { + "h": 1, + "w": 12, + "x": 0, + "y": 0, + "id": "aa", + "max": { + "h": 100, + "w": 12 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "id": "aa", + "data": { + "id": "aa", + "card": false, + "type": "textcomponent", + "softWrap": true, + "configuration": { + "style": { + "type": "static", + "value": "Subtitle", + "fieldType": "select", + "onlyStatic": true, + "optionValuesKey": "textStyleOptions" + }, + "tooltip": { + "type": "static", + "value": "We recommend enabling hub sync below. This will create a schedule in the admin workspace on behalf of the new user once you press the button. This schedule will automatically synchronize resource types from the hub to your local instance." + }, + "copyButton": { + "type": "static", + "value": false, + "fieldType": "boolean", + "onlyStatic": true + }, + "extraStyle": { + "type": "static", + "value": "", + "tooltip": "CSS rules like \"color: blue;\"", + "fieldType": "text" + } + }, + "componentInput": { + "eval": "Hub Sync", + "type": "template", + "value": "Hello ${ctx.username}", + "fieldType": "template" + }, + "verticalAlignment": "center", + "horizontalAlignment": "left" + } + }, + { + "3": { + "h": 1, + "w": 2, + "x": 0, + "y": 3, + "id": "n", + "max": { + "h": 100, + "w": 3 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "12": { + "h": 1, + "w": 6, + "x": 0, + "y": 2, + "id": "n", + "max": { + "h": 100, + "w": 12 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "id": "n", + "data": { + "id": "n", + "card": false, + "type": "checkboxcomponent", + "softWrap": true, + "configuration": { + "label": { + "type": "static", + "value": "Schedule", + "fieldType": "text" + }, + "defaultValue": { + "type": "static", + "value": true, + "fieldType": "boolean" + } + }, + "verticalAlignment": "center", + "horizontalAlignment": "center" + } + }, + { + "3": { + "h": 1, + "w": 1, + "x": 2, + "y": 3, + "id": "p", + "max": { + "h": 100, + "w": 3 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "12": { + "h": 1, + "w": 6, + "x": 6, + "y": 2, + "id": "p", + "max": { + "h": 100, + "w": 12 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "id": "p", + "data": { + "id": "p", + "card": false, + "type": "textinputcomponent", + "softWrap": true, + "configuration": { + "placeholder": { + "type": "static", + "value": "Type...", + "fieldType": "text", + "onlyStatic": true + }, + "defaultValue": { + "type": "static", + "value": "0 0 0 * * *", + "fieldType": "text" + } + }, + "verticalAlignment": "center" + } + } + ] + }, + "fullscreen": false, + "norefreshbar": true, + "hiddenInlineScripts": [ + { + "name": "Background Script 0", + "fields": {}, + "autoRefresh": true, + "inlineScript": { + "path": "u/user/effortless_app/Background Script 0", + "content": "return ''/user/logout?rd='' + encodeURIComponent(''/user/login?email='' + g.result)", + "language": "frontend", + "refreshOn": [ + { + "id": "g", + "key": "result" + } + ] + }, + "doNotRecomputeOnInputChanged": false + } + ], + "unusedInlineScripts": [] +}') RETURNING id) +UPDATE app SET versions = ARRAY((select id from _insert)), policy = '{ "execution_mode": "viewer", "triggerables": {} }' +WHERE workspace_id = 'admins' AND path = 'g/all/setup_app'; diff --git a/backend/migrations/20230327201258_add_granular_share_apps.down.sql b/backend/migrations/20230327201258_add_granular_share_apps.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20230327201258_add_granular_share_apps.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20230327201258_add_granular_share_apps.up.sql b/backend/migrations/20230327201258_add_granular_share_apps.up.sql new file mode 100644 index 0000000000000..40757dc687c42 --- /dev/null +++ b/backend/migrations/20230327201258_add_granular_share_apps.up.sql @@ -0,0 +1,11 @@ +-- Add up migration script here +CREATE POLICY see_extra_perms_user ON app FOR ALL +USING (extra_perms ? CONCAT('u/', current_setting('session.user'))) +WITH CHECK ((extra_perms ->> CONCAT('u/', current_setting('session.user')))::boolean); + +CREATE POLICY see_extra_perms_groups ON app FOR ALL +USING (extra_perms ?| regexp_split_to_array(current_setting('session.pgroups'), ',')::text[]) +WITH CHECK (exists( + SELECT key, value FROM jsonb_each_text(extra_perms) + WHERE SPLIT_PART(key, '/', 1) = 'g' AND key = ANY(regexp_split_to_array(current_setting('session.pgroups'), ',')::text[]) + AND value::boolean)); \ No newline at end of file diff --git a/backend/migrations/20230405071524_schedule_timezone.down.sql b/backend/migrations/20230405071524_schedule_timezone.down.sql new file mode 100644 index 0000000000000..fb093e4572df8 --- /dev/null +++ b/backend/migrations/20230405071524_schedule_timezone.down.sql @@ -0,0 +1,2 @@ +ALTER TABLE schedule DROP COLUMN timezone; +ALTER TABLE schedule ADD COLUMN offset_ INTEGER NOT NULL DEFAULT 0; \ No newline at end of file diff --git a/backend/migrations/20230405071524_schedule_timezone.up.sql b/backend/migrations/20230405071524_schedule_timezone.up.sql new file mode 100644 index 0000000000000..954302eb3824c --- /dev/null +++ b/backend/migrations/20230405071524_schedule_timezone.up.sql @@ -0,0 +1,26 @@ +ALTER TABLE schedule ADD COLUMN timezone VARCHAR(255) NOT NULL DEFAULT 'UTC'; + +-- INSERT the correct IANA timezone string for each offset value + +UPDATE schedule SET timezone = 'Pacific/Honolulu' WHERE offset_ = 600; +UPDATE schedule SET timezone = 'America/Anchorage' WHERE offset_ = 540; +UPDATE schedule SET timezone = 'America/Los_Angeles' WHERE offset_ = 480; +UPDATE schedule SET timezone = 'America/Chicago' WHERE offset_ = 360; +UPDATE schedule SET timezone = 'America/New_York' WHERE offset_ = 300; +UPDATE schedule SET timezone = 'America/Halifax' WHERE offset_ = 240; +UPDATE schedule SET timezone = 'America/Sao_Paulo' WHERE offset_ = 180; +UPDATE schedule SET timezone = 'Atlantic/South_Georgia' WHERE offset_ = 120; +UPDATE schedule SET timezone = 'Atlantic/Cape_Verde' WHERE offset_ = 60; +UPDATE schedule SET timezone = 'Europe/London' WHERE offset_ = 0; +UPDATE schedule SET timezone = 'Europe/Berlin' WHERE offset_ = -60; +UPDATE schedule SET timezone = 'Europe/Athens' WHERE offset_ = -120; +UPDATE schedule SET timezone = 'Europe/Moscow' WHERE offset_ = -180; +UPDATE schedule SET timezone = 'Asia/Dubai' WHERE offset_ = -240; +UPDATE schedule SET timezone = 'Asia/Aqtau' WHERE offset_ = -300; +UPDATE schedule SET timezone = 'Asia/Almaty' WHERE offset_ = -360; +UPDATE schedule SET timezone = 'Asia/Bangkok' WHERE offset_ = -420; +UPDATE schedule SET timezone = 'Asia/Hong_Kong' WHERE offset_ = -480; +UPDATE schedule SET timezone = 'Asia/Tokyo' WHERE offset_ = -540; +UPDATE schedule SET timezone = 'Australia/Sydney' WHERE offset_ = -600; + +ALTER TABLE schedule DROP COLUMN offset_; \ No newline at end of file diff --git a/backend/migrations/20230405195753_relax_varchar_restrictions.down.sql b/backend/migrations/20230405195753_relax_varchar_restrictions.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20230405195753_relax_varchar_restrictions.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20230405195753_relax_varchar_restrictions.up.sql b/backend/migrations/20230405195753_relax_varchar_restrictions.up.sql new file mode 100644 index 0000000000000..6aae6118ca0e4 --- /dev/null +++ b/backend/migrations/20230405195753_relax_varchar_restrictions.up.sql @@ -0,0 +1,3 @@ +-- Add up migration script here +ALTER TABLE password ALTER COLUMN company TYPE VARCHAR(255); +ALTER TABLE password ALTER COLUMN name TYPE VARCHAR(255); diff --git a/backend/migrations/20230408203759_cache_pip_resolution.down.sql b/backend/migrations/20230408203759_cache_pip_resolution.down.sql new file mode 100644 index 0000000000000..4754b4ca4c752 --- /dev/null +++ b/backend/migrations/20230408203759_cache_pip_resolution.down.sql @@ -0,0 +1,2 @@ +-- Add down migration script here +DROP TABLE pip_resolution_cache; \ No newline at end of file diff --git a/backend/migrations/20230408203759_cache_pip_resolution.up.sql b/backend/migrations/20230408203759_cache_pip_resolution.up.sql new file mode 100644 index 0000000000000..ecbfff3820107 --- /dev/null +++ b/backend/migrations/20230408203759_cache_pip_resolution.up.sql @@ -0,0 +1,6 @@ +-- Add up migration script here +CREATE TABLE pip_resolution_cache( + hash VARCHAR(255) PRIMARY KEY, + expiration TIMESTAMP NOT NULL, + lockfile TEXT NOT NULL +); \ No newline at end of file diff --git a/backend/migrations/20230410122342_saved_inputs.down.sql b/backend/migrations/20230410122342_saved_inputs.down.sql new file mode 100644 index 0000000000000..265e7852f7e22 --- /dev/null +++ b/backend/migrations/20230410122342_saved_inputs.down.sql @@ -0,0 +1,2 @@ +DROP TABLE IF EXISTS input; +DROP TYPE RUNNABLE_TYPE; \ No newline at end of file diff --git a/backend/migrations/20230410122342_saved_inputs.up.sql b/backend/migrations/20230410122342_saved_inputs.up.sql new file mode 100644 index 0000000000000..9294e821a0034 --- /dev/null +++ b/backend/migrations/20230410122342_saved_inputs.up.sql @@ -0,0 +1,13 @@ +CREATE TYPE RUNNABLE_TYPE AS ENUM ('ScriptHash', 'ScriptPath', 'FlowPath'); + +CREATE TABLE IF NOT EXISTS input ( + id UUID PRIMARY KEY, + workspace_id VARCHAR(50) NOT NULL REFERENCES workspace(id), + runnable_id VARCHAR(255) NOT NULL, + runnable_type RUNNABLE_TYPE NOT NULL, + name TEXT NOT NULL, + args JSONB NOT NULL, + created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW(), + created_by VARCHAR(50) NOT NULL, + is_public BOOLEAN NOT NULL DEFAULT FALSE +); \ No newline at end of file diff --git a/backend/migrations/20230414163230_input_grant.down.sql b/backend/migrations/20230414163230_input_grant.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20230414163230_input_grant.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20230414163230_input_grant.up.sql b/backend/migrations/20230414163230_input_grant.up.sql new file mode 100644 index 0000000000000..f3a5076d67a4d --- /dev/null +++ b/backend/migrations/20230414163230_input_grant.up.sql @@ -0,0 +1,3 @@ +-- Add up migration script here +GRANT ALL ON input TO windmill_user; +GRANT ALL ON input TO windmill_admin; diff --git a/backend/migrations/20230421111850_add_tagged_scripts.down.sql b/backend/migrations/20230421111850_add_tagged_scripts.down.sql new file mode 100644 index 0000000000000..538f75b4e4cad --- /dev/null +++ b/backend/migrations/20230421111850_add_tagged_scripts.down.sql @@ -0,0 +1,4 @@ +-- Add down migration script here +ALTER TABLE script DROP COLUMN tag; +ALTER TABLE completed_job DROP COLUMN tag; +ALTER TABLE queue DROP COLUMN tag; \ No newline at end of file diff --git a/backend/migrations/20230421111850_add_tagged_scripts.up.sql b/backend/migrations/20230421111850_add_tagged_scripts.up.sql new file mode 100644 index 0000000000000..d9da1cab3a585 --- /dev/null +++ b/backend/migrations/20230421111850_add_tagged_scripts.up.sql @@ -0,0 +1,4 @@ +-- Add up migration script here +ALTER TABLE script ADD COLUMN tag VARCHAR(50); +ALTER TABLE completed_job ADD COLUMN tag VARCHAR(50) NOT NULL DEFAULT 'other'; +ALTER TABLE queue ADD COLUMN tag VARCHAR(50) NOT NULL DEFAULT 'other'; \ No newline at end of file diff --git a/backend/migrations/20230429082953_add_drafts.down.sql b/backend/migrations/20230429082953_add_drafts.down.sql new file mode 100644 index 0000000000000..0c73d933931c5 --- /dev/null +++ b/backend/migrations/20230429082953_add_drafts.down.sql @@ -0,0 +1,3 @@ +-- Add down migration script here +DROP TABLE draft; +DROP TYPE DRAFT_TYPE; diff --git a/backend/migrations/20230429082953_add_drafts.up.sql b/backend/migrations/20230429082953_add_drafts.up.sql new file mode 100644 index 0000000000000..c8257a762b882 --- /dev/null +++ b/backend/migrations/20230429082953_add_drafts.up.sql @@ -0,0 +1,18 @@ +-- Add up migration script here +CREATE TYPE DRAFT_TYPE AS ENUM ('script', 'flow', 'app'); + +CREATE TABLE draft ( + workspace_id VARCHAR(50) NOT NULL REFERENCES workspace(id), + path VARCHAR(255) NOT NULL, + typ DRAFT_TYPE NOT NULL, + value JSONB NOT NULL, + created_at TIMESTAMP NOT NULL DEFAULT now(), + PRIMARY KEY (workspace_id, path, typ) +); + +GRANT ALL ON draft TO windmill_admin; +GRANT ALL ON draft TO windmill_user; + +ALTER TABLE script ADD COLUMN draft_only BOOLEAN; +ALTER TABLE flow ADD COLUMN draft_only BOOLEAN; +ALTER TABLE app ADD COLUMN draft_only BOOLEAN; diff --git a/backend/migrations/20230507170410_raw_app.down.sql b/backend/migrations/20230507170410_raw_app.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20230507170410_raw_app.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20230507170410_raw_app.up.sql b/backend/migrations/20230507170410_raw_app.up.sql new file mode 100644 index 0000000000000..a9ca424a6f9b1 --- /dev/null +++ b/backend/migrations/20230507170410_raw_app.up.sql @@ -0,0 +1,33 @@ +-- Add up migration script here +CREATE TABLE raw_app ( + path varchar(255) PRIMARY KEY, + version INTEGER NOT NULL DEFAULT 0, + workspace_id VARCHAR(50) NOT NULL REFERENCES workspace(id), + summary VARCHAR(1000) NOT NULL DEFAULT '', + edited_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(), + data TEXT NOT NULL, + extra_perms JSONB NOT NULL DEFAULT '{}' +); + +CREATE POLICY see_own ON raw_app FOR ALL +USING (SPLIT_PART(raw_app.path, '/', 1) = 'u' AND SPLIT_PART(raw_app.path, '/', 2) = current_setting('session.user')); + +CREATE POLICY see_member ON raw_app FOR ALL +USING (SPLIT_PART(raw_app.path, '/', 1) = 'g' AND SPLIT_PART(raw_app.path, '/', 2) = any(regexp_split_to_array(current_setting('session.groups'), ',')::text[])); + +CREATE POLICY see_extra_perms_user ON raw_app FOR ALL +USING (extra_perms ? CONCAT('u/', current_setting('session.user'))) +WITH CHECK ((extra_perms ->> CONCAT('u/', current_setting('session.user')))::boolean); + +CREATE POLICY see_extra_perms_groups ON raw_app FOR ALL +USING (extra_perms ?| regexp_split_to_array(current_setting('session.pgroups'), ',')::text[]) +WITH CHECK (exists( + SELECT key, value FROM jsonb_each_text(extra_perms) + WHERE SPLIT_PART(key, '/', 1) = 'g' AND key = ANY(regexp_split_to_array(current_setting('session.pgroups'), ',')::text[]) + AND value::boolean)); + +CREATE POLICY see_folder_extra_perms_user ON raw_app FOR ALL +USING (SPLIT_PART(raw_app.path, '/', 1) = 'f' AND SPLIT_PART(raw_app.path, '/', 2) = any(regexp_split_to_array(current_setting('session.folders_read'), ',')::text[])) +WITH CHECK (SPLIT_PART(raw_app.path, '/', 1) = 'f' AND SPLIT_PART(raw_app.path, '/', 2) = any(regexp_split_to_array(current_setting('session.folders_write'), ',')::text[])); + +ALTER TYPE FAVORITE_KIND ADD VALUE 'raw_app'; \ No newline at end of file diff --git a/backend/migrations/20230509130016_raw_app_grant.down.sql b/backend/migrations/20230509130016_raw_app_grant.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20230509130016_raw_app_grant.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20230509130016_raw_app_grant.up.sql b/backend/migrations/20230509130016_raw_app_grant.up.sql new file mode 100644 index 0000000000000..8896985c27b8a --- /dev/null +++ b/backend/migrations/20230509130016_raw_app_grant.up.sql @@ -0,0 +1,3 @@ +-- Add up migration script here +GRANT ALL ON raw_app TO windmill_admin; +GRANT ALL ON raw_app TO windmill_user; \ No newline at end of file diff --git a/backend/migrations/20230510101952_jsonb_to_json.down.sql b/backend/migrations/20230510101952_jsonb_to_json.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20230510101952_jsonb_to_json.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20230510101952_jsonb_to_json.up.sql b/backend/migrations/20230510101952_jsonb_to_json.up.sql new file mode 100644 index 0000000000000..298d1cfe8bee1 --- /dev/null +++ b/backend/migrations/20230510101952_jsonb_to_json.up.sql @@ -0,0 +1,3 @@ +-- Add up migration script here +ALTER TABLE app_version +ALTER COLUMN value TYPE json; \ No newline at end of file diff --git a/backend/migrations/20230510104144_jsonb_to_json_draft.down.sql b/backend/migrations/20230510104144_jsonb_to_json_draft.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20230510104144_jsonb_to_json_draft.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20230510104144_jsonb_to_json_draft.up.sql b/backend/migrations/20230510104144_jsonb_to_json_draft.up.sql new file mode 100644 index 0000000000000..676bc42568998 --- /dev/null +++ b/backend/migrations/20230510104144_jsonb_to_json_draft.up.sql @@ -0,0 +1,3 @@ +-- Add up migration script here +ALTER TABLE draft +ALTER COLUMN value TYPE json; \ No newline at end of file diff --git a/backend/migrations/20230512191209_update_app_n.down.sql b/backend/migrations/20230512191209_update_app_n.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20230512191209_update_app_n.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20230512191209_update_app_n.up.sql b/backend/migrations/20230512191209_update_app_n.up.sql new file mode 100644 index 0000000000000..93a6c8283a0da --- /dev/null +++ b/backend/migrations/20230512191209_update_app_n.up.sql @@ -0,0 +1,1144 @@ +-- Add up migration script here +-- Add up migration script here + +with _insert as +( +INSERT INTO + app_version(app_id, created_by, created_at, value) +VALUES + ( + ( + SELECT + id + FROM + app + WHERE + workspace_id = 'admins' + AND path = 'g/all/setup_app' + ), + 'admin@windmill.dev', + '2023-01-01 00:00:00.000000 +00:00', + '{ + "css": { + "containercomponent": { + "container": { + "style": "border: 1px solid #898989;" + } + } + }, + "grid": [ + { + "3": { + "h": 1, + "w": 3, + "x": 0, + "y": 0, + "fixed": false, + "id": "ab" + }, + "12": { + "h": 1, + "w": 7, + "x": 0, + "y": 1, + "id": "ab", + "fixed": false + }, + "id": "ab", + "data": { + "id": "ab", + "type": "textcomponent", + "customCss": {}, + "configuration": { + "style": { + "type": "static", + "value": "Title" + }, + "tooltip": { + "type": "static", + "value": "" + }, + "copyButton": { + "type": "static", + "value": false + } + }, + "componentInput": { + "eval": "Setup your Windmill Instance", + "type": "template", + "value": "Hello ${ctx.username}", + "fieldType": "template" + }, + "verticalAlignment": "top", + "horizontalAlignment": "left" + } + }, + { + "3": { + "h": 8, + "w": 3, + "x": 0, + "y": 1, + "fixed": false, + "id": "x" + }, + "12": { + "h": 7, + "w": 7, + "x": 0, + "y": 3, + "id": "x", + "fixed": false + }, + "id": "x", + "data": { + "id": "x", + "type": "containercomponent", + "customCss": { + "container": { + "class": "", + "style": "border: 1px solid #898989;" + } + }, + "configuration": {}, + "numberOfSubgrids": 1 + } + }, + { + "3": { + "h": 7, + "w": 3, + "x": 0, + "y": 9, + "fixed": true, + "id": "z" + }, + "12": { + "h": 7, + "w": 5, + "x": 7, + "y": 3, + "id": "z", + "fixed": true + }, + "id": "z", + "data": { + "id": "z", + "type": "containercomponent", + "customCss": { + "container": { + "class": "", + "style": "" + } + }, + "configuration": {}, + "numberOfSubgrids": 1 + } + }, + { + "3": { + "h": 3, + "w": 3, + "x": 0, + "y": 16, + "id": "u", + "max": { + "h": 100, + "w": 3 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": false, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "12": { + "h": 2, + "w": 12, + "x": 0, + "y": 12, + "id": "u", + "max": { + "h": 100, + "w": 12 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": false, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "id": "u", + "data": { + "id": "u", + "card": false, + "type": "buttoncomponent", + "softWrap": true, + "configuration": { + "goto": { + "type": "static", + "value": "/user/logout", + "fieldType": "text", + "onlyStatic": true + }, + "size": { + "type": "static", + "value": "lg", + "fieldType": "select", + "onlyStatic": true, + "optionValuesKey": "buttonSizeOptions" + }, + "color": { + "type": "static", + "value": "blue", + "fieldType": "select", + "onlyStatic": true, + "optionValuesKey": "buttonColorOptions" + }, + "label": { + "type": "static", + "value": "Setup instance", + "fieldType": "text" + }, + "disabled": { + "expr": "g.result == \"\" || i.result == \"\"", + "type": "eval", + "fieldType": "boolean" + }, + "afterIcon": { + "type": "static", + "value": "Zap" + }, + "onSuccess": { + "type": "oneOf", + "selected": "gotoUrl", + "configuration": { + "none": {}, + "setTab": { + "setTab": { + "type": "static", + "value": [] + } + }, + "gotoUrl": { + "url": { + "type": "connected", + "value": "", + "connection": { + "path": "result", + "componentId": "bg_0" + } + }, + "newTab": { + "type": "static", + "value": false + } + }, + "sendToast": { + "message": { + "type": "static", + "value": "" + } + } + } + }, + "beforeIcon": { + "type": "static" + }, + "fillContainer": { + "type": "static", + "value": true, + "fieldType": "boolean", + "onlyStatic": true + }, + "triggerOnAppLoad": { + "type": "static" + } + }, + "componentInput": { + "type": "runnable", + "fields": { + "cron_str": { + "type": "connected", + "value": null, + "fieldType": "string", + "connection": { + "path": "result", + "componentId": "p" + } + }, + "newEmail": { + "type": "connected", + "value": null, + "format": "", + "fieldType": "string", + "connection": { + "path": "result", + "componentId": "g" + } + }, + "oldEmail": { + "type": "connected", + "value": null, + "fieldType": "string", + "connection": { + "path": "email", + "componentId": "ctx" + } + }, + "newPassword": { + "type": "connected", + "value": null, + "format": "", + "fieldType": "string", + "connection": { + "path": "result", + "componentId": "i" + } + }, + "enable_hub_sync": { + "type": "connected", + "value": null, + "format": "", + "fieldType": "boolean", + "connection": { + "path": "result", + "componentId": "n" + } + } + }, + "runnable": { + "name": "Change Account", + "type": "runnableByName", + "inlineScript": { + "path": "u/user/effortless_app/Change Account", + "schema": { + "type": "object", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "required": [ + "oldEmail", + "newEmail", + "newPassword", + "enable_hub_sync", + "cron_str" + ], + "properties": { + "cron_str": { + "type": "string", + "default": null, + "description": "" + }, + "newEmail": { + "type": "string", + "format": "", + "default": null, + "description": "" + }, + "oldEmail": { + "type": "string", + "default": null, + "description": "" + }, + "newPassword": { + "type": "string", + "format": "", + "default": null, + "description": "" + }, + "enable_hub_sync": { + "type": "boolean", + "format": "", + "default": null, + "description": "" + } + } + }, + "content": "import * as wmill from \"https://deno.land/x/windmill@v1.99.0/mod.ts\";\n\nexport async function main(\n oldEmail: string,\n newEmail: string,\n newPassword: string,\n enable_hub_sync: boolean,\n cron_str: string,\n) {\n try {\n await wmill.UserService.createUserGlobally({\n requestBody: {\n email: newEmail,\n password: newPassword,\n super_admin: true,\n },\n });\n } catch (e) {\n throw Error(\"User already exist\")\n }\n const new_token = await wmill.UserService.login({\n requestBody: {\n email: newEmail,\n password: newPassword,\n },\n });\n\n wmill.setClient(new_token, Deno.env.get(\"BASE_INTERNAL_URL\")!);\n await wmill.JobService.runScriptByPath({\n workspace: \"admins\",\n path: \"u/admin/hub_sync\",\n requestBody: {},\n });\n\n if (enable_hub_sync) {\n try {\n await wmill.ScheduleService.createSchedule({\n workspace: \"admins\",\n requestBody: {\n path: \"g/all/hub_sync\",\n schedule: cron_str,\n script_path: \"u/admin/hub_sync\",\n is_flow: false,\n args: {},\n enabled: true,\n timezone: \"Etc/UTC\",\n },\n });\n } catch {\n console.log(\"Schedule already exists\");\n }\n }\n\n await wmill.UserService.globalUserDelete({ email: oldEmail });\n\n}\n", + "language": "deno" + } + }, + "fieldType": "any", + "doNotRecomputeOnInputChanged": false + }, + "verticalAlignment": "center", + "horizontalAlignment": "center" + } + } + ], + "subgrids": { + "x-0": [ + { + "3": { + "h": 1, + "w": 3, + "x": 0, + "y": 0, + "id": "l", + "max": { + "h": 100, + "w": 3 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "12": { + "h": 1, + "w": 12, + "x": 0, + "y": 0, + "id": "l", + "max": { + "h": 100, + "w": 12 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "id": "l", + "data": { + "id": "l", + "card": false, + "type": "textcomponent", + "softWrap": true, + "configuration": { + "style": { + "type": "static", + "value": "Subtitle", + "fieldType": "select", + "onlyStatic": true, + "optionValuesKey": "textStyleOptions" + }, + "tooltip": { + "type": "static", + "value": "" + }, + "copyButton": { + "type": "static", + "value": false, + "fieldType": "boolean", + "onlyStatic": true + }, + "extraStyle": { + "type": "static", + "value": "", + "tooltip": "CSS rules like \"color: blue;\"", + "fieldType": "text" + } + }, + "componentInput": { + "eval": "Change superadmin account", + "type": "template", + "value": "Hello ${ctx.username}", + "fieldType": "template" + }, + "verticalAlignment": "center", + "horizontalAlignment": "left" + } + }, + { + "3": { + "h": 1, + "w": 1, + "x": 0, + "y": 1, + "id": "c", + "max": { + "h": 100, + "w": 3 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": false, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "12": { + "h": 1, + "w": 4, + "x": 0, + "y": 1, + "id": "c", + "max": { + "h": 100, + "w": 12 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": false, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "id": "c", + "data": { + "id": "c", + "card": false, + "type": "textcomponent", + "softWrap": true, + "configuration": { + "style": { + "type": "static", + "value": "Label", + "fieldType": "select", + "onlyStatic": true, + "optionValuesKey": "textStyleOptions" + }, + "tooltip": { + "type": "static", + "value": "" + }, + "copyButton": { + "type": "static", + "value": false, + "fieldType": "boolean", + "onlyStatic": true + }, + "extraStyle": { + "type": "static", + "value": "", + "tooltip": "CSS rules like \"color: blue;\"", + "fieldType": "text" + } + }, + "componentInput": { + "eval": "Old Email", + "type": "template", + "value": "Hello ${ctx.username}", + "fieldType": "template" + }, + "verticalAlignment": "center", + "horizontalAlignment": "left" + } + }, + { + "3": { + "h": 1, + "w": 1, + "x": 0, + "y": 2, + "max": { + "h": 100, + "w": 3 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": false, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false, + "id": "w" + }, + "12": { + "h": 1, + "w": 6, + "x": 0, + "y": 2, + "id": "w", + "max": { + "h": 100, + "w": 12 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": false, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "id": "w", + "data": { + "id": "w", + "card": false, + "type": "textcomponent", + "softWrap": false, + "configuration": { + "style": { + "type": "static", + "value": "Body", + "fieldType": "select", + "onlyStatic": true, + "optionValuesKey": "textStyleOptions" + }, + "tooltip": { + "type": "static", + "value": "" + }, + "copyButton": { + "type": "static", + "value": false, + "fieldType": "boolean", + "onlyStatic": true + }, + "extraStyle": { + "type": "static", + "value": "", + "tooltip": "CSS rules like \"color: blue;\"", + "fieldType": "text" + } + }, + "componentInput": { + "eval": "${ctx.username}", + "type": "template", + "value": "Hello ${ctx.username}", + "fieldType": "template" + }, + "verticalAlignment": "center", + "horizontalAlignment": "left" + } + }, + { + "3": { + "h": 1, + "w": 1, + "x": 0, + "y": 4, + "id": "d", + "max": { + "h": 100, + "w": 3 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": false, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "12": { + "h": 1, + "w": 5, + "x": 7, + "y": 1, + "id": "d", + "max": { + "h": 100, + "w": 12 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": false, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "id": "d", + "data": { + "id": "d", + "card": false, + "type": "textcomponent", + "softWrap": true, + "configuration": { + "style": { + "type": "static", + "value": "Label", + "fieldType": "select", + "onlyStatic": true, + "optionValuesKey": "textStyleOptions" + }, + "tooltip": { + "type": "static", + "value": "" + }, + "copyButton": { + "type": "static", + "value": false, + "fieldType": "boolean", + "onlyStatic": true + }, + "extraStyle": { + "type": "static", + "value": "", + "tooltip": "CSS rules like \"color: blue;\"", + "fieldType": "text" + } + }, + "componentInput": { + "eval": "New Email", + "type": "template", + "value": "Hello ${ctx.username}", + "fieldType": "template" + }, + "verticalAlignment": "center", + "horizontalAlignment": "left" + } + }, + { + "3": { + "h": 1, + "w": 1, + "x": 2, + "y": 4, + "id": "e", + "max": { + "h": 100, + "w": 3 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "12": { + "h": 1, + "w": 5, + "x": 7, + "y": 4, + "id": "e", + "max": { + "h": 100, + "w": 12 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "id": "e", + "data": { + "id": "e", + "card": false, + "type": "textcomponent", + "softWrap": true, + "configuration": { + "style": { + "type": "static", + "value": "Label", + "fieldType": "select", + "onlyStatic": true, + "optionValuesKey": "textStyleOptions" + }, + "tooltip": { + "type": "static", + "value": "" + }, + "copyButton": { + "type": "static", + "value": false, + "fieldType": "boolean", + "onlyStatic": true + }, + "extraStyle": { + "type": "static", + "value": "", + "tooltip": "CSS rules like \"color: blue;\"", + "fieldType": "text" + } + }, + "componentInput": { + "eval": "New Password", + "type": "template", + "value": "Hello ${ctx.username}", + "fieldType": "template" + }, + "verticalAlignment": "center", + "horizontalAlignment": "left" + } + }, + { + "3": { + "h": 1, + "w": 1, + "x": 0, + "y": 5, + "id": "g", + "max": { + "h": 100, + "w": 3 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": false, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "12": { + "h": 1, + "w": 5, + "x": 7, + "y": 2, + "id": "g", + "max": { + "h": 100, + "w": 12 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": false, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "id": "g", + "data": { + "id": "g", + "card": false, + "type": "textinputcomponent", + "softWrap": true, + "configuration": { + "placeholder": { + "type": "static", + "value": "good@corp.com", + "fieldType": "text", + "onlyStatic": true + }, + "defaultValue": { + "type": "static", + "fieldType": "text" + } + }, + "verticalAlignment": "center" + } + }, + { + "3": { + "h": 1, + "w": 1, + "x": 2, + "y": 5, + "id": "i", + "max": { + "h": 100, + "w": 3 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": false, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "12": { + "h": 1, + "w": 5, + "x": 7, + "y": 5, + "id": "i", + "max": { + "h": 100, + "w": 12 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": false, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "id": "i", + "data": { + "id": "i", + "card": false, + "type": "passwordinputcomponent", + "softWrap": true, + "configuration": { + "placeholder": { + "type": "static", + "value": "Password", + "fieldType": "text", + "onlyStatic": true + } + }, + "verticalAlignment": "center" + } + } + ], + "z-0": [ + { + "3": { + "h": 1, + "w": 3, + "x": 0, + "y": 0, + "id": "aa", + "max": { + "h": 100, + "w": 3 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "12": { + "h": 1, + "w": 12, + "x": 0, + "y": 0, + "id": "aa", + "max": { + "h": 100, + "w": 12 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "id": "aa", + "data": { + "id": "aa", + "card": false, + "type": "textcomponent", + "softWrap": true, + "configuration": { + "style": { + "type": "static", + "value": "Subtitle", + "fieldType": "select", + "onlyStatic": true, + "optionValuesKey": "textStyleOptions" + }, + "tooltip": { + "type": "static", + "value": "We recommend enabling hub sync below. This will create a schedule in the admin workspace on behalf of the new user once you press the button. This schedule will automatically synchronize resource types from the hub to your local instance." + }, + "copyButton": { + "type": "static", + "value": false, + "fieldType": "boolean", + "onlyStatic": true + }, + "extraStyle": { + "type": "static", + "value": "", + "tooltip": "CSS rules like \"color: blue;\"", + "fieldType": "text" + } + }, + "componentInput": { + "eval": "Hub Sync", + "type": "template", + "value": "Hello ${ctx.username}", + "fieldType": "template" + }, + "verticalAlignment": "center", + "horizontalAlignment": "left" + } + }, + { + "3": { + "h": 1, + "w": 2, + "x": 0, + "y": 3, + "id": "n", + "max": { + "h": 100, + "w": 3 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "12": { + "h": 1, + "w": 6, + "x": 0, + "y": 2, + "id": "n", + "max": { + "h": 100, + "w": 12 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "id": "n", + "data": { + "id": "n", + "card": false, + "type": "checkboxcomponent", + "softWrap": true, + "configuration": { + "label": { + "type": "static", + "value": "Schedule", + "fieldType": "text" + }, + "defaultValue": { + "type": "static", + "value": true, + "fieldType": "boolean" + } + }, + "verticalAlignment": "center", + "horizontalAlignment": "center" + } + }, + { + "3": { + "h": 1, + "w": 1, + "x": 2, + "y": 3, + "id": "p", + "max": { + "h": 100, + "w": 3 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "12": { + "h": 1, + "w": 6, + "x": 6, + "y": 2, + "id": "p", + "max": { + "h": 100, + "w": 12 + }, + "min": { + "h": 1, + "w": 1 + }, + "fixed": true, + "draggable": true, + "resizable": true, + "customDragger": false, + "customResizer": false + }, + "id": "p", + "data": { + "id": "p", + "card": false, + "type": "textinputcomponent", + "softWrap": true, + "configuration": { + "placeholder": { + "type": "static", + "value": "Type...", + "fieldType": "text", + "onlyStatic": true + }, + "defaultValue": { + "type": "static", + "value": "0 0 0 * * *", + "fieldType": "text" + } + }, + "verticalAlignment": "center" + } + } + ] + }, + "fullscreen": false, + "norefreshbar": true, + "hiddenInlineScripts": [ + { + "name": "Background Script 0", + "fields": {}, + "autoRefresh": true, + "inlineScript": { + "path": "u/user/effortless_app/Background Script 0", + "content": "return ''/user/logout?rd='' + encodeURIComponent(''/user/login?email='' + g.result)", + "language": "frontend", + "refreshOn": [ + { + "id": "g", + "key": "result" + } + ] + }, + "doNotRecomputeOnInputChanged": false + } + ], + "unusedInlineScripts": [] +}') RETURNING id) +UPDATE app SET versions = ARRAY((select id from _insert)), policy = '{ "execution_mode": "viewer", "triggerables": {} }' +WHERE workspace_id = 'admins' AND path = 'g/all/setup_app'; diff --git a/backend/migrations/20230515131104_rls_raw_app.down.sql b/backend/migrations/20230515131104_rls_raw_app.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20230515131104_rls_raw_app.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20230515131104_rls_raw_app.up.sql b/backend/migrations/20230515131104_rls_raw_app.up.sql new file mode 100644 index 0000000000000..fc283c1b39f86 --- /dev/null +++ b/backend/migrations/20230515131104_rls_raw_app.up.sql @@ -0,0 +1,2 @@ +-- Add up migration script here +ALTER TABLE raw_app ENABLE ROW LEVEL SECURITY; diff --git a/backend/migrations/20230516140626_capture_check_increase.down.sql b/backend/migrations/20230516140626_capture_check_increase.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20230516140626_capture_check_increase.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20230516140626_capture_check_increase.up.sql b/backend/migrations/20230516140626_capture_check_increase.up.sql new file mode 100644 index 0000000000000..0d35df0483ce7 --- /dev/null +++ b/backend/migrations/20230516140626_capture_check_increase.up.sql @@ -0,0 +1,3 @@ +-- Add up migration script here +alter table capture DROP constraint capture_payload_check; +alter table capture add constraint caputre_payload_too_big check (length(payload::text) < 512 * 1024); diff --git a/backend/migrations/20230516141630_capture_check_increase_2.down.sql b/backend/migrations/20230516141630_capture_check_increase_2.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20230516141630_capture_check_increase_2.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20230516141630_capture_check_increase_2.up.sql b/backend/migrations/20230516141630_capture_check_increase_2.up.sql new file mode 100644 index 0000000000000..91c1c878881a4 --- /dev/null +++ b/backend/migrations/20230516141630_capture_check_increase_2.up.sql @@ -0,0 +1,3 @@ +-- Add up migration script here +alter table capture DROP constraint caputre_payload_too_big; +alter table capture add constraint capture_payload_too_big check (length(payload::text) < 512 * 1024); \ No newline at end of file diff --git a/backend/migrations/20230522170237_schedule_on_failure.down.sql b/backend/migrations/20230522170237_schedule_on_failure.down.sql new file mode 100644 index 0000000000000..16bd4fb403128 --- /dev/null +++ b/backend/migrations/20230522170237_schedule_on_failure.down.sql @@ -0,0 +1,2 @@ +-- Add down migration script here +ALTER TABLE schedule DROP COLUMN on_failure; diff --git a/backend/migrations/20230522170237_schedule_on_failure.up.sql b/backend/migrations/20230522170237_schedule_on_failure.up.sql new file mode 100644 index 0000000000000..fd7193b018dcb --- /dev/null +++ b/backend/migrations/20230522170237_schedule_on_failure.up.sql @@ -0,0 +1,2 @@ +-- Add up migration script here +ALTER TABLE schedule ADD COLUMN on_failure VARCHAR(1000) DEFAULT NULL; diff --git a/backend/migrations/20230524065919_fix_migration_break.down.sql b/backend/migrations/20230524065919_fix_migration_break.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20230524065919_fix_migration_break.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20230524065919_fix_migration_break.up.sql b/backend/migrations/20230524065919_fix_migration_break.up.sql new file mode 100644 index 0000000000000..f4db3117a138b --- /dev/null +++ b/backend/migrations/20230524065919_fix_migration_break.up.sql @@ -0,0 +1,11 @@ +-- Add up migration script here +do + $$ +BEGIN + +IF (NOT EXISTS (SELECT workspace_id FROM script WHERE workspace_id = 'demo' UNION ALL SELECT workspace_id FROM flow WHERE workspace_id = 'demo' UNION ALL SELECT workspace_id FROM app WHERE workspace_id = 'demo')) +THEN + DELETE FROM workspace_invite WHERE workspace_id = 'demo'; +END IF; +END +$$ diff --git a/backend/migrations/20230524065920_remove_demo_starter.down.sql b/backend/migrations/20230524065920_remove_demo_starter.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20230524065920_remove_demo_starter.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20230524065920_remove_demo_starter.up.sql b/backend/migrations/20230524065920_remove_demo_starter.up.sql new file mode 100644 index 0000000000000..0cc0ad605e16b --- /dev/null +++ b/backend/migrations/20230524065920_remove_demo_starter.up.sql @@ -0,0 +1,43 @@ +-- Add up migration script here +do + $$ +BEGIN + +IF (NOT EXISTS (SELECT workspace_id FROM script WHERE workspace_id = 'demo' UNION ALL SELECT workspace_id FROM flow WHERE workspace_id = 'demo' UNION ALL SELECT workspace_id FROM app WHERE workspace_id = 'demo')) +THEN + DELETE FROM usr WHERE workspace_id = 'demo'; + DELETE FROM usr_to_group WHERE workspace_id = 'demo'; + DELETE FROM queue WHERE workspace_id = 'demo'; + DELETE FROM completed_job WHERE workspace_id = 'demo'; + DELETE FROM raw_app WHERE workspace_id = 'demo'; + DELETE FROM variable WHERE workspace_id = 'demo'; + DELETE FROM schedule WHERE workspace_id = 'demo'; + DELETE FROM resource WHERE workspace_id = 'demo'; + DELETE FROM resource_type WHERE workspace_id = 'demo'; + DELETE FROM workspace_key WHERE workspace_id = 'demo'; + DELETE FROM group_ WHERE workspace_id = 'demo'; + DELETE FROM workspace_settings WHERE workspace_id = 'demo'; + DELETE FROM workspace WHERE id = 'demo'; +END IF; + +IF (NOT EXISTS (SELECT workspace_id FROM script WHERE workspace_id = 'starter' UNION ALL SELECT workspace_id FROM flow WHERE workspace_id = 'starter' UNION ALL SELECT workspace_id FROM app WHERE workspace_id = 'starter')) +THEN + DELETE FROM usr WHERE workspace_id = 'starter'; + DELETE FROM usr_to_group WHERE workspace_id = 'starter'; + DELETE FROM queue WHERE workspace_id = 'starter'; + DELETE FROM completed_job WHERE workspace_id = 'starter'; + DELETE FROM raw_app WHERE workspace_id = 'starter'; + DELETE FROM variable WHERE workspace_id = 'starter'; + DELETE FROM schedule WHERE workspace_id = 'starter'; + DELETE FROM resource WHERE workspace_id = 'starter'; + DELETE FROM resource_type WHERE workspace_id = 'starter'; + DELETE FROM workspace_key WHERE workspace_id = 'starter'; + DELETE FROM group_ WHERE workspace_id = 'starter'; + DELETE FROM workspace_settings WHERE workspace_id = 'starter'; + DELETE FROM workspace WHERE id = 'starter'; +END IF; + + +END +$$ + diff --git a/backend/migrations/20230524133926_update_cli.down.sql b/backend/migrations/20230524133926_update_cli.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20230524133926_update_cli.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20230524133926_update_cli.up.sql b/backend/migrations/20230524133926_update_cli.up.sql new file mode 100644 index 0000000000000..f366d0f645a90 --- /dev/null +++ b/backend/migrations/20230524133926_update_cli.up.sql @@ -0,0 +1,15 @@ +-- Add up migration script here +UPDATE script SET content = 'import wmill from "https://deno.land/x/wmill@v1.104.0/main.ts"; +export async function main() { + await run( + "workspace", "add", "__automation", "admins", Deno.env.get("BASE_INTERNAL_URL") + "/", "--token", Deno.env.get("WM_TOKEN")); + + await run("hub", "pull"); +} + +async function run(...cmd: string[]) { + console.log("Running \"" + cmd.join('' '') + "\""); + await wmill.parse(cmd); +}', summary = 'Synchronize Hub Resource types with instance', +description = 'Basic administrative script to sync latest resource types from hub to share to every workspace. Recommended to run at least once. On a schedule by default.' +WHERE hash = -28028598712388162 AND workspace_id = 'admins'; \ No newline at end of file diff --git a/backend/migrations/20230524163022_update_cli_2.down.sql b/backend/migrations/20230524163022_update_cli_2.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20230524163022_update_cli_2.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20230524163022_update_cli_2.up.sql b/backend/migrations/20230524163022_update_cli_2.up.sql new file mode 100644 index 0000000000000..d07a887158439 --- /dev/null +++ b/backend/migrations/20230524163022_update_cli_2.up.sql @@ -0,0 +1,15 @@ +-- Add up migration script here +UPDATE script SET content = 'import wmill from "https://deno.land/x/wmill@v1.104.1/main.ts"; +export async function main() { + await run( + "workspace", "add", "__automation", "admins", Deno.env.get("BASE_INTERNAL_URL") + "/", "--token", Deno.env.get("WM_TOKEN")); + + await run("hub", "pull"); +} + +async function run(...cmd: string[]) { + console.log("Running \"" + cmd.join('' '') + "\""); + await wmill.parse(cmd); +}', summary = 'Synchronize Hub Resource types with instance', +description = 'Basic administrative script to sync latest resource types from hub to share to every workspace. Recommended to run at least once. On a schedule by default.' +WHERE hash = -28028598712388162 AND workspace_id = 'admins'; \ No newline at end of file diff --git a/backend/migrations/20230527130558_update_hub_sync.down.sql b/backend/migrations/20230527130558_update_hub_sync.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20230527130558_update_hub_sync.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20230527130558_update_hub_sync.up.sql b/backend/migrations/20230527130558_update_hub_sync.up.sql new file mode 100644 index 0000000000000..ea4bf2ab2eb3b --- /dev/null +++ b/backend/migrations/20230527130558_update_hub_sync.up.sql @@ -0,0 +1,15 @@ +-- Add up migration script here +UPDATE script SET content = 'import wmill from "https://deno.land/x/wmill@v1.105.0/main.ts"; +export async function main() { + await run( + "workspace", "add", "__automation", "admins", Deno.env.get("BASE_INTERNAL_URL") + "/", "--token", Deno.env.get("WM_TOKEN")); + + await run("hub", "pull"); +} + +async function run(...cmd: string[]) { + console.log("Running \"" + cmd.join('' '') + "\""); + await wmill.parse(cmd); +}', summary = 'Synchronize Hub Resource types with instance', +description = 'Basic administrative script to sync latest resource types from hub to share to every workspace. Recommended to run at least once. On a schedule by default.' +WHERE hash = -28028598712388162 AND workspace_id = 'admins'; \ No newline at end of file diff --git a/backend/migrations/20230527141935_remove_starter_policies.down.sql b/backend/migrations/20230527141935_remove_starter_policies.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20230527141935_remove_starter_policies.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20230527141935_remove_starter_policies.up.sql b/backend/migrations/20230527141935_remove_starter_policies.up.sql new file mode 100644 index 0000000000000..3b4daf87c4314 --- /dev/null +++ b/backend/migrations/20230527141935_remove_starter_policies.up.sql @@ -0,0 +1,18 @@ +-- Add up migration script here +DO +$do$ + DECLARE + i text; + arr text[] := array['resource', 'script', 'variable', 'schedule', 'flow', 'completed_job']; + BEGIN + FOREACH i IN ARRAY arr + LOOP + EXECUTE FORMAT( + $$ + DROP POLICY see_starter ON %1$I; + $$, + i + ); + END LOOP; + END +$do$; diff --git a/backend/migrations/20230529144123_add_token_scopes.down.sql b/backend/migrations/20230529144123_add_token_scopes.down.sql new file mode 100644 index 0000000000000..303815a093d84 --- /dev/null +++ b/backend/migrations/20230529144123_add_token_scopes.down.sql @@ -0,0 +1,2 @@ +-- Add down migration script here +ALTER TABLE token DROP COLUMN scopes; \ No newline at end of file diff --git a/backend/migrations/20230529144123_add_token_scopes.up.sql b/backend/migrations/20230529144123_add_token_scopes.up.sql new file mode 100644 index 0000000000000..b600199df1f1a --- /dev/null +++ b/backend/migrations/20230529144123_add_token_scopes.up.sql @@ -0,0 +1,2 @@ +-- Add up migration script here +ALTER TABLE token ADD COLUMN scopes text[]; \ No newline at end of file diff --git a/backend/migrations/20230605043929_add_envs.down.sql b/backend/migrations/20230605043929_add_envs.down.sql new file mode 100644 index 0000000000000..dddc7c139dc3e --- /dev/null +++ b/backend/migrations/20230605043929_add_envs.down.sql @@ -0,0 +1,2 @@ +-- Add down migration script here +ALTER TABLE script DROP COLUMN envs; diff --git a/backend/migrations/20230605043929_add_envs.up.sql b/backend/migrations/20230605043929_add_envs.up.sql new file mode 100644 index 0000000000000..c38fa59fc5fdd --- /dev/null +++ b/backend/migrations/20230605043929_add_envs.up.sql @@ -0,0 +1,2 @@ +-- Add up migration script here +ALTER TABLE script ADD COLUMN envs VARCHAR(1000)[]; diff --git a/backend/migrations/20230617055441_add_deployment_workspace.down.sql b/backend/migrations/20230617055441_add_deployment_workspace.down.sql new file mode 100644 index 0000000000000..2c49fa2ab9801 --- /dev/null +++ b/backend/migrations/20230617055441_add_deployment_workspace.down.sql @@ -0,0 +1,2 @@ +-- Add down migration script here +ALTER TABLE workspace_settings DROP COLUMN deploy_to; diff --git a/backend/migrations/20230617055441_add_deployment_workspace.up.sql b/backend/migrations/20230617055441_add_deployment_workspace.up.sql new file mode 100644 index 0000000000000..46db31a4ad358 --- /dev/null +++ b/backend/migrations/20230617055441_add_deployment_workspace.up.sql @@ -0,0 +1,2 @@ +-- Add up migration script here +ALTER TABLE workspace_settings ADD COLUMN deploy_to VARCHAR(255); diff --git a/backend/migrations/20230625173141_add_job_kinds.down.sql b/backend/migrations/20230625173141_add_job_kinds.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20230625173141_add_job_kinds.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20230625173141_add_job_kinds.up.sql b/backend/migrations/20230625173141_add_job_kinds.up.sql new file mode 100644 index 0000000000000..d40c50a26f983 --- /dev/null +++ b/backend/migrations/20230625173141_add_job_kinds.up.sql @@ -0,0 +1,4 @@ +-- Add up migration script here +ALTER TYPE JOB_KIND ADD VALUE IF NOT EXISTS 'http'; +ALTER TYPE JOB_KIND ADD VALUE IF NOT EXISTS 'graphql'; +ALTER TYPE JOB_KIND ADD VALUE IF NOT EXISTS 'postgresql'; \ No newline at end of file diff --git a/backend/migrations/20230626154750_add_postgresql_lang.down.sql b/backend/migrations/20230626154750_add_postgresql_lang.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20230626154750_add_postgresql_lang.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20230626154750_add_postgresql_lang.up.sql b/backend/migrations/20230626154750_add_postgresql_lang.up.sql new file mode 100644 index 0000000000000..2862c2285e272 --- /dev/null +++ b/backend/migrations/20230626154750_add_postgresql_lang.up.sql @@ -0,0 +1,2 @@ +-- Add up migration script here +ALTER TYPE SCRIPT_LANG ADD VALUE IF NOT EXISTS 'postgresql'; \ No newline at end of file diff --git a/backend/migrations/20230627235827_noop.down.sql b/backend/migrations/20230627235827_noop.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20230627235827_noop.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20230627235827_noop.up.sql b/backend/migrations/20230627235827_noop.up.sql new file mode 100644 index 0000000000000..d90665db7216f --- /dev/null +++ b/backend/migrations/20230627235827_noop.up.sql @@ -0,0 +1,2 @@ +-- Add up migration script here +ALTER TYPE JOB_KIND ADD VALUE IF NOT EXISTS 'noop'; \ No newline at end of file diff --git a/backend/migrations/20230628003451_noop.down.sql b/backend/migrations/20230628003451_noop.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20230628003451_noop.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20230628003451_noop.up.sql b/backend/migrations/20230628003451_noop.up.sql new file mode 100644 index 0000000000000..0da0a538a399f --- /dev/null +++ b/backend/migrations/20230628003451_noop.up.sql @@ -0,0 +1 @@ +-- Add up migration script here diff --git a/backend/migrations/20230701074205_nativets.down.sql b/backend/migrations/20230701074205_nativets.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20230701074205_nativets.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20230701074205_nativets.up.sql b/backend/migrations/20230701074205_nativets.up.sql new file mode 100644 index 0000000000000..fe1797acbe37e --- /dev/null +++ b/backend/migrations/20230701074205_nativets.up.sql @@ -0,0 +1,2 @@ +-- Add up migration script here +ALTER TYPE SCRIPT_LANG ADD VALUE IF NOT EXISTS 'nativets'; \ No newline at end of file diff --git a/backend/migrations/20230704090704_add_openai_workspace.down.sql b/backend/migrations/20230704090704_add_openai_workspace.down.sql new file mode 100644 index 0000000000000..2456d80ddf6d5 --- /dev/null +++ b/backend/migrations/20230704090704_add_openai_workspace.down.sql @@ -0,0 +1,2 @@ +-- Add down migration script here +ALTER TABLE workspace_settings DROP COLUMN openai_key; \ No newline at end of file diff --git a/backend/migrations/20230704090704_add_openai_workspace.up.sql b/backend/migrations/20230704090704_add_openai_workspace.up.sql new file mode 100644 index 0000000000000..3fc3c0467e031 --- /dev/null +++ b/backend/migrations/20230704090704_add_openai_workspace.up.sql @@ -0,0 +1,2 @@ +-- Add up migration script here +ALTER TABLE workspace_settings ADD COLUMN openai_key VARCHAR(255); \ No newline at end of file diff --git a/backend/migrations/20230704232924_bun.down.sql b/backend/migrations/20230704232924_bun.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20230704232924_bun.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20230704232924_bun.up.sql b/backend/migrations/20230704232924_bun.up.sql new file mode 100644 index 0000000000000..a37d0383e7bc4 --- /dev/null +++ b/backend/migrations/20230704232924_bun.up.sql @@ -0,0 +1,2 @@ +-- Add up migration script here +ALTER TYPE SCRIPT_LANG ADD VALUE IF NOT EXISTS 'bun'; \ No newline at end of file diff --git a/backend/migrations/20230705102646_add_error_handler_workspace.down.sql b/backend/migrations/20230705102646_add_error_handler_workspace.down.sql new file mode 100644 index 0000000000000..56d6c562cf60d --- /dev/null +++ b/backend/migrations/20230705102646_add_error_handler_workspace.down.sql @@ -0,0 +1,2 @@ +-- Add down migration script here +ALTER TABLE workspace_settings DROP COLUMN error_handler; \ No newline at end of file diff --git a/backend/migrations/20230705102646_add_error_handler_workspace.up.sql b/backend/migrations/20230705102646_add_error_handler_workspace.up.sql new file mode 100644 index 0000000000000..f5fe2d7b06ee3 --- /dev/null +++ b/backend/migrations/20230705102646_add_error_handler_workspace.up.sql @@ -0,0 +1,2 @@ +-- Add up migration script here +ALTER TABLE workspace_settings ADD COLUMN error_handler VARCHAR(1000); \ No newline at end of file diff --git a/backend/migrations/20230709151109_add_script_concurrency_limit.down.sql b/backend/migrations/20230709151109_add_script_concurrency_limit.down.sql new file mode 100644 index 0000000000000..7cc2e00932129 --- /dev/null +++ b/backend/migrations/20230709151109_add_script_concurrency_limit.down.sql @@ -0,0 +1,3 @@ +-- Add down migration script here +ALTER TABLE script DROP COLUMN concurrent_limit; +ALTER TABLE script DROP COLUMN concurrency_time_window_s; diff --git a/backend/migrations/20230709151109_add_script_concurrency_limit.up.sql b/backend/migrations/20230709151109_add_script_concurrency_limit.up.sql new file mode 100644 index 0000000000000..20b87fc388f0c --- /dev/null +++ b/backend/migrations/20230709151109_add_script_concurrency_limit.up.sql @@ -0,0 +1,5 @@ +-- Add up migration script here +ALTER TABLE script ADD COLUMN concurrent_limit INTEGER; +ALTER TABLE script ADD COLUMN concurrency_time_window_s INTEGER; +ALTER TABLE queue ADD COLUMN concurrent_limit INTEGER; +ALTER TABLE queue ADD COLUMN concurrency_time_window_s INTEGER; diff --git a/backend/migrations/20230710224321_mysql.down.sql b/backend/migrations/20230710224321_mysql.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20230710224321_mysql.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20230710224321_mysql.up.sql b/backend/migrations/20230710224321_mysql.up.sql new file mode 100644 index 0000000000000..d28fe606cd19e --- /dev/null +++ b/backend/migrations/20230710224321_mysql.up.sql @@ -0,0 +1,2 @@ +-- Add up migration script here +ALTER TYPE SCRIPT_LANG ADD VALUE IF NOT EXISTS 'mysql'; \ No newline at end of file diff --git a/backend/migrations/20230718090041_add_openai_resource_path.down.sql b/backend/migrations/20230718090041_add_openai_resource_path.down.sql new file mode 100644 index 0000000000000..a824ccd976954 --- /dev/null +++ b/backend/migrations/20230718090041_add_openai_resource_path.down.sql @@ -0,0 +1,3 @@ +-- Add down migration script here +ALTER TABLE workspace_settings DROP COLUMN openai_resource_path; +ALTER TABLE workspace_settings ADD COLUMN openai_key VARCHAR(255); \ No newline at end of file diff --git a/backend/migrations/20230718090041_add_openai_resource_path.up.sql b/backend/migrations/20230718090041_add_openai_resource_path.up.sql new file mode 100644 index 0000000000000..aad46026efc4d --- /dev/null +++ b/backend/migrations/20230718090041_add_openai_resource_path.up.sql @@ -0,0 +1,3 @@ +-- Add up migration script here +ALTER TABLE workspace_settings ADD COLUMN openai_resource_path VARCHAR(1000); +ALTER TABLE workspace_settings DROP COLUMN openai_key; \ No newline at end of file diff --git a/backend/migrations/20230720092702_instance_groups.down.sql b/backend/migrations/20230720092702_instance_groups.down.sql new file mode 100644 index 0000000000000..02dfa1c41dd98 --- /dev/null +++ b/backend/migrations/20230720092702_instance_groups.down.sql @@ -0,0 +1,3 @@ +-- Add down migration script here +DROP TABLE instance_group; +DROP TABLE email_to_igroup; \ No newline at end of file diff --git a/backend/migrations/20230720092702_instance_groups.up.sql b/backend/migrations/20230720092702_instance_groups.up.sql new file mode 100644 index 0000000000000..f9b93c6083e79 --- /dev/null +++ b/backend/migrations/20230720092702_instance_groups.up.sql @@ -0,0 +1,3 @@ +-- Add up migration script here +CREATE TABLE instance_group (name VARCHAR(255) PRIMARY KEY, summary VARCHAR(2000), external_id VARCHAR(1000)); +CREATE TABLE email_to_igroup (email VARCHAR(255), igroup VARCHAR(255), PRIMARY KEY (email, igroup)); \ No newline at end of file diff --git a/backend/migrations/20230721135049_add_bigquery_lang.down.sql b/backend/migrations/20230721135049_add_bigquery_lang.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20230721135049_add_bigquery_lang.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20230721135049_add_bigquery_lang.up.sql b/backend/migrations/20230721135049_add_bigquery_lang.up.sql new file mode 100644 index 0000000000000..1ddebe49f58a7 --- /dev/null +++ b/backend/migrations/20230721135049_add_bigquery_lang.up.sql @@ -0,0 +1,2 @@ +-- Add up migration script here +ALTER TYPE SCRIPT_LANG ADD VALUE IF NOT EXISTS 'bigquery'; \ No newline at end of file diff --git a/backend/migrations/20230723101321_instance_groups_fix.down.sql b/backend/migrations/20230723101321_instance_groups_fix.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20230723101321_instance_groups_fix.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20230723101321_instance_groups_fix.up.sql b/backend/migrations/20230723101321_instance_groups_fix.up.sql new file mode 100644 index 0000000000000..07b575740041c --- /dev/null +++ b/backend/migrations/20230723101321_instance_groups_fix.up.sql @@ -0,0 +1,5 @@ +-- Add up migration script here +GRANT ALL PRIVILEGES ON TABLE instance_group TO windmill_admin; +GRANT ALL PRIVILEGES ON TABLE instance_group TO windmill_user; +GRANT ALL PRIVILEGES ON TABLE email_to_igroup TO windmill_admin; +GRANT ALL PRIVILEGES ON TABLE email_to_igroup TO windmill_user; \ No newline at end of file diff --git a/backend/migrations/20230724145302_improve_pull_with_index.down.sql b/backend/migrations/20230724145302_improve_pull_with_index.down.sql new file mode 100644 index 0000000000000..556aa24dff18e --- /dev/null +++ b/backend/migrations/20230724145302_improve_pull_with_index.down.sql @@ -0,0 +1,3 @@ +-- Add down migration script here + +DROP INDEX index_queue_on_main_filter; \ No newline at end of file diff --git a/backend/migrations/20230724145302_improve_pull_with_index.up.sql b/backend/migrations/20230724145302_improve_pull_with_index.up.sql new file mode 100644 index 0000000000000..0da0a538a399f --- /dev/null +++ b/backend/migrations/20230724145302_improve_pull_with_index.up.sql @@ -0,0 +1 @@ +-- Add up migration script here diff --git a/backend/migrations/20230724163017_tags_for_flows.down.sql b/backend/migrations/20230724163017_tags_for_flows.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20230724163017_tags_for_flows.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20230724163017_tags_for_flows.up.sql b/backend/migrations/20230724163017_tags_for_flows.up.sql new file mode 100644 index 0000000000000..1558eabc7d5ae --- /dev/null +++ b/backend/migrations/20230724163017_tags_for_flows.up.sql @@ -0,0 +1,2 @@ +-- Add up migration script here +ALTER TABLE flow ADD COLUMN tag VARCHAR(50); diff --git a/backend/migrations/20230725060345_add_worker_tags_to_ping.down.sql b/backend/migrations/20230725060345_add_worker_tags_to_ping.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20230725060345_add_worker_tags_to_ping.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20230725060345_add_worker_tags_to_ping.up.sql b/backend/migrations/20230725060345_add_worker_tags_to_ping.up.sql new file mode 100644 index 0000000000000..364508813f957 --- /dev/null +++ b/backend/migrations/20230725060345_add_worker_tags_to_ping.up.sql @@ -0,0 +1,2 @@ +-- Add up migration script here +ALTER TABLE worker_ping ADD COLUMN custom_tags TEXT[]; \ No newline at end of file diff --git a/backend/migrations/20230730181921_custom_timeout.down.sql b/backend/migrations/20230730181921_custom_timeout.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20230730181921_custom_timeout.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20230730181921_custom_timeout.up.sql b/backend/migrations/20230730181921_custom_timeout.up.sql new file mode 100644 index 0000000000000..db476677b3ac8 --- /dev/null +++ b/backend/migrations/20230730181921_custom_timeout.up.sql @@ -0,0 +1,2 @@ +-- Add up migration script here +ALTER TABLE queue ADD COLUMN timeout INTEGER; diff --git a/backend/migrations/20230801103814_add_snowflake_lang.down.sql b/backend/migrations/20230801103814_add_snowflake_lang.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20230801103814_add_snowflake_lang.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20230801103814_add_snowflake_lang.up.sql b/backend/migrations/20230801103814_add_snowflake_lang.up.sql new file mode 100644 index 0000000000000..59a9d8d6354bb --- /dev/null +++ b/backend/migrations/20230801103814_add_snowflake_lang.up.sql @@ -0,0 +1,2 @@ +-- Add up migration script here +ALTER TYPE SCRIPT_LANG ADD VALUE IF NOT EXISTS 'snowflake'; \ No newline at end of file diff --git a/backend/migrations/20230803135448_more_indexes.down.sql b/backend/migrations/20230803135448_more_indexes.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20230803135448_more_indexes.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20230803135448_more_indexes.up.sql b/backend/migrations/20230803135448_more_indexes.up.sql new file mode 100644 index 0000000000000..1f7cfa38b9d92 --- /dev/null +++ b/backend/migrations/20230803135448_more_indexes.up.sql @@ -0,0 +1,3 @@ +-- Add up migration script here +CREATE INDEX IF NOT EXISTS index_queue_on_tag ON queue (tag); +CREATE INDEX IF NOT EXISTS index_completed_job_on_schedule_path ON completed_job (schedule_path); \ No newline at end of file diff --git a/backend/migrations/20230807132313_add_graphql_lang.down.sql b/backend/migrations/20230807132313_add_graphql_lang.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20230807132313_add_graphql_lang.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20230807132313_add_graphql_lang.up.sql b/backend/migrations/20230807132313_add_graphql_lang.up.sql new file mode 100644 index 0000000000000..c6ee6545741ec --- /dev/null +++ b/backend/migrations/20230807132313_add_graphql_lang.up.sql @@ -0,0 +1,2 @@ +-- Add up migration script here +ALTER TYPE SCRIPT_LANG ADD VALUE IF NOT EXISTS 'graphql'; \ No newline at end of file diff --git a/backend/migrations/20230809143140_add_powershell_lang.down.sql b/backend/migrations/20230809143140_add_powershell_lang.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20230809143140_add_powershell_lang.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20230809143140_add_powershell_lang.up.sql b/backend/migrations/20230809143140_add_powershell_lang.up.sql new file mode 100644 index 0000000000000..24f318d7cb01e --- /dev/null +++ b/backend/migrations/20230809143140_add_powershell_lang.up.sql @@ -0,0 +1,2 @@ +-- Add up migration script here +ALTER TYPE SCRIPT_LANG ADD VALUE IF NOT EXISTS 'powershell'; \ No newline at end of file diff --git a/backend/migrations/20230811145254_step_id_to_queue.down.sql b/backend/migrations/20230811145254_step_id_to_queue.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20230811145254_step_id_to_queue.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20230811145254_step_id_to_queue.up.sql b/backend/migrations/20230811145254_step_id_to_queue.up.sql new file mode 100644 index 0000000000000..2437da5d2674e --- /dev/null +++ b/backend/migrations/20230811145254_step_id_to_queue.up.sql @@ -0,0 +1,2 @@ +-- Add up migration script here +ALTER TABLE queue ADD COLUMN flow_step_id VARCHAR(255); \ No newline at end of file diff --git a/backend/migrations/20230817204856_upgrade_hub_sync.down.sql b/backend/migrations/20230817204856_upgrade_hub_sync.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20230817204856_upgrade_hub_sync.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20230817204856_upgrade_hub_sync.up.sql b/backend/migrations/20230817204856_upgrade_hub_sync.up.sql new file mode 100644 index 0000000000000..10c94288fcee8 --- /dev/null +++ b/backend/migrations/20230817204856_upgrade_hub_sync.up.sql @@ -0,0 +1,15 @@ +-- Add up migration script here +UPDATE script SET content = 'import wmill from "https://deno.land/x/wmill@v1.150.0/main.ts"; +export async function main() { + await run( + "workspace", "add", "__automation", "admins", Deno.env.get("BASE_INTERNAL_URL") + "/", "--token", Deno.env.get("WM_TOKEN")); + + await run("hub", "pull"); +} + +async function run(...cmd: string[]) { + console.log("Running \"" + cmd.join('' '') + "\""); + await wmill.parse(cmd); +}', summary = 'Synchronize Hub Resource types with instance', +description = 'Basic administrative script to sync latest resource types from hub to share to every workspace. Recommended to run at least once. On a schedule by default.' +WHERE hash = -28028598712388162 AND workspace_id = 'admins'; \ No newline at end of file diff --git a/backend/migrations/20230817221718_upgrade_hub_sync_2.down.sql b/backend/migrations/20230817221718_upgrade_hub_sync_2.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20230817221718_upgrade_hub_sync_2.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20230817221718_upgrade_hub_sync_2.up.sql b/backend/migrations/20230817221718_upgrade_hub_sync_2.up.sql new file mode 100644 index 0000000000000..f1773d184dc1d --- /dev/null +++ b/backend/migrations/20230817221718_upgrade_hub_sync_2.up.sql @@ -0,0 +1,15 @@ +-- Add up migration script here +UPDATE script SET content = 'import wmill from "https://deno.land/x/wmill@v1.151.0/main.ts"; +export async function main() { + await run( + "workspace", "add", "__automation", "admins", Deno.env.get("BASE_INTERNAL_URL") + "/", "--token", Deno.env.get("WM_TOKEN")); + + await run("hub", "pull"); +} + +async function run(...cmd: string[]) { + console.log("Running \"" + cmd.join('' '') + "\""); + await wmill.parse(cmd); +}', summary = 'Synchronize Hub Resource types with instance', +description = 'Basic administrative script to sync latest resource types from hub to share to every workspace. Recommended to run at least once. On a schedule by default.' +WHERE hash = -28028598712388162 AND workspace_id = 'admins'; \ No newline at end of file diff --git a/backend/migrations/20230818085630_add_schedule_recovery.down.sql b/backend/migrations/20230818085630_add_schedule_recovery.down.sql new file mode 100644 index 0000000000000..57e08e71a6abd --- /dev/null +++ b/backend/migrations/20230818085630_add_schedule_recovery.down.sql @@ -0,0 +1,2 @@ +-- Add down migration script here +ALTER TABLE schedule DROP COLUMN on_recovery; \ No newline at end of file diff --git a/backend/migrations/20230818085630_add_schedule_recovery.up.sql b/backend/migrations/20230818085630_add_schedule_recovery.up.sql new file mode 100644 index 0000000000000..d03306c87edc6 --- /dev/null +++ b/backend/migrations/20230818085630_add_schedule_recovery.up.sql @@ -0,0 +1,2 @@ +-- Add up migration script here +ALTER TABLE schedule ADD COLUMN on_recovery VARCHAR(1000); \ No newline at end of file diff --git a/backend/migrations/20230820161609_add_schedule_index.down.sql b/backend/migrations/20230820161609_add_schedule_index.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20230820161609_add_schedule_index.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20230820161609_add_schedule_index.up.sql b/backend/migrations/20230820161609_add_schedule_index.up.sql new file mode 100644 index 0000000000000..76d8e411d7667 --- /dev/null +++ b/backend/migrations/20230820161609_add_schedule_index.up.sql @@ -0,0 +1,25 @@ +-- Add up migration script here +CREATE INDEX IF NOT EXISTS scheduled_root_job ON completed_job (workspace_id, schedule_path, started_at) WHERE parent_job is NULL; +CREATE INDEX IF NOT EXISTS root_job_index_by_path ON completed_job (workspace_id, script_path, job_kind, created_at) WHERE parent_job is NULL; +CREATE INDEX IF NOT EXISTS root_job_index ON completed_job (workspace_id, job_kind, created_at) WHERE parent_job is NULL; +DROP INDEX IF EXISTS index_completed_on_script_hash; +DROP INDEX IF EXISTS index_completed_on_script_path; +DROP INDEX IF EXISTS index_completed_on_schedule_path; +DROP INDEX IF EXISTS index_completed_on_workspace_id; +DROP INDEX IF EXISTS index_completed_on_created_at; + +DROP INDEX IF EXISTS index_queue_on_script_path; +DROP INDEX IF EXISTS index_queue_on_script_hash; +DROP INDEX IF EXISTS index_queue_on_workspace_id; +DROP INDEX IF EXISTS index_queue_on_scheduled_for; +DROP INDEX IF EXISTS index_queue_on_tag; +DROP INDEX IF EXISTS index_queue_on_running; +DROP INDEX IF EXISTS index_queue_on_created; + + +CREATE INDEX IF NOT EXISTS root_queue_index_by_path ON queue (workspace_id, created_at); +CREATE INDEX IF NOT EXISTS root_queue_index ON queue (job_kind, tag, scheduled_for, created_at) WHERE running is false; +CREATE INDEX IF NOT EXISTS root_queue_index_suspended ON queue (job_kind, tag, suspend_until, suspend, scheduled_for, created_at) WHERE suspend_until is not null; + +CREATE INDEX IF NOT EXISTS concurrency_limit_stats_queue ON queue (workspace_id, script_path, started_at) WHERE concurrent_limit is not null; +CREATE INDEX IF NOT EXISTS concurrency_limit_stats_completed_job ON completed_job (workspace_id, script_path, started_at); \ No newline at end of file diff --git a/backend/migrations/20230823074735_schedule_handlers_times.down.sql b/backend/migrations/20230823074735_schedule_handlers_times.down.sql new file mode 100644 index 0000000000000..bad4008189274 --- /dev/null +++ b/backend/migrations/20230823074735_schedule_handlers_times.down.sql @@ -0,0 +1,7 @@ +-- Add down migration script here +ALTER TABLE schedule +DROP COLUMN on_failure_times, +DROP COLUMN on_failure_exact, +DROP COLUMN on_failure_extra_args, +DROP COLUMN on_recovery_times, +DROP COLUMN on_recovery_extra_args; diff --git a/backend/migrations/20230823074735_schedule_handlers_times.up.sql b/backend/migrations/20230823074735_schedule_handlers_times.up.sql new file mode 100644 index 0000000000000..739de6823543c --- /dev/null +++ b/backend/migrations/20230823074735_schedule_handlers_times.up.sql @@ -0,0 +1,7 @@ +-- Add up migration script here +ALTER TABLE schedule +ADD COLUMN on_failure_times INTEGER, +ADD COLUMN on_failure_exact BOOLEAN, +ADD COLUMN on_failure_extra_args json, +ADD COLUMN on_recovery_times INTEGER, +ADD COLUMN on_recovery_extra_args json; \ No newline at end of file diff --git a/backend/migrations/20230826001320_appdependencies.down.sql b/backend/migrations/20230826001320_appdependencies.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20230826001320_appdependencies.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20230826001320_appdependencies.up.sql b/backend/migrations/20230826001320_appdependencies.up.sql new file mode 100644 index 0000000000000..510994806a86c --- /dev/null +++ b/backend/migrations/20230826001320_appdependencies.up.sql @@ -0,0 +1,2 @@ +-- Add up migration script here +ALTER TYPE JOB_KIND ADD VALUE IF NOT EXISTS 'appdependencies'; \ No newline at end of file diff --git a/backend/migrations/20230828202124_add_cache_ttl.down.sql b/backend/migrations/20230828202124_add_cache_ttl.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20230828202124_add_cache_ttl.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20230828202124_add_cache_ttl.up.sql b/backend/migrations/20230828202124_add_cache_ttl.up.sql new file mode 100644 index 0000000000000..bec8c5f44faff --- /dev/null +++ b/backend/migrations/20230828202124_add_cache_ttl.up.sql @@ -0,0 +1,3 @@ +-- Add up migration script here +ALTER TABLE script ADD COLUMN cache_ttl INTEGER; +ALTER TABLE queue ADD COLUMN cache_ttl INTEGER; diff --git a/backend/migrations/20230829202651_add_global_settings.down.sql b/backend/migrations/20230829202651_add_global_settings.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20230829202651_add_global_settings.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20230829202651_add_global_settings.up.sql b/backend/migrations/20230829202651_add_global_settings.up.sql new file mode 100644 index 0000000000000..29597cf4bd88a --- /dev/null +++ b/backend/migrations/20230829202651_add_global_settings.up.sql @@ -0,0 +1,6 @@ +-- Add up migration script here +CREATE TABLE global_settings ( + name VARCHAR(255) PRIMARY KEY, + value JSONB NOT NULL, + updated_at TIMESTAMP NOT NULL DEFAULT NOW() +); \ No newline at end of file diff --git a/backend/migrations/20230831210028_add_q_index.down.sql b/backend/migrations/20230831210028_add_q_index.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20230831210028_add_q_index.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20230831210028_add_q_index.up.sql b/backend/migrations/20230831210028_add_q_index.up.sql new file mode 100644 index 0000000000000..4d478be2de67d --- /dev/null +++ b/backend/migrations/20230831210028_add_q_index.up.sql @@ -0,0 +1,2 @@ +-- Add up migration script here +CREATE INDEX IF NOT EXISTS queue_sort ON queue (scheduled_for, created_at) WHERE running = false; \ No newline at end of file diff --git a/backend/migrations/20230902192640_add_index.down.sql b/backend/migrations/20230902192640_add_index.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20230902192640_add_index.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20230902192640_add_index.up.sql b/backend/migrations/20230902192640_add_index.up.sql new file mode 100644 index 0000000000000..22e582fed99e7 --- /dev/null +++ b/backend/migrations/20230902192640_add_index.up.sql @@ -0,0 +1,13 @@ +-- Add up migration script here +DROP INDEX IF EXISTS queue_sort; +CREATE INDEX IF NOT EXISTS queue_sort ON queue (scheduled_for, created_at, tag) WHERE running = false; + +CREATE TABLE IF NOT EXISTS concurrency_counter ( + concurrency_id VARCHAR(1000) PRIMARY KEY, + counter INTEGER NOT NULL +); + +DROP INDEX IF EXISTS root_queue_index_suspended; + +DROP INDEX IF EXISTS queue_suspended; +CREATE INDEX IF NOT EXISTS queue_suspended ON queue (created_at, suspend_until, suspend, tag) WHERE suspend_until is not null; diff --git a/backend/migrations/20230905170218_dedicated_worker.down.sql b/backend/migrations/20230905170218_dedicated_worker.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20230905170218_dedicated_worker.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20230905170218_dedicated_worker.up.sql b/backend/migrations/20230905170218_dedicated_worker.up.sql new file mode 100644 index 0000000000000..8cbcc0a6b2a79 --- /dev/null +++ b/backend/migrations/20230905170218_dedicated_worker.up.sql @@ -0,0 +1,2 @@ +-- Add up migration script here +ALTER TABLE script ADD COLUMN dedicated_worker boolean; diff --git a/backend/migrations/20230908155455_add_worker_group.down.sql b/backend/migrations/20230908155455_add_worker_group.down.sql new file mode 100644 index 0000000000000..298b72a2649a0 --- /dev/null +++ b/backend/migrations/20230908155455_add_worker_group.down.sql @@ -0,0 +1,4 @@ +-- Add down migration script here +DROP TABLE worker_group_config; + +ALTER TABLE worker_ping DROP COLUMN worker_group; \ No newline at end of file diff --git a/backend/migrations/20230908155455_add_worker_group.up.sql b/backend/migrations/20230908155455_add_worker_group.up.sql new file mode 100644 index 0000000000000..6e8325fc2e40f --- /dev/null +++ b/backend/migrations/20230908155455_add_worker_group.up.sql @@ -0,0 +1,8 @@ +-- Add up migration script here +CREATE TABLE worker_group_config ( + name VARCHAR(255) PRIMARY KEY, + config JSONB DEFAULT '{}'::jsonb +); + +ALTER TABLE worker_ping ADD COLUMN IF NOT EXISTS worker_group VARCHAR(255) NOT NULL DEFAULT 'default'; +ALTER TABLE worker_ping ADD COLUMN IF NOT EXISTS dedicated_worker VARCHAR(255); \ No newline at end of file diff --git a/backend/migrations/20230914062021_fix_group_grant_roles.down.sql b/backend/migrations/20230914062021_fix_group_grant_roles.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20230914062021_fix_group_grant_roles.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20230914062021_fix_group_grant_roles.up.sql b/backend/migrations/20230914062021_fix_group_grant_roles.up.sql new file mode 100644 index 0000000000000..0da0a538a399f --- /dev/null +++ b/backend/migrations/20230914062021_fix_group_grant_roles.up.sql @@ -0,0 +1 @@ +-- Add up migration script here diff --git a/backend/migrations/20230914082838_relax_completed_job_constraints.down.sql b/backend/migrations/20230914082838_relax_completed_job_constraints.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20230914082838_relax_completed_job_constraints.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20230914082838_relax_completed_job_constraints.up.sql b/backend/migrations/20230914082838_relax_completed_job_constraints.up.sql new file mode 100644 index 0000000000000..d15bef535873a --- /dev/null +++ b/backend/migrations/20230914082838_relax_completed_job_constraints.up.sql @@ -0,0 +1,5 @@ +-- Add up migration script here +ALTER TABLE completed_job ALTER COLUMN duration_ms TYPE bigint; +ALTER TABLE completed_job ALTER COLUMN email TYPE VARCHAR(255); +ALTER TABLE queue ALTER COLUMN email TYPE VARCHAR(255); +ALTER TABLE queue ALTER COLUMN canceled_by TYPE VARCHAR(255); diff --git a/backend/migrations/20230915084031_add_themes.down.sql b/backend/migrations/20230915084031_add_themes.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20230915084031_add_themes.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20230915084031_add_themes.up.sql b/backend/migrations/20230915084031_add_themes.up.sql new file mode 100644 index 0000000000000..323b31a049b7c --- /dev/null +++ b/backend/migrations/20230915084031_add_themes.up.sql @@ -0,0 +1,3 @@ +-- Add up migration script here +INSERT INTO folder (workspace_id, name, display_name, owners, extra_perms) SELECT id, 'app_themes', 'App Themes', ARRAY[]::TEXT[], '{"g/all": false}' FROM workspace ON CONFLICT DO NOTHING; +INSERT INTO resource (workspace_id, path, value, description, resource_type) SELECT id, 'f/app_themes/theme_0', '{"name": "Default Theme", "value": ""}', 'The default app theme', 'app_theme' FROM workspace ON CONFLICT DO NOTHING \ No newline at end of file diff --git a/backend/migrations/20230917075933_rename_config.down.sql b/backend/migrations/20230917075933_rename_config.down.sql new file mode 100644 index 0000000000000..2dedc82b567e9 --- /dev/null +++ b/backend/migrations/20230917075933_rename_config.down.sql @@ -0,0 +1,2 @@ +-- Add down migration script here +ALTER TABLE IF exists config RENAME TO worker_group_config ; diff --git a/backend/migrations/20230917075933_rename_config.up.sql b/backend/migrations/20230917075933_rename_config.up.sql new file mode 100644 index 0000000000000..75d8e7655e567 --- /dev/null +++ b/backend/migrations/20230917075933_rename_config.up.sql @@ -0,0 +1,29 @@ +-- Add up migration script here +ALTER TABLE IF exists worker_group_config RENAME TO config; +UPDATE config SET name = 'worker__' || name; + +CREATE FUNCTION "notify_config_change" () +RETURNS TRIGGER AS $$ +BEGIN + PERFORM pg_notify('notify_config_change', NEW.name::text); + RETURN NEW; +END; +$$ LANGUAGE PLPGSQL; + + CREATE TRIGGER "notify_config_change" + AFTER INSERT OR UPDATE ON "config" + FOR EACH ROW +EXECUTE FUNCTION "notify_config_change" (); + +CREATE FUNCTION "notify_global_setting_change" () +RETURNS TRIGGER AS $$ +BEGIN + PERFORM pg_notify('notify_global_setting_change', NEW.name::text); + RETURN NEW; +END; +$$ LANGUAGE PLPGSQL; + + CREATE TRIGGER "notify_global_setting_change" + AFTER INSERT OR UPDATE ON "global_settings" + FOR EACH ROW +EXECUTE FUNCTION "notify_global_setting_change" (); diff --git a/backend/migrations/20230921084441_add_default_worker_groups.down.sql b/backend/migrations/20230921084441_add_default_worker_groups.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20230921084441_add_default_worker_groups.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20230921084441_add_default_worker_groups.up.sql b/backend/migrations/20230921084441_add_default_worker_groups.up.sql new file mode 100644 index 0000000000000..e6d2d70a6b793 --- /dev/null +++ b/backend/migrations/20230921084441_add_default_worker_groups.up.sql @@ -0,0 +1,4 @@ +-- Add up migration script here +INSERT INTO config (name, config) VALUES + ('worker__default', '{"worker_tags": ["deno", "python3", "go", "bash", "powershell", "dependency", "flow", "hub", "other", "bun"]}'), + ('worker__native', '{"worker_tags": ["nativets", "postgresql", "mysql", "graphql", "snowflake"]}') ON CONFLICT DO NOTHING; \ No newline at end of file diff --git a/backend/migrations/20230927215813_add_app_groups.down.sql b/backend/migrations/20230927215813_add_app_groups.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20230927215813_add_app_groups.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20230927215813_add_app_groups.up.sql b/backend/migrations/20230927215813_add_app_groups.up.sql new file mode 100644 index 0000000000000..1c475de6d7c91 --- /dev/null +++ b/backend/migrations/20230927215813_add_app_groups.up.sql @@ -0,0 +1,2 @@ +-- Add up migration script here +INSERT INTO folder (workspace_id, name, display_name, owners, extra_perms) SELECT id, 'app_groups', 'App Groups', ARRAY[]::TEXT[], '{"g/all": false}' FROM workspace ON CONFLICT DO NOTHING; diff --git a/backend/migrations/20230929022202_tutorials.down.sql b/backend/migrations/20230929022202_tutorials.down.sql new file mode 100644 index 0000000000000..d9f1e4a9e61a8 --- /dev/null +++ b/backend/migrations/20230929022202_tutorials.down.sql @@ -0,0 +1,2 @@ +-- Add down migration script here +DROP TABLE tutorial_progress \ No newline at end of file diff --git a/backend/migrations/20230929022202_tutorials.up.sql b/backend/migrations/20230929022202_tutorials.up.sql new file mode 100644 index 0000000000000..0c1bf596f4cae --- /dev/null +++ b/backend/migrations/20230929022202_tutorials.up.sql @@ -0,0 +1,8 @@ +-- Add up migration script here +CREATE TABLE tutorial_progress( + email VARCHAR(255) PRIMARY KEY, + progress bit(64) NOT NULL DEFAULT B'0' +); + +GRANT ALL ON tutorial_progress TO windmill_admin; +GRANT ALL ON tutorial_progress TO windmill_user; \ No newline at end of file diff --git a/backend/migrations/20230929092213_copilot_code_completion.down.sql b/backend/migrations/20230929092213_copilot_code_completion.down.sql new file mode 100644 index 0000000000000..b81f7a766c48f --- /dev/null +++ b/backend/migrations/20230929092213_copilot_code_completion.down.sql @@ -0,0 +1,2 @@ +-- Add down migration script here +ALTER TABLE workspace_settings DROP COLUMN code_completion_enabled; \ No newline at end of file diff --git a/backend/migrations/20230929092213_copilot_code_completion.up.sql b/backend/migrations/20230929092213_copilot_code_completion.up.sql new file mode 100644 index 0000000000000..45941016b8956 --- /dev/null +++ b/backend/migrations/20230929092213_copilot_code_completion.up.sql @@ -0,0 +1,2 @@ +-- Add up migration script here +ALTER TABLE workspace_settings ADD COLUMN code_completion_enabled BOOLEAN NOT NULL DEFAULT false; \ No newline at end of file diff --git a/backend/migrations/20231002123723_notify_delete_config.down.sql b/backend/migrations/20231002123723_notify_delete_config.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20231002123723_notify_delete_config.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20231002123723_notify_delete_config.up.sql b/backend/migrations/20231002123723_notify_delete_config.up.sql new file mode 100644 index 0000000000000..c0afcb9c0f7a5 --- /dev/null +++ b/backend/migrations/20231002123723_notify_delete_config.up.sql @@ -0,0 +1,15 @@ +-- Add up migration script here + +CREATE FUNCTION "notify_global_setting_delete" () +RETURNS TRIGGER AS $$ +BEGIN + PERFORM pg_notify('notify_global_setting_change', OLD.name::text); + RETURN OLD; +END; +$$ LANGUAGE PLPGSQL; + +CREATE OR REPLACE TRIGGER "notify_global_setting_delete" + AFTER DELETE ON "global_settings" + FOR EACH ROW +EXECUTE FUNCTION "notify_global_setting_delete" (); + diff --git a/backend/migrations/20231013103457_workspace_error_handler_args.down.sql b/backend/migrations/20231013103457_workspace_error_handler_args.down.sql new file mode 100644 index 0000000000000..79fc364f92acd --- /dev/null +++ b/backend/migrations/20231013103457_workspace_error_handler_args.down.sql @@ -0,0 +1,2 @@ +-- Add down migration script here +ALTER TABLE workspace_settings DROP COLUMN error_handler_extra_args; \ No newline at end of file diff --git a/backend/migrations/20231013103457_workspace_error_handler_args.up.sql b/backend/migrations/20231013103457_workspace_error_handler_args.up.sql new file mode 100644 index 0000000000000..c80e054042381 --- /dev/null +++ b/backend/migrations/20231013103457_workspace_error_handler_args.up.sql @@ -0,0 +1,2 @@ +-- Add up migration script here +ALTER TABLE workspace_settings ADD COLUMN error_handler_extra_args JSON; \ No newline at end of file diff --git a/backend/migrations/20231016084043_addback_bigquery.down.sql b/backend/migrations/20231016084043_addback_bigquery.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20231016084043_addback_bigquery.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20231016084043_addback_bigquery.up.sql b/backend/migrations/20231016084043_addback_bigquery.up.sql new file mode 100644 index 0000000000000..77fd1784ea3d9 --- /dev/null +++ b/backend/migrations/20231016084043_addback_bigquery.up.sql @@ -0,0 +1,3 @@ +-- Add up migration script here +UPDATE config set config = '{"worker_tags": ["nativets", "postgresq", "mysql", "graphql", "snowflake", "bigquery"]}'::jsonb where name = 'worker__native' and config = '{"worker_tags": ["nativets", "postgresql", "mysql", "graphql" +, "snowflake"]}'::jsonb ; \ No newline at end of file diff --git a/backend/migrations/20231016142659_slack_token_error_handler_perms.down.sql b/backend/migrations/20231016142659_slack_token_error_handler_perms.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20231016142659_slack_token_error_handler_perms.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20231016142659_slack_token_error_handler_perms.up.sql b/backend/migrations/20231016142659_slack_token_error_handler_perms.up.sql new file mode 100644 index 0000000000000..6b2cc8ee87d24 --- /dev/null +++ b/backend/migrations/20231016142659_slack_token_error_handler_perms.up.sql @@ -0,0 +1,2 @@ +-- Add up migration script here +UPDATE folder SET extra_perms = JSONB_SET(extra_perms, '{g/error_handler}', 'false', true) WHERE name = 'slack_bot'; diff --git a/backend/migrations/20231017043506_addback_postgresql.down.sql b/backend/migrations/20231017043506_addback_postgresql.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20231017043506_addback_postgresql.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20231017043506_addback_postgresql.up.sql b/backend/migrations/20231017043506_addback_postgresql.up.sql new file mode 100644 index 0000000000000..d9fb48106e1c4 --- /dev/null +++ b/backend/migrations/20231017043506_addback_postgresql.up.sql @@ -0,0 +1,3 @@ +-- Add up migration script here +UPDATE config set config = '{"worker_tags": ["nativets", "postgresql", "mysql", "graphql", "snowflake", "bigquery"]}'::jsonb +where name = 'worker__native' and config = '{"worker_tags": ["nativets", "postgresq", "mysql", "graphql", "snowflake", "bigquery"]}'::jsonb; \ No newline at end of file diff --git a/backend/migrations/20231017172035_disable_error_handler_columns.down.sql b/backend/migrations/20231017172035_disable_error_handler_columns.down.sql new file mode 100644 index 0000000000000..703b51628faae --- /dev/null +++ b/backend/migrations/20231017172035_disable_error_handler_columns.down.sql @@ -0,0 +1,3 @@ +-- Add down migration script here +ALTER TABLE script DROP COLUMN ws_error_handler_muted; +ALTER TABLE flow DROP COLUMN ws_error_handler_muted; \ No newline at end of file diff --git a/backend/migrations/20231017172035_disable_error_handler_columns.up.sql b/backend/migrations/20231017172035_disable_error_handler_columns.up.sql new file mode 100644 index 0000000000000..26217af3107a6 --- /dev/null +++ b/backend/migrations/20231017172035_disable_error_handler_columns.up.sql @@ -0,0 +1,3 @@ +-- Add up migration script here +ALTER TABLE script ADD COLUMN ws_error_handler_muted BOOLEAN NOT NULL DEFAULT false; +ALTER TABLE flow ADD COLUMN ws_error_handler_muted BOOLEAN NOT NULL DEFAULT false; \ No newline at end of file diff --git a/backend/migrations/20231019154138_add_uid.down.sql b/backend/migrations/20231019154138_add_uid.down.sql new file mode 100644 index 0000000000000..414f99f32ec1a --- /dev/null +++ b/backend/migrations/20231019154138_add_uid.down.sql @@ -0,0 +1,2 @@ +-- Add down migration script here +DELETE FROM global_settings WHERE name = 'uid'; \ No newline at end of file diff --git a/backend/migrations/20231019154138_add_uid.up.sql b/backend/migrations/20231019154138_add_uid.up.sql new file mode 100644 index 0000000000000..3fecabb7987b8 --- /dev/null +++ b/backend/migrations/20231019154138_add_uid.up.sql @@ -0,0 +1,2 @@ +-- Add up migration script here +INSERT INTO global_settings (name, value, updated_at) VALUES ('uid', to_jsonb(gen_random_uuid()), now()) ON CONFLICT DO NOTHING; \ No newline at end of file diff --git a/backend/migrations/20231020101153_queue_priority_column.down.sql b/backend/migrations/20231020101153_queue_priority_column.down.sql new file mode 100644 index 0000000000000..d577c3ae27f9f --- /dev/null +++ b/backend/migrations/20231020101153_queue_priority_column.down.sql @@ -0,0 +1,9 @@ +-- Add up migration script here +ALTER TABLE queue DROP COLUMN priority; +DROP INDEX IF EXISTS queue_sort; +CREATE INDEX IF NOT EXISTS queue_sort ON queue (scheduled_for, created_at, tag) WHERE running = false; +DROP INDEX IF EXISTS queue_suspended; +CREATE INDEX IF NOT EXISTS queue_suspended ON queue (created_at, suspend_until, suspend, tag) WHERE suspend_until is not null; + +ALTER TABLE completed_job DROP COLUMN priority; +ALTER TABLE script DROP COLUMN priority; diff --git a/backend/migrations/20231020101153_queue_priority_column.up.sql b/backend/migrations/20231020101153_queue_priority_column.up.sql new file mode 100644 index 0000000000000..81558f1607612 --- /dev/null +++ b/backend/migrations/20231020101153_queue_priority_column.up.sql @@ -0,0 +1,9 @@ +-- Add up migration script here +ALTER TABLE queue ADD COLUMN priority SMALLINT; +DROP INDEX IF EXISTS queue_sort; +CREATE INDEX IF NOT EXISTS queue_sort ON queue (priority DESC NULLS LAST, scheduled_for, created_at, tag) WHERE running = false; +DROP INDEX IF EXISTS queue_suspended; +CREATE INDEX IF NOT EXISTS queue_suspended ON queue (priority DESC NULLS LAST, created_at, suspend_until, suspend, tag) WHERE suspend_until is not null; + +ALTER TABLE completed_job ADD COLUMN priority SMALLINT; +ALTER TABLE script ADD COLUMN priority SMALLINT; diff --git a/backend/migrations/20231022165924_update_hub_sync_stats.down.sql b/backend/migrations/20231022165924_update_hub_sync_stats.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20231022165924_update_hub_sync_stats.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20231022165924_update_hub_sync_stats.up.sql b/backend/migrations/20231022165924_update_hub_sync_stats.up.sql new file mode 100644 index 0000000000000..b87f066d97717 --- /dev/null +++ b/backend/migrations/20231022165924_update_hub_sync_stats.up.sql @@ -0,0 +1,15 @@ +-- Add up migration script here +UPDATE script SET content = 'import wmill from "https://deno.land/x/wmill@v1.189.0/main.ts"; +export async function main() { + await run( + "workspace", "add", "__automation", "admins", Deno.env.get("BASE_INTERNAL_URL") + "/", "--token", Deno.env.get("WM_TOKEN")); + + await run("hub", "pull"); +} + +async function run(...cmd: string[]) { + console.log("Running \"" + cmd.join('' '') + "\""); + await wmill.parse(cmd); +}', summary = 'Synchronize Hub Resource types with instance', +description = 'Basic administrative script to sync latest resource types from hub to share to every workspace. Recommended to run at least once. On a schedule by default.' +WHERE hash = -28028598712388162 AND workspace_id = 'admins'; \ No newline at end of file diff --git a/backend/migrations/20231023135159_concurrency_job_uuids.down.sql b/backend/migrations/20231023135159_concurrency_job_uuids.down.sql new file mode 100644 index 0000000000000..e886804a298dc --- /dev/null +++ b/backend/migrations/20231023135159_concurrency_job_uuids.down.sql @@ -0,0 +1,3 @@ +-- Add down migration script here +ALTER TABLE concurrency_counter ADD COLUMN counter INTEGER NOT NULL DEFAULT 0; +ALTER TABLE concurrency_counter DROP COLUMN job_uuids; diff --git a/backend/migrations/20231023135159_concurrency_job_uuids.up.sql b/backend/migrations/20231023135159_concurrency_job_uuids.up.sql new file mode 100644 index 0000000000000..34b18cea39799 --- /dev/null +++ b/backend/migrations/20231023135159_concurrency_job_uuids.up.sql @@ -0,0 +1,3 @@ +-- Add up migration script here +ALTER TABLE concurrency_counter ADD COLUMN job_uuids jsonb NOT NULL DEFAULT '{}'::jsonb; +ALTER TABLE concurrency_counter DROP COLUMN counter; diff --git a/backend/migrations/20231103143535_schedule_default_error_handler.down.sql b/backend/migrations/20231103143535_schedule_default_error_handler.down.sql new file mode 100644 index 0000000000000..3f7bc4511843e --- /dev/null +++ b/backend/migrations/20231103143535_schedule_default_error_handler.down.sql @@ -0,0 +1,2 @@ +-- Add down migration script here +ALTER TABLE schedule DROP COLUMN ws_error_handler_muted; diff --git a/backend/migrations/20231103143535_schedule_default_error_handler.up.sql b/backend/migrations/20231103143535_schedule_default_error_handler.up.sql new file mode 100644 index 0000000000000..dee228810d674 --- /dev/null +++ b/backend/migrations/20231103143535_schedule_default_error_handler.up.sql @@ -0,0 +1,2 @@ +-- Add up migration script here +ALTER TABLE schedule ADD COLUMN ws_error_handler_muted BOOLEAN NOT NULL DEFAULT false; diff --git a/backend/migrations/20231105173726_add_worker_version.down.sql b/backend/migrations/20231105173726_add_worker_version.down.sql new file mode 100644 index 0000000000000..652e6aae7d364 --- /dev/null +++ b/backend/migrations/20231105173726_add_worker_version.down.sql @@ -0,0 +1,2 @@ +-- Add down migration script here +ALTER TABLE worker_ping DROP COLUMN wm_version; \ No newline at end of file diff --git a/backend/migrations/20231105173726_add_worker_version.up.sql b/backend/migrations/20231105173726_add_worker_version.up.sql new file mode 100644 index 0000000000000..2df833870c030 --- /dev/null +++ b/backend/migrations/20231105173726_add_worker_version.up.sql @@ -0,0 +1,2 @@ +-- Add up migration script here +ALTER TABLE worker_ping ADD COLUMN IF NOT EXISTS wm_version VARCHAR(255) NOT NULL DEFAULT ''; \ No newline at end of file diff --git a/backend/migrations/20231106131265_error_handler_skipped_on_cancel.down.sql b/backend/migrations/20231106131265_error_handler_skipped_on_cancel.down.sql new file mode 100644 index 0000000000000..92b48e4d5b56c --- /dev/null +++ b/backend/migrations/20231106131265_error_handler_skipped_on_cancel.down.sql @@ -0,0 +1,2 @@ +-- Add down migration script here +ALTER TABLE workspace_settings DROP COLUMN error_handler_muted_on_cancel; \ No newline at end of file diff --git a/backend/migrations/20231106131265_error_handler_skipped_on_cancel.up.sql b/backend/migrations/20231106131265_error_handler_skipped_on_cancel.up.sql new file mode 100644 index 0000000000000..1afec3857eb24 --- /dev/null +++ b/backend/migrations/20231106131265_error_handler_skipped_on_cancel.up.sql @@ -0,0 +1,2 @@ +-- Add up migration script here +ALTER TABLE workspace_settings ADD COLUMN IF NOT EXISTS error_handler_muted_on_cancel BOOL NOT NULL DEFAULT false; \ No newline at end of file diff --git a/backend/migrations/20231108200232_add_custom_components.down.sql b/backend/migrations/20231108200232_add_custom_components.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20231108200232_add_custom_components.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20231108200232_add_custom_components.up.sql b/backend/migrations/20231108200232_add_custom_components.up.sql new file mode 100644 index 0000000000000..f5705d9ff0593 --- /dev/null +++ b/backend/migrations/20231108200232_add_custom_components.up.sql @@ -0,0 +1,2 @@ +-- Add up migration script here +INSERT INTO folder (workspace_id, name, display_name, owners, extra_perms) SELECT id, 'app_custom', 'App Custom Components', ARRAY[]::TEXT[], '{"g/all": false}' FROM workspace ON CONFLICT DO NOTHING; diff --git a/backend/migrations/20231109101743_add_mssql.down.sql b/backend/migrations/20231109101743_add_mssql.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20231109101743_add_mssql.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20231109101743_add_mssql.up.sql b/backend/migrations/20231109101743_add_mssql.up.sql new file mode 100644 index 0000000000000..e9336990704cf --- /dev/null +++ b/backend/migrations/20231109101743_add_mssql.up.sql @@ -0,0 +1,4 @@ +-- Add up migration script here +ALTER TYPE SCRIPT_LANG ADD VALUE IF NOT EXISTS 'mssql'; +-- Add up migration script here +UPDATE config set config = '{"worker_tags": ["nativets", "postgresql", "mysql", "graphql", "snowflake", "bigquery", "mssql"]}'::jsonb where name = 'worker__native' and config = '{"worker_tags": ["nativets", "postgresql", "mysql", "graphql", "snowflake", "bigquery"]}'::jsonb ; \ No newline at end of file diff --git a/backend/migrations/20231113194945_add_dedicated_workers_to_flows.down.sql b/backend/migrations/20231113194945_add_dedicated_workers_to_flows.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20231113194945_add_dedicated_workers_to_flows.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20231113194945_add_dedicated_workers_to_flows.up.sql b/backend/migrations/20231113194945_add_dedicated_workers_to_flows.up.sql new file mode 100644 index 0000000000000..8eebf60c74e09 --- /dev/null +++ b/backend/migrations/20231113194945_add_dedicated_workers_to_flows.up.sql @@ -0,0 +1,2 @@ +-- Add up migration script here +ALTER TABLE flow ADD COLUMN dedicated_worker BOOLEAN; \ No newline at end of file diff --git a/backend/migrations/20231114161526_add_overquota.down.sql b/backend/migrations/20231114161526_add_overquota.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20231114161526_add_overquota.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20231114161526_add_overquota.up.sql b/backend/migrations/20231114161526_add_overquota.up.sql new file mode 100644 index 0000000000000..d0950277b0e5b --- /dev/null +++ b/backend/migrations/20231114161526_add_overquota.up.sql @@ -0,0 +1,2 @@ +-- Add up migration script here +alter table workspace add column is_overquota boolean not null default false; \ No newline at end of file diff --git a/backend/migrations/20231115101254_workspace_s3_bucket_settings.down.sql b/backend/migrations/20231115101254_workspace_s3_bucket_settings.down.sql new file mode 100644 index 0000000000000..9d206397d2637 --- /dev/null +++ b/backend/migrations/20231115101254_workspace_s3_bucket_settings.down.sql @@ -0,0 +1,2 @@ +-- Add down migration script here +ALTER TABLE workspace_settings DROP COLUMN large_file_storage; \ No newline at end of file diff --git a/backend/migrations/20231115101254_workspace_s3_bucket_settings.up.sql b/backend/migrations/20231115101254_workspace_s3_bucket_settings.up.sql new file mode 100644 index 0000000000000..638039bb154b8 --- /dev/null +++ b/backend/migrations/20231115101254_workspace_s3_bucket_settings.up.sql @@ -0,0 +1,2 @@ +-- Add up migration script here +ALTER TABLE workspace_settings ADD COLUMN IF NOT EXISTS large_file_storage JSONB; \ No newline at end of file diff --git a/backend/migrations/20231122100516_relax_tag_varchars.down.sql b/backend/migrations/20231122100516_relax_tag_varchars.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20231122100516_relax_tag_varchars.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20231122100516_relax_tag_varchars.up.sql b/backend/migrations/20231122100516_relax_tag_varchars.up.sql new file mode 100644 index 0000000000000..5a4c73df46f58 --- /dev/null +++ b/backend/migrations/20231122100516_relax_tag_varchars.up.sql @@ -0,0 +1,3 @@ +-- Add up migration script here +ALTER TABLE queue ALTER COLUMN tag TYPE varchar(255); +ALTER TABLE completed_job ALTER COLUMN tag TYPE varchar(255); \ No newline at end of file diff --git a/backend/migrations/20231128105015_add_reports_worker_group.down.sql b/backend/migrations/20231128105015_add_reports_worker_group.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20231128105015_add_reports_worker_group.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20231128105015_add_reports_worker_group.up.sql b/backend/migrations/20231128105015_add_reports_worker_group.up.sql new file mode 100644 index 0000000000000..ea970d95a1454 --- /dev/null +++ b/backend/migrations/20231128105015_add_reports_worker_group.up.sql @@ -0,0 +1,3 @@ +-- Add up migration script here +INSERT INTO config (name, config) VALUES + ('worker__reports', '{"init_bash": "apt-get update\napt-get install -y chromium", "worker_tags": ["deno", "python3", "go", "bash", "powershell", "dependency", "flow", "hub", "other", "bun", "chromium"]}') ON CONFLICT DO NOTHING; \ No newline at end of file diff --git a/backend/migrations/20231129164511_git_repo_workspace_setting.down.sql b/backend/migrations/20231129164511_git_repo_workspace_setting.down.sql new file mode 100644 index 0000000000000..f511f8bb9bb7a --- /dev/null +++ b/backend/migrations/20231129164511_git_repo_workspace_setting.down.sql @@ -0,0 +1,4 @@ +-- Add down migration script here +ALTER TABLE workspace_settings DROP COLUMN git_sync; + +DROP TABLE IF EXISTS deployment_metadata; diff --git a/backend/migrations/20231129164511_git_repo_workspace_setting.up.sql b/backend/migrations/20231129164511_git_repo_workspace_setting.up.sql new file mode 100644 index 0000000000000..ed820cf694f28 --- /dev/null +++ b/backend/migrations/20231129164511_git_repo_workspace_setting.up.sql @@ -0,0 +1,16 @@ +-- Add up migration script here +ALTER TYPE JOB_KIND ADD VALUE IF NOT EXISTS 'deploymentcallback'; +ALTER TABLE workspace_settings ADD COLUMN IF NOT EXISTS git_sync JSONB; + +CREATE TABLE deployment_metadata( + workspace_id VARCHAR(50) NOT NULL REFERENCES workspace(id), + path VARCHAR(255) NOT NULL, + script_hash BIGINT, + app_version BIGSERIAL, + callback_job_ids UUID[], + deployment_msg TEXT +); + +CREATE UNIQUE INDEX IF NOT EXISTS deployment_metadata_script ON deployment_metadata (workspace_id, script_hash) WHERE script_hash IS NOT NULL; +CREATE UNIQUE INDEX IF NOT EXISTS deployment_metadata_flow ON deployment_metadata (workspace_id, path) WHERE script_hash IS NULL AND app_version IS NULL; +CREATE UNIQUE INDEX IF NOT EXISTS deployment_metadata_app ON deployment_metadata (workspace_id, path, app_version) WHERE app_version IS NOT NULL; diff --git a/backend/migrations/20231203110120_add_more_script_config.down.sql b/backend/migrations/20231203110120_add_more_script_config.down.sql new file mode 100644 index 0000000000000..8bd1e8c97c152 --- /dev/null +++ b/backend/migrations/20231203110120_add_more_script_config.down.sql @@ -0,0 +1,5 @@ +-- Add down migration script here +ALTER TABLE script DROP COLUMN timeout; +ALTER TABLE script DROP COLUMN delete_after_use; +ALTER TABLE script DROP COLUMN restart_unless_cancelled; +ALTER TABLE flow DROP COLUMN timeout; diff --git a/backend/migrations/20231203110120_add_more_script_config.up.sql b/backend/migrations/20231203110120_add_more_script_config.up.sql new file mode 100644 index 0000000000000..4241292a86908 --- /dev/null +++ b/backend/migrations/20231203110120_add_more_script_config.up.sql @@ -0,0 +1,5 @@ +-- Add up migration script here +ALTER TABLE script ADD COLUMN timeout INTEGER; +ALTER TABLE flow ADD COLUMN timeout INTEGER; +ALTER TABLE script ADD COLUMN delete_after_use BOOLEAN; +ALTER TABLE script ADD COLUMN restart_unless_cancelled BOOLEAN; diff --git a/backend/migrations/20231204144423_refactor_deployment_metadata_table.down.sql b/backend/migrations/20231204144423_refactor_deployment_metadata_table.down.sql new file mode 100644 index 0000000000000..f1062f84406a3 --- /dev/null +++ b/backend/migrations/20231204144423_refactor_deployment_metadata_table.down.sql @@ -0,0 +1,15 @@ +-- Add down migration script here +DROP TABLE deployment_metadata; + +CREATE TABLE deployment_metadata( + workspace_id VARCHAR(50) NOT NULL REFERENCES workspace(id), + path VARCHAR(255) NOT NULL, + script_hash BIGINT, + app_version BIGINT, + callback_job_ids UUID[], + deployment_msg TEXT +); + +CREATE UNIQUE INDEX IF NOT EXISTS deployment_metadata_script ON deployment_metadata (workspace_id, script_hash) WHERE script_hash IS NOT NULL; +CREATE UNIQUE INDEX IF NOT EXISTS deployment_metadata_flow ON deployment_metadata (workspace_id, path) WHERE script_hash IS NULL AND app_version IS NULL; +CREATE UNIQUE INDEX IF NOT EXISTS deployment_metadata_app ON deployment_metadata (workspace_id, path, app_version) WHERE app_version IS NOT NULL; \ No newline at end of file diff --git a/backend/migrations/20231204144423_refactor_deployment_metadata_table.up.sql b/backend/migrations/20231204144423_refactor_deployment_metadata_table.up.sql new file mode 100644 index 0000000000000..e4e5589af816f --- /dev/null +++ b/backend/migrations/20231204144423_refactor_deployment_metadata_table.up.sql @@ -0,0 +1,15 @@ +-- Add up migration script here +DROP TABLE deployment_metadata; + +CREATE TABLE deployment_metadata( + workspace_id VARCHAR(50) NOT NULL REFERENCES workspace(id), + path VARCHAR(255) NOT NULL, + script_hash BIGINT, + app_version BIGINT, + callback_job_ids UUID[], + deployment_msg TEXT +); + +CREATE UNIQUE INDEX IF NOT EXISTS deployment_metadata_script ON deployment_metadata (workspace_id, script_hash) WHERE script_hash IS NOT NULL; +CREATE UNIQUE INDEX IF NOT EXISTS deployment_metadata_flow ON deployment_metadata (workspace_id, path) WHERE script_hash IS NULL AND app_version IS NULL; +CREATE UNIQUE INDEX IF NOT EXISTS deployment_metadata_app ON deployment_metadata (workspace_id, path, app_version) WHERE app_version IS NOT NULL; diff --git a/backend/migrations/20231208141824_add_chromium_tag.down.sql b/backend/migrations/20231208141824_add_chromium_tag.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20231208141824_add_chromium_tag.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20231208141824_add_chromium_tag.up.sql b/backend/migrations/20231208141824_add_chromium_tag.up.sql new file mode 100644 index 0000000000000..c9a4c4bbc976b --- /dev/null +++ b/backend/migrations/20231208141824_add_chromium_tag.up.sql @@ -0,0 +1,6 @@ +-- Add up migration script here +INSERT INTO global_settings VALUES ('custom_tags', '["chromium"]') +ON CONFLICT (name) DO UPDATE SET value = jsonb_insert(global_settings.value, '{0}', '"chromium"', true) +WHERE NOT global_settings.value @> '["chromium"]'; + + diff --git a/backend/migrations/20231219144259_schedule_retry.down.sql b/backend/migrations/20231219144259_schedule_retry.down.sql new file mode 100644 index 0000000000000..60d77d539e84d --- /dev/null +++ b/backend/migrations/20231219144259_schedule_retry.down.sql @@ -0,0 +1,2 @@ +-- Add down migration script here +ALTER TABLE schedule DROP COLUMN IF EXISTS retry; diff --git a/backend/migrations/20231219144259_schedule_retry.up.sql b/backend/migrations/20231219144259_schedule_retry.up.sql new file mode 100644 index 0000000000000..ee6f7643067ae --- /dev/null +++ b/backend/migrations/20231219144259_schedule_retry.up.sql @@ -0,0 +1,3 @@ +-- Add up migration script here +ALTER TABLE schedule ADD COLUMN IF NOT EXISTS retry JSONB; +ALTER TYPE JOB_KIND ADD VALUE IF NOT EXISTS 'singlescriptflow'; diff --git a/backend/migrations/20231226062524_add_schedule_summary_no_overlap.down.sql b/backend/migrations/20231226062524_add_schedule_summary_no_overlap.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20231226062524_add_schedule_summary_no_overlap.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20231226062524_add_schedule_summary_no_overlap.up.sql b/backend/migrations/20231226062524_add_schedule_summary_no_overlap.up.sql new file mode 100644 index 0000000000000..910c208007623 --- /dev/null +++ b/backend/migrations/20231226062524_add_schedule_summary_no_overlap.up.sql @@ -0,0 +1,3 @@ +-- Add up migration script here +ALTER TABLE schedule ADD COLUMN summary VARCHAR(512); +ALTER TABLE schedule ADD COLUMN no_flow_overlap BOOLEAN NOT NULL DEFAULT FALSE; diff --git a/backend/migrations/20231227014107_add_dependency_map.down.sql b/backend/migrations/20231227014107_add_dependency_map.down.sql new file mode 100644 index 0000000000000..ec6a4f8b455dc --- /dev/null +++ b/backend/migrations/20231227014107_add_dependency_map.down.sql @@ -0,0 +1,2 @@ +-- Add down migration script here +DROP TABLE dependency_map; \ No newline at end of file diff --git a/backend/migrations/20231227014107_add_dependency_map.up.sql b/backend/migrations/20231227014107_add_dependency_map.up.sql new file mode 100644 index 0000000000000..7014d0bd63445 --- /dev/null +++ b/backend/migrations/20231227014107_add_dependency_map.up.sql @@ -0,0 +1,14 @@ +-- Add up migration script here + +CREATE TYPE IMPORTER_KIND AS ENUM ('script', 'flow', 'app'); + +CREATE TABLE IF NOT EXISTS dependency_map ( + workspace_id VARCHAR(50) NOT NULL, + importer_path VARCHAR(510) NOT NULL, + importer_kind IMPORTER_KIND NOT NULL, + imported_path VARCHAR(510) NOT NULL, + PRIMARY KEY (workspace_id, importer_path, importer_kind, imported_path) +); + +CREATE UNIQUE INDEX IF NOT EXISTS dependency_map_imported_path_idx ON dependency_map (workspace_id, imported_path); + diff --git a/backend/migrations/20240102133412_job_stats_table.down.sql b/backend/migrations/20240102133412_job_stats_table.down.sql new file mode 100644 index 0000000000000..42bb1aaa115d1 --- /dev/null +++ b/backend/migrations/20240102133412_job_stats_table.down.sql @@ -0,0 +1,3 @@ +-- Add down migration script here +DROP TABLE job_stats; +DROP TYPE METRIC_KIND; \ No newline at end of file diff --git a/backend/migrations/20240102133412_job_stats_table.up.sql b/backend/migrations/20240102133412_job_stats_table.up.sql new file mode 100644 index 0000000000000..b1357594d87a2 --- /dev/null +++ b/backend/migrations/20240102133412_job_stats_table.up.sql @@ -0,0 +1,16 @@ +-- Add up migration script here +CREATE TYPE METRIC_KIND AS ENUM ('scalar_int', 'scalar_float', 'timeseries_int', 'timeseries_float'); + +CREATE TABLE IF NOT EXISTS job_stats ( + workspace_id VARCHAR(50) NOT NULL REFERENCES workspace(id), + job_id UUID NOT NULL, + metric_id VARCHAR(50) NOT NULL, + metric_name VARCHAR(255), + metric_kind METRIC_KIND NOT NULL, + scalar_int INTEGER, + scalar_float REAL, + timestamps TIMESTAMP WITH TIME ZONE[], + timeseries_int INTEGER[], + timeseries_float REAL[], + PRIMARY KEY (workspace_id, job_id, metric_id) +); diff --git a/backend/migrations/20240108130114_add_oidc.down.sql b/backend/migrations/20240108130114_add_oidc.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20240108130114_add_oidc.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20240108130114_add_oidc.up.sql b/backend/migrations/20240108130114_add_oidc.up.sql new file mode 100644 index 0000000000000..4b8c8abbdfbe6 --- /dev/null +++ b/backend/migrations/20240108130114_add_oidc.up.sql @@ -0,0 +1,2 @@ +-- Add up migration script here +ALTER TABLE token ADD COLUMN IF NOT EXISTS job UUID; \ No newline at end of file diff --git a/backend/migrations/20240112131322_git_sync_multi.down.sql b/backend/migrations/20240112131322_git_sync_multi.down.sql new file mode 100644 index 0000000000000..0beef40678a94 --- /dev/null +++ b/backend/migrations/20240112131322_git_sync_multi.down.sql @@ -0,0 +1,2 @@ +-- Add down migration script here +UPDATE workspace_settings SET git_sync = git_sync->0; \ No newline at end of file diff --git a/backend/migrations/20240112131322_git_sync_multi.up.sql b/backend/migrations/20240112131322_git_sync_multi.up.sql new file mode 100644 index 0000000000000..9ff8eaadc93a4 --- /dev/null +++ b/backend/migrations/20240112131322_git_sync_multi.up.sql @@ -0,0 +1,2 @@ +-- Add up migration script here +UPDATE workspace_settings SET git_sync = '[]'::jsonb || git_sync diff --git a/backend/migrations/20240112162019_schedule_custom_tag.down.sql b/backend/migrations/20240112162019_schedule_custom_tag.down.sql new file mode 100644 index 0000000000000..a6ee0134c5ef4 --- /dev/null +++ b/backend/migrations/20240112162019_schedule_custom_tag.down.sql @@ -0,0 +1,2 @@ +-- Add down migration script here +ALTER TABLE schedule DROP COLUMN tag; diff --git a/backend/migrations/20240112162019_schedule_custom_tag.up.sql b/backend/migrations/20240112162019_schedule_custom_tag.up.sql new file mode 100644 index 0000000000000..1aa2d8382b00f --- /dev/null +++ b/backend/migrations/20240112162019_schedule_custom_tag.up.sql @@ -0,0 +1,2 @@ +-- Add up migration script here +ALTER TABLE schedule ADD COLUMN tag VARCHAR(50); diff --git a/backend/migrations/20240113112935_remove_account_perms.down.sql b/backend/migrations/20240113112935_remove_account_perms.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20240113112935_remove_account_perms.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20240113112935_remove_account_perms.up.sql b/backend/migrations/20240113112935_remove_account_perms.up.sql new file mode 100644 index 0000000000000..b2b5834348783 --- /dev/null +++ b/backend/migrations/20240113112935_remove_account_perms.up.sql @@ -0,0 +1,11 @@ +-- Add up migration script here + +DROP POLICY IF EXISTS see_own ON account; +DROP POLICY IF EXISTS see_member ON account; +DROP POLICY IF EXISTS see_folder_extra_perms_user on account; +ALTER TABLE account DISABLE ROW LEVEL SECURITY; + +ALTER TABLE account DROP COLUMN IF EXISTS owner; + +GRANT ALL ON account TO windmill_admin; +GRANT ALL ON account TO windmill_user; diff --git a/backend/migrations/20240119112456_add_scim_display_name.down.sql b/backend/migrations/20240119112456_add_scim_display_name.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20240119112456_add_scim_display_name.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20240119112456_add_scim_display_name.up.sql b/backend/migrations/20240119112456_add_scim_display_name.up.sql new file mode 100644 index 0000000000000..1c213c9b74e6e --- /dev/null +++ b/backend/migrations/20240119112456_add_scim_display_name.up.sql @@ -0,0 +1,3 @@ +-- Add up migration script here +ALTER TABLE instance_group ADD COLUMN IF NOT EXISTS scim_display_name VARCHAR(255); +UPDATE instance_group SET external_id = name, scim_display_name = name; \ No newline at end of file diff --git a/backend/migrations/20240119155317_script_concurrency_key.down.sql b/backend/migrations/20240119155317_script_concurrency_key.down.sql new file mode 100644 index 0000000000000..a8a8d24b87061 --- /dev/null +++ b/backend/migrations/20240119155317_script_concurrency_key.down.sql @@ -0,0 +1,2 @@ +-- Add down migration script here +ALTER TABLE script DROP COLUMN concurrency_key; diff --git a/backend/migrations/20240119155317_script_concurrency_key.up.sql b/backend/migrations/20240119155317_script_concurrency_key.up.sql new file mode 100644 index 0000000000000..fc34ba4ba88ec --- /dev/null +++ b/backend/migrations/20240119155317_script_concurrency_key.up.sql @@ -0,0 +1,2 @@ +-- Add up migration script here +ALTER TABLE script ADD COLUMN concurrency_key VARCHAR(255); diff --git a/backend/migrations/20240119171900_workspace_default_app.down.sql b/backend/migrations/20240119171900_workspace_default_app.down.sql new file mode 100644 index 0000000000000..88ed130d17536 --- /dev/null +++ b/backend/migrations/20240119171900_workspace_default_app.down.sql @@ -0,0 +1,2 @@ +-- Add down migration script here +ALTER TABLE workspace_settings DROP COLUMN default_app; diff --git a/backend/migrations/20240119171900_workspace_default_app.up.sql b/backend/migrations/20240119171900_workspace_default_app.up.sql new file mode 100644 index 0000000000000..90b9a54c70bc8 --- /dev/null +++ b/backend/migrations/20240119171900_workspace_default_app.up.sql @@ -0,0 +1,2 @@ +-- Add up migration script here +ALTER TABLE workspace_settings ADD COLUMN default_app VARCHAR(255); diff --git a/backend/migrations/20240126145102_remove_payload_limit_for_resume.down.sql b/backend/migrations/20240126145102_remove_payload_limit_for_resume.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20240126145102_remove_payload_limit_for_resume.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20240126145102_remove_payload_limit_for_resume.up.sql b/backend/migrations/20240126145102_remove_payload_limit_for_resume.up.sql new file mode 100644 index 0000000000000..136fba90c8c5f --- /dev/null +++ b/backend/migrations/20240126145102_remove_payload_limit_for_resume.up.sql @@ -0,0 +1,3 @@ +-- Add up migration script here +ALTER TABLE resume_job +DROP CONSTRAINT resume_job_value_check; diff --git a/backend/migrations/20240130175105_add_auto_add.down.sql b/backend/migrations/20240130175105_add_auto_add.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20240130175105_add_auto_add.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20240130175105_add_auto_add.up.sql b/backend/migrations/20240130175105_add_auto_add.up.sql new file mode 100644 index 0000000000000..bbd8b8bf23b8f --- /dev/null +++ b/backend/migrations/20240130175105_add_auto_add.up.sql @@ -0,0 +1,3 @@ +-- Add up migration script here +ALTER TABLE workspace_settings +ADD COLUMN auto_add boolean default false; \ No newline at end of file diff --git a/backend/migrations/20240204212055_auto_bypassrls.down.sql b/backend/migrations/20240204212055_auto_bypassrls.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20240204212055_auto_bypassrls.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20240204212055_auto_bypassrls.up.sql b/backend/migrations/20240204212055_auto_bypassrls.up.sql new file mode 100644 index 0000000000000..a215298cc40f2 --- /dev/null +++ b/backend/migrations/20240204212055_auto_bypassrls.up.sql @@ -0,0 +1,2 @@ +-- Add up migration script here +create table windmill_migrations (name text primary key, created_at timestamp default current_timestamp); \ No newline at end of file diff --git a/backend/migrations/20240207203435_accept_missing_config_in_policies.down.sql b/backend/migrations/20240207203435_accept_missing_config_in_policies.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20240207203435_accept_missing_config_in_policies.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20240207203435_accept_missing_config_in_policies.up.sql b/backend/migrations/20240207203435_accept_missing_config_in_policies.up.sql new file mode 100644 index 0000000000000..0da0a538a399f --- /dev/null +++ b/backend/migrations/20240207203435_accept_missing_config_in_policies.up.sql @@ -0,0 +1 @@ +-- Add up migration script here diff --git a/backend/migrations/20240207211936_accept_missing_config_in_policies_2.down.sql b/backend/migrations/20240207211936_accept_missing_config_in_policies_2.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20240207211936_accept_missing_config_in_policies_2.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20240207211936_accept_missing_config_in_policies_2.up.sql b/backend/migrations/20240207211936_accept_missing_config_in_policies_2.up.sql new file mode 100644 index 0000000000000..fd3271a4d20c2 --- /dev/null +++ b/backend/migrations/20240207211936_accept_missing_config_in_policies_2.up.sql @@ -0,0 +1,44 @@ +-- Add up migration script here +DROP POLICY see_own_path ON queue; +DROP POLICY see_member_path ON queue; +DROP POLICY see_own ON queue; +DROP POLICY see_member ON queue; +DROP POLICY see_folder_extra_perms_user ON queue; +DROP POLICY see_own_path ON completed_job; +DROP POLICY see_member_path ON completed_job; +DROP POLICY see_own ON completed_job; +DROP POLICY see_member ON completed_job; +DROP POLICY see_folder_extra_perms_user ON completed_job; + + +CREATE POLICY see_own_path ON queue FOR ALL +USING (queue.visible_to_owner IS true AND SPLIT_PART(queue.script_path, '/', 1) = 'u' AND SPLIT_PART(queue.script_path, '/', 2) = current_setting('session.user', true)); + +CREATE POLICY see_member_path ON queue FOR ALL +USING (queue.visible_to_owner IS true AND SPLIT_PART(queue.script_path, '/', 1) = 'g' AND SPLIT_PART(queue.script_path, '/', 2) = any(regexp_split_to_array(current_setting('session.groups', true), ',')::text[])); + +CREATE POLICY see_own ON queue FOR ALL +USING (SPLIT_PART(queue.permissioned_as, '/', 1) = 'u' AND SPLIT_PART(queue.permissioned_as, '/', 2) = current_setting('session.user', true)); + +CREATE POLICY see_member ON queue FOR ALL +USING (SPLIT_PART(queue.permissioned_as, '/', 1) = 'g' AND SPLIT_PART(queue.permissioned_as, '/', 2) = any(regexp_split_to_array(current_setting('session.groups', true), ',')::text[])); + +CREATE POLICY see_folder_extra_perms_user ON queue FOR ALL + USING (((visible_to_owner IS TRUE) AND (split_part((script_path)::text, '/'::text, 1) = 'f'::text) AND (split_part((script_path)::text, '/'::text, 2) = ANY (regexp_split_to_array(current_setting('session.folders_read'::text, true), ','::text))))); + + + +CREATE POLICY see_own_path ON completed_job FOR ALL +USING (completed_job.visible_to_owner IS true AND SPLIT_PART(completed_job.script_path, '/', 1) = 'u' AND SPLIT_PART(completed_job.script_path, '/', 2) = current_setting('session.user', true)); + +CREATE POLICY see_member_path ON completed_job FOR ALL +USING (completed_job.visible_to_owner IS true AND SPLIT_PART(completed_job.script_path, '/', 1) = 'g' AND SPLIT_PART(completed_job.script_path, '/', 2) = any(regexp_split_to_array(current_setting('session.groups', true), ',')::text[])); + +CREATE POLICY see_own ON completed_job FOR ALL +USING (SPLIT_PART(completed_job.permissioned_as, '/', 1) = 'u' AND SPLIT_PART(completed_job.permissioned_as, '/', 2) = current_setting('session.user', true)); + +CREATE POLICY see_member ON completed_job FOR ALL +USING (SPLIT_PART(completed_job.permissioned_as, '/', 1) = 'g' AND SPLIT_PART(completed_job.permissioned_as, '/', 2) = any(regexp_split_to_array(current_setting('session.groups', true), ',')::text[])); + +CREATE POLICY see_folder_extra_perms_user ON completed_job FOR ALL + USING (((visible_to_owner IS TRUE) AND (split_part((script_path)::text, '/'::text, 1) = 'f'::text) AND (split_part((script_path)::text, '/'::text, 2) = ANY (regexp_split_to_array(current_setting('session.folders_read'::text, true), ','::text))))); \ No newline at end of file diff --git a/backend/migrations/20240209103543_update_app_new.down.sql b/backend/migrations/20240209103543_update_app_new.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20240209103543_update_app_new.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20240209103543_update_app_new.up.sql b/backend/migrations/20240209103543_update_app_new.up.sql new file mode 100644 index 0000000000000..e69e01f1fadb3 --- /dev/null +++ b/backend/migrations/20240209103543_update_app_new.up.sql @@ -0,0 +1,1165 @@ +-- Add up migration script here +-- Add up migration script here +-- Add up migration script here + +with _insert as +( +INSERT INTO + app_version(app_id, created_by, created_at, value) +VALUES + ( + ( + SELECT + id + FROM + app + WHERE + workspace_id = 'admins' + AND path = 'g/all/setup_app' + ), + 'admin@windmill.dev', + '2023-01-01 00:00:00.000000 +00:00', + '{ + "css": { + "htmlcomponent": { + "container": { + "class": "", + "style": "" + } + }, + "textcomponent": { + "text": { + "class": "", + "style": "" + }, + "container": { + "class": "", + "style": "" + } + }, + "imagecomponent": { + "image": { + "class": "", + "style": "" + } + }, + "containercomponent": { + "container": { + "class": "", + "style": "" + } + }, + "textinputcomponent": { + "input": { + "class": "", + "style": "" + } + }, + "schemaformcomponent": { + "label": { + "class": "", + "style": "" + }, + "container": { + "class": "", + "style": "" + }, + "description": { + "class": "", + "style": "" + } + }, + "buttoncomponent": { + "button": { + "style": "", + "class": "" + }, + "container": { + "style": "", + "class": "" + } + } + }, + "grid": [ + { + "3": { + "h": 2, + "w": 3, + "x": 0, + "y": 0, + "fixed": false + }, + "12": { + "h": 2, + "w": 11, + "x": 0, + "y": 1, + "fixed": false + }, + "id": "a", + "data": { + "id": "a", + "type": "textcomponent", + "customCss": { + "text": { + "class": "text-3xl font-semibold", + "style": "" + }, + "container": { + "class": "", + "style": "" + } + }, + "configuration": { + "style": { + "type": "static", + "value": "Body" + }, + "tooltip": { + "type": "static", + "value": "" + }, + "copyButton": { + "type": "static", + "value": false + } + }, + "componentInput": { + "eval": "Setup your Windmill Instance", + "type": "templatev2", + "value": "Hello ${ctx.username}", + "fieldType": "template", + "connections": [] + }, + "verticalAlignment": "center", + "horizontalAlignment": "left" + } + }, + { + "3": { + "h": 3, + "w": 3, + "x": 0, + "y": 2, + "fixed": false + }, + "12": { + "h": 2, + "w": 1, + "x": 11, + "y": 1, + "fixed": false + }, + "data": { + "id": "b", + "type": "imagecomponent", + "customCss": { + "image": { + "class": "", + "style": "" + } + }, + "configuration": { + "source": { + "type": "static", + "value": "/logo.svg" + }, + "altText": { + "type": "static", + "value": "" + }, + "imageFit": { + "type": "static", + "value": "contain" + }, + "sourceKind": { + "type": "static", + "value": "url" + } + } + }, + "id": "b" + }, + { + "3": { + "h": 11, + "w": 3, + "x": 0, + "y": 6, + "fixed": false + }, + "12": { + "h": 12, + "w": 6, + "x": 0, + "y": 6, + "fixed": false + }, + "id": "d", + "data": { + "id": "d", + "type": "containercomponent", + "customCss": { + "container": { + "class": "shadow-lg rounded-lg border p-2 mr-2", + "style": "" + } + }, + "configuration": {}, + "numberOfSubgrids": 1 + } + }, + { + "3": { + "h": 9, + "w": 3, + "x": 0, + "y": 17, + "fixed": false + }, + "12": { + "h": 12, + "w": 6, + "x": 6, + "y": 6, + "fixed": false + }, + "id": "f", + "data": { + "id": "f", + "type": "containercomponent", + "customCss": { + "container": { + "class": "shadow-lg rounded-lg border p-2 ml-2", + "style": "" + } + }, + "configuration": {}, + "numberOfSubgrids": 1 + } + }, + { + "3": { + "h": 2, + "w": 3, + "x": 0, + "y": 26, + "fixed": false + }, + "12": { + "h": 2, + "w": 9, + "x": 3, + "y": 19, + "fixed": false + }, + "id": "i", + "data": { + "id": "i", + "type": "buttoncomponent", + "customCss": { + "button": { + "class": "", + "style": "" + }, + "container": { + "class": "", + "style": "" + } + }, + "recomputeIds": [], + "configuration": { + "size": { + "type": "static", + "value": "lg" + }, + "color": { + "type": "static", + "value": "dark" + }, + "label": { + "type": "static", + "value": "Set admin account and hub sync" + }, + "onError": { + "type": "oneOf", + "selected": "setTab", + "configuration": { + "open": { + "id": { + "type": "static", + "value": "" + } + }, + "close": { + "id": { + "type": "static", + "value": "" + } + }, + "setTab": { + "setTab": { + "type": "static", + "value": [ + { + "id": "p", + "index": 0 + } + ] + } + }, + "gotoUrl": { + "url": { + "type": "static", + "value": "" + }, + "newTab": { + "type": "static", + "value": true + } + }, + "errorOverlay": {}, + "sendErrorToast": { + "message": { + "type": "static", + "value": "" + }, + "appendError": { + "type": "static", + "value": true + } + } + } + }, + "disabled": { + "expr": "c?.values?.new_email === '''' || c?.values?.password === ''''||c.valid === false ", + "type": "evalv2", + "value": false, + "connections": [ + { + "id": "values", + "componentId": "c" + }, + { + "id": "valid", + "componentId": "c" + } + ] + }, + "afterIcon": { + "type": "static", + "value": "Zap" + }, + "onSuccess": { + "type": "oneOf", + "selected": "gotoUrl", + "configuration": { + "none": {}, + "open": { + "id": { + "type": "static", + "value": "" + } + }, + "close": { + "id": { + "type": "static", + "value": "" + } + }, + "setTab": { + "setTab": { + "type": "static", + "value": [ + { + "id": "p", + "index": 1 + } + ] + } + }, + "gotoUrl": { + "url": { + "expr": "bg_1.result", + "type": "evalv2", + "value": "", + "connections": [ + { + "id": "result", + "componentId": "bg_1" + } + ] + }, + "newTab": { + "type": "static", + "value": false + } + }, + "openModal": { + "modalId": { + "type": "static", + "value": "" + } + }, + "sendToast": { + "message": { + "type": "static", + "value": "" + } + }, + "clearFiles": { + "id": { + "type": "static", + "value": "" + } + }, + "closeModal": { + "modalId": { + "type": "static", + "value": "" + } + } + } + }, + "beforeIcon": { + "type": "static", + "value": "" + }, + "fillContainer": { + "type": "static", + "value": false + }, + "triggerOnAppLoad": { + "type": "static", + "value": false + } + }, + "componentInput": { + "type": "runnable", + "fields": { + "oldEmail": { + "expr": "ctx.email", + "type": "evalv2", + "value": null, + "fieldType": "string", + "connections": [ + { + "id": "email", + "componentId": "ctx" + } + ] + }, + "newEmail": { + "expr": "c.values.new_email", + "type": "evalv2", + "value": null, + "fieldType": "string", + "connections": [ + { + "id": "values", + "componentId": "c" + } + ] + }, + "newPassword": { + "expr": "c.values.password", + "type": "evalv2", + "value": null, + "fieldType": "string", + "connections": [ + { + "id": "values", + "componentId": "c" + } + ] + }, + "enable_hub_sync": { + "expr": "h.result", + "type": "evalv2", + "value": null, + "fieldType": "boolean", + "connections": [ + { + "id": "result", + "componentId": "h" + } + ] + }, + "sync_now": { + "type": "evalv2", + "value": null, + "fieldType": "boolean", + "expr": "k.result", + "connections": [ + { + "componentId": "k", + "id": "result" + } + ] + } + }, + "runnable": { + "name": "Change Account", + "type": "runnableByName", + "inlineScript": { + "path": "g/all/setup_app/Change_Account", + "schema": { + "type": "object", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "required": [ + "oldEmail", + "newEmail", + "newPassword", + "enable_hub_sync", + "sync_now" + ], + "properties": { + "oldEmail": { + "default": null, + "description": "", + "type": "string" + }, + "newEmail": { + "default": null, + "description": "", + "type": "string" + }, + "newPassword": { + "default": null, + "description": "", + "type": "string" + }, + "enable_hub_sync": { + "default": null, + "description": "", + "type": "boolean" + }, + "sync_now": { + "default": null, + "description": "", + "type": "boolean" + } + } + }, + "content": "import * as wmill from \"https://deno.land/x/windmill@v1.99.0/mod.ts\";\n\nexport async function main(\n oldEmail: string,\n newEmail: string,\n newPassword: string,\n enable_hub_sync: boolean,\n sync_now: boolean,\n) {\n try {\n await wmill.UserService.createUserGlobally({\n requestBody: {\n email: newEmail,\n password: newPassword,\n super_admin: true,\n },\n });\n } catch (e) {\n throw Error(\"User already exists: \" + e.body);\n }\n\n let new_token;\n\n try {\n new_token = await wmill.UserService.login({\n requestBody: {\n email: newEmail,\n password: newPassword,\n },\n });\n } catch (e) {\n throw Error(\"Login failed: \" + e.body);\n }\n\n wmill.setClient(new_token, Deno.env.get(\"BASE_INTERNAL_URL\")!);\n\n if (sync_now) {\n try {\n await wmill.JobService.runScriptByPath({\n workspace: \"admins\",\n path: \"u/admin/hub_sync\",\n requestBody: {},\n });\n } catch (e) {\n throw Error(\"Hub sync failed:\" + e.body);\n }\n }\n\n if (enable_hub_sync) {\n try {\n await wmill.ScheduleService.createSchedule({\n workspace: \"admins\",\n requestBody: {\n path: \"g/all/hub_sync\",\n schedule: \"0 0 0 * * *\",\n script_path: \"u/admin/hub_sync\",\n is_flow: false,\n args: {},\n enabled: true,\n timezone: \"Etc/UTC\",\n },\n });\n } catch (e) {\n throw Error(\"Error creating schedule: \" + e.body);\n }\n }\n try {\n await wmill.UserService.globalUserDelete({ email: oldEmail });\n } catch (e) {\n throw Error(\"Deleting old account failed: \" + e.body);\n }\n}\n", + "language": "deno" + } + }, + "fieldType": "any", + "autoRefresh": false, + "recomputeOnInputChanged": false + }, + "verticalAlignment": "center", + "horizontalAlignment": "right" + } + }, + { + "3": { + "h": 8, + "w": 3, + "x": 0, + "y": 28, + "fixed": false + }, + "12": { + "h": 7, + "w": 12, + "x": 0, + "y": 21, + "fixed": false + }, + "id": "p", + "data": { + "id": "p", + "type": "conditionalwrapper", + "customCss": { + "container": { + "class": "", + "style": "" + } + }, + "conditions": [ + { + "expr": "i?.result.error", + "type": "evalv2", + "fieldType": "boolean", + "connections": [ + { + "componentId": "i", + "id": "result" + } + ] + }, + { + "expr": "true", + "type": "evalv2", + "fieldType": "boolean", + "connections": [] + } + ], + "configuration": {}, + "numberOfSubgrids": 2 + } + } + ], + "theme": { + "path": "f/app_themes/theme_0", + "type": "path" + }, + "subgrids": { + "d-0": [ + { + "3": { + "h": 1, + "w": 3, + "x": 0, + "y": 0, + "fixed": false + }, + "12": { + "h": 1, + "w": 12, + "x": 0, + "y": 0, + "fixed": false + }, + "id": "e", + "data": { + "id": "e", + "type": "textcomponent", + "customCss": { + "text": { + "class": "text-xl font-semibold px-2", + "style": "" + }, + "container": { + "class": "", + "style": "" + } + }, + "configuration": { + "style": { + "type": "static", + "value": "Body" + }, + "tooltip": { + "type": "static", + "value": "" + }, + "copyButton": { + "type": "static", + "value": false + } + }, + "componentInput": { + "eval": "Setup a secure account", + "type": "templatev2", + "value": "Hello ${ctx.username}", + "fieldType": "template", + "connections": [] + }, + "verticalAlignment": "center", + "horizontalAlignment": "left" + } + }, + { + "3": { + "h": 5, + "w": 3, + "x": 0, + "y": 2, + "fixed": false + }, + "12": { + "h": 5, + "w": 12, + "x": 0, + "y": 2, + "fixed": false + }, + "id": "c", + "data": { + "id": "c", + "type": "schemaformcomponent", + "customCss": { + "label": { + "class": "", + "style": "" + }, + "container": { + "class": "", + "style": "" + }, + "description": { + "class": "", + "style": "" + } + }, + "configuration": { + "largeGap": { + "type": "static", + "value": false + }, + "displayType": { + "type": "static", + "value": false + }, + "dynamicEnums": { + "type": "static", + "value": {} + }, + "defaultValues": { + "type": "static", + "value": {} + } + }, + "componentInput": { + "type": "static", + "value": { + "order": [ + "new_email", + "password" + ], + "required": [], + "properties": { + "new_email": { + "type": "string", + "format": "email", + "default": "", + "pattern": "^[\\w-.]+@([\\w-]+\\.)+[\\w-]{2,4}$", + "description": "" + }, + "password": { + "type": "string", + "description": "", + "pattern": "^..+$", + "default": "", + "customErrorMessage": "Must have at least 2 chars", + "password": true + } + } + }, + "fieldType": "schema" + } + } + }, + { + "3": { + "h": 1, + "w": 3, + "x": 0, + "y": 9, + "fixed": false + }, + "12": { + "h": 1, + "w": 12, + "x": 0, + "y": 10, + "fixed": false + }, + "id": "l", + "data": { + "id": "l", + "type": "textcomponent", + "customCss": { + "text": { + "class": "px-2", + "style": "" + }, + "container": { + "class": "", + "style": "" + } + }, + "configuration": { + "style": { + "type": "static", + "value": "Caption" + }, + "tooltip": { + "type": "static", + "value": "" + }, + "copyButton": { + "type": "static", + "value": false + } + }, + "componentInput": { + "eval": "Current email: ${ctx.email}", + "type": "templatev2", + "value": "Hello ${ctx.username}", + "fieldType": "template", + "connections": [ + { + "id": "email", + "componentId": "ctx" + } + ] + }, + "verticalAlignment": "top", + "horizontalAlignment": "left" + } + } + ], + "f-0": [ + { + "3": { + "h": 1, + "w": 3, + "x": 0, + "y": 0, + "fixed": false + }, + "12": { + "h": 1, + "w": 12, + "x": 0, + "y": 0, + "fixed": false + }, + "id": "g", + "data": { + "id": "g", + "type": "textcomponent", + "customCss": { + "text": { + "class": "text-xl font-semibold px-2", + "style": "" + }, + "container": { + "class": "", + "style": "" + } + }, + "configuration": { + "style": { + "type": "static", + "value": "Body" + }, + "tooltip": { + "type": "static", + "value": "" + }, + "copyButton": { + "type": "static", + "value": false + } + }, + "componentInput": { + "eval": "Hub Sync", + "type": "templatev2", + "value": "Hello ${ctx.username}", + "fieldType": "template", + "connections": [] + }, + "verticalAlignment": "center", + "horizontalAlignment": "left" + } + }, + { + "3": { + "h": 3, + "w": 3, + "x": 0, + "y": 2, + "fixed": false + }, + "12": { + "h": 6, + "w": 12, + "x": 0, + "y": 2, + "fixed": false + }, + "id": "m", + "data": { + "id": "m", + "type": "containercomponent", + "customCss": { + "container": { + "class": "", + "style": "" + } + }, + "configuration": {}, + "numberOfSubgrids": 1 + } + }, + { + "3": { + "h": 2, + "w": 3, + "x": 0, + "y": 6, + "fixed": false + }, + "12": { + "h": 1, + "w": 12, + "x": 0, + "y": 10, + "fixed": false + }, + "id": "n", + "data": { + "id": "n", + "type": "textcomponent", + "customCss": { + "text": { + "class": "px-2 xs", + "style": "" + }, + "container": { + "class": "", + "style": "" + } + }, + "configuration": { + "style": { + "type": "static", + "value": "Caption" + }, + "tooltip": { + "type": "static", + "value": "" + }, + "copyButton": { + "type": "static", + "value": false + } + }, + "componentInput": { + "eval": "The schedule synchronizes resource types from the Hub every day.", + "type": "templatev2", + "value": "Hello ${ctx.username}", + "fieldType": "template", + "connections": [] + }, + "verticalAlignment": "top", + "horizontalAlignment": "left" + } + } + ], + "m-0": [ + { + "3": { + "h": 1, + "w": 3, + "x": 0, + "y": 0, + "fixed": false + }, + "12": { + "h": 2, + "w": 12, + "x": 0, + "y": 0, + "fixed": false + }, + "data": { + "id": "k", + "type": "checkboxcomponent", + "customCss": { + "text": { + "class": "", + "style": "" + }, + "container": { + "class": "", + "style": "" + } + }, + "recomputeIds": [], + "configuration": { + "label": { + "type": "static", + "value": "Sync resource types now" + }, + "disabled": { + "type": "static", + "value": false + }, + "defaultValue": { + "type": "static", + "value": true + } + }, + "verticalAlignment": "center", + "horizontalAlignment": "left" + }, + "id": "k" + }, + { + "3": { + "h": 1, + "w": 3, + "x": 0, + "y": 1, + "fixed": false + }, + "12": { + "h": 2, + "w": 12, + "x": 0, + "y": 2, + "fixed": false + }, + "id": "h", + "data": { + "id": "h", + "type": "checkboxcomponent", + "customCss": { + "text": { + "class": "", + "style": "" + }, + "container": { + "class": "", + "style": "" + } + }, + "recomputeIds": [], + "configuration": { + "label": { + "type": "static", + "value": "Sync resource types every day" + }, + "disabled": { + "type": "static", + "value": false + }, + "defaultValue": { + "type": "static", + "value": true + } + }, + "verticalAlignment": "center", + "horizontalAlignment": "left" + } + } + ], + "p-0": [ + { + "3": { + "fixed": false, + "x": 0, + "y": 0, + "w": 2, + "h": 1 + }, + "12": { + "fixed": false, + "x": 0, + "y": 0, + "w": 12, + "h": 3 + }, + "data": { + "type": "alertcomponent", + "configuration": { + "type": { + "type": "static", + "value": "error" + }, + "title": { + "type": "static", + "value": "There were an error with your setup:" + }, + "description": { + "type": "evalv2", + "value": "Description", + "expr": "i?.result?.error?.message", + "connections": [ + { + "componentId": "i", + "id": "result" + } + ] + }, + "notRounded": { + "type": "static", + "value": false + }, + "tooltip": { + "type": "static", + "value": "" + }, + "size": { + "type": "static", + "value": "sm" + }, + "collapsible": { + "type": "static", + "value": false + }, + "initiallyCollapsed": { + "type": "static", + "value": false + } + }, + "customCss": { + "container": { + "class": "", + "style": "" + }, + "background": { + "class": "", + "style": "" + }, + "icon": { + "class": "", + "style": "" + }, + "title": { + "class": "", + "style": "" + }, + "description": { + "class": "", + "style": "" + } + }, + "verticalAlignment": "center", + "id": "j" + }, + "id": "j" + } + ], + "p-1": [] + }, + "fullscreen": false, + "norefreshbar": true, + "hiddenInlineScripts": [ + { + "name": "Background Runnable 0", + "type": "runnableByName", + "fields": {}, + "hidden": true + }, + { + "name": "Compute URL", + "type": "runnableByName", + "fields": {}, + "autoRefresh": true, + "inlineScript": { + "path": "u/faton/captivating_app/Compute_URL", + "content": "return ''/user/logout?rd='' + encodeURIComponent(''/user/login?email='' + c.values.new_email)", + "language": "frontend", + "refreshOn": [ + { + "id": "c", + "key": "values" + } + ], + "suggestedRefreshOn": [] + }, + "recomputeIds": [], + "recomputeOnInputChanged": true + } + ], + "unusedInlineScripts": [] +}') RETURNING id) +UPDATE app SET versions = ARRAY((select id from _insert)), policy = '{ "execution_mode": "viewer", "triggerables": {} }' +WHERE workspace_id = 'admins' AND path = 'g/all/setup_app'; diff --git a/backend/migrations/20240209144358_git_sync_regexp_and_type.down.sql b/backend/migrations/20240209144358_git_sync_regexp_and_type.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20240209144358_git_sync_regexp_and_type.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20240209144358_git_sync_regexp_and_type.up.sql b/backend/migrations/20240209144358_git_sync_regexp_and_type.up.sql new file mode 100644 index 0000000000000..825222b77855a --- /dev/null +++ b/backend/migrations/20240209144358_git_sync_regexp_and_type.up.sql @@ -0,0 +1,13 @@ +-- Add up migration script here +UPDATE workspace_settings SET git_sync = ( + CASE + WHEN git_sync is null THEN null + WHEN git_sync = '[]'::jsonb THEN null + ELSE jsonb_build_object( + 'repositories', git_sync, + 'include_path', '["f/**"]'::jsonb, + 'include_type', '["script", "flow", "app", "folder"]'::jsonb + + ) + END +); diff --git a/backend/migrations/20240212114028_update_hub_sync.down.sql b/backend/migrations/20240212114028_update_hub_sync.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20240212114028_update_hub_sync.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20240212114028_update_hub_sync.up.sql b/backend/migrations/20240212114028_update_hub_sync.up.sql new file mode 100644 index 0000000000000..cb830002d1051 --- /dev/null +++ b/backend/migrations/20240212114028_update_hub_sync.up.sql @@ -0,0 +1,16 @@ +-- Add up migration script here +-- Add up migration script here +UPDATE script SET content = 'import wmill from "https://deno.land/x/wmill@v1.268.0/main.ts"; +export async function main() { + await run( + "workspace", "add", "__automation", "admins", Deno.env.get("BASE_INTERNAL_URL") + "/", "--token", Deno.env.get("WM_TOKEN")); + + await run("hub", "pull"); +} + +async function run(...cmd: string[]) { + console.log("Running \"" + cmd.join('' '') + "\""); + await wmill.parse(cmd); +}', summary = 'Synchronize Hub Resource types with instance', +description = 'Sync latest resource types from hub to share to every workspace. Recommended to run at least once. On a schedule by default.' +WHERE hash = -28028598712388162 AND workspace_id = 'admins'; \ No newline at end of file diff --git a/backend/migrations/20240213205957_audit_log_setting.down.sql b/backend/migrations/20240213205957_audit_log_setting.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20240213205957_audit_log_setting.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20240213205957_audit_log_setting.up.sql b/backend/migrations/20240213205957_audit_log_setting.up.sql new file mode 100644 index 0000000000000..461d3c717ca8f --- /dev/null +++ b/backend/migrations/20240213205957_audit_log_setting.up.sql @@ -0,0 +1,4 @@ +-- Add up migration script here +DROP POLICY see_own ON audit; +CREATE POLICY see_own ON audit FOR all + USING (((username)::text = current_setting('session.user'::text, true))); \ No newline at end of file diff --git a/backend/migrations/20240216100535_improve_policies.down.sql b/backend/migrations/20240216100535_improve_policies.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20240216100535_improve_policies.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20240216100535_improve_policies.up.sql b/backend/migrations/20240216100535_improve_policies.up.sql new file mode 100644 index 0000000000000..811c1798e497e --- /dev/null +++ b/backend/migrations/20240216100535_improve_policies.up.sql @@ -0,0 +1,174 @@ +-- Add up migration script here + + +DROP POLICY see_folder_extra_perms_user ON capture; +CREATE POLICY see_folder_extra_perms_user ON capture FOR ALL TO windmill_user +USING (SPLIT_PART(capture.path, '/', 1) = 'f' AND SPLIT_PART(capture.path, '/', 2) = any(regexp_split_to_array(current_setting('session.folders_read'), ',')::text[])) +WITH CHECK (SPLIT_PART(capture.path, '/', 1) = 'f' AND SPLIT_PART(capture.path, '/', 2) = any(regexp_split_to_array(current_setting('session.folders_write'), ',')::text[])); + +DROP POLICY see_own ON capture; +CREATE POLICY see_own ON public.capture TO windmill_user USING (((split_part((path)::text, '/'::text, 1) = 'u'::text) AND (split_part((path)::text, '/'::text, 2) = current_setting('session.user'::text)))); + +DROP POLICY see_member ON capture; +CREATE POLICY see_member ON public.capture TO windmill_user USING (((split_part((path)::text, '/'::text, 1) = 'g'::text) AND (split_part((path)::text, '/'::text, 2) = ANY (regexp_split_to_array(current_setting('session.groups'::text), ','::text))))); + +DO +$do$ + DECLARE + i text; + arr text[] := array['queue', 'completed_job']; + BEGIN + FOREACH i IN ARRAY arr + LOOP + EXECUTE FORMAT( + $$ + DROP POLICY IF EXISTS see_folder_extra_perms_user ON %1$I; + CREATE POLICY see_folder_extra_perms_user ON %1$I FOR ALL TO windmill_user + USING (%1$I.visible_to_owner IS true AND SPLIT_PART(%1$I.script_path, '/', 1) = 'f' AND SPLIT_PART(%1$I.script_path, '/', 2) = any(regexp_split_to_array(current_setting('session.folders_read'), ',')::text[])); + $$, + i + ); + END LOOP; + END +$do$; + + + +DROP POLICY see_own ON audit; +CREATE POLICY see_own ON audit FOR all TO windmill_user + USING (((username)::text = current_setting('session.user'::text))); + + +DROP POLICY see_own_path ON queue; +DROP POLICY see_member_path ON queue; +DROP POLICY see_own ON queue; +DROP POLICY see_member ON queue; +DROP POLICY see_own_path ON completed_job; +DROP POLICY see_member_path ON completed_job; +DROP POLICY see_own ON completed_job; +DROP POLICY see_member ON completed_job; + +CREATE POLICY see_own_path ON queue FOR ALL TO windmill_user +USING (queue.visible_to_owner IS true AND SPLIT_PART(queue.script_path, '/', 1) = 'u' AND SPLIT_PART(queue.script_path, '/', 2) = current_setting('session.user')); + +CREATE POLICY see_member_path ON queue FOR ALL TO windmill_user +USING (queue.visible_to_owner IS true AND SPLIT_PART(queue.script_path, '/', 1) = 'g' AND SPLIT_PART(queue.script_path, '/', 2) = any(regexp_split_to_array(current_setting('session.groups'), ',')::text[])); + +CREATE POLICY see_own ON queue FOR ALL TO windmill_user +USING (SPLIT_PART(queue.permissioned_as, '/', 1) = 'u' AND SPLIT_PART(queue.permissioned_as, '/', 2) = current_setting('session.user')); + +CREATE POLICY see_member ON queue FOR ALL TO windmill_user +USING (SPLIT_PART(queue.permissioned_as, '/', 1) = 'g' AND SPLIT_PART(queue.permissioned_as, '/', 2) = any(regexp_split_to_array(current_setting('session.groups'), ',')::text[])); + + + +CREATE POLICY see_own_path ON completed_job FOR ALL TO windmill_user +USING (completed_job.visible_to_owner IS true AND SPLIT_PART(completed_job.script_path, '/', 1) = 'u' AND SPLIT_PART(completed_job.script_path, '/', 2) = current_setting('session.user')); + +CREATE POLICY see_member_path ON completed_job FOR ALL TO windmill_user +USING (completed_job.visible_to_owner IS true AND SPLIT_PART(completed_job.script_path, '/', 1) = 'g' AND SPLIT_PART(completed_job.script_path, '/', 2) = any(regexp_split_to_array(current_setting('session.groups'), ',')::text[])); + +CREATE POLICY see_own ON completed_job FOR ALL TO windmill_user +USING (SPLIT_PART(completed_job.permissioned_as, '/', 1) = 'u' AND SPLIT_PART(completed_job.permissioned_as, '/', 2) = current_setting('session.user')); + +CREATE POLICY see_member ON completed_job FOR ALL TO windmill_user +USING (SPLIT_PART(completed_job.permissioned_as, '/', 1) = 'g' AND SPLIT_PART(completed_job.permissioned_as, '/', 2) = any(regexp_split_to_array(current_setting('session.groups'), ',')::text[])); + + + +DROP POLICY schedule on audit; +CREATE POLICY schedule ON audit FOR INSERT TO windmill_user WITH CHECK (((username)::text ~~ 'schedule-%'::text)); + + + +DO +$do$ + DECLARE + i text; + arr text[] := array['resource', 'script', 'variable', 'schedule', 'flow', 'app', 'raw_app']; + BEGIN + FOREACH i IN ARRAY arr + LOOP + EXECUTE FORMAT( + $$ + DROP POLICY IF EXISTS see_folder_extra_perms_user ON %1$I; + CREATE POLICY see_folder_extra_perms_user ON %1$I FOR ALL TO windmill_user + USING (SPLIT_PART(%1$I.path, '/', 1) = 'f' AND SPLIT_PART(%1$I.path, '/', 2) = any(regexp_split_to_array(current_setting('session.folders_read'), ',')::text[])) + WITH CHECK (SPLIT_PART(%1$I.path, '/', 1) = 'f' AND SPLIT_PART(%1$I.path, '/', 2) = any(regexp_split_to_array(current_setting('session.folders_write'), ',')::text[])); + $$, + i + ); + END LOOP; + END +$do$; + +DROP POLICY see_extra_perms_user ON folder; +DROP POLICY see_extra_perms_groups ON folder; + +CREATE POLICY see_extra_perms_user ON folder FOR ALL to windmill_user +USING (extra_perms ? CONCAT('u/', current_setting('session.user')) or (CONCAT('u/', current_setting('session.user')) = ANY(owners))) +WITH CHECK ((CONCAT('u/', current_setting('session.user')) = ANY(owners))); + +CREATE POLICY see_extra_perms_groups ON folder FOR ALL to windmill_user +USING (extra_perms ?| regexp_split_to_array(current_setting('session.pgroups'), ',')::text[] or (exists( + SELECT o FROM unnest(owners) as o + WHERE o = ANY(regexp_split_to_array(current_setting('session.pgroups'), ',')::text[])))) +WITH CHECK (exists( + SELECT o FROM unnest(owners) as o + WHERE o = ANY(regexp_split_to_array(current_setting('session.pgroups'), ',')::text[]))); + + + +DO +$do$ + DECLARE + i text; + arr text[] := array['resource', 'script', 'variable', 'schedule', 'flow', 'app', 'raw_app']; + BEGIN + FOREACH i IN ARRAY arr + LOOP + EXECUTE FORMAT( + $$ + + DROP POLICY IF EXISTS see_own ON %1$I; + CREATE POLICY see_own ON %1$I FOR ALL TO windmill_user + USING (SPLIT_PART(%1$I.path, '/', 1) = 'u' AND SPLIT_PART(%1$I.path, '/', 2) = current_setting('session.user')); + + DROP POLICY IF EXISTS see_member ON %1$I; + CREATE POLICY see_member ON %1$I FOR ALL TO windmill_user + USING (SPLIT_PART(%1$I.path, '/', 1) = 'g' AND SPLIT_PART(%1$I.path, '/', 2) = any(regexp_split_to_array(current_setting('session.groups'), ',')::text[])); + + + DROP POLICY IF EXISTS see_extra_perms_user ON %1$I; + CREATE POLICY see_extra_perms_user ON %1$I FOR ALL TO windmill_user + USING (extra_perms ? CONCAT('u/', current_setting('session.user'))) + WITH CHECK ((extra_perms ->> CONCAT('u/', current_setting('session.user')))::boolean); + + DROP POLICY IF EXISTS see_extra_perms_groups ON %1$I; + CREATE POLICY see_extra_perms_groups ON %1$I FOR ALL TO windmill_user + USING (extra_perms ?| regexp_split_to_array(current_setting('session.pgroups'), ',')::text[]) + WITH CHECK (exists( + SELECT key, value FROM jsonb_each_text(extra_perms) + WHERE SPLIT_PART(key, '/', 1) = 'g' AND key = ANY(regexp_split_to_array(current_setting('session.pgroups'), ',')::text[]) + AND value::boolean)); + $$, + i + ); + END LOOP; + END +$do$; + + +DROP POLICY see_extra_perms_user ON usr_to_group; +CREATE POLICY see_extra_perms_user ON public.usr_to_group TO windmill_user USING (true) WITH CHECK ((EXISTS ( SELECT 1 + FROM public.group_ + WHERE (((usr_to_group.group_)::text = (group_.name)::text) AND ((usr_to_group.workspace_id)::text = (group_.workspace_id)::text) AND ((group_.extra_perms ->> concat('u/', current_setting('session.user'::text))))::boolean)))); + + +DROP POLICY see_extra_perms_groups ON usr_to_group; +CREATE POLICY see_extra_perms_groups ON public.usr_to_group TO windmill_user USING (true) WITH CHECK ((EXISTS ( SELECT f.key, + f.value + FROM public.group_ g, + LATERAL jsonb_each_text(g.extra_perms) f(key, value) + WHERE (((usr_to_group.group_)::text = (g.name)::text) AND ((usr_to_group.workspace_id)::text = (g.workspace_id)::text) AND (split_part(f.key, '/'::text, 1) = 'g'::text) AND (f.key = ANY (regexp_split_to_array(current_setting('session.pgroups'::text), ','::text))) AND (f.value)::boolean)))); + diff --git a/backend/migrations/20240216190540_add_deployment_metadata_grant_all.down.sql b/backend/migrations/20240216190540_add_deployment_metadata_grant_all.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20240216190540_add_deployment_metadata_grant_all.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20240216190540_add_deployment_metadata_grant_all.up.sql b/backend/migrations/20240216190540_add_deployment_metadata_grant_all.up.sql new file mode 100644 index 0000000000000..8a964fcb27deb --- /dev/null +++ b/backend/migrations/20240216190540_add_deployment_metadata_grant_all.up.sql @@ -0,0 +1,4 @@ +-- Add up migration script here + +GRANT ALL on deployment_metadata to windmill_user; +GRANT ALL on deployment_metadata to windmill_admin; \ No newline at end of file diff --git a/backend/migrations/20240219101340_add_automatic_billing.down.sql b/backend/migrations/20240219101340_add_automatic_billing.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20240219101340_add_automatic_billing.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20240219101340_add_automatic_billing.up.sql b/backend/migrations/20240219101340_add_automatic_billing.up.sql new file mode 100644 index 0000000000000..02de9b593173a --- /dev/null +++ b/backend/migrations/20240219101340_add_automatic_billing.up.sql @@ -0,0 +1,3 @@ +-- Add up migration script here +ALTER TABLE workspace_settings +ADD COLUMN automatic_billing BOOLEAN NOT NULL DEFAULT FALSE; \ No newline at end of file diff --git a/backend/migrations/20240220222323_remove_unique_index.down.sql b/backend/migrations/20240220222323_remove_unique_index.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20240220222323_remove_unique_index.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20240220222323_remove_unique_index.up.sql b/backend/migrations/20240220222323_remove_unique_index.up.sql new file mode 100644 index 0000000000000..18fff0ce7c3f4 --- /dev/null +++ b/backend/migrations/20240220222323_remove_unique_index.up.sql @@ -0,0 +1,4 @@ +-- Add up migration script here +DROP INDEX dependency_map_imported_path_idx; + +CREATE INDEX IF NOT EXISTS dependency_map_imported_path_idx ON dependency_map (workspace_id, imported_path); diff --git a/backend/migrations/20240222074526_add_longer_limits_to_email.down.sql b/backend/migrations/20240222074526_add_longer_limits_to_email.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20240222074526_add_longer_limits_to_email.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20240222074526_add_longer_limits_to_email.up.sql b/backend/migrations/20240222074526_add_longer_limits_to_email.up.sql new file mode 100644 index 0000000000000..a1fd87a78b372 --- /dev/null +++ b/backend/migrations/20240222074526_add_longer_limits_to_email.up.sql @@ -0,0 +1,5 @@ +-- Add up migration script here +ALTER TABLE usr ALTER COLUMN email TYPE VARCHAR(255); +ALTER TABLE password ALTER COLUMN email TYPE VARCHAR(255); +ALTER TABLE token ALTER COLUMN email TYPE VARCHAR(255); +ALTER TABLE workspace_invite ALTER COLUMN email TYPE VARCHAR(255); \ No newline at end of file diff --git a/backend/migrations/20240222120410_rename_scim_columns.down.sql b/backend/migrations/20240222120410_rename_scim_columns.down.sql new file mode 100644 index 0000000000000..c9b3b8c945e57 --- /dev/null +++ b/backend/migrations/20240222120410_rename_scim_columns.down.sql @@ -0,0 +1,5 @@ +-- Add down migration script here +ALTER TABLE instance_group +DROP COLUMN external_id; +ALTER TABLE instance_group +RENAME COLUMN id TO external_id; \ No newline at end of file diff --git a/backend/migrations/20240222120410_rename_scim_columns.up.sql b/backend/migrations/20240222120410_rename_scim_columns.up.sql new file mode 100644 index 0000000000000..aacfe0ad11679 --- /dev/null +++ b/backend/migrations/20240222120410_rename_scim_columns.up.sql @@ -0,0 +1,5 @@ +-- Add up migration script here +ALTER TABLE instance_group +RENAME COLUMN external_id TO id; +ALTER TABLE instance_group +ADD COLUMN external_id VARCHAR(512); \ No newline at end of file diff --git a/backend/migrations/20240223231005_add_index_completed_job.down.sql b/backend/migrations/20240223231005_add_index_completed_job.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20240223231005_add_index_completed_job.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20240223231005_add_index_completed_job.up.sql b/backend/migrations/20240223231005_add_index_completed_job.up.sql new file mode 100644 index 0000000000000..e8b52c0e81b65 --- /dev/null +++ b/backend/migrations/20240223231005_add_index_completed_job.up.sql @@ -0,0 +1,3 @@ +-- Add up migration script here +create index if not exists ix_completed_job_workspace_id_created_at +on completed_job(workspace_id, created_at desc, started_at desc, is_skipped, is_flow_step, job_kind); \ No newline at end of file diff --git a/backend/migrations/20240225142058_make_last_ping_nullable.down.sql b/backend/migrations/20240225142058_make_last_ping_nullable.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20240225142058_make_last_ping_nullable.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20240225142058_make_last_ping_nullable.up.sql b/backend/migrations/20240225142058_make_last_ping_nullable.up.sql new file mode 100644 index 0000000000000..1a64a62d09cd9 --- /dev/null +++ b/backend/migrations/20240225142058_make_last_ping_nullable.up.sql @@ -0,0 +1,3 @@ +-- Add up migration script here +ALTER TABLE queue +ALTER COLUMN last_ping DROP NOT NULL; \ No newline at end of file diff --git a/backend/migrations/20240225193945_set_last_ping_null.down.sql b/backend/migrations/20240225193945_set_last_ping_null.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20240225193945_set_last_ping_null.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20240225193945_set_last_ping_null.up.sql b/backend/migrations/20240225193945_set_last_ping_null.up.sql new file mode 100644 index 0000000000000..7bf55a0b8db28 --- /dev/null +++ b/backend/migrations/20240225193945_set_last_ping_null.up.sql @@ -0,0 +1,2 @@ +-- Add up migration script here +UPDATE queue SET last_ping = NULL WHERE job_kind = 'flow' OR job_kind = 'flowpreview'; \ No newline at end of file diff --git a/backend/migrations/20240227224009_parallel_monitor_lock.down.sql b/backend/migrations/20240227224009_parallel_monitor_lock.down.sql new file mode 100644 index 0000000000000..bfb9c6076acc9 --- /dev/null +++ b/backend/migrations/20240227224009_parallel_monitor_lock.down.sql @@ -0,0 +1,2 @@ +-- Add down migration script here +DROP TABLE parallel_monitor_lock; diff --git a/backend/migrations/20240227224009_parallel_monitor_lock.up.sql b/backend/migrations/20240227224009_parallel_monitor_lock.up.sql new file mode 100644 index 0000000000000..50a514de6f897 --- /dev/null +++ b/backend/migrations/20240227224009_parallel_monitor_lock.up.sql @@ -0,0 +1,7 @@ +-- Add up migration script here +CREATE TABLE parallel_monitor_lock ( + parent_flow_id uuid NOT NULL, + job_id uuid NOT NULL, + last_ping TIMESTAMP WITH TIME ZONE, + PRIMARY KEY (parent_flow_id, job_id) +); diff --git a/backend/migrations/20240306121903_custom_concurrency_key.down.sql b/backend/migrations/20240306121903_custom_concurrency_key.down.sql new file mode 100644 index 0000000000000..6201a1de29993 --- /dev/null +++ b/backend/migrations/20240306121903_custom_concurrency_key.down.sql @@ -0,0 +1,2 @@ +-- Add down migration script here +DROP TABLE custom_concurrency_key_ended; diff --git a/backend/migrations/20240306121903_custom_concurrency_key.up.sql b/backend/migrations/20240306121903_custom_concurrency_key.up.sql new file mode 100644 index 0000000000000..eb99135d3dec9 --- /dev/null +++ b/backend/migrations/20240306121903_custom_concurrency_key.up.sql @@ -0,0 +1,6 @@ +-- Add up migration script here +CREATE TABLE custom_concurrency_key_ended ( + key VARCHAR(255) NOT NULL, + ended_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW(), + PRIMARY KEY (key, ended_at) +); diff --git a/backend/migrations/20240306145717_add_instance_username.down.sql b/backend/migrations/20240306145717_add_instance_username.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20240306145717_add_instance_username.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20240306145717_add_instance_username.up.sql b/backend/migrations/20240306145717_add_instance_username.up.sql new file mode 100644 index 0000000000000..29db84e1f0d8f --- /dev/null +++ b/backend/migrations/20240306145717_add_instance_username.up.sql @@ -0,0 +1,2 @@ +-- Add up migration script here +ALTER TABLE password ADD COLUMN username VARCHAR(50) \ No newline at end of file diff --git a/backend/migrations/20240306160522_add_pending_user.down.sql b/backend/migrations/20240306160522_add_pending_user.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20240306160522_add_pending_user.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20240306160522_add_pending_user.up.sql b/backend/migrations/20240306160522_add_pending_user.up.sql new file mode 100644 index 0000000000000..e896ffa8edd6b --- /dev/null +++ b/backend/migrations/20240306160522_add_pending_user.up.sql @@ -0,0 +1,6 @@ +-- Add up migration script here +create table pending_user ( + email varchar(255) not null primary key, + created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(), + username varchar(50) not null +); \ No newline at end of file diff --git a/backend/migrations/20240307130500_set_automate_username_creation_setting.down.sql b/backend/migrations/20240307130500_set_automate_username_creation_setting.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20240307130500_set_automate_username_creation_setting.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20240307130500_set_automate_username_creation_setting.up.sql b/backend/migrations/20240307130500_set_automate_username_creation_setting.up.sql new file mode 100644 index 0000000000000..1a99f0d664b25 --- /dev/null +++ b/backend/migrations/20240307130500_set_automate_username_creation_setting.up.sql @@ -0,0 +1,5 @@ +INSERT INTO + global_settings (name, value) +SELECT 'automate_username_creation', 'true' +WHERE NOT EXISTS (SELECT 1 FROM workspace WHERE id != 'admins') +ON CONFLICT DO NOTHING; diff --git a/backend/migrations/20240310202648_add_customizable_template.down.sql b/backend/migrations/20240310202648_add_customizable_template.down.sql new file mode 100644 index 0000000000000..5a2f2a60d108e --- /dev/null +++ b/backend/migrations/20240310202648_add_customizable_template.down.sql @@ -0,0 +1,2 @@ +-- Add down migration script here +ALTER TABLE workspace_settings DROP COLUMN default_scripts; \ No newline at end of file diff --git a/backend/migrations/20240310202648_add_customizable_template.up.sql b/backend/migrations/20240310202648_add_customizable_template.up.sql new file mode 100644 index 0000000000000..48dd58ca64f8f --- /dev/null +++ b/backend/migrations/20240310202648_add_customizable_template.up.sql @@ -0,0 +1,2 @@ +-- Add up migration script here +ALTER TABLE workspace_settings ADD COLUMN default_scripts JSONB; \ No newline at end of file diff --git a/backend/migrations/20240312081949_set_admin_instance_username.down.sql b/backend/migrations/20240312081949_set_admin_instance_username.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20240312081949_set_admin_instance_username.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20240312081949_set_admin_instance_username.up.sql b/backend/migrations/20240312081949_set_admin_instance_username.up.sql new file mode 100644 index 0000000000000..f72370c0f1bbf --- /dev/null +++ b/backend/migrations/20240312081949_set_admin_instance_username.up.sql @@ -0,0 +1,2 @@ +-- Add up migration script here +UPDATE password SET username = 'admin' WHERE email = 'admin@windmill.dev'; \ No newline at end of file diff --git a/backend/migrations/20240312130200_clean_admin_instance_username.down.sql b/backend/migrations/20240312130200_clean_admin_instance_username.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20240312130200_clean_admin_instance_username.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20240312130200_clean_admin_instance_username.up.sql b/backend/migrations/20240312130200_clean_admin_instance_username.up.sql new file mode 100644 index 0000000000000..1487fd79c994a --- /dev/null +++ b/backend/migrations/20240312130200_clean_admin_instance_username.up.sql @@ -0,0 +1,3 @@ +-- Add up migration script here +UPDATE password SET username = NULL WHERE email = 'admin@windmill.dev' +AND (SELECT value FROM global_settings WHERE name = 'automate_username_creation') IS DISTINCT FROM 'true'; \ No newline at end of file diff --git a/backend/migrations/20240315143056_longer_worker_names.down.sql b/backend/migrations/20240315143056_longer_worker_names.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20240315143056_longer_worker_names.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20240315143056_longer_worker_names.up.sql b/backend/migrations/20240315143056_longer_worker_names.up.sql new file mode 100644 index 0000000000000..bf615a695906b --- /dev/null +++ b/backend/migrations/20240315143056_longer_worker_names.up.sql @@ -0,0 +1,3 @@ +-- Add up migration script here +ALTER TABLE worker_ping ALTER COLUMN worker TYPE VARCHAR(255); +ALTER TABLE worker_ping ALTER COLUMN worker_instance TYPE VARCHAR(255); \ No newline at end of file diff --git a/backend/migrations/20240315143613_large_logs_table.down.sql b/backend/migrations/20240315143613_large_logs_table.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20240315143613_large_logs_table.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20240315143613_large_logs_table.up.sql b/backend/migrations/20240315143613_large_logs_table.up.sql new file mode 100644 index 0000000000000..5e3d8fd3b8410 --- /dev/null +++ b/backend/migrations/20240315143613_large_logs_table.up.sql @@ -0,0 +1,8 @@ +-- Add up migration script here +CREATE TABLE IF NOT EXISTS job_logs +( + job_id uuid PRIMARY KEY, + workspace_id VARCHAR(255), + created_at TIMESTAMP WITH TIME ZONE DEFAULT now(), + logs TEXT +); \ No newline at end of file diff --git a/backend/migrations/20240317084804_improve_cancelled_suspended_flow.down.sql b/backend/migrations/20240317084804_improve_cancelled_suspended_flow.down.sql new file mode 100644 index 0000000000000..d2e8bb3d9f9ad --- /dev/null +++ b/backend/migrations/20240317084804_improve_cancelled_suspended_flow.down.sql @@ -0,0 +1,2 @@ +-- Add down migration script here +ALTER TABLE resume_job DROP COLUMN approved; \ No newline at end of file diff --git a/backend/migrations/20240317084804_improve_cancelled_suspended_flow.up.sql b/backend/migrations/20240317084804_improve_cancelled_suspended_flow.up.sql new file mode 100644 index 0000000000000..8af38d5fc4672 --- /dev/null +++ b/backend/migrations/20240317084804_improve_cancelled_suspended_flow.up.sql @@ -0,0 +1,2 @@ +-- Add up migration script here +ALTER TABLE resume_job ADD COLUMN approved BOOLEAN NOT NULL DEFAULT true; \ No newline at end of file diff --git a/backend/migrations/20240322130200_add_offset_to_logs.down.sql b/backend/migrations/20240322130200_add_offset_to_logs.down.sql new file mode 100644 index 0000000000000..2eb2d1b570ab4 --- /dev/null +++ b/backend/migrations/20240322130200_add_offset_to_logs.down.sql @@ -0,0 +1,3 @@ +-- Add down migration script here +ALTER TABLE job_logs DROP COLUMN log_offset +ALTER TABLE job_logs DROP COLUMN log_file_index; diff --git a/backend/migrations/20240322130200_add_offset_to_logs.up.sql b/backend/migrations/20240322130200_add_offset_to_logs.up.sql new file mode 100644 index 0000000000000..a4a658a90db67 --- /dev/null +++ b/backend/migrations/20240322130200_add_offset_to_logs.up.sql @@ -0,0 +1,4 @@ +-- Add up migration script here +ALTER TABLE job_logs ADD COLUMN log_offset int NOT NULL DEFAULT 0; +ALTER TABLE job_logs ADD COLUMN log_file_index text[]; + diff --git a/backend/migrations/20240322164216_add_workspace_envs.down.sql b/backend/migrations/20240322164216_add_workspace_envs.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20240322164216_add_workspace_envs.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20240322164216_add_workspace_envs.up.sql b/backend/migrations/20240322164216_add_workspace_envs.up.sql new file mode 100644 index 0000000000000..3cc9510c301f3 --- /dev/null +++ b/backend/migrations/20240322164216_add_workspace_envs.up.sql @@ -0,0 +1,7 @@ +-- Add up migration script here +CREATE TABLE workspace_env ( + workspace_id varchar(50) not null, + name varchar(255) not null, + value varchar(1000) not null, + primary key (workspace_id, name) +) \ No newline at end of file diff --git a/backend/migrations/20240326122255_add_visible_to_runner_only.down.sql b/backend/migrations/20240326122255_add_visible_to_runner_only.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20240326122255_add_visible_to_runner_only.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20240326122255_add_visible_to_runner_only.up.sql b/backend/migrations/20240326122255_add_visible_to_runner_only.up.sql new file mode 100644 index 0000000000000..ba529a6cc0ce7 --- /dev/null +++ b/backend/migrations/20240326122255_add_visible_to_runner_only.up.sql @@ -0,0 +1,3 @@ +-- Add up migration script here +ALTER TABLE script ADD COLUMN visible_to_runner_only BOOLEAN; +ALTER TABLE flow ADD COLUMN visible_to_runner_only BOOLEAN; \ No newline at end of file diff --git a/backend/migrations/20240328145425_remove_overquota.down.sql b/backend/migrations/20240328145425_remove_overquota.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20240328145425_remove_overquota.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20240328145425_remove_overquota.up.sql b/backend/migrations/20240328145425_remove_overquota.up.sql new file mode 100644 index 0000000000000..87c82ba19f0fc --- /dev/null +++ b/backend/migrations/20240328145425_remove_overquota.up.sql @@ -0,0 +1,2 @@ +-- Add up migration script here +alter table workspace drop column is_overquota; \ No newline at end of file diff --git a/backend/migrations/20240331125020_webhooks_audits.down.sql b/backend/migrations/20240331125020_webhooks_audits.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20240331125020_webhooks_audits.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20240331125020_webhooks_audits.up.sql b/backend/migrations/20240331125020_webhooks_audits.up.sql new file mode 100644 index 0000000000000..a02e5d0ad5269 --- /dev/null +++ b/backend/migrations/20240331125020_webhooks_audits.up.sql @@ -0,0 +1,4 @@ +-- Add up migration script here +CREATE POLICY "webhook" ON audit FOR INSERT +TO windmill_user +WITH CHECK (((username)::text ~~ 'webhook-%'::text)) \ No newline at end of file diff --git a/backend/migrations/20240403083110_remove_team_id_constraint.down.sql b/backend/migrations/20240403083110_remove_team_id_constraint.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20240403083110_remove_team_id_constraint.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20240403083110_remove_team_id_constraint.up.sql b/backend/migrations/20240403083110_remove_team_id_constraint.up.sql new file mode 100644 index 0000000000000..3a91c3384cb7b --- /dev/null +++ b/backend/migrations/20240403083110_remove_team_id_constraint.up.sql @@ -0,0 +1,2 @@ +-- Add up migration script here +ALTER TABLE public.workspace_settings DROP CONSTRAINT workspace_settings_slack_team_id_key \ No newline at end of file diff --git a/backend/migrations/20240408134243_longer_approvers.down.sql b/backend/migrations/20240408134243_longer_approvers.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20240408134243_longer_approvers.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20240408134243_longer_approvers.up.sql b/backend/migrations/20240408134243_longer_approvers.up.sql new file mode 100644 index 0000000000000..0edef09c9656b --- /dev/null +++ b/backend/migrations/20240408134243_longer_approvers.up.sql @@ -0,0 +1,2 @@ +-- Add up migration script here +ALTER TABLE resume_job ALTER COLUMN approver TYPE VARCHAR(1000); \ No newline at end of file diff --git a/backend/migrations/20240409181630_add_concurrency_key_to_flow.down.sql b/backend/migrations/20240409181630_add_concurrency_key_to_flow.down.sql new file mode 100644 index 0000000000000..050f94cee76d0 --- /dev/null +++ b/backend/migrations/20240409181630_add_concurrency_key_to_flow.down.sql @@ -0,0 +1,2 @@ +-- Add down migration script here +ALTER TABLE flow DROP COLUMN concurrency_key; diff --git a/backend/migrations/20240409181630_add_concurrency_key_to_flow.up.sql b/backend/migrations/20240409181630_add_concurrency_key_to_flow.up.sql new file mode 100644 index 0000000000000..3ad350a983210 --- /dev/null +++ b/backend/migrations/20240409181630_add_concurrency_key_to_flow.up.sql @@ -0,0 +1,2 @@ +-- Add up migration script here +ALTER TABLE flow ADD COLUMN concurrency_key VARCHAR(255); diff --git a/backend/migrations/20240415144144_tighten_delete_permissions.down.sql b/backend/migrations/20240415144144_tighten_delete_permissions.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20240415144144_tighten_delete_permissions.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20240415144144_tighten_delete_permissions.up.sql b/backend/migrations/20240415144144_tighten_delete_permissions.up.sql new file mode 100644 index 0000000000000..4e64395e3a59d --- /dev/null +++ b/backend/migrations/20240415144144_tighten_delete_permissions.up.sql @@ -0,0 +1,228 @@ + +DO +$do$ + DECLARE + i text; + arr text[] := array['resource', 'script', 'variable', 'schedule', 'flow', 'app', 'raw_app']; + BEGIN + FOREACH i IN ARRAY arr + LOOP + EXECUTE FORMAT( + $$ + DROP POLICY IF EXISTS see_folder_extra_perms_user ON %1$I; + DROP POLICY IF EXISTS see_folder_extra_perms_user_delete ON %1$I; + DROP POLICY IF EXISTS see_extra_perms_user ON %1$I; + DROP POLICY IF EXISTS see_member ON %1$I; + DROP POLICY IF EXISTS see_own ON %1$I; + DROP POLICY IF EXISTS see_extra_perms_user_delete ON %1$I; + DROP POLICY IF EXISTS see_extra_perms_groups ON %1$I; + DROP POLICY IF EXISTS see_extra_perms_groups_delete ON %1$I; + + -- New policies for select, insert, update + DROP POLICY IF EXISTS see_folder_extra_perms_user_select ON %1$I; + DROP POLICY IF EXISTS see_folder_extra_perms_user_insert ON %1$I; + DROP POLICY IF EXISTS see_folder_extra_perms_user_update ON %1$I; + + DROP POLICY IF EXISTS see_own ON %1$I; + DROP POLICY IF EXISTS see_member ON %1$I; + + DROP POLICY IF EXISTS see_extra_perms_user_select ON %1$I; + DROP POLICY IF EXISTS see_extra_perms_user_insert ON %1$I; + DROP POLICY IF EXISTS see_extra_perms_user_update ON %1$I; + + DROP POLICY IF EXISTS see_extra_perms_groups_select ON %1$I; + DROP POLICY IF EXISTS see_extra_perms_groups_insert ON %1$I; + DROP POLICY IF EXISTS see_extra_perms_groups_update ON %1$I; + + + -- Folder permissions split into select, insert, and update + CREATE POLICY see_folder_extra_perms_user_select ON %1$I FOR SELECT TO windmill_user + USING (SPLIT_PART(%1$I.path, '/', 1) = 'f' AND SPLIT_PART(%1$I.path, '/', 2) = any(regexp_split_to_array(current_setting('session.folders_read'), ',')::text[])); + + CREATE POLICY see_folder_extra_perms_user_insert ON %1$I FOR INSERT TO windmill_user + WITH CHECK (SPLIT_PART(%1$I.path, '/', 1) = 'f' AND SPLIT_PART(%1$I.path, '/', 2) = any(regexp_split_to_array(current_setting('session.folders_write'), ',')::text[])); + + CREATE POLICY see_folder_extra_perms_user_update ON %1$I FOR UPDATE TO windmill_user + USING (SPLIT_PART(%1$I.path, '/', 1) = 'f' AND SPLIT_PART(%1$I.path, '/', 2) = any(regexp_split_to_array(current_setting('session.folders_write'), ',')::text[])); + + CREATE POLICY see_folder_extra_perms_user_delete ON %1$I FOR UPDATE TO windmill_user + USING (SPLIT_PART(%1$I.path, '/', 1) = 'f' AND SPLIT_PART(%1$I.path, '/', 2) = any(regexp_split_to_array(current_setting('session.folders_write'), ',')::text[])); + + CREATE POLICY see_own ON %1$I FOR ALL TO windmill_user + USING (SPLIT_PART(%1$I.path, '/', 1) = 'u' AND SPLIT_PART(%1$I.path, '/', 2) = current_setting('session.user')); + + + CREATE POLICY see_member ON %1$I FOR ALL TO windmill_user + USING (SPLIT_PART(%1$I.path, '/', 1) = 'g' AND SPLIT_PART(%1$I.path, '/', 2) = any(regexp_split_to_array(current_setting('session.groups'), ',')::text[])); + + + + CREATE POLICY see_extra_perms_user_select ON %1$I FOR SELECT TO windmill_user + USING (extra_perms ? CONCAT('u/', current_setting('session.user'))); + + CREATE POLICY see_extra_perms_user_insert ON %1$I FOR INSERT TO windmill_user + WITH CHECK ((extra_perms ->> CONCAT('u/', current_setting('session.user')))::boolean); + + CREATE POLICY see_extra_perms_user_update ON %1$I FOR UPDATE TO windmill_user + USING ((extra_perms ->> CONCAT('u/', current_setting('session.user')))::boolean); + + CREATE POLICY see_extra_perms_user_delete ON %1$I FOR DELETE TO windmill_user + USING ((extra_perms ->> CONCAT('u/', current_setting('session.user')))::boolean); + + + + + CREATE POLICY see_extra_perms_groups_select ON %1$I FOR SELECT TO windmill_user + USING (extra_perms ?| regexp_split_to_array(current_setting('session.pgroups'), ',')::text[]); + + CREATE POLICY see_extra_perms_groups_insert ON %1$I FOR INSERT TO windmill_user + WITH CHECK (exists( + SELECT key, value FROM jsonb_each_text(extra_perms) + WHERE SPLIT_PART(key, '/', 1) = 'g' AND key = ANY(regexp_split_to_array(current_setting('session.pgroups'), ',')::text[]) + AND value::boolean)); + + CREATE POLICY see_extra_perms_groups_update ON %1$I FOR UPDATE TO windmill_user + USING (exists( + SELECT key, value FROM jsonb_each_text(extra_perms) + WHERE SPLIT_PART(key, '/', 1) = 'g' AND key = ANY(regexp_split_to_array(current_setting('session.pgroups'), ',')::text[]) + AND value::boolean)); + + CREATE POLICY see_extra_perms_groups_delete ON %1$I FOR DELETE TO windmill_user + USING (exists( + SELECT key, value FROM jsonb_each_text(extra_perms) + WHERE SPLIT_PART(key, '/', 1) = 'g' AND key = ANY(regexp_split_to_array(current_setting('session.pgroups'), ',')::text[]) + AND value::boolean)); + + $$, + i + ); + END LOOP; + END +$do$; + +DROP POLICY IF EXISTS see_extra_perms_user ON folder; +DROP POLICY IF EXISTS see_extra_perms_user_select ON folder; +DROP POLICY IF EXISTS see_extra_perms_user_insert ON folder; +DROP POLICY IF EXISTS see_extra_perms_user_update ON folder; +DROP POLICY IF EXISTS see_extra_perms_user_delete ON folder; + +DROP POLICY IF EXISTS see_extra_perms_groups ON folder; +DROP POLICY IF EXISTS see_extra_perms_groups_select ON folder; +DROP POLICY IF EXISTS see_extra_perms_groups_insert ON folder; +DROP POLICY IF EXISTS see_extra_perms_groups_update ON folder; +DROP POLICY IF EXISTS see_extra_perms_groups_delete ON folder; + + +-- Existing CREATE POLICY statements updated to reflect policy splitting for 'folder' table +CREATE POLICY see_extra_perms_user_select ON folder FOR SELECT TO windmill_user +USING (extra_perms ? CONCAT('u/', current_setting('session.user')) OR CONCAT('u/', current_setting('session.user')) = ANY(owners)); + +CREATE POLICY see_extra_perms_user_insert ON folder FOR INSERT TO windmill_user +WITH CHECK ((CONCAT('u/', current_setting('session.user')) = ANY(owners))); + +CREATE POLICY see_extra_perms_user_update ON folder FOR UPDATE TO windmill_user +USING ((CONCAT('u/', current_setting('session.user')) = ANY(owners))); + +CREATE POLICY see_extra_perms_user_delete ON folder FOR DELETE TO windmill_user +USING ((CONCAT('u/', current_setting('session.user')) = ANY(owners))); + +CREATE POLICY see_extra_perms_groups_select ON folder FOR SELECT TO windmill_user +USING (extra_perms ?| regexp_split_to_array(current_setting('session.pgroups'), ',')::text[] OR EXISTS ( + SELECT o FROM unnest(owners) AS o + WHERE o = ANY(regexp_split_to_array(current_setting('session.pgroups'), ',')::text[]))); + +CREATE POLICY see_extra_perms_groups_insert ON folder FOR INSERT TO windmill_user +WITH CHECK (EXISTS ( + SELECT o FROM unnest(owners) AS o + WHERE o = ANY(regexp_split_to_array(current_setting('session.pgroups'), ',')::text[]))); + + +CREATE POLICY see_extra_perms_groups_update ON folder FOR UPDATE TO windmill_user +USING (EXISTS ( + SELECT o FROM unnest(owners) AS o + WHERE o = ANY(regexp_split_to_array(current_setting('session.pgroups'), ',')::text[]))); + + +CREATE POLICY see_extra_perms_groups_delete ON folder FOR DELETE TO windmill_user +USING (EXISTS ( + SELECT o FROM unnest(owners) AS o + WHERE o = ANY(regexp_split_to_array(current_setting('session.pgroups'), ',')::text[]))); + + +-- DO +-- $do$ +-- DECLARE +-- i text; +-- arr text[] := array['resource', 'script', 'variable', 'schedule', 'flow', 'app', 'raw_app']; +-- BEGIN +-- FOREACH i IN ARRAY arr +-- LOOP +-- EXECUTE FORMAT( +-- $$ + + +-- CREATE POLICY see_folder_extra_perms_user ON %1$I FOR ALL TO windmill_user +-- USING (SPLIT_PART(%1$I.path, '/', 1) = 'f' AND SPLIT_PART(%1$I.path, '/', 2) = any(regexp_split_to_array(current_setting('session.folders_read'), ',')::text[])) +-- WITH CHECK (SPLIT_PART(%1$I.path, '/', 1) = 'f' AND SPLIT_PART(%1$I.path, '/', 2) = any(regexp_split_to_array(current_setting('session.folders_write'), ',')::text[])); + +-- CREATE POLICY see_folder_extra_perms_user_delete ON %1$I AS RESTRICTIVE FOR DELETE TO windmill_user +-- USING (SPLIT_PART(%1$I.path, '/', 1) = 'f' AND SPLIT_PART(%1$I.path, '/', 2) = any(regexp_split_to_array(current_setting('session.folders_write'), ',')::text[])); + +-- CREATE POLICY see_own ON %1$I FOR ALL TO windmill_user +-- USING (SPLIT_PART(%1$I.path, '/', 1) = 'u' AND SPLIT_PART(%1$I.path, '/', 2) = current_setting('session.user')); + +-- CREATE POLICY see_member ON %1$I FOR ALL TO windmill_user +-- USING (SPLIT_PART(%1$I.path, '/', 1) = 'g' AND SPLIT_PART(%1$I.path, '/', 2) = any(regexp_split_to_array(current_setting('session.groups'), ',')::text[])); + + +-- CREATE POLICY see_extra_perms_user ON %1$I FOR ALL TO windmill_user +-- USING (extra_perms ? CONCAT('u/', current_setting('session.user'))) +-- WITH CHECK ((extra_perms ->> CONCAT('u/', current_setting('session.user')))::boolean); + +-- CREATE POLICY see_extra_perms_user_delete ON %1$I FOR DELETE TO windmill_user +-- USING ((extra_perms ->> CONCAT('u/', current_setting('session.user')))::boolean); + +-- CREATE POLICY see_extra_perms_groups ON %1$I FOR ALL TO windmill_user +-- USING (extra_perms ?| regexp_split_to_array(current_setting('session.pgroups'), ',')::text[]) +-- WITH CHECK (exists( +-- SELECT key, value FROM jsonb_each_text(extra_perms) +-- WHERE SPLIT_PART(key, '/', 1) = 'g' AND key = ANY(regexp_split_to_array(current_setting('session.pgroups'), ',')::text[]) +-- AND value::boolean)); + +-- CREATE POLICY see_extra_perms_groups_delete ON %1$I FOR DELETE TO windmill_user +-- USING (exists( +-- SELECT key, value FROM jsonb_each_text(extra_perms) +-- WHERE SPLIT_PART(key, '/', 1) = 'g' AND key = ANY(regexp_split_to_array(current_setting('session.pgroups'), ',')::text[]) +-- AND value::boolean)); +-- $$, +-- i +-- ); +-- END LOOP; +-- END +-- $do$; + + +-- DROP POLICY see_extra_perms_user ON folder; +-- DROP POLICY see_extra_perms_groups ON folder; + +-- CREATE POLICY see_extra_perms_user ON folder FOR ALL to windmill_user +-- USING (extra_perms ? CONCAT('u/', current_setting('session.user')) or (CONCAT('u/', current_setting('session.user')) = ANY(owners))) +-- WITH CHECK ((CONCAT('u/', current_setting('session.user')) = ANY(owners))); + +-- DROP POLICY IF EXISTS see_extra_perms_user_delete ON folder; +-- CREATE POLICY see_extra_perms_user_delete ON folder AS RESTRICTIVE FOR DELETE to windmill_user +-- USING ((CONCAT('u/', current_setting('session.user')) = ANY(owners))); + +-- CREATE POLICY see_extra_perms_groups ON folder FOR ALL to windmill_user +-- USING (extra_perms ?| regexp_split_to_array(current_setting('session.pgroups'), ',')::text[] or (exists( +-- SELECT o FROM unnest(owners) as o +-- WHERE o = ANY(regexp_split_to_array(current_setting('session.pgroups'), ',')::text[])))) +-- WITH CHECK (exists( +-- SELECT o FROM unnest(owners) as o +-- WHERE o = ANY(regexp_split_to_array(current_setting('session.pgroups'), ',')::text[]))); + +-- DROP POLICY IF EXISTS see_extra_perms_groups_delete ON folder; +-- CREATE POLICY see_extra_perms_groups_delete ON folder AS RESTRICTIVE FOR DELETE to windmill_user +-- USING (exists( +-- SELECT o FROM unnest(owners) as o +-- WHERE o = ANY(regexp_split_to_array(current_setting('session.pgroups'), ',')::text[]))); \ No newline at end of file diff --git a/backend/migrations/20240416175148_tighten_delete_perms2.down.sql b/backend/migrations/20240416175148_tighten_delete_perms2.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20240416175148_tighten_delete_perms2.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20240416175148_tighten_delete_perms2.up.sql b/backend/migrations/20240416175148_tighten_delete_perms2.up.sql new file mode 100644 index 0000000000000..a2f897f3184f3 --- /dev/null +++ b/backend/migrations/20240416175148_tighten_delete_perms2.up.sql @@ -0,0 +1,22 @@ + +DO +$do$ + DECLARE + i text; + arr text[] := array['resource', 'script', 'variable', 'schedule', 'flow', 'app', 'raw_app']; + BEGIN + FOREACH i IN ARRAY arr + LOOP + EXECUTE FORMAT( + $$ + DROP POLICY IF EXISTS see_folder_extra_perms_user_delete ON %1$I; + + CREATE POLICY see_folder_extra_perms_user_delete ON %1$I FOR DELETE TO windmill_user + USING (SPLIT_PART(%1$I.path, '/', 1) = 'f' AND SPLIT_PART(%1$I.path, '/', 2) = any(regexp_split_to_array(current_setting('session.folders_write'), ',')::text[])); + + $$, + i + ); + END LOOP; + END +$do$;-- Add up migration script here diff --git a/backend/migrations/20240419170502_add_script_no_main_func.down.sql b/backend/migrations/20240419170502_add_script_no_main_func.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20240419170502_add_script_no_main_func.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20240419170502_add_script_no_main_func.up.sql b/backend/migrations/20240419170502_add_script_no_main_func.up.sql new file mode 100644 index 0000000000000..10fc6ee77f359 --- /dev/null +++ b/backend/migrations/20240419170502_add_script_no_main_func.up.sql @@ -0,0 +1,2 @@ +-- Add up migration script here +ALTER TABLE script ADD COLUMN no_main_func BOOLEAN; \ No newline at end of file diff --git a/backend/migrations/20240422144808_add_labels.down.sql b/backend/migrations/20240422144808_add_labels.down.sql new file mode 100644 index 0000000000000..c8f16d59b04c3 --- /dev/null +++ b/backend/migrations/20240422144808_add_labels.down.sql @@ -0,0 +1,2 @@ +-- Add down migration script here +DROP INDEX IF EXISTS labeled_jobs_on_completed_jobs; \ No newline at end of file diff --git a/backend/migrations/20240422144808_add_labels.up.sql b/backend/migrations/20240422144808_add_labels.up.sql new file mode 100644 index 0000000000000..0da0a538a399f --- /dev/null +++ b/backend/migrations/20240422144808_add_labels.up.sql @@ -0,0 +1 @@ +-- Add up migration script here diff --git a/backend/migrations/20240424083501_add_labels_2.down.sql b/backend/migrations/20240424083501_add_labels_2.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20240424083501_add_labels_2.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20240424083501_add_labels_2.up.sql b/backend/migrations/20240424083501_add_labels_2.up.sql new file mode 100644 index 0000000000000..0da0a538a399f --- /dev/null +++ b/backend/migrations/20240424083501_add_labels_2.up.sql @@ -0,0 +1 @@ +-- Add up migration script here diff --git a/backend/migrations/20240430005030_add_codebases.down.sql b/backend/migrations/20240430005030_add_codebases.down.sql new file mode 100644 index 0000000000000..81bb6123a2a06 --- /dev/null +++ b/backend/migrations/20240430005030_add_codebases.down.sql @@ -0,0 +1,2 @@ +-- Add down migration script here +ALTER TABLE script DROP COLUMN codebase; \ No newline at end of file diff --git a/backend/migrations/20240430005030_add_codebases.up.sql b/backend/migrations/20240430005030_add_codebases.up.sql new file mode 100644 index 0000000000000..13af236d16a0e --- /dev/null +++ b/backend/migrations/20240430005030_add_codebases.up.sql @@ -0,0 +1,3 @@ +-- Add up migration script here + +ALTER TABLE script ADD COLUMN codebase VARCHAR(255); \ No newline at end of file diff --git a/backend/migrations/20240506085935_add_worker_ping_metrics.down.sql b/backend/migrations/20240506085935_add_worker_ping_metrics.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20240506085935_add_worker_ping_metrics.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20240506085935_add_worker_ping_metrics.up.sql b/backend/migrations/20240506085935_add_worker_ping_metrics.up.sql new file mode 100644 index 0000000000000..c3ca599593e60 --- /dev/null +++ b/backend/migrations/20240506085935_add_worker_ping_metrics.up.sql @@ -0,0 +1,7 @@ +-- Add up migration script here +ALTER TABLE worker_ping +ADD COLUMN current_job_id UUID, +ADD COLUMN current_job_workspace_id VARCHAR(50), +ADD COLUMN vcpus BIGINT, +ADD COLUMN memory BIGINT, +ADD COLUMN occupancy_rate REAL; \ No newline at end of file diff --git a/backend/migrations/20240506114033_add_metrics_table.down.sql b/backend/migrations/20240506114033_add_metrics_table.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20240506114033_add_metrics_table.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20240506114033_add_metrics_table.up.sql b/backend/migrations/20240506114033_add_metrics_table.up.sql new file mode 100644 index 0000000000000..f0d40e0772c52 --- /dev/null +++ b/backend/migrations/20240506114033_add_metrics_table.up.sql @@ -0,0 +1,8 @@ +-- Add up migration script here +CREATE TABLE metrics ( + id VARCHAR(255) NOT NULL, + value JSONB NOT NULL, + created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP NOT NULL +); +CREATE INDEX metrics_key_idx ON metrics(id); +CREATE INDEX metrics_sort_idx ON metrics(created_at DESC); \ No newline at end of file diff --git a/backend/migrations/20240513125035_add_php_lang.down.sql b/backend/migrations/20240513125035_add_php_lang.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20240513125035_add_php_lang.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20240513125035_add_php_lang.up.sql b/backend/migrations/20240513125035_add_php_lang.up.sql new file mode 100644 index 0000000000000..4e56329d467b0 --- /dev/null +++ b/backend/migrations/20240513125035_add_php_lang.up.sql @@ -0,0 +1,2 @@ +-- Add up migration script here +ALTER TYPE SCRIPT_LANG ADD VALUE IF NOT EXISTS 'php'; \ No newline at end of file diff --git a/backend/migrations/20240514091000_fix_php_migration.down.sql b/backend/migrations/20240514091000_fix_php_migration.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20240514091000_fix_php_migration.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20240514091000_fix_php_migration.up.sql b/backend/migrations/20240514091000_fix_php_migration.up.sql new file mode 100644 index 0000000000000..9c9c083245d29 --- /dev/null +++ b/backend/migrations/20240514091000_fix_php_migration.up.sql @@ -0,0 +1,2 @@ +-- Add up migration script here +UPDATE config SET name = 'worker__default_tmp' WHERE name = 'worker__default'; \ No newline at end of file diff --git a/backend/migrations/20240514092225_add_php_tag_and_default_lang.down.sql b/backend/migrations/20240514092225_add_php_tag_and_default_lang.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20240514092225_add_php_tag_and_default_lang.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20240514092225_add_php_tag_and_default_lang.up.sql b/backend/migrations/20240514092225_add_php_tag_and_default_lang.up.sql new file mode 100644 index 0000000000000..bfd521d946727 --- /dev/null +++ b/backend/migrations/20240514092225_add_php_tag_and_default_lang.up.sql @@ -0,0 +1,4 @@ +-- Add up migration script here +UPDATE config set config = '{"worker_tags": ["deno", "python3", "go", "bash", "powershell", "dependency", "flow", "hub", "other", "bun", "php"]}'::jsonb where name = 'worker__default' and config @> '{"worker_tags": ["deno", "python3", "go", "bash", "powershell", "dependency", "flow", "hub", "other", "bun"]}'::jsonb; +UPDATE workspace_settings SET default_scripts = jsonb_set(default_scripts, '{order}', default_scripts->'order' || '["php"]'::jsonb) WHERE default_scripts IS NOT NULL AND default_scripts->'order' IS NOT NULL AND NOT default_scripts->'order' @> '["php"]'::jsonb; + diff --git a/backend/migrations/20240515071725_fix_php_migration_2.down.sql b/backend/migrations/20240515071725_fix_php_migration_2.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20240515071725_fix_php_migration_2.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20240515071725_fix_php_migration_2.up.sql b/backend/migrations/20240515071725_fix_php_migration_2.up.sql new file mode 100644 index 0000000000000..e5a23760065d4 --- /dev/null +++ b/backend/migrations/20240515071725_fix_php_migration_2.up.sql @@ -0,0 +1,3 @@ +-- Add up migration script here +UPDATE config SET name = 'worker__default' WHERE name = 'worker__default_tmp'; +UPDATE config set config = jsonb_set(config, '{worker_tags}', config->'worker_tags' || '["php"]'::jsonb) where name = 'worker__default' and config @> '{"worker_tags": ["deno", "python3", "go", "bash", "powershell", "dependency", "flow", "hub", "other", "bun"]}'::jsonb AND NOT config->'worker_tags' @> '"php"'::jsonb; diff --git a/backend/migrations/20240515093517_concurrency_key_observability.down.sql b/backend/migrations/20240515093517_concurrency_key_observability.down.sql new file mode 100644 index 0000000000000..150c3795ee300 --- /dev/null +++ b/backend/migrations/20240515093517_concurrency_key_observability.down.sql @@ -0,0 +1,3 @@ +-- Add down migration script here +DROP TABLE concurrency_key + diff --git a/backend/migrations/20240515093517_concurrency_key_observability.up.sql b/backend/migrations/20240515093517_concurrency_key_observability.up.sql new file mode 100644 index 0000000000000..c0b2253afd061 --- /dev/null +++ b/backend/migrations/20240515093517_concurrency_key_observability.up.sql @@ -0,0 +1,10 @@ +-- Add up migration script here +CREATE TABLE concurrency_key ( + key VARCHAR(255) NOT NULL, + ended_at TIMESTAMP WITH TIME ZONE, + job_id uuid NOT NULL, + PRIMARY KEY (job_id) +); + + +CREATE INDEX concurrency_key_ended_at_idx ON concurrency_key (key, ended_at DESC); diff --git a/backend/migrations/20240523095814_increase_token_label_size.down.sql b/backend/migrations/20240523095814_increase_token_label_size.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20240523095814_increase_token_label_size.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20240523095814_increase_token_label_size.up.sql b/backend/migrations/20240523095814_increase_token_label_size.up.sql new file mode 100644 index 0000000000000..f36d0cc100443 --- /dev/null +++ b/backend/migrations/20240523095814_increase_token_label_size.up.sql @@ -0,0 +1,2 @@ +-- Add up migration script here +ALTER TABLE token ALTER COLUMN label TYPE VARCHAR(1000) diff --git a/backend/migrations/20240527151853_add_worker_memory_usage.down.sql b/backend/migrations/20240527151853_add_worker_memory_usage.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20240527151853_add_worker_memory_usage.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20240527151853_add_worker_memory_usage.up.sql b/backend/migrations/20240527151853_add_worker_memory_usage.up.sql new file mode 100644 index 0000000000000..3678d9ecd7889 --- /dev/null +++ b/backend/migrations/20240527151853_add_worker_memory_usage.up.sql @@ -0,0 +1,2 @@ +-- Add up migration script here +ALTER TABLE worker_ping ADD COLUMN memory_usage BIGINT; \ No newline at end of file diff --git a/backend/migrations/20240528135719_add_windmill_memory_usage.down.sql b/backend/migrations/20240528135719_add_windmill_memory_usage.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20240528135719_add_windmill_memory_usage.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20240528135719_add_windmill_memory_usage.up.sql b/backend/migrations/20240528135719_add_windmill_memory_usage.up.sql new file mode 100644 index 0000000000000..7c2314e49cbe0 --- /dev/null +++ b/backend/migrations/20240528135719_add_windmill_memory_usage.up.sql @@ -0,0 +1,2 @@ +-- Add up migration script here +ALTER TABLE worker_ping ADD COLUMN wm_memory_usage BIGINT; \ No newline at end of file diff --git a/backend/migrations/20240529130715_store_waiting_times.down.sql b/backend/migrations/20240529130715_store_waiting_times.down.sql new file mode 100644 index 0000000000000..0e6fffd5e6169 --- /dev/null +++ b/backend/migrations/20240529130715_store_waiting_times.down.sql @@ -0,0 +1,2 @@ +-- Add down migration script here +DROP TABLE outstanding_wait_time; diff --git a/backend/migrations/20240529130715_store_waiting_times.up.sql b/backend/migrations/20240529130715_store_waiting_times.up.sql new file mode 100644 index 0000000000000..a8c8e1d96ace4 --- /dev/null +++ b/backend/migrations/20240529130715_store_waiting_times.up.sql @@ -0,0 +1,6 @@ +-- Add up migration script here +CREATE TABLE outstanding_wait_time ( + job_id UUID PRIMARY KEY, + self_wait_time_ms BIGINT DEFAULT NULL, + aggregate_wait_time_ms BIGINT DEFAULT NULL +); diff --git a/backend/migrations/20240531202816_add_schedule_audit_log_rule.down.sql b/backend/migrations/20240531202816_add_schedule_audit_log_rule.down.sql new file mode 100644 index 0000000000000..d3fa90d35a984 --- /dev/null +++ b/backend/migrations/20240531202816_add_schedule_audit_log_rule.down.sql @@ -0,0 +1,2 @@ +-- Add down migration script here +DROP POLICY "schedule_audit" on audit; \ No newline at end of file diff --git a/backend/migrations/20240531202816_add_schedule_audit_log_rule.up.sql b/backend/migrations/20240531202816_add_schedule_audit_log_rule.up.sql new file mode 100644 index 0000000000000..6f71b80608fb2 --- /dev/null +++ b/backend/migrations/20240531202816_add_schedule_audit_log_rule.up.sql @@ -0,0 +1,4 @@ +-- Add up migration script here +CREATE POLICY "schedule_audit" on audit FOR INSERT + TO windmill_user + WITH CHECK (((parameters->>'end_user')::text ~~ 'schedule-%'::text)); \ No newline at end of file diff --git a/backend/migrations/20240607113729_add_importer_node.down.sql b/backend/migrations/20240607113729_add_importer_node.down.sql new file mode 100644 index 0000000000000..138619577d152 --- /dev/null +++ b/backend/migrations/20240607113729_add_importer_node.down.sql @@ -0,0 +1,2 @@ +-- Add down migration script here +ALTER TABLE dependency_map DROP COLUMN importer_node_id; \ No newline at end of file diff --git a/backend/migrations/20240607113729_add_importer_node.up.sql b/backend/migrations/20240607113729_add_importer_node.up.sql new file mode 100644 index 0000000000000..1b91bbc2777dc --- /dev/null +++ b/backend/migrations/20240607113729_add_importer_node.up.sql @@ -0,0 +1,4 @@ +-- Add up migration script here +ALTER TABLE dependency_map ADD COLUMN importer_node_id VARCHAR(255) NOT NULL DEFAULT ''; +ALTER TABLE dependency_map DROP constraint dependency_map_pkey; +ALTER TABLE dependency_map ADD PRIMARY KEY (workspace_id, importer_node_id, importer_kind, importer_path, imported_path); \ No newline at end of file diff --git a/backend/migrations/20240613122901_add_grant_to_outstanding_wait_time.down.sql b/backend/migrations/20240613122901_add_grant_to_outstanding_wait_time.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20240613122901_add_grant_to_outstanding_wait_time.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20240613122901_add_grant_to_outstanding_wait_time.up.sql b/backend/migrations/20240613122901_add_grant_to_outstanding_wait_time.up.sql new file mode 100644 index 0000000000000..14b40090b160a --- /dev/null +++ b/backend/migrations/20240613122901_add_grant_to_outstanding_wait_time.up.sql @@ -0,0 +1,3 @@ +-- Add up migration script here +GRANT ALL ON outstanding_wait_time TO windmill_admin; +GRANT ALL ON outstanding_wait_time TO windmill_user; \ No newline at end of file diff --git a/backend/migrations/20240613150524_add_job_perms.down.sql b/backend/migrations/20240613150524_add_job_perms.down.sql new file mode 100644 index 0000000000000..f489666b92d94 --- /dev/null +++ b/backend/migrations/20240613150524_add_job_perms.down.sql @@ -0,0 +1,2 @@ +-- Add down migration script here +DROP TABLE public.job_perms; \ No newline at end of file diff --git a/backend/migrations/20240613150524_add_job_perms.up.sql b/backend/migrations/20240613150524_add_job_perms.up.sql new file mode 100644 index 0000000000000..decb49a010701 --- /dev/null +++ b/backend/migrations/20240613150524_add_job_perms.up.sql @@ -0,0 +1,13 @@ +-- Add up migration script here +CREATE TABLE public.job_perms ( + job_id uuid NOT NULL, + email varchar(255) NOT NULL, + username varchar(50) NOT NULL, + is_admin bool NOT NULL, + is_operator bool NOT NULL, + created_at timestamp DEFAULT CURRENT_TIMESTAMP NOT NULL, + workspace_id varchar(50) NOT NULL, + groups _text NOT NULL, + folders _jsonb NOT NULL, + CONSTRAINT job_perms_pk PRIMARY KEY (job_id) +); \ No newline at end of file diff --git a/backend/migrations/20240617121250_add_job_perms_and_logs_grants.down.sql b/backend/migrations/20240617121250_add_job_perms_and_logs_grants.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20240617121250_add_job_perms_and_logs_grants.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20240617121250_add_job_perms_and_logs_grants.up.sql b/backend/migrations/20240617121250_add_job_perms_and_logs_grants.up.sql new file mode 100644 index 0000000000000..6bad5e14a9adb --- /dev/null +++ b/backend/migrations/20240617121250_add_job_perms_and_logs_grants.up.sql @@ -0,0 +1,5 @@ +-- Add up migration script here +GRANT ALL ON job_perms TO windmill_admin; +GRANT ALL ON job_perms TO windmill_user; +GRANT ALL ON job_logs TO windmill_admin; +GRANT ALL ON job_logs TO windmill_user; \ No newline at end of file diff --git a/backend/migrations/20240619165014_extra_metadata.down.sql b/backend/migrations/20240619165014_extra_metadata.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20240619165014_extra_metadata.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20240619165014_extra_metadata.up.sql b/backend/migrations/20240619165014_extra_metadata.up.sql new file mode 100644 index 0000000000000..2024051db30e7 --- /dev/null +++ b/backend/migrations/20240619165014_extra_metadata.up.sql @@ -0,0 +1,4 @@ +-- Add up migration script here +alter table resource add column edited_at timestamptz, add column created_by varchar(50); +alter table resource_type add column edited_at timestamptz, add column created_by varchar(50); +alter table folder add column summary text, add column edited_at timestamptz, add column created_by varchar(50); \ No newline at end of file diff --git a/backend/migrations/20240625171454_schedule_pausing.down.sql b/backend/migrations/20240625171454_schedule_pausing.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20240625171454_schedule_pausing.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20240625171454_schedule_pausing.up.sql b/backend/migrations/20240625171454_schedule_pausing.up.sql new file mode 100644 index 0000000000000..6f54e53c6e396 --- /dev/null +++ b/backend/migrations/20240625171454_schedule_pausing.up.sql @@ -0,0 +1,2 @@ +-- Add up migration script here +alter table schedule add column paused_until timestamptz; \ No newline at end of file diff --git a/backend/migrations/20240630102146_flow_versioning.down.sql b/backend/migrations/20240630102146_flow_versioning.down.sql new file mode 100644 index 0000000000000..f6b2c1a45b212 --- /dev/null +++ b/backend/migrations/20240630102146_flow_versioning.down.sql @@ -0,0 +1,7 @@ +-- Add down migration script here +DROP INDEX deployment_metadata_flow; +ALTER TABLE deployment_metadata DROP COLUMN flow_version; +create index if not exists deployment_metadata_flow on deployment_metadata (workspace_id, path) where script_hash is null and app_version is null; + +alter table flow drop column versions; +DROP TABLE flow_version; \ No newline at end of file diff --git a/backend/migrations/20240630102146_flow_versioning.up.sql b/backend/migrations/20240630102146_flow_versioning.up.sql new file mode 100644 index 0000000000000..fdda7b8f99c11 --- /dev/null +++ b/backend/migrations/20240630102146_flow_versioning.up.sql @@ -0,0 +1,55 @@ +-- Add up migration script here + +-- create flow_version table with index +CREATE TABLE flow_version ( + id bigserial PRIMARY KEY, + workspace_id varchar(50) NOT NULL, + path varchar(255) NOT NULL, + value jsonb, + schema json, + created_by varchar(50) NOT NULL, + created_at timestamptz NOT NULL DEFAULT now(), + FOREIGN KEY (workspace_id, path) REFERENCES flow (workspace_id, path) ON DELETE CASCADE +); +CREATE INDEX index_flow_version_path_created_at ON flow_version (path, created_at); + + +-- add versions column to flow +ALTER TABLE flow ADD COLUMN versions bigint[] NOT NULL DEFAULT '{}'::bigint[]; +-- create flow_version records for existing flows and update flow versions +INSERT INTO flow_version (workspace_id, path, value, schema, created_by, created_at) SELECT workspace_id, path, value, schema, edited_by, edited_at FROM flow; +UPDATE flow +SET versions = subquery.versions +FROM ( + SELECT + path, + workspace_id, + array_agg(id) AS versions + FROM + flow_version + GROUP BY + path, + workspace_id +) subquery +WHERE + flow.path = subquery.path + AND flow.workspace_id = subquery.workspace_id; + +-- add flow_version column to deployment_metadata +ALTER TABLE deployment_metadata ADD COLUMN flow_version int8; +-- populate flow_version column in deployment_metadata +UPDATE deployment_metadata +SET flow_version = fv.id +FROM flow_version fv +WHERE deployment_metadata.workspace_id = fv.workspace_id +AND deployment_metadata.path = fv.path +AND deployment_metadata.app_version IS NULL AND deployment_metadata.script_hash IS NULL; +-- update flow metadata index to include flow_verison +DROP INDEX IF EXISTS deployment_metadata_flow; +CREATE UNIQUE INDEX IF NOT EXISTS deployment_metadata_flow ON deployment_metadata (workspace_id, path, flow_version) WHERE flow_version IS NOT NULL; + +-- make sure the windmill_user and windmill_admin roles have access to the new tables +GRANT ALL ON flow_version TO windmill_user; +GRANT ALL ON flow_version_id_seq TO windmill_user; +GRANT ALL ON flow_version TO windmill_admin; +GRANT ALL ON flow_version_id_seq TO windmill_admin; \ No newline at end of file diff --git a/backend/migrations/20240708075901_flow_versioning_nit.down.sql b/backend/migrations/20240708075901_flow_versioning_nit.down.sql new file mode 100644 index 0000000000000..9f8bb1326d560 --- /dev/null +++ b/backend/migrations/20240708075901_flow_versioning_nit.down.sql @@ -0,0 +1,2 @@ +-- Add down migration script here +ALTER TABLE flow_version ALTER COLUMN value DROP NOT NULL; \ No newline at end of file diff --git a/backend/migrations/20240708075901_flow_versioning_nit.up.sql b/backend/migrations/20240708075901_flow_versioning_nit.up.sql new file mode 100644 index 0000000000000..c81b5aea48f9d --- /dev/null +++ b/backend/migrations/20240708075901_flow_versioning_nit.up.sql @@ -0,0 +1,3 @@ +-- Add up migration script here +UPDATE flow_version SET value = '{"modules":[]}'::jsonb WHERE value IS NULL; +ALTER TABLE flow_version ALTER COLUMN value SET NOT NULL; \ No newline at end of file diff --git a/backend/migrations/20240711065915_remove_env_id_default.down.sql b/backend/migrations/20240711065915_remove_env_id_default.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20240711065915_remove_env_id_default.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20240711065915_remove_env_id_default.up.sql b/backend/migrations/20240711065915_remove_env_id_default.up.sql new file mode 100644 index 0000000000000..4b2bfe800a8a6 --- /dev/null +++ b/backend/migrations/20240711065915_remove_env_id_default.up.sql @@ -0,0 +1,5 @@ +-- Add up migration script here +ALTER TABLE queue ALTER COLUMN env_id DROP NOT NULL; +ALTER TABLE queue ALTER COLUMN env_id DROP DEFAULT; +ALTER TABLE completed_job ALTER COLUMN env_id DROP NOT NULL; +ALTER TABLE completed_job ALTER COLUMN env_id DROP DEFAULT; \ No newline at end of file diff --git a/backend/migrations/20240727103951_min_started_at_index.down.sql b/backend/migrations/20240727103951_min_started_at_index.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20240727103951_min_started_at_index.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20240727103951_min_started_at_index.up.sql b/backend/migrations/20240727103951_min_started_at_index.up.sql new file mode 100644 index 0000000000000..ca122b240c0c9 --- /dev/null +++ b/backend/migrations/20240727103951_min_started_at_index.up.sql @@ -0,0 +1 @@ +CREATE INDEX IF NOT EXISTS queue_concurrency_started_at ON queue (workspace_id, script_path, started_at) WHERE concurrent_limit > 0 AND running = true AND job_kind != 'dependencies' AND canceled = false;-- Add up migration script here diff --git a/backend/migrations/20240729064122_addbunnative.down.sql b/backend/migrations/20240729064122_addbunnative.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20240729064122_addbunnative.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20240729064122_addbunnative.up.sql b/backend/migrations/20240729064122_addbunnative.up.sql new file mode 100644 index 0000000000000..d3e5f61cc3b33 --- /dev/null +++ b/backend/migrations/20240729064122_addbunnative.up.sql @@ -0,0 +1,2 @@ +-- Add up migration script here +ALTER TYPE SCRIPT_LANG ADD VALUE IF NOT EXISTS 'bunnative'; \ No newline at end of file diff --git a/backend/migrations/20240731093818_remove_foreign_key.down.sql b/backend/migrations/20240731093818_remove_foreign_key.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20240731093818_remove_foreign_key.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20240731093818_remove_foreign_key.up.sql b/backend/migrations/20240731093818_remove_foreign_key.up.sql new file mode 100644 index 0000000000000..efe47b2b781d0 --- /dev/null +++ b/backend/migrations/20240731093818_remove_foreign_key.up.sql @@ -0,0 +1,3 @@ +-- Add up migration script here +alter table queue drop constraint if exists queue_workspace_id_fkey; +alter table completed_job drop constraint if exists completed_job_workspace_id_fkey; diff --git a/backend/migrations/20240731213058_improve_indices.down.sql b/backend/migrations/20240731213058_improve_indices.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20240731213058_improve_indices.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20240731213058_improve_indices.up.sql b/backend/migrations/20240731213058_improve_indices.up.sql new file mode 100644 index 0000000000000..5dffddf6c21b3 --- /dev/null +++ b/backend/migrations/20240731213058_improve_indices.up.sql @@ -0,0 +1,4 @@ +-- Add up migration script here +DROP INDEX IF EXISTS queue_sort; +CREATE INDEX IF NOT EXISTS queue_sort ON queue (running, tag, priority DESC NULLS LAST, scheduled_for, created_at) WHERE running = false; +CREATE INDEX IF NOT EXISTS queue_sort_2 ON queue (running, priority DESC NULLS LAST, scheduled_for, created_at) WHERE running = false; \ No newline at end of file diff --git a/backend/migrations/20240801084701_add_expiry.down.sql b/backend/migrations/20240801084701_add_expiry.down.sql new file mode 100644 index 0000000000000..f627ed49d8688 --- /dev/null +++ b/backend/migrations/20240801084701_add_expiry.down.sql @@ -0,0 +1,2 @@ +-- Add down migration script here +ALTER TABLE variable DROP COLUMN IF EXISTS expires_at; \ No newline at end of file diff --git a/backend/migrations/20240801084701_add_expiry.up.sql b/backend/migrations/20240801084701_add_expiry.up.sql new file mode 100644 index 0000000000000..23cbed140a0ce --- /dev/null +++ b/backend/migrations/20240801084701_add_expiry.up.sql @@ -0,0 +1,3 @@ +-- Add up migration script here +ALTER TABLE variable ADD COLUMN IF NOT EXISTS expires_at TIMESTAMP WITH TIME ZONE; +UPDATE variable SET expires_at = (now() + '7 days'::interval) WHERE path LIKE 'u/%/secret_arg/%' diff --git a/backend/migrations/20240804220655_deploy_ui_config.down.sql b/backend/migrations/20240804220655_deploy_ui_config.down.sql new file mode 100644 index 0000000000000..92c6564ae1f03 --- /dev/null +++ b/backend/migrations/20240804220655_deploy_ui_config.down.sql @@ -0,0 +1,2 @@ +-- Add down migration script here +ALTER TABLE workspace_settings DROP COLUMN deploy_ui; diff --git a/backend/migrations/20240804220655_deploy_ui_config.up.sql b/backend/migrations/20240804220655_deploy_ui_config.up.sql new file mode 100644 index 0000000000000..6c592709322b9 --- /dev/null +++ b/backend/migrations/20240804220655_deploy_ui_config.up.sql @@ -0,0 +1,2 @@ +-- Add up migration script here +ALTER TABLE workspace_settings ADD COLUMN IF NOT EXISTS deploy_ui JSONB; diff --git a/backend/migrations/20240807114128_add_rust_lang.down.sql b/backend/migrations/20240807114128_add_rust_lang.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20240807114128_add_rust_lang.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20240807114128_add_rust_lang.up.sql b/backend/migrations/20240807114128_add_rust_lang.up.sql new file mode 100644 index 0000000000000..2a3cc1bae1ba5 --- /dev/null +++ b/backend/migrations/20240807114128_add_rust_lang.up.sql @@ -0,0 +1,3 @@ +-- Add up migration script here +ALTER TYPE SCRIPT_LANG ADD VALUE IF NOT EXISTS 'rust'; +UPDATE config set config = jsonb_set(config, '{worker_tags}', config->'worker_tags' || '["rust"]'::jsonb) where name = 'worker__default' and config @> '{"worker_tags": ["deno", "python3", "go", "bash", "powershell", "dependency", "flow", "hub", "other", "bun", "php"]}'::jsonb AND NOT config->'worker_tags' @> '"rust"'::jsonb; diff --git a/backend/migrations/20240815085729_add_logfile.down.sql b/backend/migrations/20240815085729_add_logfile.down.sql new file mode 100644 index 0000000000000..c2a9f2d62d020 --- /dev/null +++ b/backend/migrations/20240815085729_add_logfile.down.sql @@ -0,0 +1,4 @@ +-- Add down migration script here +DROP TABLE log_file; +DROP TYPE LOG_MODE; + diff --git a/backend/migrations/20240815085729_add_logfile.up.sql b/backend/migrations/20240815085729_add_logfile.up.sql new file mode 100644 index 0000000000000..1a79a9e7b15c1 --- /dev/null +++ b/backend/migrations/20240815085729_add_logfile.up.sql @@ -0,0 +1,16 @@ +-- Add up migration script here +-- Add up migration script here +CREATE TYPE LOG_MODE AS ENUM ('standalone', 'server', 'worker', 'agent', 'indexer'); +CREATE TABLE log_file ( + hostname VARCHAR(255) NOT NULL, + log_ts TIMESTAMP, + ok_lines BIGINT, + err_lines BIGINT, + mode LOG_MODE NOT NULL, + worker_group VARCHAR(255), + file_path VARCHAR(510) NOT NULL, + PRIMARY KEY (hostname, log_ts) +); + +CREATE INDEX log_file_log_ts_idx ON log_file (log_ts); +CREATE INDEX log_file_hostname_log_ts_idx ON log_file (hostname, log_ts); \ No newline at end of file diff --git a/backend/migrations/20240829143329_alert_center.down.sql b/backend/migrations/20240829143329_alert_center.down.sql new file mode 100644 index 0000000000000..fe1cb273be65a --- /dev/null +++ b/backend/migrations/20240829143329_alert_center.down.sql @@ -0,0 +1,3 @@ +-- Add down migration script here +drop table alerts; +drop table healthchecks; \ No newline at end of file diff --git a/backend/migrations/20240829143329_alert_center.up.sql b/backend/migrations/20240829143329_alert_center.up.sql new file mode 100644 index 0000000000000..7cf4f65ba7bf7 --- /dev/null +++ b/backend/migrations/20240829143329_alert_center.up.sql @@ -0,0 +1,16 @@ +-- Add up migration script here +create table alerts ( + id serial PRIMARY KEY, + alert_type varchar(50) NOT NULL, + message text NOT NULL, + created_at timestamptz NOT NULL DEFAULT CURRENT_TIMESTAMP +); + +create table healthchecks ( + id bigserial PRIMARY KEY, + check_type varchar(50) NOT NULL, + healthy boolean NOT NULL, + created_at timestamptz NOT NULL DEFAULT CURRENT_TIMESTAMP +); + +create index healthchecks_check_type_created_at on healthchecks(check_type, created_at); diff --git a/backend/migrations/20240831202016_add_json_fmt_to_log_file.down.sql b/backend/migrations/20240831202016_add_json_fmt_to_log_file.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20240831202016_add_json_fmt_to_log_file.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20240831202016_add_json_fmt_to_log_file.up.sql b/backend/migrations/20240831202016_add_json_fmt_to_log_file.up.sql new file mode 100644 index 0000000000000..df50f2bc9aaa8 --- /dev/null +++ b/backend/migrations/20240831202016_add_json_fmt_to_log_file.up.sql @@ -0,0 +1,2 @@ +-- Add up migration script here +ALTER TABLE log_file ADD COLUMN IF NOT EXISTS json_fmt boolean DEFAULT false; \ No newline at end of file diff --git a/backend/migrations/20240906082526_add_ansible_lang.down.sql b/backend/migrations/20240906082526_add_ansible_lang.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20240906082526_add_ansible_lang.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20240906082526_add_ansible_lang.up.sql b/backend/migrations/20240906082526_add_ansible_lang.up.sql new file mode 100644 index 0000000000000..6f9df11f42e59 --- /dev/null +++ b/backend/migrations/20240906082526_add_ansible_lang.up.sql @@ -0,0 +1,3 @@ +-- Add up migration script here +ALTER TYPE SCRIPT_LANG ADD VALUE IF NOT EXISTS 'ansible'; +UPDATE config set config = jsonb_set(config, '{worker_tags}', config->'worker_tags' || '["ansible"]'::jsonb) where name = 'worker__default' and config @> '{"worker_tags": ["deno", "python3", "go", "bash", "powershell", "dependency", "flow", "hub", "other", "bun", "php", "rust"]}'::jsonb AND NOT config->'worker_tags' @> '"ansible"'::jsonb; diff --git a/backend/migrations/20240906151147_add_success_handler.down.sql b/backend/migrations/20240906151147_add_success_handler.down.sql new file mode 100644 index 0000000000000..33b6e625391f0 --- /dev/null +++ b/backend/migrations/20240906151147_add_success_handler.down.sql @@ -0,0 +1,2 @@ +-- Add down migration script here +ALTER TABLE schedule DROP COLUMN on_success, DROP COLUMN on_success_extra_args; \ No newline at end of file diff --git a/backend/migrations/20240906151147_add_success_handler.up.sql b/backend/migrations/20240906151147_add_success_handler.up.sql new file mode 100644 index 0000000000000..3465ed5ea52e1 --- /dev/null +++ b/backend/migrations/20240906151147_add_success_handler.up.sql @@ -0,0 +1,2 @@ +-- Add up migration script here +ALTER TABLE schedule ADD COLUMN on_success VARCHAR(1000), ADD COLUMN on_success_extra_args json; \ No newline at end of file diff --git a/backend/migrations/20240907150910_migrate_to_new_cli.down.sql b/backend/migrations/20240907150910_migrate_to_new_cli.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20240907150910_migrate_to_new_cli.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20240907150910_migrate_to_new_cli.up.sql b/backend/migrations/20240907150910_migrate_to_new_cli.up.sql new file mode 100644 index 0000000000000..aa88241d141c3 --- /dev/null +++ b/backend/migrations/20240907150910_migrate_to_new_cli.up.sql @@ -0,0 +1,11 @@ + +-- Add up migration script here +UPDATE script SET content = 'import * as wmill from "windmill-cli@1.393.2" + +export async function main(x: string) { + await wmill.hubPull({ workspace: "admins", token: process.env["WM_TOKEN"], baseUrl: process.env["BASE_URL"] }) + return x +} +', language = 'bun', +lock = '{\n "dependencies": {\n "windmill-cli": "latest"\n }\n}\n//bun.lockb\nIyEvdXNyL2Jpbi9lbnYgYnVuCmJ1bi1sb2NrZmlsZS1mb3JtYXQtdjAKAgAAADZs4+6pAntv6Gcmv9boDBPUxzf1WFcr6QlPZXdejHxj3rsAAAAAAAB/AAAAAAAAAAgAAAAAAAAACAAAAAAAAACAAAAAAAAAAAN+AAAAAAAAAAAAAAAAAAAAAAAAAAAMAACAjgAAAA8AAIDeAAAAFAAAgHdoaWNoAAAAaXNleGUAAAB3cwAAAAAAAH8AAAAPAACAb3BlbgAAAABpcy13c2wAAJMCAAATAACAKAMAAAkAAICDAgAAEAAAgHQCAAAPAACABAQAABIAAID5AwAACwAAgKAEAAAPAACAdgAAAAkAAIAwBQAADwAAgIUFAAAOAACAanN6aXAAAAAYBgAAEgAAgAkGAAAPAACA9QYAAA4AAIDnBgAADgAAgNwGAAALAACAyAYAABQAAIBpc2FycmF5AGluaGVyaXRzvAYAAAwAAIBwYWtvAAAAAGxpZQAAAAAAJgkAAAkAAIBmAAAAEAAAgGV4cHJlc3MArAoAABMAAIDcBgAACwAAgJsKAAARAACAiwoAABAAAIB9CgAADgAAgG8KAAAOAACAYgoAAA0AAIBWCgAADAAAgAYKAAALAACA6AkAAAkAAIBwYXJzZXVybHNlbmQAAAAASgoAAAwAAIAcCgAACwAAgGVlLWZpcnN0EQoAAAsAAIC9DgAADAAAgHN0YXR1c2VzZGVwZAAAAABkZXN0cm95AGZyZXNoAAAAZGVidWcAAABtcwAAAAAAAG1pbWUAAAAAZXRhZwAAAABtcwAAAAAAAD4KAAAMAACAdW5waXBlAAAyCgAADAAAgCcKAAALAACA+wkAAAsAAID0EQAACgAAgEcSAAAMAACAcmF3LWJvZHlieXRlcwAAAHR5cGUtaXMAPhMAAAsAAIA0EwAACgAAgG1pbWUtZGIAcXMAAAAAAAAoFAAADAAAgJMUAAAOAACAhhQAAA0AAIBoYXNvd24AACgVAAANAACAPhUAAAsAAIA1FQAACQAAgH0UAAAJAACAdBQAAAkAAIC9FgAAEwAAgDIXAAAYAACAqxYAABIAAIBnb3BkAAAAAB4XAAAUAACA8QkAAAoAAICzGAAACQAAgKoYAAAJAACAbWV0aG9kcwBhY2NlcHRzAJwZAAAKAACAY29va2llAAB2YXJ5AAAAAGVzYnVpbGQAVhwAABIAAIBDHAAAEwAAgC8cAAAUAACAHRwAABIAAIAJHAAAFAAAgPMbAAAWAACA4BsAABMAAIDOGwAAEgAAgLobAAAUAACApBsAABYAAICQGwAAFAAAgHkbAAAXAACAYxsAABYAAIBQGwAAEwAAgDwbAAAUAACAKhsAABIAAIAWGwAAFAAAgAAbAAAWAACA7RoAABMAAIDYGgAAFQAAgMQaAAAUAACArhoAABYAAICaGgAAFAAAgIgaAAASAACAZXMtbWFpbgBkaWZmAAAAAFkAAAANAACAySMAAAsAAID0EQAACgAAgAAAAAAAAAAAjXMqtgf1QSfVqtrJiGJRfQkrLIxflZh6zG2O96NP8kaoLFfaUxLq1wcESX24jjzLmQ1nY/ePqP86/4YWqwXdAiLwpdtElNniRZFku3lzNwR46KOUH/7zM3q/FOAUERX5jwge6KFzpdc5tTtdIg2K5DCQVnHT53CASLo1WxSMLiMfAuJeUe7ucFm/7gWc3u0oV1HUTV3yyeGhAGTHGI/oi3ivxiIcTZjCy+0FWEEmvzaiM9ZOn6X5N7vS5mKoc7SHIdsvXideIefLO0Y7l3ulTxPefb/TYzkSEZrqFxjf1Ge2h6G4RW+Ips8pG9voSJrm03RIAmd848v0i2YEy18wuWI1+rrrUq2yLUrGRXEubx7dQ0Hc3VH6qSHbL14nXiHnTtp2+m5wviqbvCu3PnmxOnc+72XAbJAuC3Znf9Xf/iuETwhuPIOZWpt8LAXlw/fhyT/azL6Im7S0qOJ6Dzeu9HIQv7fy+VyQNs3oOqeu6P0G6CHMTQoMsThFZaJiAxdbEI95h4xd7WhNmb434wqMrt2MxpELDAct4RvC9IRrAfE0jrBCvDhscI5ukc7EeeM1+8ASh8Vgb52OgwA04RrKxqS0xNW1149IZiOG1+0PgQK7ZxljywG5KqS0xNW1149IalsvWr3TBCSOWeuZeCgtmxtg85GEWxZQVuHuNK1GLpUsytXsrdATRcmvPrpkVDwg+Q0itRVAoPB4NFx+gLclgqjINcRNuuZtc1/8HZD4iEFiWaeBsOaPOC8Bk5dey2H0w8Wk8f3GpW4XeINmbZ3zzQ0W+FrwjOB9RXlCmrvBRQ3srz2hFLVVKEg/iwmJSuDQm5nKGnFtuAsHnJHMI4Pmoh0c/X+RqufJJU0hoMQ/3BM/XvJ2+kOfrPC3iJCZCOU4og6YuXWNu0AYn3uZjahUMv0/Ucm4aJeZ1RzA3FO0xKRtxKN+P97YUeer5VNuspkUe/TWOX+rcFjk0RGQrjZf7dTAB0Tn+biUcgVr5uhAkPiT06TkMVPtBRDg22TUyYyIECM9Q3cH87c2TMy2oZK0eggRPiu4AZTMyPaAH3ykVZPB5ZGoExdH95M77CNqjZqIMhF9VuG6UmKIBKxoXxE6eOeWdPKhP/a7Yhb8CQ8fFPZsYKL/1pG5QSoSKDMBi+Oh0aEQHcQo6U+rRmldcj8nnKKpfmruCCXS24NmRjGW2sFpuTyoNAZt5sIA7kcm6QJADRdE6Z6udscwQppftwYPAp4bMLrT6WNaGPr6MVLKNmVSPtArHB0Rp8gHUJdG6G3C3t6/nasyvTmXXSZYY/glCeh4dtSNTIka5NOL1K5eN/SPRV5V16nxj8mvPrpkVDwgAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAFwAAAEIAAIABAAAAiQEAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAJ0AAABBAACAAAAAABIAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAADyAAAASgAAgAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAUgEAADIAAIAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAIQBAAAyAACAAwAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAC2AQAALQAAgAgAAAASAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAA+wEAAEgAAIABAAAAbAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAEMCAAAxAACACgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAACmAgAANAAAgAMAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAA2gIAAE4AAIABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAADEDAAA6AACAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAABrAwAASAAAgAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAswMAAEYAAIAFAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAABYEAABMAACABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAABiBAAAPgAAgAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAArwQAAEYAAIAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAPUEAAA7AACACgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAA/BQAARgAAgAIAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAkwUAAEQAAIABAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAANcFAAAyAACAAwAAAAcAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAqBgAATAAAgAEAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAdgYAAEYAAIACAAAAAwAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAMHAABEAACAAQAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAABHBwAARAAAgAEAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAiwcAAD4AAIAFAAAAAQAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAMkHAABQAACAAgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAZCAAANgAAgAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAATwgAADgAAIACAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAIcIAABAAACAAQAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAADHCAAAMQAAgAEAAAAAAAAACwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAA+AgAAC4AAIADAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAC8JAAA6AACAAwAAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAABpCQAASAAAgAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAsQkAADcAAIAEAAAAEwAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAL8KAABOAACAAAAAAAUAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAANCwAAPgAAgAUAAAACAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAASwsAAEoAAIABAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAJULAABIAACAAQAAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAADdCwAARAAAgAEAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAIQwAAEQAAIAAAAAAAQAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAGUMAABCAACAAQAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAACnDAAAQQAAgAEAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAA6AwAAD4AAIABAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAACYNAAA6AACAAQAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAABgDQAAOAAAgAEAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAmA0AADEAAIAAAAAAEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAMkNAABAAACAAQAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAJDgAAPgAAgAIAAAAEAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAARw4AADgAAIABAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAH8OAAA+AACAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAADJDgAAQAAAgAEAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAACQ8AADgAAIACAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAEEPAAAwAACAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAABxDwAANgAAgAEAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAApw8AADIAAIAAAAAABQAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAANkPAAAyAACAAgAAAAYAAAAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAALEAAALAAAgAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAANxAAADAAAIABAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAGcQAAAwAACAAQAAAAgAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAACXEAAALAAAgAIAAAABAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAwxAAAEAAAIABAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAMRAAA0AACAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAA3EQAAQAAAgAEAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAdxEAAD4AAIABAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAALURAAA/AACAAQAAABQAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAD+EQAAPQAAgAAAAAAEAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAUxIAAEAAAIACAAAAAQAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAJMSAAA4AACAAgAAAAUAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAADLEgAAMgAAgAMAAAABAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAA/RIAADcAAIABAAAABgAAABIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAEkTAAA+AACAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAACHEwAAPQAAgAIAAAABAAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAxBMAADcAAIABAAAANAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAPsTAAAtAACABgAAAAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAA0FAAAQAAAgAEAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAoRQAAEUAAIABAAAADQAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAOYUAABCAACAAQAAAAIAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAABJFQAANAAAgAIAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAfRUAAEIAAIABAAAAAQAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAL8VAAA+AACAAQAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAD9FQAAOgAAgAEAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAANxYAADoAAIABAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAHEWAAA6AACAAQAAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAADQFgAATgAAgAEAAAACAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAShcAAFgAAIABAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAKIXAABMAACAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAADuFwAAMAAAgAEAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAHhgAAFAAAIABAAAAAQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAG4YAAA8AACAAgAAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAC8GAAAOgAAgAEAAAAJAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAA9hgAADoAAIAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAADAZAAA2AACAAQAAAAEAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAABmGQAANgAAgAEAAAADAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAphkAADwAAIAAAAAABgAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAOIZAAA0AACAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAWGgAAMAAAgAEAAAABAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAURoAADcAAIAAAAAAFwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAGgcAABEAACAAAAAABcAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAACsHAAARgAAgAAAAAAXAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAA8hwAAEgAAIAAAAAAFwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAADodAABEAACAAAAAABcAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAB+HQAASAAAgAAAAAAXAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAxh0AAEwAAIAAAAAAFwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAABIeAABGAACAAAAAABcAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAABYHgAARAAAgAAAAAAXAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAnB4AAEgAAIAAAAAAFwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAOQeAABMAACAAAAAABcAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAwHwAASAAAgAAAAAAXAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAeB8AAE4AAIAAAAAAFwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAMYfAABMAACAAAAAABcAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAASIAAARgAAgAAAAAAXAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAWCAAAEgAAIAAAAAAFwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAKAgAABEAACAAAAAABcAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAADkIAAASAAAgAAAAAAXAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAALCEAAEwAAIAAAAAAFwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAHghAABGAACAAAAAABcAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAC+IQAASgAAgAAAAAAXAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAACCIAAEgAAIAAAAAAFwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAFAiAABMAACAAAAAABcAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAACcIgAASAAAgAAAAAAXAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAA5CIAAEQAAIAAAAAAFwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAACgjAAA2AACAAQAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAABeIwAAMAAAgAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAjiMAADsAAIAAAAAACQAAAD8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAANQjAAA+AACACQAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAASJAAAPAAAgAAAAAAGAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAwAAAANAAAAAgAAAA8AAAAAAAAADwAAAAEAAAAQAAAAAAAAABAAAAACAAAAEgAAAAAAAAASAAAABAAAABYAAAABAAAAFwAAAAEAAAAYAAAAAAAAABgAAAAAAAAAGAAAAAIAAAAaAAAAAAAAABoAAAABAAAAGwAAAAAAAAAbAAAAAQAAABwAAAABAAAAHQAAAAAAAAAdAAAABAAAACEAAAAAAAAAIQAAAAcAAAAoAAAAAAAAACgAAAABAAAAKQAAAAAAAAApAAAAAAAAACkAAAAAAAAAKQAAAAAAAAApAAAAAAAAACkAAAAAAAAAKQAAAAEAAAAqAAAAAAAAACoAAAAAAAAAKgAAAB8AAABJAAAAAQAAAEoAAAAAAAAASgAAAAAAAABKAAAAAAAAAEoAAAAAAAAASgAAAAAAAABKAAAAAAAAAEoAAAAEAAAATgAAAAAAAABOAAAAAAAAAE4AAAAAAAAATgAAAA0AAABbAAAAAAAAAFsAAAABAAAAXAAAAAAAAABcAAAABQAAAGEAAAAAAAAAYQAAAAAAAABhAAAAAAAAAGEAAAAAAAAAYQAAAAAAAABhAAAAAQAAAGIAAAAAAAAAYgAAAAAAAABiAAAAAAAAAGIAAAAAAAAAYgAAAAcAAABpAAAAAAAAAGkAAAAAAAAAaQAAAAAAAABpAAAADAAAAHUAAAABAAAAdgAAAAAAAAB2AAAABAAAAHoAAAAAAAAAegAAAAIAAAB8AAAAAAAAAHwAAAABAAAAfQAAAAAAAAB9AAAAAQAAAH4AAAAEAAAAggAAAAAAAACCAAAABQAAAIcAAAABAAAAiAAAAAAAAACIAAAAAAAAAIgAAAAAAAAAiAAAAAAAAACIAAAABQAAAI0AAAAGAAAAkwAAAAEAAACUAAAAAQAAAJUAAAABAAAAlgAAAAMAAACZAAAAAgAAAJsAAAAAAAAAmwAAAAAAAACbAAAAAAAAAJsAAAACAAAAnQAAAAAAAACdAAAAAAAAAJ0AAAAAAAAAnQAAABgAAAC1AAAAAAAAALUAAAAAAAAAtQAAAAAAAAC1AAAAAAAAALUAAAAAAAAAtQAAAAAAAAC1AAAAAAAAALUAAAAAAAAAtQAAAAAAAAC1AAAAAAAAALUAAAAAAAAAtQAAAAAAAAC1AAAAAAAAALUAAAAAAAAAtQAAAAAAAAC1AAAAAAAAALUAAAAAAAAAtQAAAAAAAAC1AAAAAAAAALUAAAAAAAAAtQAAAAAAAAC1AAAAAAAAALUAAAAAAAAAtQAAAAAAAAC1AAAAAAAAALUAAAAAAAAAtQAAAAMAAAC4AAAAAAAAALgAAAABAAAAAAAAAAEAAAABAAAADAAAAA0AAAACAAAADwAAAAAAAAAPAAAAAQAAABAAAAAAAAAAEAAAAAIAAAASAAAAAAAAABIAAAAEAAAAFgAAAAEAAAAXAAAAAQAAABgAAAAAAAAAGAAAAAAAAAAYAAAAAgAAABoAAAAAAAAAGgAAAAEAAAAbAAAAAAAAABsAAAABAAAAHAAAAAEAAAAdAAAAAAAAAB0AAAAEAAAAIQAAAAAAAAAhAAAABwAAACgAAAAAAAAAKAAAAAEAAAApAAAAAAAAACkAAAAAAAAAKQAAAAAAAAApAAAAAAAAACkAAAAAAAAAKQAAAAAAAAApAAAAAQAAACoAAAAAAAAAKgAAAAAAAAAqAAAAHwAAAEkAAAABAAAASgAAAAAAAABKAAAAAAAAAEoAAAAAAAAASgAAAAAAAABKAAAAAAAAAEoAAAAAAAAASgAAAAQAAABOAAAAAAAAAE4AAAAAAAAATgAAAAAAAABOAAAADQAAAFsAAAAAAAAAWwAAAAEAAABcAAAAAAAAAFwAAAAFAAAAYQAAAAAAAABhAAAAAAAAAGEAAAAAAAAAYQAAAAAAAABhAAAAAAAAAGEAAAABAAAAYgAAAAAAAABiAAAAAAAAAGIAAAAAAAAAYgAAAAAAAABiAAAABwAAAGkAAAAAAAAAaQAAAAAAAABpAAAAAAAAAGkAAAAMAAAAdQAAAAEAAAB2AAAAAAAAAHYAAAAEAAAAegAAAAAAAAB6AAAAAgAAAHwAAAAAAAAAfAAAAAEAAAB9AAAAAAAAAH0AAAABAAAAfgAAAAQAAACCAAAAAAAAAIIAAAAFAAAAhwAAAAEAAACIAAAAAAAAAIgAAAAAAAAAiAAAAAAAAACIAAAAAAAAAIgAAAAFAAAAjQAAAAYAAACTAAAAAQAAAJQAAAABAAAAlQAAAAEAAACWAAAAAwAAAJkAAAACAAAAmwAAAAAAAACbAAAAAAAAAJsAAAAAAAAAmwAAAAIAAACdAAAAAAAAAJ0AAAAAAAAAnQAAAAAAAACdAAAAGAAAALUAAAAAAAAAtQAAAAAAAAC1AAAAAAAAALUAAAAAAAAAtQAAAAAAAAC1AAAAAAAAALUAAAAAAAAAtQAAAAAAAAC1AAAAAAAAALUAAAAAAAAAtQAAAAAAAAC1AAAAAAAAALUAAAAAAAAAtQAAAAAAAAC1AAAAAAAAALUAAAAAAAAAtQAAAAAAAAC1AAAAAAAAALUAAAAAAAAAtQAAAAAAAAC1AAAAAAAAALUAAAAAAAAAtQAAAAAAAAC1AAAAAAAAALUAAAAAAAAAtQAAAAAAAAC1AAAAAwAAALgAAAAAAAAAuAAAAAEAAAAAAP4P/gEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAQD+D/4BAAABAAAAAAAAAAAAAAAEnFcorsSkCz8vYXAoZrKLi9czdIvLIYptbISOLuy4R+UtJGOUkjeYcwquPiSjBCSKdzYL5hFPVeFeiuj7326sDgEAAAEA/g/+AQAAAgAAAAAAAAAAAAAABKENAlZjoqOt8JYcEBe+cwOIqKJT7zsAKCtMrs3EuWwwtSVLx98tRkvMT4fBDqXKA0EVOBUxvDkH8YaUfnOg68wBAAABAP4P/gEAAAMAAAAAAAAAAAAAAATicyF5ykaU+LRxLNPrsv5Ob4Y4mq+6TyCocHOKpxRA5que4hrHXP3r+AkcJIjPZnTOHETpHPBvchlc+0WHnWP7AQAAAQD+D/4BAAAEAAAAAAAAAAAAAAAEGlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscgEAAAEA/g/+AQAABQAAAAAAAAAAAAAABC6Qf+eAfv9ieYakO4pmR33VN9TpYEKse2YnFZZJvZM4Pf8PBiixHBXyZf7ewwhA7njsgQA+swgsEzuhc7NDaBEBAAABAP4P/gEAAAYAAAAAAAAAAAAAAATxVt9Z8cttvC7f43o4qw4ykF1PiRc8MMH1wmTZsnqaH25zF2Wc28fV76uhiQqY303HDbKPPtXN472g7PbMnTg/AQAAAQD+D/4BAAAHAAAAAAAAAAAAAAAEUjCbBB2IeyMVoDyO16boHEsTus2npVtXyER2pfP0zm7rmp6ko65HA3OXvMzhMVq3hW9RQ5esc3mrkTnb19PIawEAAAEA/g/+AQAACAAAAAAAAAAAAAAABJp5HkNaj+VHtsHfmor0w9zR3f5Wfei7tI4H9KcJLSz7cenE2Yh+7cnhkUR7NM19K262oVz515VJ23l8mgQbiGsBAAABAP4P/gEAAAkAAAAAAAAAAAAAAARRxV9V9orhJzibtfd1RKgeijNAYEQV4ML7NWjTq33zF7wLMdJlkF6Q1cf627Q1qUeiVwn9AAapLjod5/tBcEgzAQAAAQD+D/4BAAAKAAAAAAAAAAAAAAAEKIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRAEAAAEA/g/+AQAACwAAAAAAAAAAAAAABHpY3IBA5RJ7P+wFxaLAeSv9pwjOD+xUD5BnPw1i8ua5hRFr2Wshq4pNXff0CGOZyeH/WLFbwZAOpCaR5/ayEnUBAAABAP4P/gEAAAwAAAAAAAAAAAAAAAQ34x5diiqvek6CfzF/JE9EQ3uAdqQtiOGweFYZPd9YCIvgiQC3SIPDXhCKISbZsTfRzldfmrQW0ADcIrl/38FSAQAAAQD+D/4BAAANAAAAAAAAAAAAAAAEWY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8XgEAAAEA/g/+AQAADgAAAAAAAAAAAAAABAOqf6bv+n8gXANU0c/xqlmD1YqZa37XFtoGQvau/Z4DQigHkf194HBHV0B5eCjV1ft8ICCdQj5CUNyBzOpXLMgBAAABAP4P/gEAAA8AAAAAAAAAAAAAAAS2PAzl7EyDoEZEj6Q2ZOe02y91lLVfwEVhLq2cnaF0fSRXEzr95VnbHL4WpK1Ja9ia18UwMsjG6uisfAMp8PPlAQAAAQD+D/4BAAAQAAAAAAAAAAAAAAAE9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1AEAAAEA/g/+AQAAEQAAAAAAAAAAAAAABHrYV07d0hhkfveYLnZqidXjYUTu3hhBiIGAPb5z2rSuP3rc9jBFQ56ORjAom3TE7gTMhJcyJYMTJ2tyveFwyA0BAAABAP4P/gEAABIAAAAAAAAAAAAAAARecAi9Dx4z6QLppQvHrC5CLBWyfOyL13dbHNXcWlZMYDX0XrbWTB1uwBwUpeApQdlazL6ZjqIvWwdPFYQULK0MAQAAAQD+D/4BAAATAAAAAAAAAAAAAAAE3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5PwEAAAEA/g/+AQAAFAAAAAAAAAAAAAAABIIS9Lc9VxvWRJkTHBDdr7e8Wm6w3ahx3spIAEaZmdAYiHLVsTOO1bet2TtnZ6eEGLf8SVSy8uWb9Zf8UXYdm8oBAAABAP4P/gEAABUAAAAAAAAAAAAAAAQuLkA6qtlYJUDafmSvLMSapqLpspIi+nPmhQkc9WPr52xsPdfWLG2xjm0Sexo2kfekUAeYbx4gdSu0S2iGuD5RAQAAAQD+D/4BAAAWAAAAAAAAAAAAAAAE8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdAEAAAEA/g/+AQAAFwAAAAAAAAAAAAAABBDw+atbl8hcSaQqy5wnNZx56t4Dmug2QaHACIiNk2kggO1QidVCQzGoAsyJFzbFGHw9XWiv/y0xEPMYiG6x7XMBAAABAP4P/gEAABgAAAAAAAAAAAAAAASf9KGe8OLoUdttV++Kuj5aiOIXO/6zww8wcFzNV499SkMkvCgtPSG3WXhjAEJuLykkC94QR2eQfI/JM/+bNF/CAQAAAQD+D/4BAAAZAAAAAAAAAAAAAAAEGd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+gEAAAEA/g/+AQAAGgAAAAAAAAAAAAAABN6LlDqUIbYK2zmteye/rsTk6SE2Fmhj+/wIaEd/gPv9XvbJK83pRov3V8xGMr28bmxBelp9sqbHEyoiiRRZ9WoBAAABAP4P/gEAABsAAAAAAAAAAAAAAARUuCEhY0zoQtDOjvPCZyDQ2ZNXJYpiO8h4zzfKOnTBENOZSeszrvx9BtwoGjqfYIkQXSzOgb//K2D5MqVrz0AtAQAAAQD+D/4BAAAcAAAAAAAAAAAAAAAEk/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQEAAAEA/g/+AQAAHQAAAAAAAAAAAAAABGUAb4tQ3KSeBg6mp47nGdh498BDuaWQ0vPQVm5HK73cZLCaK8FAw2Wpl/ZXRZKfWsNpZgQy4JDmxAOA1jSfRWEBAAABAP4P/gEAAB4AAAAAAAAAAAAAAATiEsHw/LjNlx7mzjJ31fOimrBW//IY2FXUGXw1OYKrXvrcd4rb4TBVO/6V4Z4vXcOeHbB9uqjBU9cIg7TPi1pjAQAAAQD+D/4BAAAfAAAAAAAAAAAAAAAEUaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQEAAAEA/g/+AQAAIAAAAAAAAAAAAAAABF1zhbcqg4zQwEMVX2Mbhe4PSJfyG1pppUINjGCjh/BMSE9aoOsXOM8ktx2hBAE4LNW7X88ateXIlImO4I0l0RkBAAABAP4P/gEAACEAAAAAAAAAAAAAAARfqampS/n25YsYPifeFnwK7wpsXY8xY9IVibFmN2SmbfI5TuFJRifNORkjWZxapyGmG+rK7Pf8GGAFHgT8m2QKAQAAAQD+D/4BAAAiAAAAAAAAAAAAAAAE5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9QEAAAEA/g/+AQAAIwAAAAAAAAAAAAAABBb3mUzbhsNOHMZQIlm84us0wC/5YXoWlm07YJbiYePxPeQ6jME5oWtymTdWgFgPHBSIR8zGVLy3r5MOUapPrUkBAAABAP4P/gEAACQAAAAAAAAAAAAAAASundKjTspx2aYpsa+Bo3FBImvtsZVJWTlL0SrUX6mltGjvT5h5oPGTDkN3w0834YPpuOdibZW4+4Jeam5i+YJdAQAAAQD+D/4BAAAlAAAAAAAAAAAAAAAEcCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1wEAAAEA/g/+AQAAJgAAAAAAAAAAAAAABEAA85Wh3PInFfCO722iVycKHfR1mKfLgqn9cWuDnzbtU+yVcUCK1IDlrR3TQ7T4ssJhW4ktdlY6LSFy6yjN6K0BAAABAP4P/gEAACcAAAAAAAAAAAAAAAQTksNftaunzkqKXluFm/jqPyM55ugqrkkyZgzeBUZ0YfzEWk9ZdQyw2uU4MKuSjEwR42L9dkjC5G9jhc3BgwmnAQAAAQD+D/4BAAAoAAAAAAAAAAAAAAAE5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQEAAAEA/g/+AQAAKQAAAAAAAAAAAAAABDwlQELMFnprulHcbAxRV//oFXmKigKHdw91FZvdYx8Mp4LjsAL2D4cfJzZTPvjakXCugscaVGn45oSHSoh4m6oBAAABAP4P/gEAACoAAAAAAAAAAAAAAARca5EM2NdSKOxQvS+XqdIPtzBRG7MSCCVs5oW5kz2DeTANc5ZVNyTSMvOM/MYP5NrNZtuhli7nb/39c91SCd72AQAAAQD+D/4BAAArAAAAAAAAAAAAAAAENiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9owEAAAEA/g/+AQAALAAAAAAAAAAAAAAABEzyV6vCahWlWJtglpj75z9iMqOGUjO/0CnEprjCwzm36R+X4u0VBpnf60w3/q7rf7Gog4kBHlUzYAJiRHQDsdMBAAABAP4P/gEAAC0AAAAAAAAAAAAAAAQKLJ47EVP8lnI3mbTP099fDhIIEnpLKDPUOmXTCqOWEMQYYE/UaexRUQvSnreGgbV9yPd8fKdeL01g7idY4v6pAQAAAQD+D/4BAAAuAAAAAAAAAAAAAAAEqqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXgEAAAEA/g/+AQAALwAAAAAAAAAAAAAABB64LMfqK6qMoJ5oRWymhxOnNveifh0wEF6MRBeoDbqUTpphiUaMs3xt3HAL3qgga8K/9ssUOQVXfxk5eWoDsEoBAAABAP4P/gEAADAAAAAAAAAAAAAAAAShWXOSDcQ0CEKTbN2/sgnB39BQPjPZHFHCmRwZjymwJVwJhk2rjBidVYAscz5uu24mN49aJgX8KWa4OvwKHn6SAQAAAQD+D/4BAAAxAAAAAAAAAAAAAAAEWMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlowEAAAEA/g/+AQAAMgAAAAAAAAAAAAAABBbcKxv3rgc2hI2HkajoJcuxtKr4ol6CVp7xB9mdaZQXV4G8o79+KR00m/c6HhzMg8t9/g1suVrfVqPk1EbTmEkBAAABAP4P/gEAADMAAAAAAAAAAAAAAASjmxI8oSSD8MhA2YfjdXT+56suunNV52RSHy0Y29p5el+m7CMp6eVKjH/Y78FOVlS0R74kbuzliETPrTw+UAdEAQAAAQD+D/4BAAA0AAAAAAAAAAAAAAAERwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQEAAAEA/g/+AQAANQAAAAAAAAAAAAAABIO5x+j+ncg4qCaIAABqaxqQrVSJiYaT5P66As3W93yIetf7P5z7H0eqJ8jMJAgEfzpQt8gQtJREr1KEBALLCK8BAAABAP4P/gEAADYAAAAAAAAAAAAAAATawkYlNpcghpHXDiIlI2g3SGcxjsalz+fwPipIInDxCoVZd/ty4CCcQfEGnB5pVw968LaXcqmNgLHc3KlBCBomAQAAAQD+D/4BAAA3AAAAAAAAAAAAAAAEzJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8QEAAAEA/g/+AQAAOAAAAAAAAAAAAAAABGwuxJa3SWiZz2wD/tRKLWL6mbG93nJecIugX4ugSU1HDaMKenL7KYNI1850Uyg45vxOwHYBQVXgD1TDXChrBzABAAABAP4P/gEAADkAAAAAAAAAAAAAAAROmnrQ/ohQkNO46r/lnxx2yTMm6N/Cp85OSvAjCPshEhKmeQmdPpLIng8I+cYygWML112FqXkpUhi0C33uLHTkAQAAAQD+D/4BAAA6AAAAAAAAAAAAAAAEx0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQegEAAAEA/g/+AQAAOwAAAAAAAAAAAAAABGiC+Rce5msFWt9NGpdgZxBOIjb6NahE8S6zyP6NOS+8+oKO3wsNSehEJmyuBZidgEu5IFRfyhGVrnwX3QpTHD4BAAABAP4P/gEAADwAAAAAAAAAAAAAAAToWXO5tMtkbcnZr81UICV4SGPOrmjGAfJoJT3Jhe9wuy+hVocmr+znFcjr9dc/q3PtH3EA60edI7+1e0XdZFOUAQAAAQD+D/4BAAA9AAAAAAAAAAAAAAAE5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISgEAAAEA/g/+AQAAPgAAAAAAAAAAAAAABKY8tm2IUrLn8FpSsD3Ppd3De/sLiZSurs9GHSRDpUA25eo6P2JT4uJm/GoFJFQvARe1fDbs3sjzakZLAN4c7SkBAAABAP4P/gEAAD8AAAAAAAAAAAAAAASdOOp9wEUSKkp1cK/hgNBYJ+ZwtkqbzWV0XSkCilO/KsUZVtxHo/9UAB3kbs37S1OvxCqJTS0Vp0PoUrg20nA4AQAAAQD+D/4BAABAAAAAAAAAAAAAAAAEpMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hAEAAAEA/g/+AQAAQQAAAAAAAAAAAAAABJpfaUXgrtzOtZBpaqE5trpkl05UU7hk8dG32I/riFCimMnBuTbUm3nrVd32klOke2ozj8NIPydT7yuKjcu7OWwBAAABAP4P/gEAAEIAAAAAAAAAAAAAAAS/cxedkBy+fLCRNQRmiYgBy2V7tFdd5505HfXDCXtWXKhc7hCL1qu9J6c1Bad7VNxHCEIvUfAsjbVsSp2mPz+sAQAAAQD+D/4BAABDAAAAAAAAAAAAAAAEYZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtgEAAAEA/g/+AQAARAAAAAAAAAAAAAAABPMxqsqXxDYwiKhoYF06AvGgdq+2KwV/gEAHyD7PzJZPgbT087Tr00tNTUVv9xIetCfmuPJbfKrAs4q0OpaAlXwBAAABAP4P/gEAAEUAAAAAAAAAAAAAAAT81/tPLNPHpLfJEk5s4BXv3nqvxyvb46PwALl23zBI/cFACh5fnw2gfIJTw/zMaQ1dK2NNKLp/M7oXSkF1xhsSAQAAAQD+D/4BAABGAAAAAAAAAAAAAAAETkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8gEAAAEA/g/+AQAARwAAAAAAAAAAAAAABHavqnpUPWpB6XDpf4FFUU8VSDpACdcEd0AL2+EbFY0vKFaBYwxk3Ou/cCWJlJpJ1BeR8DCzoG+TvmtysX1mqT0BAAABAP4P/gEAAEgAAAAAAAAAAAAAAARkNj5s+bnNNMX5ikKsBT2crRSAgJg9PRC1PU1lYW/iz75M2RyBVpPSDr7hHa4jgyNCPPKwcHXPG5YvnSHNp5eLAQAAAQD+D/4BAABJAAAAAAAAAAAAAAAEsPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvgEAAAEA/g/+AQAASgAAAAAAAAAAAAAABDL46DAicBGq0m1GJOTvp5qEs0rrUrE8BfOc3Bz0PTq5RaGTmCI2qgQCSKiF46bcg+b04cRqudl7vzGic0ZCJOEBAAABAP4P/gEAAEsAAAAAAAAAAAAAAAR8Nb8RnpD1GI7x4UbweP7u7+hb5es9MgKHAI4zb62HYDo5uUO1hgim972b4q8j1ngL2pIReVoZHptMRgdF66CUAQAAAQD+D/4BAABMAAAAAAAAAAAAAAAEIRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3gEAAAEA/g/+AQAATQAAAAAAAAAAAAAABObmIbCR/FSQU7+6LJYOAc5yWIQ6ESOsGmAsTJgnZ063AqxwP3whSqExc9iSihNB3QxVBe/6ELoc7plySu6WgUUBAAABAP4P/gEAAE4AAAAAAAAAAAAAAATSElT1II++YzMgF1kWo09dZrp2qHtZ0fRwgj3L4LJLysbecvjwFyWtr0eYqFVVQfI9Y0fljvEPAAHtt+BKORQxAQAAAQD+D/4BAABPAAAAAAAAAAAAAAAE7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SAEAAAEA/g/+AQAAUAAAAAAAAAAAAAAABJdywrhejIAzcEwypHWBhIoWI7eaUT2xIOOq7ZZp0j5VG4JgfCziKyiW2GBQUm5z2iXsTCrYjzvIZnkY0c9k3fgBAAABAP4P/gEAAFEAAAAAAAAAAAAAAARInVqZkAlSJlL4+GxUt/m0bJ2VpUHwR0WlpI7iCaJQpQ7GTyrOfkAjLhl4lSaHbbOch2T+4wBRPamXcXHNVQf5AQAAAQD+D/4BAABSAAAAAAAAAAAAAAAEZf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6cswEAAAEA/g/+AQAAUwAAAAAAAAAAAAAABBh00jUmCAkO7HB+7GfjNqxaKUaC4fLdmy0lugW4K7S7GoTiAeYsgFSX/Ro1it3GEw2jI+F3QaTNXAOqSEtCr9sBAAABAP4P/gEAAFQAAAAAAAAAAAAAAASmBFziEnj+w2NYJJL0CadLjTHds0wNOSceAvlRowFMzImdT3QSBaHVHP4wL14W7gG439TBmMpC5j/W/eszscx+AQAAAQD+D/4BAABVAAAAAAAAAAAAAAAE55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrgEAAAEA/g/+AQAAVgAAAAAAAAAAAAAABI8WsiykoaxKqsydHrpkG1YU2EDNuwn09U9+foAoAxaC/NiS7F6kye+s7+gNGCzoBJy1DLy87A7BiK5fDRaU9oEBAAABAP4P/gEAAFcAAAAAAAAAAAAAAAR3rls2Uhp3G+lv8DZptV2WoqpXnreO5GdnVa2TqzWwhHy42xdHvTGojNWrFV/V5OoO6fBPYyRzMR5p7MIpNmHAAQAAAQD+D/4BAABYAAAAAAAAAAAAAAAErBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+AEAAAEA/g/+AQAAWQAAAAAAAAAAAAAABJZULDC0lA1D0+OI3a1Pzt+6pZ4n4rQz/mcK5pmXKEisiyr7WcacldJ9v2w/zeLQQAGf4CRHWVOyjK2qCtfl2AIBAAABAP4P/gEAAFoAAAAAAAAAAAAAAATQoj/rTvGjFJOgfsaM3UV9JsuhTT5u1OJyOxBJZCWH+FnKQ3wqmYx/u5jA9bdH5qRnpH/DXxmVdIcFheJhQ87eAQAAAQD+D/4BAABbAAAAAAAAAAAAAAAEbuRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYowEAAAEA/g/+AQAAXAAAAAAAAAAAAAAABInJQB3jajZuvMxbZ2dHvtS9slCHb8zaGrilOFgQN1bx/7zxYnhe6n0ZcFGVPgwPT/Wz1yEvdLpcaFKAh9t7FdsBAAABAP4P/gEAAF0AAAAAAAAAAAAAAAQ9gC2FNrabZUrG69IPcM8L8bL5T6w4DUsC5PyaSZG6/D40AJJp5cRD40dxUXus42XqpxrFXdS56bBrCT7v5IkvAQAAAQD+D/4BAABeAAAAAAAAAAAAAAAE+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBgEAAAEA/g/+AQAAXwAAAAAAAAAAAAAABFO9XMk2prodQkTQn6RmOraNvJcbzcDxuBrs/xFY4H9yZs79L5Q6dWrU/XkuXQ4zGB7nKR21p7Oi8H9wSs+rL3cBAAABAP4P/gEAAGAAAAAAAAAAAAAAAAQE0ZtYt93R5Q9puGRdRWbSPy669ETJOHmi9Fr93KjD8GoBtknIL7l9T4jNA7OYArNiphEAhKhGF1Cvd4hn89eqAQAAAQD+D/4BAABhAAAAAAAAAAAAAAAEVVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEgIAAAEAAAiAAAAAYgAAAAAAAAAAAAAABAR6RRXrJZFq11slD52ypvsWGFWK7gopxnH7UgWmvM6BfYWTuAXEghVLx1U7c6SGOmM1J2LbhIWfgvYhF48Z2rIBAAABAAgAgAAAAGMAAAAAAAAAAAAAAAQFxovRWfpDALCt7djvXudUdlsBrhQESKDMWbpV2xV1P8xtnfzGiPVf0c+RmFuZoEZQPVby/EB999sN7xsDoAqdAQAAAQAEAIAAAABkAAAAAAAAAAAAAAAE4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6AEAAAEAAAhAAAAAZQAAAAAAAAAAAAAABEQUU9oKhJdCCkAAU+F04+/LaZPb+3oafpms59h21HmZdWDHWhgEKoWqYxkwnu7sO8tH6w4uIEtLh84b6RbiNbABAAABAAAIIAAAAGYAAAAAAAAAAAAAAARpjaAyYqY+HF9T7QR2c35c20ZuN9CDBmPjeTwbd/KsMz9R1nDDrGtbGYOS7PZ4JlyGpV4AGNXkGmKV06tRsFOoAQAAAQAEACAAAABnAAAAAAAAAAAAAAAE3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+QEAAAEAAAgAAAAAaAAAAAAAAAAAAAAABGnrxJAjbuypT0aWC48JnXLjc+mwxYhO2fFwuAj6hMY076x7oIdvEM1F1TmbYmIIXIilGnDZLasXacpqZYpdW3gBAAABAAAIEAAAAGkAAAAAAAAAAAAAAAQRXr6i9OwRcI8CnnyDZ0PrwvGg//ArmlG+DLQn8fE8YHTT2iYU+/dh63QeJqq+siuA9MG4LrAIfUtM5j3UQ7mFAQAAAQAAAhAAAABqAAAAAAAAAAAAAAAE9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDwEAAAEAAAAQAAAAawAAAAAAAAAAAAAABOQFeD86fNH4Ry/NyTOi6AOqU0FVoAdR6LzAbC0PTmViw6lWPDFaGwVzUpgCYv/wrIerXGO3uy58th4NbRJTIyABAAABAIAAEAAAAGwAAAAAAAAAAAAAAAR0o3x+BWp3S9QiPG4kjo//1JJJ7+YH2u8D3wJIfawmeVn84JlY7UMm/GPyO8pN9hR0Z9yrZ0PGgpoLpse5OWBzAQAAAQAAABAAAABtAAAAAAAAAAAAAAAEnrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3QEAAAEAAAAQAAAAbgAAAAAAAAAAAAAABFcdPS8xKAWucw54nh/C0jEU6I+4q/yXqtBruqif9RnAavRpH6BAKF7y4ltVPSdahP2Pzsmqt98OadmVqzTRzRMBAAABAAgAEAAAAG8AAAAAAAAAAAAAAARVM3gS44fBcSRfNfmdO9VjizsT8qvPsI4LzGR+1tspFgCX3q8+JSywaR4wQtAw6cs4nyTcFjX5ljna221mcdxdAQAAAQAEABAAAABwAAAAAAAAAAAAAAAE/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754gEAAAEAAgAQAAAAcQAAAAAAAAAAAAAABAl15M4J/nVwD7N1gcBPir563+FhAsAXX433mB6THlcVhNBHHger4VhkobOsItCGBKjEiM3ThdV40PzJJuXe2XUBAAABAAAICAAAAHIAAAAAAAAAAAAAAASUrV4l7KTVlfxSSWoV3/cDrRS5n/pRV8ZPYu4ajdanj/Pt5FNFhj7TE67aSkKU/68xOL3Ao59eLa+NSk7VGjvqAQAAAQAEAAgAAABzAAAAAAAAAAAAAAAEh1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhAEAAAEAAAgEAAAAdAAAAAAAAAAAAAAABGgpanYEw1T0hBoKAkvEAxt+xrvMnPZUxzQEJbM7UOhDXrShDv/2/Mt9TDLtmWj25+JFbCAAc1S12C4QhnpBg6sBAAABAAQABAAAAHUAAAAAAAAAAAAAAARixLZ7da2CfDtarnddcEtxXomFGwSryGR+D3URJVp0ivOv3A7qMkMxmcJBsebUa5zm38J0OIVJJ9Y/nwU269PdAQAAAQAACAABAAB2AAAAAAAAAAAAAAAEnlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlRegEAAAEABAAAAQAAdwAAAAAAAAAAAAAABMcOdIqcpF3C7LS3lh+1kXULsrCano7gBj3d9L3dYuc0siit1hPoo8x5iysXYgjLR9aR8+/KzoNASkmDkgf9iocBAAABAAIAAAEAAHgAAAAAAAAAAAAAAAS7Pr+0TLYgWb1Fg7K8qXzzN3Nl/AR8pmadf0KPUEeN5IY24Yu4wPWRHzLlu15ibCoqbW2Pybhxv9ooSiuvp8dZAQAAAQCAAAIAAAB5AAAAAAAAAAAAAAAE6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQEAAAEA/g/+AQAAegAAAAAAAAAAAAAABAMzkSnc9Wbfe0822EJyKyN2Yom1qUV1H6aP8NMTidtBqTWHdm3dzFPZt9c0v2idUyZeiXy06JPN2PB4zbp2E9ABAAABAP4P/gEAAHsAAAAAAAAAAAAAAAQ8lYdRvVEV68oLBoUD1GUbm0J34U7mJGH0DwcS2SYEfYuLTeImuIHqbokg3isbPcrcktrAjv+94DXHNEo/ohIHAQAAAQD+D/4BAAB8AAAAAAAAAAAAAAAEWjvinW/rM9KEauFCgiRU1VM6Vn4zvv0bPy6DcvjHLNKl1F9cLMW0axsqGqcpQdEr9X9A5V4lWV2cNiXTDUZXhQEAAAEA/g/+AQAAfQAAAAAAAAAAAAAABDLu0dIOIoPU1LhksSWr58uUb9HoAhLaWUTTK2WmEtb8ZIiMRohlMKHs1Ny2syEPihNOIU603zT4MVOYM4uxeT8BAAABAP4P/gEAAH4AAAAAAAAAAAAAAATh8KTv3CyEx3MynasfTqpaskTiKiWouEJQf46K4iBT75EHT73g2UMvzVq07sZfnm5Qq56jS3Ec228TIjoPtZ0zAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAd21pbGwAAAAMAAAACwAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAPAEAAAoAAIBGAQAADAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAkwIAABMAAIBjbGkuanMAAAIAAAAoAwAACQAAgGNsaS5qcwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAbWltZQAAAABjbGkuanMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAZXNidWlsZABGGgAACwAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASH4AAAAAAADAfgAAAAAAAAo8c3JjLmluc3RhbGwubG9ja2ZpbGUuVHJlZT4gMjAgc2l6ZW9mLCA0IGFsaWdub2YKAAAAAAAAAP7/////////AAAAAHsAAAABAAAALwAAAAAAAAB7AAAAAQAAAAIAAAA5AAAAAAAAAHwAAAABAAAAAwAAAB8AAAAAAAAAfQAAAAEAAAAEAAAAcAAAAAAAAAB+AAAAAQAAAAUAAAAmAAAAAAAAAH8AAAABAAAA8H4AAAAAAADwgAAAAAAAAAo8dTMyPiA0IHNpemVvZiwgNCBhbGlnbm9mCgAAAAAAAAAAAAEAAAACAAAAAwAAAAQAAAAFAAAABgAAAAcAAAAIAAAACQAAAAoAAAALAAAADAAAALUAAAC2AAAAnQAAAJ4AAACfAAAAoAAAAKEAAACiAAAAowAAAKQAAAClAAAApgAAAKcAAACoAAAAqQAAAKoAAACrAAAArAAAAK0AAACuAAAArwAAALAAAACxAAAAsgAAALMAAAC0AAAAKgAAACsAAAAsAAAALQAAAC4AAAAvAAAAMAAAADEAAAAyAAAAMwAAADQAAAA1AAAANgAAADcAAAA4AAAAOQAAADoAAAA7AAAAPAAAAD0AAAA+AAAAPwAAAEAAAABBAAAAQgAAAEMAAABEAAAARQAAAEYAAABHAAAASAAAAB0AAAAeAAAAHwAAACAAAAAbAAAAEgAAABMAAAAUAAAAFQAAAA0AAAAOAAAAuAAAAH0AAABOAAAAUQAAAFQAAACbAAAAnAAAAHsAAACZAAAAmgAAAGsAAABtAAAAcAAAAF0AAABgAAAAWwAAACkAAAAhAAAAIwAAACQAAAAmAAAAJwAAABwAAAAYAAAAGQAAABcAAAAPAAAAfgAAAH8AAACAAAAAgQAAAHwAAAAaAAAAiAAAAIoAAACMAAAAhAAAAIUAAACGAAAAjQAAAJEAAACSAAAAYQAAAHEAAAAlAAAAeAAAACgAAAAggQAAAAAAAASEAAAAAAAACjx1MzI+IDQgc2l6ZW9mLCA0IGFsaWdub2YKAAAAAAABAAAAfAAAAHsAAAB6AAAAYQAAACIAAAAhAAAAFAAAABEAAAAIAAAABwAAAAYAAAACAAAABAAAAAMAAAAFAAAA//////////8NAAAADAAAAAoAAAAJAAAACgAAAAsAAAAPAAAADgAAABAAAAASAAAAEwAAAB8AAAAeAAAAFgAAABUAAAAdAAAAHAAAABsAAAAaAAAAGQAAABgAAAAXAAAAGQAAACAAAABKAAAANQAAADsAAAAuAAAAYAAAADgAAAA3AAAAXwAAAF0AAABcAAAARgAAAC0AAAA0AAAALAAAAFkAAABBAAAAKwAAADIAAAAwAAAAJAAAAEAAAAA/AAAAPQAAAC8AAAAqAAAAKQAAACgAAAAnAAAAJgAAACUAAAAjAAAAJAAAAC4AAAAtAAAALAAAACsAAAA8AAAANQAAADsAAAA6AAAAOAAAADcAAAA2AAAANAAAACwAAAArAAAAMgAAADAAAAAvAAAAMQAAADUAAAAcAAAAJwAAADQAAAAzAAAAOQAAADgAAAA+AAAALQAAADQAAAAsAAAAKwAAADAAAABKAAAANQAAAEUAAAA4AAAAPgAAADYAAABGAAAARAAAAEIAAAAyAAAAMAAAAD8AAABDAAAARQAAAD4AAABCAAAAMgAAAEgAAABHAAAASQAAAEsAAABTAAAAUgAAAE0AAABMAAAAUgAAAE8AAABRAAAAUAAAAE4AAABPAAAAVgAAAFIAAABPAAAATQAAAFQAAABYAAAAUgAAAE8AAABNAAAAVwAAAFUAAABWAAAATQAAAE0AAABWAAAAUgAAAFcAAABbAAAAWgAAAEgAAABeAAAAeQAAAHgAAAB3AAAAdgAAAHUAAAB0AAAAcwAAAHIAAABxAAAAcAAAAG8AAABuAAAAbQAAAGwAAABrAAAAagAAAGkAAABoAAAAZwAAAGYAAABlAAAAZAAAAGMAAABiAAAAfgAAAH0AAAAGAAAAQwAAADiEAAAAAAAAApcAAAAAAAAKPFsyNl11OD4gMjYgc2l6ZW9mLCAxIGFsaWdub2YKAAAAAAAAAAAADAAAgI1zKrYH9UEnAgJsYXRlc3QAAFkAAAANAACA5NOL1K5eN/QCASoAAAAAAAAAZGlmZgAAAADoeHbUjUyJGgIBKgAAAAAAAABlcy1tYWluAJddJlhj+CUJAgEqAAAAAAAAAGVzYnVpbGQAECM9Q3cH87cCASoAAAAAAAAAZXhwcmVzcwAtSsZFcS5vHgIBKgAAAAAAAABmAAAAEAAAgGI1+rrrUq2yAgEqAAAAAAAAAGpzemlwAAAAoQBkxxiP6IsCATMuNy4xAAAAdgAAAAkAAIAfAuJeUe7ucAIBKgAAAAAAAABvcGVuAAAAADr/hharBd0CAgEqAAAAAAAAAH8AAAAPAACAmQ1nY/ePqP8CATEuMzY0LjAAd3MAAAAAAAAHBEl9uI48ywIBKgAAAAAAAACOAAAADwAAgNWq2smIYlF9AgF+MC4xOC4wAHdoaWNoAAAAzG2O96NP8kYCAV40LjAuMAAA3gAAABQAAIAJKyyMX5WYegIBXjAuNS4wAABpc2V4ZQAAAKgsV9pTEurXAgFeMy4xLjEAAOMBAAAKAACAaHOu//oPq2kUAV40LjAuMQAA7QEAAA4AAIDQNRRUWdz0BxQBPj01LjAuMgB0AgAADwAAgI8IHuihc6XXAgFeNS4yLjEAAIMCAAAQAACAer8U4BQRFfkCAV4zLjAuMAAAkwIAABMAAIBFkWS7eXM3BAIBXjEuMC4wAABpcy13c2wAACLwpdtElNniAgFeMy4xLjAAAJMCAAATAACARZFku3lzNwQCAV4xLjAuMAAAKAMAAAkAAIB46KOUH/7zMwIBXjMuMC4wAAD5AwAACwAAgDCQVnHT53CAAgFeNC4xLjAAAAQEAAASAACAObU7XSINiuQCAV41LjAuMAAAoAQAAA8AAIBIujVbFIwuIwIBXjcuMC4wAAAwBQAADwAAgFm/7gWc3u0oAgFeMi4wLjEAAIUFAAAOAACAV1HUTV3yyeECAV4xLjAuMAAAbGllAAAAAADTdEgCZ3zjywIBfjMuMy4wAABwYWtvAAAAAM8pG9voSJrmAgF+MS4wLjIAAAkGAAAPAACAy+0FWEEmvzYCAX4yLjMuNgAAGAYAABIAAIB4r8YiHE2YwgIBfjEuMC4xAAC8BgAADAAAgLaHobhFb4imAgF+MS4wLjAAAGluaGVyaXRzEZrqFxjf1GcCAX4yLjAuMwAAaXNhcnJheQAT3n2/02M5EgIBfjEuMC4wAADIBgAAFAAAgMs7RjuXe6VPAgF+Mi4wLjAAANwGAAALAACAIdsvXideIecCAX41LjEuMQAA5wYAAA4AAIC70uZiqHO0hwIBfjEuMS4xAAD1BgAADgAAgKIz1k6fpfk3AgF+MS4wLjEAANwGAAALAACAIdsvXideIecCAX41LjEuMAAAJgkAAAkAAID0i2YEy18wuQIBfjMuMC41AABxcwAAAAAAABd4g2ZtnfPNAgE2LjExLjAAAGRlcGQAAAAANI6wQrw4bHACATIuMC4wAAAAZXRhZwAAAAC7ZxljywG5KgIBfjEuOC4xAABzZW5kAAAAADbN6Dqnruj9AgEwLjE4LjAAAHZhcnkAAAAAEODbZNTJjIgCAX4xLjEuMgAAZGVidWcAAACOgwA04RrKxgIBMi42LjkAAABmcmVzaAAAAPvAEofFYG+dAgEwLjUuMgAAAGNvb2tpZQAAk9Ok5DFT7QUCATAuNi4wAAAAYWNjZXB0cwDUwAdE5/m4lAIBfjEuMy44AABtZXRob2RzAOTREZCuNl/tAgF+MS4xLjIAAHR5cGUtaXMAc1/8HZD4iEECAX4xLjYuMTgAcGFyc2V1cmxyEL+38vlckAIBfjEuMy4zAABzdGF0dXNlc+EbwvSEawHxAgEyLjAuMQAAAOgJAAAJAACAtKjieg83rvQCAX4xLjAuMgAA8QkAAAoAAIBtxKN+P97YUQIBfjIuMC43AAD7CQAACwAAgCzK1eyt0BNFAgExLjIwLjIAAAYKAAALAACAyT/azL6Im7QCAX4xLjAuMwAAEQoAAAsAAIBNmb434wqMrgIBMi4wLjAAAAAcCgAACwAAgDhFZaJiAxdbAgEyLjQuMQAAANwGAAALAACAIdsvXideIecCATUuMi4xAAAAJwoAAAsAAIBW4e40rUYulQIBMS4wLjEAAAAyCgAADAAAgBtg85GEWxZQAgF+MS4wLjQAAD4KAAAMAACAalsvWr3TBCQCATEuMi4wAAAASgoAAAwAAIAG6CHMTQoMsQIBfjEuMi4xAABWCgAADAAAgJt8LAXlw/fhAgExLjE1LjAAAGIKAAANAACAhE8IbjyDmVoCATEuMS4xAAAAbwoAAA4AAIALdmd/1d/+KwIBMC4xLjcAAAB9CgAADgAAgHc+72XAbJAuAgExLjIuMAAAAIsKAAAQAACAm7wrtz55sToCATEuMC42AAAAmwoAABEAAIBO2nb6bnC+KgIBMS4wLjEAAACsCgAAEwAAgN1DQdzdUfqpAgEwLjUuNAAAANwGAAALAACAIdsvXideIecCATUuMi4xAAAAc2VuZAAAAAA2zeg6p67o/QIBMC4xOC4wAABwYXJzZXVybHIQv7fy+VyQAgF+MS4zLjMAAOgJAAAJAACAtKjieg83rvQCAX4xLjAuMgAABgoAAAsAAIDJP9rMvoibtAIBfjEuMC4zAABtcwAAAAAAAKS0xNW1149IAgEyLjEuMwAAAGRlcGQAAAAANI6wQrw4bHACATIuMC4wAAAAZXRhZwAAAAC7ZxljywG5KgIBfjEuOC4xAABtaW1lAAAAAGYjhtftD4ECAgExLjYuMAAAAGRlYnVnAAAAjoMANOEaysYCATIuNi45AAAAZnJlc2gAAAD7wBKHxWBvnQIBMC41LjIAAABkZXN0cm95AI5ukc7EeeM1AgExLjIuMAAAAHN0YXR1c2Vz4RvC9IRrAfECATIuMC4xAAAA6AkAAAkAAIC0qOJ6Dzeu9AIBfjEuMC4yAAAGCgAACwAAgMk/2sy+iJu0AgF+MS4wLjMAABEKAAALAACATZm+N+MKjK4CATIuMC4wAAAAHAoAAAsAAIA4RWWiYgMXWwIBMi40LjEAAABKCgAADAAAgAboIcxNCgyxAgF+MS4yLjEAAGVlLWZpcnN0EI95h4xd7WgCATEuMS4xAAAAZGVwZAAAAAA0jrBCvDhscAIBMi4wLjAAAABpbmhlcml0cxGa6hcY39RnAgEyLjAuNAAAAH0KAAAOAACAdz7vZcBskC4CATEuMi4wAAAAc3RhdHVzZXPhG8L0hGsB8QIBMi4wLjEAAAC9DgAADAAAgN2MxpELDActAgExLjAuMQAAAG1zAAAAAAAApLTE1bXXj0gCATIuMC4wAAAAZGVidWcAAACOgwA04RrKxgIBMi42LjkAAAB1bnBpcGUAAI5Z65l4KC2bAgF+MS4wLjAAAHBhcnNldXJschC/t/L5XJACAX4xLjMuMwAAc3RhdHVzZXPhG8L0hGsB8QIBMi4wLjEAAADoCQAACQAAgLSo4noPN670AgF+MS4wLjIAAAYKAAALAACAyT/azL6Im7QCAX4xLjAuMwAAHAoAAAsAAIA4RWWiYgMXWwIBMi40LjEAAABxcwAAAAAAABd4g2ZtnfPNAgE2LjExLjAAAGRlcGQAAAAANI6wQrw4bHACATIuMC4wAAAAYnl0ZXMAAACoyDXETbrmbQIBMy4xLjIAAABkZWJ1ZwAAAI6DADThGsrGAgEyLjYuOQAAAHVucGlwZQAAjlnrmXgoLZsCATEuMC4wAAAAZGVzdHJveQCObpHOxHnjNQIBMS4yLjAAAAB0eXBlLWlzAHNf/B2Q+IhBAgF+MS42LjE4AHJhdy1ib2R5eDRcfoC3JYICATIuNS4yAAAA9BEAAAoAAIDJrz66ZFQ8IAIBMC40LjI0AAARCgAACwAAgE2ZvjfjCoyuAgEyLjAuMAAAABwKAAALAACAOEVlomIDF1sCATIuNC4xAAAAMgoAAAwAAIAbYPORhFsWUAIBfjEuMC41AABHEgAADAAAgPkNIrUVQKDwAgE7EgAADAAAgGJ5dGVzAAAAqMg1xE265m0CATMuMS4yAAAAdW5waXBlAACOWeuZeCgtmwIBMS4wLjAAAAD0EQAACgAAgMmvPrpkVDwgAgEwLjQuMjQAABEKAAALAACATZm+N+MKjK4CATIuMC4wAAAANBMAAAoAAIAvAZOXXsth9AIBfjIuMS4yNAA+EwAACwAAgGJZp4Gw5o84AgEwLjMuMAAAAG1pbWUtZGIAw8Wk8f3GpW4CATEuNTIuMAAAKBQAAAwAAIANFvha8IzgfQIBXjEuMC40AAB0FAAACQAAgD9e8nb6Q5+sAgFeMS4wLjcAAH0UAAAJAACAJU0hoMQ/3BMCAV4xLjMuMAAAhhQAAA0AAIDsrz2hFLVVKAIBXjEuMi40AACTFAAADgAAgEV5Qpq7wUUNAgFeMS4xMy4xAH0UAAAJAACAJU0hoMQ/3BMCAV4xLjMuMAAAKBUAAA0AAICbmcoacW24CwIBXjEuMS4yAAA1FQAACQAAgB0c/X+RqufJAgFeMS4wLjEAAD4VAAALAACAB5yRzCOD5qICAV4xLjAuMwAAaGFzb3duAABIP4sJiUrg0AIBXjIuMC4wAAAoFQAADQAAgJuZyhpxbbgLAgFeMS4xLjIAAKsWAAASAACAGJ97mY2oVDICAV4xLjAuMAAAfRQAAAkAAIAlTSGgxD/cEwIBXjEuMy4wAAAoFQAADQAAgJuZyhpxbbgLAgFeMS4xLjIAAIYUAAANAACA7K89oRS1VSgCAV4xLjIuNAAAvRYAABMAAIDwt4iQmQjlOAIBXjEuMi4xAAAeFwAAFAAAgNUcwNxTtMSkAgFeMS4xLjQAAH0UAAAJAACAJU0hoMQ/3BMCAV4xLjMuMAAAKBUAAA0AAICbmcoacW24CwIBXjEuMS4yAACGFAAADQAAgOyvPaEUtVUoAgFeMS4yLjQAAGdvcGQAAAAA/T9Rybhol5kCAV4xLjAuMQAAMhcAABgAAICiDpi5dY27QAIBXjEuMC4yAACrFgAAEgAAgBife5mNqFQyAgFeMS4wLjAAAIYUAAANAACA7K89oRS1VSgCAV4xLjIuNAAAhhQAAA0AAIDsrz2hFLVVKAIBXjEuMS4zAACrFgAAEgAAgBife5mNqFQyAgFeMS4wLjAAAH0UAAAJAACAJU0hoMQ/3BMCAV4xLjMuMAAAZ29wZAAAAAD9P1HJuGiXmQIBXjEuMC4xAACqGAAACQAAgHv01jl/q3BYAgEwLjIuMAAAALMYAAAJAACA56vlU26ymRQCATEuOS4xAAAANBMAAAoAAIAvAZOXXsth9AIBfjIuMS4zNACcGQAACgAAgHIFa+boQJD4AgEwLjYuMwAAAIgaAAASAACA3t6/nasyvTkEATAuMjMuMQAAmhoAABQAAIDIB1CXRuhtwgQBMC4yMy4xAACuGgAAFgAAgFI+0CscHRGnBAEwLjIzLjEAAMQaAAAUAACAGPr6MVLKNmUEATAuMjMuMQAA2BoAABUAAICeGzC60+ljWgQBMC4yMy4xAADtGgAAEwAAgDBCml+3Bg8CBAEwLjIzLjEAAAAbAAAWAACADRdE6Z6udscEATAuMjMuMQAAFhsAABQAAIDCAO5HJukCQAQBMC4yMy4xAAAqGwAAEgAAgGm5PKg0Bm3mBAEwLjIzLjEAADwbAAAUAACA24NmRjGW2sEEATAuMjMuMQAAUBsAABMAAICiqX5q7ggl0gQBMC4yMy4xAABjGwAAFgAAgKtGaV1yPyecBAEwLjIzLjEAAHkbAAAXAACA0aEQHcQo6U8EATAuMjMuMQAAkBsAABQAAIAqEigzAYvjoQQBMC4yMy4xAACkGwAAFgAAgGxgov/WkblBBAEwLjIzLjEAALobAAAUAACAYhb8CQ8fFPYEATAuMjMuMQAAzhsAABIAAIDnlnTyoT/2uwQBMC4yMy4xAADgGwAAEwAAgIgErGhfETp4BAEwLjIzLjEAAPMbAAAWAACAMhF9VuG6UmIEATAuMjMuMQAACRwAABQAAICTO+wjao2aiAQBMC4yMy4xAAAdHAAAEgAAgMHlkagTF0f3BAEwLjIzLjEAAC8cAAAUAACAyPaAH3ykVZMEATAuMjMuMQAAQxwAABMAAIAIET4ruAGUzAQBMC4yMy4xAABWHAAAEgAAgDZMzLahkrR6BAEwLjIzLjEAAPQRAAAKAACAya8+umRUPCACAV4wLjYuMwAAySMAAAsAAICPRV5V16nxjwIBXjkuMi4xAAB3cwAAAAAAAAcESX24jjzLAgFeOC4xNy4wAEcSAAAMAACA+Q0itRVAoPACAU4kAAAQAACATJcAAAAAAABMlwAAAAAAAAo8c3JjLmluc3RhbGwuc2VtdmVyLkV4dGVybmFsU3RyaW5nPiAxNiBzaXplb2YsIDggYWxpZ25vZgp4lwAAAAAAANa7AAAAAAAACjx1OD4gMSBzaXplb2YsIDEgYWxpZ25vZgoAAHdpbmRtaWxsLWNsaWVzbS9tYWluLmpzaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvd2luZG1pbGwtY2xpLy0vd2luZG1pbGwtY2xpLTEuMzkzLjIudGd6QGF5b25saS9qc2V4dGdpdGlnbm9yZS1wYXJzZXJtaW5pbWF0Y2h3aW5kbWlsbC1jbGllbnRAZGVuby9zaGltLWRlbm9odHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AZGVuby9zaGltLWRlbm8vLS9zaGltLWRlbm8tMC4xOC4yLnRnekBkZW5vL3NoaW0tZGVuby10ZXN0aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGRlbm8vc2hpbS1kZW5vLXRlc3QvLS9zaGltLWRlbm8tdGVzdC0wLjUuMC50Z3pub2RlLXdoaWNoYmluL3doaWNoLmpzaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvd2hpY2gvLS93aGljaC00LjAuMC50Z3podHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pc2V4ZS8tL2lzZXhlLTMuMS4xLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3dzLy0vd3MtOC4xOC4wLnRnemJ1ZmZlcnV0aWx1dGYtOC12YWxpZGF0ZWh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3dpbmRtaWxsLWNsaWVudC8tL3dpbmRtaWxsLWNsaWVudC0xLjM2NC4wLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL29wZW4vLS9vcGVuLTEwLjEuMC50Z3pkZWZhdWx0LWJyb3dzZXJkZWZpbmUtbGF6eS1wcm9waXMtaW5zaWRlLWNvbnRhaW5lcmh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzLXdzbC8tL2lzLXdzbC0zLjEuMC50Z3podHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pcy1pbnNpZGUtY29udGFpbmVyLy0vaXMtaW5zaWRlLWNvbnRhaW5lci0xLjAuMC50Z3ppcy1kb2NrZXJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pcy1kb2NrZXIvLS9pcy1kb2NrZXItMy4wLjAudGd6aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZGVmaW5lLWxhenktcHJvcC8tL2RlZmluZS1sYXp5LXByb3AtMy4wLjAudGd6aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZGVmYXVsdC1icm93c2VyLy0vZGVmYXVsdC1icm93c2VyLTUuMi4xLnRnemJ1bmRsZS1uYW1lZGVmYXVsdC1icm93c2VyLWlkaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZGVmYXVsdC1icm93c2VyLWlkLy0vZGVmYXVsdC1icm93c2VyLWlkLTUuMC4wLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2J1bmRsZS1uYW1lLy0vYnVuZGxlLW5hbWUtNC4xLjAudGd6cnVuLWFwcGxlc2NyaXB0aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcnVuLWFwcGxlc2NyaXB0Ly0vcnVuLWFwcGxlc2NyaXB0LTcuMC4wLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL21pbmltYXRjaC8tL21pbmltYXRjaC0xMC4wLjEudGd6YnJhY2UtZXhwYW5zaW9uaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYnJhY2UtZXhwYW5zaW9uLy0vYnJhY2UtZXhwYW5zaW9uLTIuMC4xLnRnemJhbGFuY2VkLW1hdGNoaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYmFsYW5jZWQtbWF0Y2gvLS9iYWxhbmNlZC1tYXRjaC0xLjAuMi50Z3podHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qc3ppcC8tL2pzemlwLTMuNy4xLnRnenJlYWRhYmxlLXN0cmVhbXNldC1pbW1lZGlhdGUtc2hpbWh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NldC1pbW1lZGlhdGUtc2hpbS8tL3NldC1pbW1lZGlhdGUtc2hpbS0xLjAuMS50Z3podHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yZWFkYWJsZS1zdHJlYW0vLS9yZWFkYWJsZS1zdHJlYW0tMi4zLjgudGd6Y29yZS11dGlsLWlzcHJvY2Vzcy1uZXh0aWNrLWFyZ3NzYWZlLWJ1ZmZlcnN0cmluZ19kZWNvZGVydXRpbC1kZXByZWNhdGVodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy91dGlsLWRlcHJlY2F0ZS8tL3V0aWwtZGVwcmVjYXRlLTEuMC4yLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3N0cmluZ19kZWNvZGVyLy0vc3RyaW5nX2RlY29kZXItMS4xLjEudGd6aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2FmZS1idWZmZXIvLS9zYWZlLWJ1ZmZlci01LjEuMi50Z3podHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wcm9jZXNzLW5leHRpY2stYXJncy8tL3Byb2Nlc3MtbmV4dGljay1hcmdzLTIuMC4xLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzYXJyYXkvLS9pc2FycmF5LTEuMC4wLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2luaGVyaXRzLy0vaW5oZXJpdHMtMi4wLjQudGd6aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY29yZS11dGlsLWlzLy0vY29yZS11dGlsLWlzLTEuMC4zLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Bha28vLS9wYWtvLTEuMC4xMS50Z3podHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9saWUvLS9saWUtMy4zLjAudGd6aW1tZWRpYXRlaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaW1tZWRpYXRlLy0vaW1tZWRpYXRlLTMuMC42LnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2dpdGlnbm9yZS1wYXJzZXIvLS9naXRpZ25vcmUtcGFyc2VyLTAuMC4yLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2V4cHJlc3MvLS9leHByZXNzLTQuMTkuMi50Z3plbmNvZGV1cmxwcm94eS1hZGRyYm9keS1wYXJzZXJlc2NhcGUtaHRtbGh0dHAtZXJyb3Jzb24tZmluaXNoZWR1dGlscy1tZXJnZWNvbnRlbnQtdHlwZWZpbmFsaGFuZGxlcnJhbmdlLXBhcnNlcnNlcnZlLXN0YXRpY2FycmF5LWZsYXR0ZW5wYXRoLXRvLXJlZ2V4cHNldHByb3RvdHlwZW9mY29va2llLXNpZ25hdHVyZW1lcmdlLWRlc2NyaXB0b3JzY29udGVudC1kaXNwb3NpdGlvbmh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NvbnRlbnQtZGlzcG9zaXRpb24vLS9jb250ZW50LWRpc3Bvc2l0aW9uLTAuNS40LnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NhZmUtYnVmZmVyLy0vc2FmZS1idWZmZXItNS4yLjEudGd6aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbWVyZ2UtZGVzY3JpcHRvcnMvLS9tZXJnZS1kZXNjcmlwdG9ycy0xLjAuMS50Z3podHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jb29raWUtc2lnbmF0dXJlLy0vY29va2llLXNpZ25hdHVyZS0xLjAuNi50Z3podHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zZXRwcm90b3R5cGVvZi8tL3NldHByb3RvdHlwZW9mLTEuMi4wLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3BhdGgtdG8tcmVnZXhwLy0vcGF0aC10by1yZWdleHAtMC4xLjcudGd6aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYXJyYXktZmxhdHRlbi8tL2FycmF5LWZsYXR0ZW4tMS4xLjEudGd6aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2VydmUtc3RhdGljLy0vc2VydmUtc3RhdGljLTEuMTUuMC50Z3podHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lc2NhcGUtaHRtbC8tL2VzY2FwZS1odG1sLTEuMC4zLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VuY29kZXVybC8tL2VuY29kZXVybC0xLjAuMi50Z3podHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wYXJzZXVybC8tL3BhcnNldXJsLTEuMy4zLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NlbmQvLS9zZW5kLTAuMTguMC50Z3podHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yYW5nZS1wYXJzZXIvLS9yYW5nZS1wYXJzZXItMS4yLjEudGd6aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvb24tZmluaXNoZWQvLS9vbi1maW5pc2hlZC0yLjQuMS50Z3podHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lZS1maXJzdC8tL2VlLWZpcnN0LTEuMS4xLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2h0dHAtZXJyb3JzLy0vaHR0cC1lcnJvcnMtMi4wLjAudGd6dG9pZGVudGlmaWVyaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdG9pZGVudGlmaWVyLy0vdG9pZGVudGlmaWVyLTEuMC4xLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3N0YXR1c2VzLy0vc3RhdHVzZXMtMi4wLjEudGd6aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZGVwZC8tL2RlcGQtMi4wLjAudGd6aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZGVzdHJveS8tL2Rlc3Ryb3ktMS4yLjAudGd6aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZnJlc2gvLS9mcmVzaC0wLjUuMi50Z3podHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9kZWJ1Zy8tL2RlYnVnLTIuNi45LnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL21zLy0vbXMtMi4wLjAudGd6aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbWltZS8tL21pbWUtMS42LjAudGd6aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXRhZy8tL2V0YWctMS44LjEudGd6aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbXMvLS9tcy0yLjEuMy50Z3podHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9maW5hbGhhbmRsZXIvLS9maW5hbGhhbmRsZXItMS4yLjAudGd6aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdW5waXBlLy0vdW5waXBlLTEuMC4wLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NvbnRlbnQtdHlwZS8tL2NvbnRlbnQtdHlwZS0xLjAuNS50Z3podHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy91dGlscy1tZXJnZS8tL3V0aWxzLW1lcmdlLTEuMC4xLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2JvZHktcGFyc2VyLy0vYm9keS1wYXJzZXItMS4yMC4yLnRnemljb252LWxpdGVodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pY29udi1saXRlLy0vaWNvbnYtbGl0ZS0wLjQuMjQudGd6Pj0gMi4xLjIgPCAzc2FmZXItYnVmZmVyaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2FmZXItYnVmZmVyLy0vc2FmZXItYnVmZmVyLTIuMS4yLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Jhdy1ib2R5Ly0vcmF3LWJvZHktMi41LjIudGd6aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYnl0ZXMvLS9ieXRlcy0zLjEuMi50Z3podHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy90eXBlLWlzLy0vdHlwZS1pcy0xLjYuMTgudGd6bWltZS10eXBlc21lZGlhLXR5cGVyaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbWVkaWEtdHlwZXIvLS9tZWRpYS10eXBlci0wLjMuMC50Z3podHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9taW1lLXR5cGVzLy0vbWltZS10eXBlcy0yLjEuMzUudGd6aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbWltZS1kYi8tL21pbWUtZGItMS41Mi4wLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3FzLy0vcXMtNi4xMS4wLnRnenNpZGUtY2hhbm5lbGh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NpZGUtY2hhbm5lbC8tL3NpZGUtY2hhbm5lbC0xLjAuNi50Z3pjYWxsLWJpbmRlcy1lcnJvcnNnZXQtaW50cmluc2ljb2JqZWN0LWluc3BlY3RodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9vYmplY3QtaW5zcGVjdC8tL29iamVjdC1pbnNwZWN0LTEuMTMuMi50Z3podHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9nZXQtaW50cmluc2ljLy0vZ2V0LWludHJpbnNpYy0xLjIuNC50Z3pmdW5jdGlvbi1iaW5kaGFzLXByb3RvaGFzLXN5bWJvbHNodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9oYXNvd24vLS9oYXNvd24tMi4wLjIudGd6aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZnVuY3Rpb24tYmluZC8tL2Z1bmN0aW9uLWJpbmQtMS4xLjIudGd6aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaGFzLXN5bWJvbHMvLS9oYXMtc3ltYm9scy0xLjAuMy50Z3podHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9oYXMtcHJvdG8vLS9oYXMtcHJvdG8tMS4wLjMudGd6aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXMtZXJyb3JzLy0vZXMtZXJyb3JzLTEuMy4wLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NhbGwtYmluZC8tL2NhbGwtYmluZC0xLjAuNy50Z3plcy1kZWZpbmUtcHJvcGVydHlzZXQtZnVuY3Rpb24tbGVuZ3RoaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2V0LWZ1bmN0aW9uLWxlbmd0aC8tL3NldC1mdW5jdGlvbi1sZW5ndGgtMS4yLjIudGd6ZGVmaW5lLWRhdGEtcHJvcGVydHloYXMtcHJvcGVydHktZGVzY3JpcHRvcnNodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9oYXMtcHJvcGVydHktZGVzY3JpcHRvcnMvLS9oYXMtcHJvcGVydHktZGVzY3JpcHRvcnMtMS4wLjIudGd6aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXMtZGVmaW5lLXByb3BlcnR5Ly0vZXMtZGVmaW5lLXByb3BlcnR5LTEuMC4wLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2dvcGQvLS9nb3BkLTEuMC4xLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2RlZmluZS1kYXRhLXByb3BlcnR5Ly0vZGVmaW5lLWRhdGEtcHJvcGVydHktMS4xLjQudGd6aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcHJveHktYWRkci8tL3Byb3h5LWFkZHItMi4wLjcudGd6Zm9yd2FyZGVkaXBhZGRyLmpzaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXBhZGRyLmpzLy0vaXBhZGRyLmpzLTEuOS4xLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2ZvcndhcmRlZC8tL2ZvcndhcmRlZC0wLjIuMC50Z3podHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9tZXRob2RzLy0vbWV0aG9kcy0xLjEuMi50Z3podHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hY2NlcHRzLy0vYWNjZXB0cy0xLjMuOC50Z3puZWdvdGlhdG9yaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbmVnb3RpYXRvci8tL25lZ290aWF0b3ItMC42LjMudGd6aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY29va2llLy0vY29va2llLTAuNi4wLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3ZhcnkvLS92YXJ5LTEuMS4yLnRnemJpbi9lc2J1aWxkaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXNidWlsZC8tL2VzYnVpbGQtMC4yMy4xLnRnekBlc2J1aWxkL2FpeC1wcGM2NEBlc2J1aWxkL2FuZHJvaWQtYXJtQGVzYnVpbGQvYW5kcm9pZC1hcm02NEBlc2J1aWxkL2FuZHJvaWQteDY0QGVzYnVpbGQvZGFyd2luLWFybTY0QGVzYnVpbGQvZGFyd2luLXg2NEBlc2J1aWxkL2ZyZWVic2QtYXJtNjRAZXNidWlsZC9mcmVlYnNkLXg2NEBlc2J1aWxkL2xpbnV4LWFybUBlc2J1aWxkL2xpbnV4LWFybTY0QGVzYnVpbGQvbGludXgtaWEzMkBlc2J1aWxkL2xpbnV4LWxvb25nNjRAZXNidWlsZC9saW51eC1taXBzNjRlbEBlc2J1aWxkL2xpbnV4LXBwYzY0QGVzYnVpbGQvbGludXgtcmlzY3Y2NEBlc2J1aWxkL2xpbnV4LXMzOTB4QGVzYnVpbGQvbGludXgteDY0QGVzYnVpbGQvbmV0YnNkLXg2NEBlc2J1aWxkL29wZW5ic2QtYXJtNjRAZXNidWlsZC9vcGVuYnNkLXg2NEBlc2J1aWxkL3N1bm9zLXg2NEBlc2J1aWxkL3dpbjMyLWFybTY0QGVzYnVpbGQvd2luMzItaWEzMkBlc2J1aWxkL3dpbjMyLXg2NGh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Blc2J1aWxkL3dpbjMyLXg2NC8tL3dpbjMyLXg2NC0wLjIzLjEudGd6aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGVzYnVpbGQvd2luMzItaWEzMi8tL3dpbjMyLWlhMzItMC4yMy4xLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Blc2J1aWxkL3dpbjMyLWFybTY0Ly0vd2luMzItYXJtNjQtMC4yMy4xLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Blc2J1aWxkL3N1bm9zLXg2NC8tL3N1bm9zLXg2NC0wLjIzLjEudGd6aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGVzYnVpbGQvb3BlbmJzZC14NjQvLS9vcGVuYnNkLXg2NC0wLjIzLjEudGd6aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGVzYnVpbGQvb3BlbmJzZC1hcm02NC8tL29wZW5ic2QtYXJtNjQtMC4yMy4xLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Blc2J1aWxkL25ldGJzZC14NjQvLS9uZXRic2QteDY0LTAuMjMuMS50Z3podHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AZXNidWlsZC9saW51eC14NjQvLS9saW51eC14NjQtMC4yMy4xLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Blc2J1aWxkL2xpbnV4LXMzOTB4Ly0vbGludXgtczM5MHgtMC4yMy4xLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Blc2J1aWxkL2xpbnV4LXJpc2N2NjQvLS9saW51eC1yaXNjdjY0LTAuMjMuMS50Z3podHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AZXNidWlsZC9saW51eC1wcGM2NC8tL2xpbnV4LXBwYzY0LTAuMjMuMS50Z3podHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AZXNidWlsZC9saW51eC1taXBzNjRlbC8tL2xpbnV4LW1pcHM2NGVsLTAuMjMuMS50Z3podHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AZXNidWlsZC9saW51eC1sb29uZzY0Ly0vbGludXgtbG9vbmc2NC0wLjIzLjEudGd6aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGVzYnVpbGQvbGludXgtaWEzMi8tL2xpbnV4LWlhMzItMC4yMy4xLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Blc2J1aWxkL2xpbnV4LWFybTY0Ly0vbGludXgtYXJtNjQtMC4yMy4xLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Blc2J1aWxkL2xpbnV4LWFybS8tL2xpbnV4LWFybS0wLjIzLjEudGd6aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGVzYnVpbGQvZnJlZWJzZC14NjQvLS9mcmVlYnNkLXg2NC0wLjIzLjEudGd6aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGVzYnVpbGQvZnJlZWJzZC1hcm02NC8tL2ZyZWVic2QtYXJtNjQtMC4yMy4xLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Blc2J1aWxkL2Rhcndpbi14NjQvLS9kYXJ3aW4teDY0LTAuMjMuMS50Z3podHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AZXNidWlsZC9kYXJ3aW4tYXJtNjQvLS9kYXJ3aW4tYXJtNjQtMC4yMy4xLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Blc2J1aWxkL2FuZHJvaWQteDY0Ly0vYW5kcm9pZC14NjQtMC4yMy4xLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Blc2J1aWxkL2FuZHJvaWQtYXJtNjQvLS9hbmRyb2lkLWFybTY0LTAuMjMuMS50Z3podHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AZXNidWlsZC9hbmRyb2lkLWFybS8tL2FuZHJvaWQtYXJtLTAuMjMuMS50Z3podHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AZXNidWlsZC9haXgtcHBjNjQvLS9haXgtcHBjNjQtMC4yMy4xLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VzLW1haW4vLS9lcy1tYWluLTEuMy4wLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2RpZmYvLS9kaWZmLTcuMC4wLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BheW9ubGkvanNleHQvLS9qc2V4dC0wLjkuNjMudGd6c3Vkby1wcm9tcHRodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zdWRvLXByb21wdC8tL3N1ZG8tcHJvbXB0LTkuMi4xLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2ljb252LWxpdGUvLS9pY29udi1saXRlLTAuNi4zLnRnej49IDIuMS4yIDwgMy4wLjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==' +WHERE hash = -28028598712388162 AND workspace_id = 'admins'; \ No newline at end of file diff --git a/backend/migrations/20240908214334_migrate_to_new_cli_2.down.sql b/backend/migrations/20240908214334_migrate_to_new_cli_2.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20240908214334_migrate_to_new_cli_2.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20240908214334_migrate_to_new_cli_2.up.sql b/backend/migrations/20240908214334_migrate_to_new_cli_2.up.sql new file mode 100644 index 0000000000000..445ecee8f538d --- /dev/null +++ b/backend/migrations/20240908214334_migrate_to_new_cli_2.up.sql @@ -0,0 +1,17 @@ +-- Add up migration script here + +-- Add up migration script here +UPDATE script SET content = 'import * as wmill from "windmill-cli@1.393.2" + +export async function main() { + await wmill.hubPull({ workspace: "admins", token: process.env["WM_TOKEN"], baseUrl: process.env["BASE_URL"] }); +} +', language = 'bun', +lock = '{ + "dependencies": { + "windmill-cli": "latest" + } +} +//bun.lockb +IyEvdXNyL2Jpbi9lbnYgYnVuCmJ1bi1sb2NrZmlsZS1mb3JtYXQtdjAKAgAAADZs4+6pAntv6Gcmv9boDBPUxzf1WFcr6QlPZXdejHxj3rsAAAAAAAB/AAAAAAAAAAgAAAAAAAAACAAAAAAAAACAAAAAAAAAAAN+AAAAAAAAAAAAAAAAAAAAAAAAAAAMAACAjgAAAA8AAIDeAAAAFAAAgHdoaWNoAAAAaXNleGUAAAB3cwAAAAAAAH8AAAAPAACAb3BlbgAAAABpcy13c2wAAJMCAAATAACAKAMAAAkAAICDAgAAEAAAgHQCAAAPAACABAQAABIAAID5AwAACwAAgKAEAAAPAACAdgAAAAkAAIAwBQAADwAAgIUFAAAOAACAanN6aXAAAAAYBgAAEgAAgAkGAAAPAACA9QYAAA4AAIDnBgAADgAAgNwGAAALAACAyAYAABQAAIBpc2FycmF5AGluaGVyaXRzvAYAAAwAAIBwYWtvAAAAAGxpZQAAAAAAJgkAAAkAAIBmAAAAEAAAgGV4cHJlc3MArAoAABMAAIDcBgAACwAAgJsKAAARAACAiwoAABAAAIB9CgAADgAAgG8KAAAOAACAYgoAAA0AAIBWCgAADAAAgAYKAAALAACA6AkAAAkAAIBwYXJzZXVybHNlbmQAAAAASgoAAAwAAIAcCgAACwAAgGVlLWZpcnN0EQoAAAsAAIC9DgAADAAAgHN0YXR1c2VzZGVwZAAAAABkZXN0cm95AGZyZXNoAAAAZGVidWcAAABtcwAAAAAAAG1pbWUAAAAAZXRhZwAAAABtcwAAAAAAAD4KAAAMAACAdW5waXBlAAAyCgAADAAAgCcKAAALAACA+wkAAAsAAID0EQAACgAAgEcSAAAMAACAcmF3LWJvZHlieXRlcwAAAHR5cGUtaXMAPhMAAAsAAIA0EwAACgAAgG1pbWUtZGIAcXMAAAAAAAAoFAAADAAAgJMUAAAOAACAhhQAAA0AAIBoYXNvd24AACgVAAANAACAPhUAAAsAAIA1FQAACQAAgH0UAAAJAACAdBQAAAkAAIC9FgAAEwAAgDIXAAAYAACAqxYAABIAAIBnb3BkAAAAAB4XAAAUAACA8QkAAAoAAICzGAAACQAAgKoYAAAJAACAbWV0aG9kcwBhY2NlcHRzAJwZAAAKAACAY29va2llAAB2YXJ5AAAAAGVzYnVpbGQAVhwAABIAAIBDHAAAEwAAgC8cAAAUAACAHRwAABIAAIAJHAAAFAAAgPMbAAAWAACA4BsAABMAAIDOGwAAEgAAgLobAAAUAACApBsAABYAAICQGwAAFAAAgHkbAAAXAACAYxsAABYAAIBQGwAAEwAAgDwbAAAUAACAKhsAABIAAIAWGwAAFAAAgAAbAAAWAACA7RoAABMAAIDYGgAAFQAAgMQaAAAUAACArhoAABYAAICaGgAAFAAAgIgaAAASAACAZXMtbWFpbgBkaWZmAAAAAFkAAAANAACAySMAAAsAAID0EQAACgAAgAAAAAAAAAAAjXMqtgf1QSfVqtrJiGJRfQkrLIxflZh6zG2O96NP8kaoLFfaUxLq1wcESX24jjzLmQ1nY/ePqP86/4YWqwXdAiLwpdtElNniRZFku3lzNwR46KOUH/7zM3q/FOAUERX5jwge6KFzpdc5tTtdIg2K5DCQVnHT53CASLo1WxSMLiMfAuJeUe7ucFm/7gWc3u0oV1HUTV3yyeGhAGTHGI/oi3ivxiIcTZjCy+0FWEEmvzaiM9ZOn6X5N7vS5mKoc7SHIdsvXideIefLO0Y7l3ulTxPefb/TYzkSEZrqFxjf1Ge2h6G4RW+Ips8pG9voSJrm03RIAmd848v0i2YEy18wuWI1+rrrUq2yLUrGRXEubx7dQ0Hc3VH6qSHbL14nXiHnTtp2+m5wviqbvCu3PnmxOnc+72XAbJAuC3Znf9Xf/iuETwhuPIOZWpt8LAXlw/fhyT/azL6Im7S0qOJ6Dzeu9HIQv7fy+VyQNs3oOqeu6P0G6CHMTQoMsThFZaJiAxdbEI95h4xd7WhNmb434wqMrt2MxpELDAct4RvC9IRrAfE0jrBCvDhscI5ukc7EeeM1+8ASh8Vgb52OgwA04RrKxqS0xNW1149IZiOG1+0PgQK7ZxljywG5KqS0xNW1149IalsvWr3TBCSOWeuZeCgtmxtg85GEWxZQVuHuNK1GLpUsytXsrdATRcmvPrpkVDwg+Q0itRVAoPB4NFx+gLclgqjINcRNuuZtc1/8HZD4iEFiWaeBsOaPOC8Bk5dey2H0w8Wk8f3GpW4XeINmbZ3zzQ0W+FrwjOB9RXlCmrvBRQ3srz2hFLVVKEg/iwmJSuDQm5nKGnFtuAsHnJHMI4Pmoh0c/X+RqufJJU0hoMQ/3BM/XvJ2+kOfrPC3iJCZCOU4og6YuXWNu0AYn3uZjahUMv0/Ucm4aJeZ1RzA3FO0xKRtxKN+P97YUeer5VNuspkUe/TWOX+rcFjk0RGQrjZf7dTAB0Tn+biUcgVr5uhAkPiT06TkMVPtBRDg22TUyYyIECM9Q3cH87c2TMy2oZK0eggRPiu4AZTMyPaAH3ykVZPB5ZGoExdH95M77CNqjZqIMhF9VuG6UmKIBKxoXxE6eOeWdPKhP/a7Yhb8CQ8fFPZsYKL/1pG5QSoSKDMBi+Oh0aEQHcQo6U+rRmldcj8nnKKpfmruCCXS24NmRjGW2sFpuTyoNAZt5sIA7kcm6QJADRdE6Z6udscwQppftwYPAp4bMLrT6WNaGPr6MVLKNmVSPtArHB0Rp8gHUJdG6G3C3t6/nasyvTmXXSZYY/glCeh4dtSNTIka5NOL1K5eN/SPRV5V16nxj8mvPrpkVDwgAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAFwAAAEIAAIABAAAAiQEAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAJ0AAABBAACAAAAAABIAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAADyAAAASgAAgAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAUgEAADIAAIAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAIQBAAAyAACAAwAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAC2AQAALQAAgAgAAAASAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAA+wEAAEgAAIABAAAAbAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAEMCAAAxAACACgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAACmAgAANAAAgAMAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAA2gIAAE4AAIABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAADEDAAA6AACAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAABrAwAASAAAgAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAswMAAEYAAIAFAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAABYEAABMAACABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAABiBAAAPgAAgAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAArwQAAEYAAIAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAPUEAAA7AACACgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAA/BQAARgAAgAIAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAkwUAAEQAAIABAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAANcFAAAyAACAAwAAAAcAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAqBgAATAAAgAEAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAdgYAAEYAAIACAAAAAwAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAMHAABEAACAAQAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAABHBwAARAAAgAEAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAiwcAAD4AAIAFAAAAAQAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAMkHAABQAACAAgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAZCAAANgAAgAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAATwgAADgAAIACAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAIcIAABAAACAAQAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAADHCAAAMQAAgAEAAAAAAAAACwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAA+AgAAC4AAIADAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAC8JAAA6AACAAwAAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAABpCQAASAAAgAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAsQkAADcAAIAEAAAAEwAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAL8KAABOAACAAAAAAAUAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAANCwAAPgAAgAUAAAACAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAASwsAAEoAAIABAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAJULAABIAACAAQAAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAADdCwAARAAAgAEAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAIQwAAEQAAIAAAAAAAQAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAGUMAABCAACAAQAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAACnDAAAQQAAgAEAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAA6AwAAD4AAIABAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAACYNAAA6AACAAQAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAABgDQAAOAAAgAEAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAmA0AADEAAIAAAAAAEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAMkNAABAAACAAQAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAJDgAAPgAAgAIAAAAEAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAARw4AADgAAIABAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAH8OAAA+AACAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAADJDgAAQAAAgAEAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAACQ8AADgAAIACAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAEEPAAAwAACAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAABxDwAANgAAgAEAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAApw8AADIAAIAAAAAABQAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAANkPAAAyAACAAgAAAAYAAAAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAALEAAALAAAgAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAANxAAADAAAIABAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAGcQAAAwAACAAQAAAAgAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAACXEAAALAAAgAIAAAABAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAwxAAAEAAAIABAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAMRAAA0AACAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAA3EQAAQAAAgAEAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAdxEAAD4AAIABAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAALURAAA/AACAAQAAABQAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAD+EQAAPQAAgAAAAAAEAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAUxIAAEAAAIACAAAAAQAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAJMSAAA4AACAAgAAAAUAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAADLEgAAMgAAgAMAAAABAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAA/RIAADcAAIABAAAABgAAABIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAEkTAAA+AACAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAACHEwAAPQAAgAIAAAABAAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAxBMAADcAAIABAAAANAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAPsTAAAtAACABgAAAAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAA0FAAAQAAAgAEAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAoRQAAEUAAIABAAAADQAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAOYUAABCAACAAQAAAAIAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAABJFQAANAAAgAIAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAfRUAAEIAAIABAAAAAQAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAL8VAAA+AACAAQAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAD9FQAAOgAAgAEAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAANxYAADoAAIABAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAHEWAAA6AACAAQAAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAADQFgAATgAAgAEAAAACAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAShcAAFgAAIABAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAKIXAABMAACAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAADuFwAAMAAAgAEAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAHhgAAFAAAIABAAAAAQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAG4YAAA8AACAAgAAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAC8GAAAOgAAgAEAAAAJAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAA9hgAADoAAIAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAADAZAAA2AACAAQAAAAEAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAABmGQAANgAAgAEAAAADAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAphkAADwAAIAAAAAABgAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAOIZAAA0AACAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAWGgAAMAAAgAEAAAABAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAURoAADcAAIAAAAAAFwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAGgcAABEAACAAAAAABcAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAACsHAAARgAAgAAAAAAXAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAA8hwAAEgAAIAAAAAAFwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAADodAABEAACAAAAAABcAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAB+HQAASAAAgAAAAAAXAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAxh0AAEwAAIAAAAAAFwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAABIeAABGAACAAAAAABcAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAABYHgAARAAAgAAAAAAXAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAnB4AAEgAAIAAAAAAFwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAOQeAABMAACAAAAAABcAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAwHwAASAAAgAAAAAAXAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAeB8AAE4AAIAAAAAAFwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAMYfAABMAACAAAAAABcAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAASIAAARgAAgAAAAAAXAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAWCAAAEgAAIAAAAAAFwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAKAgAABEAACAAAAAABcAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAADkIAAASAAAgAAAAAAXAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAALCEAAEwAAIAAAAAAFwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAHghAABGAACAAAAAABcAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAC+IQAASgAAgAAAAAAXAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAACCIAAEgAAIAAAAAAFwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAFAiAABMAACAAAAAABcAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAACcIgAASAAAgAAAAAAXAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAA5CIAAEQAAIAAAAAAFwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAACgjAAA2AACAAQAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAABeIwAAMAAAgAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAjiMAADsAAIAAAAAACQAAAD8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAANQjAAA+AACACQAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAASJAAAPAAAgAAAAAAGAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAwAAAANAAAAAgAAAA8AAAAAAAAADwAAAAEAAAAQAAAAAAAAABAAAAACAAAAEgAAAAAAAAASAAAABAAAABYAAAABAAAAFwAAAAEAAAAYAAAAAAAAABgAAAAAAAAAGAAAAAIAAAAaAAAAAAAAABoAAAABAAAAGwAAAAAAAAAbAAAAAQAAABwAAAABAAAAHQAAAAAAAAAdAAAABAAAACEAAAAAAAAAIQAAAAcAAAAoAAAAAAAAACgAAAABAAAAKQAAAAAAAAApAAAAAAAAACkAAAAAAAAAKQAAAAAAAAApAAAAAAAAACkAAAAAAAAAKQAAAAEAAAAqAAAAAAAAACoAAAAAAAAAKgAAAB8AAABJAAAAAQAAAEoAAAAAAAAASgAAAAAAAABKAAAAAAAAAEoAAAAAAAAASgAAAAAAAABKAAAAAAAAAEoAAAAEAAAATgAAAAAAAABOAAAAAAAAAE4AAAAAAAAATgAAAA0AAABbAAAAAAAAAFsAAAABAAAAXAAAAAAAAABcAAAABQAAAGEAAAAAAAAAYQAAAAAAAABhAAAAAAAAAGEAAAAAAAAAYQAAAAAAAABhAAAAAQAAAGIAAAAAAAAAYgAAAAAAAABiAAAAAAAAAGIAAAAAAAAAYgAAAAcAAABpAAAAAAAAAGkAAAAAAAAAaQAAAAAAAABpAAAADAAAAHUAAAABAAAAdgAAAAAAAAB2AAAABAAAAHoAAAAAAAAAegAAAAIAAAB8AAAAAAAAAHwAAAABAAAAfQAAAAAAAAB9AAAAAQAAAH4AAAAEAAAAggAAAAAAAACCAAAABQAAAIcAAAABAAAAiAAAAAAAAACIAAAAAAAAAIgAAAAAAAAAiAAAAAAAAACIAAAABQAAAI0AAAAGAAAAkwAAAAEAAACUAAAAAQAAAJUAAAABAAAAlgAAAAMAAACZAAAAAgAAAJsAAAAAAAAAmwAAAAAAAACbAAAAAAAAAJsAAAACAAAAnQAAAAAAAACdAAAAAAAAAJ0AAAAAAAAAnQAAABgAAAC1AAAAAAAAALUAAAAAAAAAtQAAAAAAAAC1AAAAAAAAALUAAAAAAAAAtQAAAAAAAAC1AAAAAAAAALUAAAAAAAAAtQAAAAAAAAC1AAAAAAAAALUAAAAAAAAAtQAAAAAAAAC1AAAAAAAAALUAAAAAAAAAtQAAAAAAAAC1AAAAAAAAALUAAAAAAAAAtQAAAAAAAAC1AAAAAAAAALUAAAAAAAAAtQAAAAAAAAC1AAAAAAAAALUAAAAAAAAAtQAAAAAAAAC1AAAAAAAAALUAAAAAAAAAtQAAAAMAAAC4AAAAAAAAALgAAAABAAAAAAAAAAEAAAABAAAADAAAAA0AAAACAAAADwAAAAAAAAAPAAAAAQAAABAAAAAAAAAAEAAAAAIAAAASAAAAAAAAABIAAAAEAAAAFgAAAAEAAAAXAAAAAQAAABgAAAAAAAAAGAAAAAAAAAAYAAAAAgAAABoAAAAAAAAAGgAAAAEAAAAbAAAAAAAAABsAAAABAAAAHAAAAAEAAAAdAAAAAAAAAB0AAAAEAAAAIQAAAAAAAAAhAAAABwAAACgAAAAAAAAAKAAAAAEAAAApAAAAAAAAACkAAAAAAAAAKQAAAAAAAAApAAAAAAAAACkAAAAAAAAAKQAAAAAAAAApAAAAAQAAACoAAAAAAAAAKgAAAAAAAAAqAAAAHwAAAEkAAAABAAAASgAAAAAAAABKAAAAAAAAAEoAAAAAAAAASgAAAAAAAABKAAAAAAAAAEoAAAAAAAAASgAAAAQAAABOAAAAAAAAAE4AAAAAAAAATgAAAAAAAABOAAAADQAAAFsAAAAAAAAAWwAAAAEAAABcAAAAAAAAAFwAAAAFAAAAYQAAAAAAAABhAAAAAAAAAGEAAAAAAAAAYQAAAAAAAABhAAAAAAAAAGEAAAABAAAAYgAAAAAAAABiAAAAAAAAAGIAAAAAAAAAYgAAAAAAAABiAAAABwAAAGkAAAAAAAAAaQAAAAAAAABpAAAAAAAAAGkAAAAMAAAAdQAAAAEAAAB2AAAAAAAAAHYAAAAEAAAAegAAAAAAAAB6AAAAAgAAAHwAAAAAAAAAfAAAAAEAAAB9AAAAAAAAAH0AAAABAAAAfgAAAAQAAACCAAAAAAAAAIIAAAAFAAAAhwAAAAEAAACIAAAAAAAAAIgAAAAAAAAAiAAAAAAAAACIAAAAAAAAAIgAAAAFAAAAjQAAAAYAAACTAAAAAQAAAJQAAAABAAAAlQAAAAEAAACWAAAAAwAAAJkAAAACAAAAmwAAAAAAAACbAAAAAAAAAJsAAAAAAAAAmwAAAAIAAACdAAAAAAAAAJ0AAAAAAAAAnQAAAAAAAACdAAAAGAAAALUAAAAAAAAAtQAAAAAAAAC1AAAAAAAAALUAAAAAAAAAtQAAAAAAAAC1AAAAAAAAALUAAAAAAAAAtQAAAAAAAAC1AAAAAAAAALUAAAAAAAAAtQAAAAAAAAC1AAAAAAAAALUAAAAAAAAAtQAAAAAAAAC1AAAAAAAAALUAAAAAAAAAtQAAAAAAAAC1AAAAAAAAALUAAAAAAAAAtQAAAAAAAAC1AAAAAAAAALUAAAAAAAAAtQAAAAAAAAC1AAAAAAAAALUAAAAAAAAAtQAAAAAAAAC1AAAAAwAAALgAAAAAAAAAuAAAAAEAAAAAAP4P/gEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAQD+D/4BAAABAAAAAAAAAAAAAAAEnFcorsSkCz8vYXAoZrKLi9czdIvLIYptbISOLuy4R+UtJGOUkjeYcwquPiSjBCSKdzYL5hFPVeFeiuj7326sDgEAAAEA/g/+AQAAAgAAAAAAAAAAAAAABKENAlZjoqOt8JYcEBe+cwOIqKJT7zsAKCtMrs3EuWwwtSVLx98tRkvMT4fBDqXKA0EVOBUxvDkH8YaUfnOg68wBAAABAP4P/gEAAAMAAAAAAAAAAAAAAATicyF5ykaU+LRxLNPrsv5Ob4Y4mq+6TyCocHOKpxRA5que4hrHXP3r+AkcJIjPZnTOHETpHPBvchlc+0WHnWP7AQAAAQD+D/4BAAAEAAAAAAAAAAAAAAAEGlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscgEAAAEA/g/+AQAABQAAAAAAAAAAAAAABC6Qf+eAfv9ieYakO4pmR33VN9TpYEKse2YnFZZJvZM4Pf8PBiixHBXyZf7ewwhA7njsgQA+swgsEzuhc7NDaBEBAAABAP4P/gEAAAYAAAAAAAAAAAAAAATxVt9Z8cttvC7f43o4qw4ykF1PiRc8MMH1wmTZsnqaH25zF2Wc28fV76uhiQqY303HDbKPPtXN472g7PbMnTg/AQAAAQD+D/4BAAAHAAAAAAAAAAAAAAAEUjCbBB2IeyMVoDyO16boHEsTus2npVtXyER2pfP0zm7rmp6ko65HA3OXvMzhMVq3hW9RQ5esc3mrkTnb19PIawEAAAEA/g/+AQAACAAAAAAAAAAAAAAABJp5HkNaj+VHtsHfmor0w9zR3f5Wfei7tI4H9KcJLSz7cenE2Yh+7cnhkUR7NM19K262oVz515VJ23l8mgQbiGsBAAABAP4P/gEAAAkAAAAAAAAAAAAAAARRxV9V9orhJzibtfd1RKgeijNAYEQV4ML7NWjTq33zF7wLMdJlkF6Q1cf627Q1qUeiVwn9AAapLjod5/tBcEgzAQAAAQD+D/4BAAAKAAAAAAAAAAAAAAAEKIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRAEAAAEA/g/+AQAACwAAAAAAAAAAAAAABHpY3IBA5RJ7P+wFxaLAeSv9pwjOD+xUD5BnPw1i8ua5hRFr2Wshq4pNXff0CGOZyeH/WLFbwZAOpCaR5/ayEnUBAAABAP4P/gEAAAwAAAAAAAAAAAAAAAQ34x5diiqvek6CfzF/JE9EQ3uAdqQtiOGweFYZPd9YCIvgiQC3SIPDXhCKISbZsTfRzldfmrQW0ADcIrl/38FSAQAAAQD+D/4BAAANAAAAAAAAAAAAAAAEWY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8XgEAAAEA/g/+AQAADgAAAAAAAAAAAAAABAOqf6bv+n8gXANU0c/xqlmD1YqZa37XFtoGQvau/Z4DQigHkf194HBHV0B5eCjV1ft8ICCdQj5CUNyBzOpXLMgBAAABAP4P/gEAAA8AAAAAAAAAAAAAAAS2PAzl7EyDoEZEj6Q2ZOe02y91lLVfwEVhLq2cnaF0fSRXEzr95VnbHL4WpK1Ja9ia18UwMsjG6uisfAMp8PPlAQAAAQD+D/4BAAAQAAAAAAAAAAAAAAAE9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1AEAAAEA/g/+AQAAEQAAAAAAAAAAAAAABHrYV07d0hhkfveYLnZqidXjYUTu3hhBiIGAPb5z2rSuP3rc9jBFQ56ORjAom3TE7gTMhJcyJYMTJ2tyveFwyA0BAAABAP4P/gEAABIAAAAAAAAAAAAAAARecAi9Dx4z6QLppQvHrC5CLBWyfOyL13dbHNXcWlZMYDX0XrbWTB1uwBwUpeApQdlazL6ZjqIvWwdPFYQULK0MAQAAAQD+D/4BAAATAAAAAAAAAAAAAAAE3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5PwEAAAEA/g/+AQAAFAAAAAAAAAAAAAAABIIS9Lc9VxvWRJkTHBDdr7e8Wm6w3ahx3spIAEaZmdAYiHLVsTOO1bet2TtnZ6eEGLf8SVSy8uWb9Zf8UXYdm8oBAAABAP4P/gEAABUAAAAAAAAAAAAAAAQuLkA6qtlYJUDafmSvLMSapqLpspIi+nPmhQkc9WPr52xsPdfWLG2xjm0Sexo2kfekUAeYbx4gdSu0S2iGuD5RAQAAAQD+D/4BAAAWAAAAAAAAAAAAAAAE8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdAEAAAEA/g/+AQAAFwAAAAAAAAAAAAAABBDw+atbl8hcSaQqy5wnNZx56t4Dmug2QaHACIiNk2kggO1QidVCQzGoAsyJFzbFGHw9XWiv/y0xEPMYiG6x7XMBAAABAP4P/gEAABgAAAAAAAAAAAAAAASf9KGe8OLoUdttV++Kuj5aiOIXO/6zww8wcFzNV499SkMkvCgtPSG3WXhjAEJuLykkC94QR2eQfI/JM/+bNF/CAQAAAQD+D/4BAAAZAAAAAAAAAAAAAAAEGd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+gEAAAEA/g/+AQAAGgAAAAAAAAAAAAAABN6LlDqUIbYK2zmteye/rsTk6SE2Fmhj+/wIaEd/gPv9XvbJK83pRov3V8xGMr28bmxBelp9sqbHEyoiiRRZ9WoBAAABAP4P/gEAABsAAAAAAAAAAAAAAARUuCEhY0zoQtDOjvPCZyDQ2ZNXJYpiO8h4zzfKOnTBENOZSeszrvx9BtwoGjqfYIkQXSzOgb//K2D5MqVrz0AtAQAAAQD+D/4BAAAcAAAAAAAAAAAAAAAEk/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQEAAAEA/g/+AQAAHQAAAAAAAAAAAAAABGUAb4tQ3KSeBg6mp47nGdh498BDuaWQ0vPQVm5HK73cZLCaK8FAw2Wpl/ZXRZKfWsNpZgQy4JDmxAOA1jSfRWEBAAABAP4P/gEAAB4AAAAAAAAAAAAAAATiEsHw/LjNlx7mzjJ31fOimrBW//IY2FXUGXw1OYKrXvrcd4rb4TBVO/6V4Z4vXcOeHbB9uqjBU9cIg7TPi1pjAQAAAQD+D/4BAAAfAAAAAAAAAAAAAAAEUaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQEAAAEA/g/+AQAAIAAAAAAAAAAAAAAABF1zhbcqg4zQwEMVX2Mbhe4PSJfyG1pppUINjGCjh/BMSE9aoOsXOM8ktx2hBAE4LNW7X88ateXIlImO4I0l0RkBAAABAP4P/gEAACEAAAAAAAAAAAAAAARfqampS/n25YsYPifeFnwK7wpsXY8xY9IVibFmN2SmbfI5TuFJRifNORkjWZxapyGmG+rK7Pf8GGAFHgT8m2QKAQAAAQD+D/4BAAAiAAAAAAAAAAAAAAAE5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9QEAAAEA/g/+AQAAIwAAAAAAAAAAAAAABBb3mUzbhsNOHMZQIlm84us0wC/5YXoWlm07YJbiYePxPeQ6jME5oWtymTdWgFgPHBSIR8zGVLy3r5MOUapPrUkBAAABAP4P/gEAACQAAAAAAAAAAAAAAASundKjTspx2aYpsa+Bo3FBImvtsZVJWTlL0SrUX6mltGjvT5h5oPGTDkN3w0834YPpuOdibZW4+4Jeam5i+YJdAQAAAQD+D/4BAAAlAAAAAAAAAAAAAAAEcCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1wEAAAEA/g/+AQAAJgAAAAAAAAAAAAAABEAA85Wh3PInFfCO722iVycKHfR1mKfLgqn9cWuDnzbtU+yVcUCK1IDlrR3TQ7T4ssJhW4ktdlY6LSFy6yjN6K0BAAABAP4P/gEAACcAAAAAAAAAAAAAAAQTksNftaunzkqKXluFm/jqPyM55ugqrkkyZgzeBUZ0YfzEWk9ZdQyw2uU4MKuSjEwR42L9dkjC5G9jhc3BgwmnAQAAAQD+D/4BAAAoAAAAAAAAAAAAAAAE5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQEAAAEA/g/+AQAAKQAAAAAAAAAAAAAABDwlQELMFnprulHcbAxRV//oFXmKigKHdw91FZvdYx8Mp4LjsAL2D4cfJzZTPvjakXCugscaVGn45oSHSoh4m6oBAAABAP4P/gEAACoAAAAAAAAAAAAAAARca5EM2NdSKOxQvS+XqdIPtzBRG7MSCCVs5oW5kz2DeTANc5ZVNyTSMvOM/MYP5NrNZtuhli7nb/39c91SCd72AQAAAQD+D/4BAAArAAAAAAAAAAAAAAAENiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9owEAAAEA/g/+AQAALAAAAAAAAAAAAAAABEzyV6vCahWlWJtglpj75z9iMqOGUjO/0CnEprjCwzm36R+X4u0VBpnf60w3/q7rf7Gog4kBHlUzYAJiRHQDsdMBAAABAP4P/gEAAC0AAAAAAAAAAAAAAAQKLJ47EVP8lnI3mbTP099fDhIIEnpLKDPUOmXTCqOWEMQYYE/UaexRUQvSnreGgbV9yPd8fKdeL01g7idY4v6pAQAAAQD+D/4BAAAuAAAAAAAAAAAAAAAEqqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXgEAAAEA/g/+AQAALwAAAAAAAAAAAAAABB64LMfqK6qMoJ5oRWymhxOnNveifh0wEF6MRBeoDbqUTpphiUaMs3xt3HAL3qgga8K/9ssUOQVXfxk5eWoDsEoBAAABAP4P/gEAADAAAAAAAAAAAAAAAAShWXOSDcQ0CEKTbN2/sgnB39BQPjPZHFHCmRwZjymwJVwJhk2rjBidVYAscz5uu24mN49aJgX8KWa4OvwKHn6SAQAAAQD+D/4BAAAxAAAAAAAAAAAAAAAEWMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlowEAAAEA/g/+AQAAMgAAAAAAAAAAAAAABBbcKxv3rgc2hI2HkajoJcuxtKr4ol6CVp7xB9mdaZQXV4G8o79+KR00m/c6HhzMg8t9/g1suVrfVqPk1EbTmEkBAAABAP4P/gEAADMAAAAAAAAAAAAAAASjmxI8oSSD8MhA2YfjdXT+56suunNV52RSHy0Y29p5el+m7CMp6eVKjH/Y78FOVlS0R74kbuzliETPrTw+UAdEAQAAAQD+D/4BAAA0AAAAAAAAAAAAAAAERwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQEAAAEA/g/+AQAANQAAAAAAAAAAAAAABIO5x+j+ncg4qCaIAABqaxqQrVSJiYaT5P66As3W93yIetf7P5z7H0eqJ8jMJAgEfzpQt8gQtJREr1KEBALLCK8BAAABAP4P/gEAADYAAAAAAAAAAAAAAATawkYlNpcghpHXDiIlI2g3SGcxjsalz+fwPipIInDxCoVZd/ty4CCcQfEGnB5pVw968LaXcqmNgLHc3KlBCBomAQAAAQD+D/4BAAA3AAAAAAAAAAAAAAAEzJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8QEAAAEA/g/+AQAAOAAAAAAAAAAAAAAABGwuxJa3SWiZz2wD/tRKLWL6mbG93nJecIugX4ugSU1HDaMKenL7KYNI1850Uyg45vxOwHYBQVXgD1TDXChrBzABAAABAP4P/gEAADkAAAAAAAAAAAAAAAROmnrQ/ohQkNO46r/lnxx2yTMm6N/Cp85OSvAjCPshEhKmeQmdPpLIng8I+cYygWML112FqXkpUhi0C33uLHTkAQAAAQD+D/4BAAA6AAAAAAAAAAAAAAAEx0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQegEAAAEA/g/+AQAAOwAAAAAAAAAAAAAABGiC+Rce5msFWt9NGpdgZxBOIjb6NahE8S6zyP6NOS+8+oKO3wsNSehEJmyuBZidgEu5IFRfyhGVrnwX3QpTHD4BAAABAP4P/gEAADwAAAAAAAAAAAAAAAToWXO5tMtkbcnZr81UICV4SGPOrmjGAfJoJT3Jhe9wuy+hVocmr+znFcjr9dc/q3PtH3EA60edI7+1e0XdZFOUAQAAAQD+D/4BAAA9AAAAAAAAAAAAAAAE5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISgEAAAEA/g/+AQAAPgAAAAAAAAAAAAAABKY8tm2IUrLn8FpSsD3Ppd3De/sLiZSurs9GHSRDpUA25eo6P2JT4uJm/GoFJFQvARe1fDbs3sjzakZLAN4c7SkBAAABAP4P/gEAAD8AAAAAAAAAAAAAAASdOOp9wEUSKkp1cK/hgNBYJ+ZwtkqbzWV0XSkCilO/KsUZVtxHo/9UAB3kbs37S1OvxCqJTS0Vp0PoUrg20nA4AQAAAQD+D/4BAABAAAAAAAAAAAAAAAAEpMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hAEAAAEA/g/+AQAAQQAAAAAAAAAAAAAABJpfaUXgrtzOtZBpaqE5trpkl05UU7hk8dG32I/riFCimMnBuTbUm3nrVd32klOke2ozj8NIPydT7yuKjcu7OWwBAAABAP4P/gEAAEIAAAAAAAAAAAAAAAS/cxedkBy+fLCRNQRmiYgBy2V7tFdd5505HfXDCXtWXKhc7hCL1qu9J6c1Bad7VNxHCEIvUfAsjbVsSp2mPz+sAQAAAQD+D/4BAABDAAAAAAAAAAAAAAAEYZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtgEAAAEA/g/+AQAARAAAAAAAAAAAAAAABPMxqsqXxDYwiKhoYF06AvGgdq+2KwV/gEAHyD7PzJZPgbT087Tr00tNTUVv9xIetCfmuPJbfKrAs4q0OpaAlXwBAAABAP4P/gEAAEUAAAAAAAAAAAAAAAT81/tPLNPHpLfJEk5s4BXv3nqvxyvb46PwALl23zBI/cFACh5fnw2gfIJTw/zMaQ1dK2NNKLp/M7oXSkF1xhsSAQAAAQD+D/4BAABGAAAAAAAAAAAAAAAETkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8gEAAAEA/g/+AQAARwAAAAAAAAAAAAAABHavqnpUPWpB6XDpf4FFUU8VSDpACdcEd0AL2+EbFY0vKFaBYwxk3Ou/cCWJlJpJ1BeR8DCzoG+TvmtysX1mqT0BAAABAP4P/gEAAEgAAAAAAAAAAAAAAARkNj5s+bnNNMX5ikKsBT2crRSAgJg9PRC1PU1lYW/iz75M2RyBVpPSDr7hHa4jgyNCPPKwcHXPG5YvnSHNp5eLAQAAAQD+D/4BAABJAAAAAAAAAAAAAAAEsPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvgEAAAEA/g/+AQAASgAAAAAAAAAAAAAABDL46DAicBGq0m1GJOTvp5qEs0rrUrE8BfOc3Bz0PTq5RaGTmCI2qgQCSKiF46bcg+b04cRqudl7vzGic0ZCJOEBAAABAP4P/gEAAEsAAAAAAAAAAAAAAAR8Nb8RnpD1GI7x4UbweP7u7+hb5es9MgKHAI4zb62HYDo5uUO1hgim972b4q8j1ngL2pIReVoZHptMRgdF66CUAQAAAQD+D/4BAABMAAAAAAAAAAAAAAAEIRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3gEAAAEA/g/+AQAATQAAAAAAAAAAAAAABObmIbCR/FSQU7+6LJYOAc5yWIQ6ESOsGmAsTJgnZ063AqxwP3whSqExc9iSihNB3QxVBe/6ELoc7plySu6WgUUBAAABAP4P/gEAAE4AAAAAAAAAAAAAAATSElT1II++YzMgF1kWo09dZrp2qHtZ0fRwgj3L4LJLysbecvjwFyWtr0eYqFVVQfI9Y0fljvEPAAHtt+BKORQxAQAAAQD+D/4BAABPAAAAAAAAAAAAAAAE7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SAEAAAEA/g/+AQAAUAAAAAAAAAAAAAAABJdywrhejIAzcEwypHWBhIoWI7eaUT2xIOOq7ZZp0j5VG4JgfCziKyiW2GBQUm5z2iXsTCrYjzvIZnkY0c9k3fgBAAABAP4P/gEAAFEAAAAAAAAAAAAAAARInVqZkAlSJlL4+GxUt/m0bJ2VpUHwR0WlpI7iCaJQpQ7GTyrOfkAjLhl4lSaHbbOch2T+4wBRPamXcXHNVQf5AQAAAQD+D/4BAABSAAAAAAAAAAAAAAAEZf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6cswEAAAEA/g/+AQAAUwAAAAAAAAAAAAAABBh00jUmCAkO7HB+7GfjNqxaKUaC4fLdmy0lugW4K7S7GoTiAeYsgFSX/Ro1it3GEw2jI+F3QaTNXAOqSEtCr9sBAAABAP4P/gEAAFQAAAAAAAAAAAAAAASmBFziEnj+w2NYJJL0CadLjTHds0wNOSceAvlRowFMzImdT3QSBaHVHP4wL14W7gG439TBmMpC5j/W/eszscx+AQAAAQD+D/4BAABVAAAAAAAAAAAAAAAE55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrgEAAAEA/g/+AQAAVgAAAAAAAAAAAAAABI8WsiykoaxKqsydHrpkG1YU2EDNuwn09U9+foAoAxaC/NiS7F6kye+s7+gNGCzoBJy1DLy87A7BiK5fDRaU9oEBAAABAP4P/gEAAFcAAAAAAAAAAAAAAAR3rls2Uhp3G+lv8DZptV2WoqpXnreO5GdnVa2TqzWwhHy42xdHvTGojNWrFV/V5OoO6fBPYyRzMR5p7MIpNmHAAQAAAQD+D/4BAABYAAAAAAAAAAAAAAAErBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+AEAAAEA/g/+AQAAWQAAAAAAAAAAAAAABJZULDC0lA1D0+OI3a1Pzt+6pZ4n4rQz/mcK5pmXKEisiyr7WcacldJ9v2w/zeLQQAGf4CRHWVOyjK2qCtfl2AIBAAABAP4P/gEAAFoAAAAAAAAAAAAAAATQoj/rTvGjFJOgfsaM3UV9JsuhTT5u1OJyOxBJZCWH+FnKQ3wqmYx/u5jA9bdH5qRnpH/DXxmVdIcFheJhQ87eAQAAAQD+D/4BAABbAAAAAAAAAAAAAAAEbuRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYowEAAAEA/g/+AQAAXAAAAAAAAAAAAAAABInJQB3jajZuvMxbZ2dHvtS9slCHb8zaGrilOFgQN1bx/7zxYnhe6n0ZcFGVPgwPT/Wz1yEvdLpcaFKAh9t7FdsBAAABAP4P/gEAAF0AAAAAAAAAAAAAAAQ9gC2FNrabZUrG69IPcM8L8bL5T6w4DUsC5PyaSZG6/D40AJJp5cRD40dxUXus42XqpxrFXdS56bBrCT7v5IkvAQAAAQD+D/4BAABeAAAAAAAAAAAAAAAE+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBgEAAAEA/g/+AQAAXwAAAAAAAAAAAAAABFO9XMk2prodQkTQn6RmOraNvJcbzcDxuBrs/xFY4H9yZs79L5Q6dWrU/XkuXQ4zGB7nKR21p7Oi8H9wSs+rL3cBAAABAP4P/gEAAGAAAAAAAAAAAAAAAAQE0ZtYt93R5Q9puGRdRWbSPy669ETJOHmi9Fr93KjD8GoBtknIL7l9T4jNA7OYArNiphEAhKhGF1Cvd4hn89eqAQAAAQD+D/4BAABhAAAAAAAAAAAAAAAEVVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEgIAAAEAAAiAAAAAYgAAAAAAAAAAAAAABAR6RRXrJZFq11slD52ypvsWGFWK7gopxnH7UgWmvM6BfYWTuAXEghVLx1U7c6SGOmM1J2LbhIWfgvYhF48Z2rIBAAABAAgAgAAAAGMAAAAAAAAAAAAAAAQFxovRWfpDALCt7djvXudUdlsBrhQESKDMWbpV2xV1P8xtnfzGiPVf0c+RmFuZoEZQPVby/EB999sN7xsDoAqdAQAAAQAEAIAAAABkAAAAAAAAAAAAAAAE4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6AEAAAEAAAhAAAAAZQAAAAAAAAAAAAAABEQUU9oKhJdCCkAAU+F04+/LaZPb+3oafpms59h21HmZdWDHWhgEKoWqYxkwnu7sO8tH6w4uIEtLh84b6RbiNbABAAABAAAIIAAAAGYAAAAAAAAAAAAAAARpjaAyYqY+HF9T7QR2c35c20ZuN9CDBmPjeTwbd/KsMz9R1nDDrGtbGYOS7PZ4JlyGpV4AGNXkGmKV06tRsFOoAQAAAQAEACAAAABnAAAAAAAAAAAAAAAE3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+QEAAAEAAAgAAAAAaAAAAAAAAAAAAAAABGnrxJAjbuypT0aWC48JnXLjc+mwxYhO2fFwuAj6hMY076x7oIdvEM1F1TmbYmIIXIilGnDZLasXacpqZYpdW3gBAAABAAAIEAAAAGkAAAAAAAAAAAAAAAQRXr6i9OwRcI8CnnyDZ0PrwvGg//ArmlG+DLQn8fE8YHTT2iYU+/dh63QeJqq+siuA9MG4LrAIfUtM5j3UQ7mFAQAAAQAAAhAAAABqAAAAAAAAAAAAAAAE9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDwEAAAEAAAAQAAAAawAAAAAAAAAAAAAABOQFeD86fNH4Ry/NyTOi6AOqU0FVoAdR6LzAbC0PTmViw6lWPDFaGwVzUpgCYv/wrIerXGO3uy58th4NbRJTIyABAAABAIAAEAAAAGwAAAAAAAAAAAAAAAR0o3x+BWp3S9QiPG4kjo//1JJJ7+YH2u8D3wJIfawmeVn84JlY7UMm/GPyO8pN9hR0Z9yrZ0PGgpoLpse5OWBzAQAAAQAAABAAAABtAAAAAAAAAAAAAAAEnrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3QEAAAEAAAAQAAAAbgAAAAAAAAAAAAAABFcdPS8xKAWucw54nh/C0jEU6I+4q/yXqtBruqif9RnAavRpH6BAKF7y4ltVPSdahP2Pzsmqt98OadmVqzTRzRMBAAABAAgAEAAAAG8AAAAAAAAAAAAAAARVM3gS44fBcSRfNfmdO9VjizsT8qvPsI4LzGR+1tspFgCX3q8+JSywaR4wQtAw6cs4nyTcFjX5ljna221mcdxdAQAAAQAEABAAAABwAAAAAAAAAAAAAAAE/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754gEAAAEAAgAQAAAAcQAAAAAAAAAAAAAABAl15M4J/nVwD7N1gcBPir563+FhAsAXX433mB6THlcVhNBHHger4VhkobOsItCGBKjEiM3ThdV40PzJJuXe2XUBAAABAAAICAAAAHIAAAAAAAAAAAAAAASUrV4l7KTVlfxSSWoV3/cDrRS5n/pRV8ZPYu4ajdanj/Pt5FNFhj7TE67aSkKU/68xOL3Ao59eLa+NSk7VGjvqAQAAAQAEAAgAAABzAAAAAAAAAAAAAAAEh1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhAEAAAEAAAgEAAAAdAAAAAAAAAAAAAAABGgpanYEw1T0hBoKAkvEAxt+xrvMnPZUxzQEJbM7UOhDXrShDv/2/Mt9TDLtmWj25+JFbCAAc1S12C4QhnpBg6sBAAABAAQABAAAAHUAAAAAAAAAAAAAAARixLZ7da2CfDtarnddcEtxXomFGwSryGR+D3URJVp0ivOv3A7qMkMxmcJBsebUa5zm38J0OIVJJ9Y/nwU269PdAQAAAQAACAABAAB2AAAAAAAAAAAAAAAEnlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlRegEAAAEABAAAAQAAdwAAAAAAAAAAAAAABMcOdIqcpF3C7LS3lh+1kXULsrCano7gBj3d9L3dYuc0siit1hPoo8x5iysXYgjLR9aR8+/KzoNASkmDkgf9iocBAAABAAIAAAEAAHgAAAAAAAAAAAAAAAS7Pr+0TLYgWb1Fg7K8qXzzN3Nl/AR8pmadf0KPUEeN5IY24Yu4wPWRHzLlu15ibCoqbW2Pybhxv9ooSiuvp8dZAQAAAQCAAAIAAAB5AAAAAAAAAAAAAAAE6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQEAAAEA/g/+AQAAegAAAAAAAAAAAAAABAMzkSnc9Wbfe0822EJyKyN2Yom1qUV1H6aP8NMTidtBqTWHdm3dzFPZt9c0v2idUyZeiXy06JPN2PB4zbp2E9ABAAABAP4P/gEAAHsAAAAAAAAAAAAAAAQ8lYdRvVEV68oLBoUD1GUbm0J34U7mJGH0DwcS2SYEfYuLTeImuIHqbokg3isbPcrcktrAjv+94DXHNEo/ohIHAQAAAQD+D/4BAAB8AAAAAAAAAAAAAAAEWjvinW/rM9KEauFCgiRU1VM6Vn4zvv0bPy6DcvjHLNKl1F9cLMW0axsqGqcpQdEr9X9A5V4lWV2cNiXTDUZXhQEAAAEA/g/+AQAAfQAAAAAAAAAAAAAABDLu0dIOIoPU1LhksSWr58uUb9HoAhLaWUTTK2WmEtb8ZIiMRohlMKHs1Ny2syEPihNOIU603zT4MVOYM4uxeT8BAAABAP4P/gEAAH4AAAAAAAAAAAAAAATh8KTv3CyEx3MynasfTqpaskTiKiWouEJQf46K4iBT75EHT73g2UMvzVq07sZfnm5Qq56jS3Ec228TIjoPtZ0zAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAd21pbGwAAAAMAAAACwAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAPAEAAAoAAIBGAQAADAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAkwIAABMAAIBjbGkuanMAAAIAAAAoAwAACQAAgGNsaS5qcwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAbWltZQAAAABjbGkuanMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAZXNidWlsZABGGgAACwAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASH4AAAAAAADAfgAAAAAAAAo8c3JjLmluc3RhbGwubG9ja2ZpbGUuVHJlZT4gMjAgc2l6ZW9mLCA0IGFsaWdub2YKAAAAAAAAAP7/////////AAAAAHsAAAABAAAALwAAAAAAAAB7AAAAAQAAAAIAAAA5AAAAAAAAAHwAAAABAAAAAwAAAB8AAAAAAAAAfQAAAAEAAAAEAAAAcAAAAAAAAAB+AAAAAQAAAAUAAAAmAAAAAAAAAH8AAAABAAAA8H4AAAAAAADwgAAAAAAAAAo8dTMyPiA0IHNpemVvZiwgNCBhbGlnbm9mCgAAAAAAAAAAAAEAAAACAAAAAwAAAAQAAAAFAAAABgAAAAcAAAAIAAAACQAAAAoAAAALAAAADAAAALUAAAC2AAAAnQAAAJ4AAACfAAAAoAAAAKEAAACiAAAAowAAAKQAAAClAAAApgAAAKcAAACoAAAAqQAAAKoAAACrAAAArAAAAK0AAACuAAAArwAAALAAAACxAAAAsgAAALMAAAC0AAAAKgAAACsAAAAsAAAALQAAAC4AAAAvAAAAMAAAADEAAAAyAAAAMwAAADQAAAA1AAAANgAAADcAAAA4AAAAOQAAADoAAAA7AAAAPAAAAD0AAAA+AAAAPwAAAEAAAABBAAAAQgAAAEMAAABEAAAARQAAAEYAAABHAAAASAAAAB0AAAAeAAAAHwAAACAAAAAbAAAAEgAAABMAAAAUAAAAFQAAAA0AAAAOAAAAuAAAAH0AAABOAAAAUQAAAFQAAACbAAAAnAAAAHsAAACZAAAAmgAAAGsAAABtAAAAcAAAAF0AAABgAAAAWwAAACkAAAAhAAAAIwAAACQAAAAmAAAAJwAAABwAAAAYAAAAGQAAABcAAAAPAAAAfgAAAH8AAACAAAAAgQAAAHwAAAAaAAAAiAAAAIoAAACMAAAAhAAAAIUAAACGAAAAjQAAAJEAAACSAAAAYQAAAHEAAAAlAAAAeAAAACgAAAAggQAAAAAAAASEAAAAAAAACjx1MzI+IDQgc2l6ZW9mLCA0IGFsaWdub2YKAAAAAAABAAAAfAAAAHsAAAB6AAAAYQAAACIAAAAhAAAAFAAAABEAAAAIAAAABwAAAAYAAAACAAAABAAAAAMAAAAFAAAA//////////8NAAAADAAAAAoAAAAJAAAACgAAAAsAAAAPAAAADgAAABAAAAASAAAAEwAAAB8AAAAeAAAAFgAAABUAAAAdAAAAHAAAABsAAAAaAAAAGQAAABgAAAAXAAAAGQAAACAAAABKAAAANQAAADsAAAAuAAAAYAAAADgAAAA3AAAAXwAAAF0AAABcAAAARgAAAC0AAAA0AAAALAAAAFkAAABBAAAAKwAAADIAAAAwAAAAJAAAAEAAAAA/AAAAPQAAAC8AAAAqAAAAKQAAACgAAAAnAAAAJgAAACUAAAAjAAAAJAAAAC4AAAAtAAAALAAAACsAAAA8AAAANQAAADsAAAA6AAAAOAAAADcAAAA2AAAANAAAACwAAAArAAAAMgAAADAAAAAvAAAAMQAAADUAAAAcAAAAJwAAADQAAAAzAAAAOQAAADgAAAA+AAAALQAAADQAAAAsAAAAKwAAADAAAABKAAAANQAAAEUAAAA4AAAAPgAAADYAAABGAAAARAAAAEIAAAAyAAAAMAAAAD8AAABDAAAARQAAAD4AAABCAAAAMgAAAEgAAABHAAAASQAAAEsAAABTAAAAUgAAAE0AAABMAAAAUgAAAE8AAABRAAAAUAAAAE4AAABPAAAAVgAAAFIAAABPAAAATQAAAFQAAABYAAAAUgAAAE8AAABNAAAAVwAAAFUAAABWAAAATQAAAE0AAABWAAAAUgAAAFcAAABbAAAAWgAAAEgAAABeAAAAeQAAAHgAAAB3AAAAdgAAAHUAAAB0AAAAcwAAAHIAAABxAAAAcAAAAG8AAABuAAAAbQAAAGwAAABrAAAAagAAAGkAAABoAAAAZwAAAGYAAABlAAAAZAAAAGMAAABiAAAAfgAAAH0AAAAGAAAAQwAAADiEAAAAAAAAApcAAAAAAAAKPFsyNl11OD4gMjYgc2l6ZW9mLCAxIGFsaWdub2YKAAAAAAAAAAAADAAAgI1zKrYH9UEnAgJsYXRlc3QAAFkAAAANAACA5NOL1K5eN/QCASoAAAAAAAAAZGlmZgAAAADoeHbUjUyJGgIBKgAAAAAAAABlcy1tYWluAJddJlhj+CUJAgEqAAAAAAAAAGVzYnVpbGQAECM9Q3cH87cCASoAAAAAAAAAZXhwcmVzcwAtSsZFcS5vHgIBKgAAAAAAAABmAAAAEAAAgGI1+rrrUq2yAgEqAAAAAAAAAGpzemlwAAAAoQBkxxiP6IsCATMuNy4xAAAAdgAAAAkAAIAfAuJeUe7ucAIBKgAAAAAAAABvcGVuAAAAADr/hharBd0CAgEqAAAAAAAAAH8AAAAPAACAmQ1nY/ePqP8CATEuMzY0LjAAd3MAAAAAAAAHBEl9uI48ywIBKgAAAAAAAACOAAAADwAAgNWq2smIYlF9AgF+MC4xOC4wAHdoaWNoAAAAzG2O96NP8kYCAV40LjAuMAAA3gAAABQAAIAJKyyMX5WYegIBXjAuNS4wAABpc2V4ZQAAAKgsV9pTEurXAgFeMy4xLjEAAOMBAAAKAACAaHOu//oPq2kUAV40LjAuMQAA7QEAAA4AAIDQNRRUWdz0BxQBPj01LjAuMgB0AgAADwAAgI8IHuihc6XXAgFeNS4yLjEAAIMCAAAQAACAer8U4BQRFfkCAV4zLjAuMAAAkwIAABMAAIBFkWS7eXM3BAIBXjEuMC4wAABpcy13c2wAACLwpdtElNniAgFeMy4xLjAAAJMCAAATAACARZFku3lzNwQCAV4xLjAuMAAAKAMAAAkAAIB46KOUH/7zMwIBXjMuMC4wAAD5AwAACwAAgDCQVnHT53CAAgFeNC4xLjAAAAQEAAASAACAObU7XSINiuQCAV41LjAuMAAAoAQAAA8AAIBIujVbFIwuIwIBXjcuMC4wAAAwBQAADwAAgFm/7gWc3u0oAgFeMi4wLjEAAIUFAAAOAACAV1HUTV3yyeECAV4xLjAuMAAAbGllAAAAAADTdEgCZ3zjywIBfjMuMy4wAABwYWtvAAAAAM8pG9voSJrmAgF+MS4wLjIAAAkGAAAPAACAy+0FWEEmvzYCAX4yLjMuNgAAGAYAABIAAIB4r8YiHE2YwgIBfjEuMC4xAAC8BgAADAAAgLaHobhFb4imAgF+MS4wLjAAAGluaGVyaXRzEZrqFxjf1GcCAX4yLjAuMwAAaXNhcnJheQAT3n2/02M5EgIBfjEuMC4wAADIBgAAFAAAgMs7RjuXe6VPAgF+Mi4wLjAAANwGAAALAACAIdsvXideIecCAX41LjEuMQAA5wYAAA4AAIC70uZiqHO0hwIBfjEuMS4xAAD1BgAADgAAgKIz1k6fpfk3AgF+MS4wLjEAANwGAAALAACAIdsvXideIecCAX41LjEuMAAAJgkAAAkAAID0i2YEy18wuQIBfjMuMC41AABxcwAAAAAAABd4g2ZtnfPNAgE2LjExLjAAAGRlcGQAAAAANI6wQrw4bHACATIuMC4wAAAAZXRhZwAAAAC7ZxljywG5KgIBfjEuOC4xAABzZW5kAAAAADbN6Dqnruj9AgEwLjE4LjAAAHZhcnkAAAAAEODbZNTJjIgCAX4xLjEuMgAAZGVidWcAAACOgwA04RrKxgIBMi42LjkAAABmcmVzaAAAAPvAEofFYG+dAgEwLjUuMgAAAGNvb2tpZQAAk9Ok5DFT7QUCATAuNi4wAAAAYWNjZXB0cwDUwAdE5/m4lAIBfjEuMy44AABtZXRob2RzAOTREZCuNl/tAgF+MS4xLjIAAHR5cGUtaXMAc1/8HZD4iEECAX4xLjYuMTgAcGFyc2V1cmxyEL+38vlckAIBfjEuMy4zAABzdGF0dXNlc+EbwvSEawHxAgEyLjAuMQAAAOgJAAAJAACAtKjieg83rvQCAX4xLjAuMgAA8QkAAAoAAIBtxKN+P97YUQIBfjIuMC43AAD7CQAACwAAgCzK1eyt0BNFAgExLjIwLjIAAAYKAAALAACAyT/azL6Im7QCAX4xLjAuMwAAEQoAAAsAAIBNmb434wqMrgIBMi4wLjAAAAAcCgAACwAAgDhFZaJiAxdbAgEyLjQuMQAAANwGAAALAACAIdsvXideIecCATUuMi4xAAAAJwoAAAsAAIBW4e40rUYulQIBMS4wLjEAAAAyCgAADAAAgBtg85GEWxZQAgF+MS4wLjQAAD4KAAAMAACAalsvWr3TBCQCATEuMi4wAAAASgoAAAwAAIAG6CHMTQoMsQIBfjEuMi4xAABWCgAADAAAgJt8LAXlw/fhAgExLjE1LjAAAGIKAAANAACAhE8IbjyDmVoCATEuMS4xAAAAbwoAAA4AAIALdmd/1d/+KwIBMC4xLjcAAAB9CgAADgAAgHc+72XAbJAuAgExLjIuMAAAAIsKAAAQAACAm7wrtz55sToCATEuMC42AAAAmwoAABEAAIBO2nb6bnC+KgIBMS4wLjEAAACsCgAAEwAAgN1DQdzdUfqpAgEwLjUuNAAAANwGAAALAACAIdsvXideIecCATUuMi4xAAAAc2VuZAAAAAA2zeg6p67o/QIBMC4xOC4wAABwYXJzZXVybHIQv7fy+VyQAgF+MS4zLjMAAOgJAAAJAACAtKjieg83rvQCAX4xLjAuMgAABgoAAAsAAIDJP9rMvoibtAIBfjEuMC4zAABtcwAAAAAAAKS0xNW1149IAgEyLjEuMwAAAGRlcGQAAAAANI6wQrw4bHACATIuMC4wAAAAZXRhZwAAAAC7ZxljywG5KgIBfjEuOC4xAABtaW1lAAAAAGYjhtftD4ECAgExLjYuMAAAAGRlYnVnAAAAjoMANOEaysYCATIuNi45AAAAZnJlc2gAAAD7wBKHxWBvnQIBMC41LjIAAABkZXN0cm95AI5ukc7EeeM1AgExLjIuMAAAAHN0YXR1c2Vz4RvC9IRrAfECATIuMC4xAAAA6AkAAAkAAIC0qOJ6Dzeu9AIBfjEuMC4yAAAGCgAACwAAgMk/2sy+iJu0AgF+MS4wLjMAABEKAAALAACATZm+N+MKjK4CATIuMC4wAAAAHAoAAAsAAIA4RWWiYgMXWwIBMi40LjEAAABKCgAADAAAgAboIcxNCgyxAgF+MS4yLjEAAGVlLWZpcnN0EI95h4xd7WgCATEuMS4xAAAAZGVwZAAAAAA0jrBCvDhscAIBMi4wLjAAAABpbmhlcml0cxGa6hcY39RnAgEyLjAuNAAAAH0KAAAOAACAdz7vZcBskC4CATEuMi4wAAAAc3RhdHVzZXPhG8L0hGsB8QIBMi4wLjEAAAC9DgAADAAAgN2MxpELDActAgExLjAuMQAAAG1zAAAAAAAApLTE1bXXj0gCATIuMC4wAAAAZGVidWcAAACOgwA04RrKxgIBMi42LjkAAAB1bnBpcGUAAI5Z65l4KC2bAgF+MS4wLjAAAHBhcnNldXJschC/t/L5XJACAX4xLjMuMwAAc3RhdHVzZXPhG8L0hGsB8QIBMi4wLjEAAADoCQAACQAAgLSo4noPN670AgF+MS4wLjIAAAYKAAALAACAyT/azL6Im7QCAX4xLjAuMwAAHAoAAAsAAIA4RWWiYgMXWwIBMi40LjEAAABxcwAAAAAAABd4g2ZtnfPNAgE2LjExLjAAAGRlcGQAAAAANI6wQrw4bHACATIuMC4wAAAAYnl0ZXMAAACoyDXETbrmbQIBMy4xLjIAAABkZWJ1ZwAAAI6DADThGsrGAgEyLjYuOQAAAHVucGlwZQAAjlnrmXgoLZsCATEuMC4wAAAAZGVzdHJveQCObpHOxHnjNQIBMS4yLjAAAAB0eXBlLWlzAHNf/B2Q+IhBAgF+MS42LjE4AHJhdy1ib2R5eDRcfoC3JYICATIuNS4yAAAA9BEAAAoAAIDJrz66ZFQ8IAIBMC40LjI0AAARCgAACwAAgE2ZvjfjCoyuAgEyLjAuMAAAABwKAAALAACAOEVlomIDF1sCATIuNC4xAAAAMgoAAAwAAIAbYPORhFsWUAIBfjEuMC41AABHEgAADAAAgPkNIrUVQKDwAgE7EgAADAAAgGJ5dGVzAAAAqMg1xE265m0CATMuMS4yAAAAdW5waXBlAACOWeuZeCgtmwIBMS4wLjAAAAD0EQAACgAAgMmvPrpkVDwgAgEwLjQuMjQAABEKAAALAACATZm+N+MKjK4CATIuMC4wAAAANBMAAAoAAIAvAZOXXsth9AIBfjIuMS4yNAA+EwAACwAAgGJZp4Gw5o84AgEwLjMuMAAAAG1pbWUtZGIAw8Wk8f3GpW4CATEuNTIuMAAAKBQAAAwAAIANFvha8IzgfQIBXjEuMC40AAB0FAAACQAAgD9e8nb6Q5+sAgFeMS4wLjcAAH0UAAAJAACAJU0hoMQ/3BMCAV4xLjMuMAAAhhQAAA0AAIDsrz2hFLVVKAIBXjEuMi40AACTFAAADgAAgEV5Qpq7wUUNAgFeMS4xMy4xAH0UAAAJAACAJU0hoMQ/3BMCAV4xLjMuMAAAKBUAAA0AAICbmcoacW24CwIBXjEuMS4yAAA1FQAACQAAgB0c/X+RqufJAgFeMS4wLjEAAD4VAAALAACAB5yRzCOD5qICAV4xLjAuMwAAaGFzb3duAABIP4sJiUrg0AIBXjIuMC4wAAAoFQAADQAAgJuZyhpxbbgLAgFeMS4xLjIAAKsWAAASAACAGJ97mY2oVDICAV4xLjAuMAAAfRQAAAkAAIAlTSGgxD/cEwIBXjEuMy4wAAAoFQAADQAAgJuZyhpxbbgLAgFeMS4xLjIAAIYUAAANAACA7K89oRS1VSgCAV4xLjIuNAAAvRYAABMAAIDwt4iQmQjlOAIBXjEuMi4xAAAeFwAAFAAAgNUcwNxTtMSkAgFeMS4xLjQAAH0UAAAJAACAJU0hoMQ/3BMCAV4xLjMuMAAAKBUAAA0AAICbmcoacW24CwIBXjEuMS4yAACGFAAADQAAgOyvPaEUtVUoAgFeMS4yLjQAAGdvcGQAAAAA/T9Rybhol5kCAV4xLjAuMQAAMhcAABgAAICiDpi5dY27QAIBXjEuMC4yAACrFgAAEgAAgBife5mNqFQyAgFeMS4wLjAAAIYUAAANAACA7K89oRS1VSgCAV4xLjIuNAAAhhQAAA0AAIDsrz2hFLVVKAIBXjEuMS4zAACrFgAAEgAAgBife5mNqFQyAgFeMS4wLjAAAH0UAAAJAACAJU0hoMQ/3BMCAV4xLjMuMAAAZ29wZAAAAAD9P1HJuGiXmQIBXjEuMC4xAACqGAAACQAAgHv01jl/q3BYAgEwLjIuMAAAALMYAAAJAACA56vlU26ymRQCATEuOS4xAAAANBMAAAoAAIAvAZOXXsth9AIBfjIuMS4zNACcGQAACgAAgHIFa+boQJD4AgEwLjYuMwAAAIgaAAASAACA3t6/nasyvTkEATAuMjMuMQAAmhoAABQAAIDIB1CXRuhtwgQBMC4yMy4xAACuGgAAFgAAgFI+0CscHRGnBAEwLjIzLjEAAMQaAAAUAACAGPr6MVLKNmUEATAuMjMuMQAA2BoAABUAAICeGzC60+ljWgQBMC4yMy4xAADtGgAAEwAAgDBCml+3Bg8CBAEwLjIzLjEAAAAbAAAWAACADRdE6Z6udscEATAuMjMuMQAAFhsAABQAAIDCAO5HJukCQAQBMC4yMy4xAAAqGwAAEgAAgGm5PKg0Bm3mBAEwLjIzLjEAADwbAAAUAACA24NmRjGW2sEEATAuMjMuMQAAUBsAABMAAICiqX5q7ggl0gQBMC4yMy4xAABjGwAAFgAAgKtGaV1yPyecBAEwLjIzLjEAAHkbAAAXAACA0aEQHcQo6U8EATAuMjMuMQAAkBsAABQAAIAqEigzAYvjoQQBMC4yMy4xAACkGwAAFgAAgGxgov/WkblBBAEwLjIzLjEAALobAAAUAACAYhb8CQ8fFPYEATAuMjMuMQAAzhsAABIAAIDnlnTyoT/2uwQBMC4yMy4xAADgGwAAEwAAgIgErGhfETp4BAEwLjIzLjEAAPMbAAAWAACAMhF9VuG6UmIEATAuMjMuMQAACRwAABQAAICTO+wjao2aiAQBMC4yMy4xAAAdHAAAEgAAgMHlkagTF0f3BAEwLjIzLjEAAC8cAAAUAACAyPaAH3ykVZMEATAuMjMuMQAAQxwAABMAAIAIET4ruAGUzAQBMC4yMy4xAABWHAAAEgAAgDZMzLahkrR6BAEwLjIzLjEAAPQRAAAKAACAya8+umRUPCACAV4wLjYuMwAAySMAAAsAAICPRV5V16nxjwIBXjkuMi4xAAB3cwAAAAAAAAcESX24jjzLAgFeOC4xNy4wAEcSAAAMAACA+Q0itRVAoPACAU4kAAAQAACATJcAAAAAAABMlwAAAAAAAAo8c3JjLmluc3RhbGwuc2VtdmVyLkV4dGVybmFsU3RyaW5nPiAxNiBzaXplb2YsIDggYWxpZ25vZgp4lwAAAAAAANa7AAAAAAAACjx1OD4gMSBzaXplb2YsIDEgYWxpZ25vZgoAAHdpbmRtaWxsLWNsaWVzbS9tYWluLmpzaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvd2luZG1pbGwtY2xpLy0vd2luZG1pbGwtY2xpLTEuMzkzLjIudGd6QGF5b25saS9qc2V4dGdpdGlnbm9yZS1wYXJzZXJtaW5pbWF0Y2h3aW5kbWlsbC1jbGllbnRAZGVuby9zaGltLWRlbm9odHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AZGVuby9zaGltLWRlbm8vLS9zaGltLWRlbm8tMC4xOC4yLnRnekBkZW5vL3NoaW0tZGVuby10ZXN0aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGRlbm8vc2hpbS1kZW5vLXRlc3QvLS9zaGltLWRlbm8tdGVzdC0wLjUuMC50Z3pub2RlLXdoaWNoYmluL3doaWNoLmpzaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvd2hpY2gvLS93aGljaC00LjAuMC50Z3podHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pc2V4ZS8tL2lzZXhlLTMuMS4xLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3dzLy0vd3MtOC4xOC4wLnRnemJ1ZmZlcnV0aWx1dGYtOC12YWxpZGF0ZWh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3dpbmRtaWxsLWNsaWVudC8tL3dpbmRtaWxsLWNsaWVudC0xLjM2NC4wLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL29wZW4vLS9vcGVuLTEwLjEuMC50Z3pkZWZhdWx0LWJyb3dzZXJkZWZpbmUtbGF6eS1wcm9waXMtaW5zaWRlLWNvbnRhaW5lcmh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzLXdzbC8tL2lzLXdzbC0zLjEuMC50Z3podHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pcy1pbnNpZGUtY29udGFpbmVyLy0vaXMtaW5zaWRlLWNvbnRhaW5lci0xLjAuMC50Z3ppcy1kb2NrZXJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pcy1kb2NrZXIvLS9pcy1kb2NrZXItMy4wLjAudGd6aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZGVmaW5lLWxhenktcHJvcC8tL2RlZmluZS1sYXp5LXByb3AtMy4wLjAudGd6aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZGVmYXVsdC1icm93c2VyLy0vZGVmYXVsdC1icm93c2VyLTUuMi4xLnRnemJ1bmRsZS1uYW1lZGVmYXVsdC1icm93c2VyLWlkaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZGVmYXVsdC1icm93c2VyLWlkLy0vZGVmYXVsdC1icm93c2VyLWlkLTUuMC4wLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2J1bmRsZS1uYW1lLy0vYnVuZGxlLW5hbWUtNC4xLjAudGd6cnVuLWFwcGxlc2NyaXB0aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcnVuLWFwcGxlc2NyaXB0Ly0vcnVuLWFwcGxlc2NyaXB0LTcuMC4wLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL21pbmltYXRjaC8tL21pbmltYXRjaC0xMC4wLjEudGd6YnJhY2UtZXhwYW5zaW9uaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYnJhY2UtZXhwYW5zaW9uLy0vYnJhY2UtZXhwYW5zaW9uLTIuMC4xLnRnemJhbGFuY2VkLW1hdGNoaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYmFsYW5jZWQtbWF0Y2gvLS9iYWxhbmNlZC1tYXRjaC0xLjAuMi50Z3podHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qc3ppcC8tL2pzemlwLTMuNy4xLnRnenJlYWRhYmxlLXN0cmVhbXNldC1pbW1lZGlhdGUtc2hpbWh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NldC1pbW1lZGlhdGUtc2hpbS8tL3NldC1pbW1lZGlhdGUtc2hpbS0xLjAuMS50Z3podHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yZWFkYWJsZS1zdHJlYW0vLS9yZWFkYWJsZS1zdHJlYW0tMi4zLjgudGd6Y29yZS11dGlsLWlzcHJvY2Vzcy1uZXh0aWNrLWFyZ3NzYWZlLWJ1ZmZlcnN0cmluZ19kZWNvZGVydXRpbC1kZXByZWNhdGVodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy91dGlsLWRlcHJlY2F0ZS8tL3V0aWwtZGVwcmVjYXRlLTEuMC4yLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3N0cmluZ19kZWNvZGVyLy0vc3RyaW5nX2RlY29kZXItMS4xLjEudGd6aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2FmZS1idWZmZXIvLS9zYWZlLWJ1ZmZlci01LjEuMi50Z3podHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wcm9jZXNzLW5leHRpY2stYXJncy8tL3Byb2Nlc3MtbmV4dGljay1hcmdzLTIuMC4xLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzYXJyYXkvLS9pc2FycmF5LTEuMC4wLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2luaGVyaXRzLy0vaW5oZXJpdHMtMi4wLjQudGd6aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY29yZS11dGlsLWlzLy0vY29yZS11dGlsLWlzLTEuMC4zLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Bha28vLS9wYWtvLTEuMC4xMS50Z3podHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9saWUvLS9saWUtMy4zLjAudGd6aW1tZWRpYXRlaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaW1tZWRpYXRlLy0vaW1tZWRpYXRlLTMuMC42LnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2dpdGlnbm9yZS1wYXJzZXIvLS9naXRpZ25vcmUtcGFyc2VyLTAuMC4yLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2V4cHJlc3MvLS9leHByZXNzLTQuMTkuMi50Z3plbmNvZGV1cmxwcm94eS1hZGRyYm9keS1wYXJzZXJlc2NhcGUtaHRtbGh0dHAtZXJyb3Jzb24tZmluaXNoZWR1dGlscy1tZXJnZWNvbnRlbnQtdHlwZWZpbmFsaGFuZGxlcnJhbmdlLXBhcnNlcnNlcnZlLXN0YXRpY2FycmF5LWZsYXR0ZW5wYXRoLXRvLXJlZ2V4cHNldHByb3RvdHlwZW9mY29va2llLXNpZ25hdHVyZW1lcmdlLWRlc2NyaXB0b3JzY29udGVudC1kaXNwb3NpdGlvbmh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NvbnRlbnQtZGlzcG9zaXRpb24vLS9jb250ZW50LWRpc3Bvc2l0aW9uLTAuNS40LnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NhZmUtYnVmZmVyLy0vc2FmZS1idWZmZXItNS4yLjEudGd6aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbWVyZ2UtZGVzY3JpcHRvcnMvLS9tZXJnZS1kZXNjcmlwdG9ycy0xLjAuMS50Z3podHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jb29raWUtc2lnbmF0dXJlLy0vY29va2llLXNpZ25hdHVyZS0xLjAuNi50Z3podHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zZXRwcm90b3R5cGVvZi8tL3NldHByb3RvdHlwZW9mLTEuMi4wLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3BhdGgtdG8tcmVnZXhwLy0vcGF0aC10by1yZWdleHAtMC4xLjcudGd6aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYXJyYXktZmxhdHRlbi8tL2FycmF5LWZsYXR0ZW4tMS4xLjEudGd6aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2VydmUtc3RhdGljLy0vc2VydmUtc3RhdGljLTEuMTUuMC50Z3podHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lc2NhcGUtaHRtbC8tL2VzY2FwZS1odG1sLTEuMC4zLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VuY29kZXVybC8tL2VuY29kZXVybC0xLjAuMi50Z3podHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wYXJzZXVybC8tL3BhcnNldXJsLTEuMy4zLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NlbmQvLS9zZW5kLTAuMTguMC50Z3podHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yYW5nZS1wYXJzZXIvLS9yYW5nZS1wYXJzZXItMS4yLjEudGd6aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvb24tZmluaXNoZWQvLS9vbi1maW5pc2hlZC0yLjQuMS50Z3podHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lZS1maXJzdC8tL2VlLWZpcnN0LTEuMS4xLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2h0dHAtZXJyb3JzLy0vaHR0cC1lcnJvcnMtMi4wLjAudGd6dG9pZGVudGlmaWVyaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdG9pZGVudGlmaWVyLy0vdG9pZGVudGlmaWVyLTEuMC4xLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3N0YXR1c2VzLy0vc3RhdHVzZXMtMi4wLjEudGd6aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZGVwZC8tL2RlcGQtMi4wLjAudGd6aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZGVzdHJveS8tL2Rlc3Ryb3ktMS4yLjAudGd6aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZnJlc2gvLS9mcmVzaC0wLjUuMi50Z3podHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9kZWJ1Zy8tL2RlYnVnLTIuNi45LnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL21zLy0vbXMtMi4wLjAudGd6aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbWltZS8tL21pbWUtMS42LjAudGd6aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXRhZy8tL2V0YWctMS44LjEudGd6aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbXMvLS9tcy0yLjEuMy50Z3podHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9maW5hbGhhbmRsZXIvLS9maW5hbGhhbmRsZXItMS4yLjAudGd6aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdW5waXBlLy0vdW5waXBlLTEuMC4wLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NvbnRlbnQtdHlwZS8tL2NvbnRlbnQtdHlwZS0xLjAuNS50Z3podHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy91dGlscy1tZXJnZS8tL3V0aWxzLW1lcmdlLTEuMC4xLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2JvZHktcGFyc2VyLy0vYm9keS1wYXJzZXItMS4yMC4yLnRnemljb252LWxpdGVodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pY29udi1saXRlLy0vaWNvbnYtbGl0ZS0wLjQuMjQudGd6Pj0gMi4xLjIgPCAzc2FmZXItYnVmZmVyaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2FmZXItYnVmZmVyLy0vc2FmZXItYnVmZmVyLTIuMS4yLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Jhdy1ib2R5Ly0vcmF3LWJvZHktMi41LjIudGd6aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYnl0ZXMvLS9ieXRlcy0zLjEuMi50Z3podHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy90eXBlLWlzLy0vdHlwZS1pcy0xLjYuMTgudGd6bWltZS10eXBlc21lZGlhLXR5cGVyaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbWVkaWEtdHlwZXIvLS9tZWRpYS10eXBlci0wLjMuMC50Z3podHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9taW1lLXR5cGVzLy0vbWltZS10eXBlcy0yLjEuMzUudGd6aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbWltZS1kYi8tL21pbWUtZGItMS41Mi4wLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3FzLy0vcXMtNi4xMS4wLnRnenNpZGUtY2hhbm5lbGh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NpZGUtY2hhbm5lbC8tL3NpZGUtY2hhbm5lbC0xLjAuNi50Z3pjYWxsLWJpbmRlcy1lcnJvcnNnZXQtaW50cmluc2ljb2JqZWN0LWluc3BlY3RodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9vYmplY3QtaW5zcGVjdC8tL29iamVjdC1pbnNwZWN0LTEuMTMuMi50Z3podHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9nZXQtaW50cmluc2ljLy0vZ2V0LWludHJpbnNpYy0xLjIuNC50Z3pmdW5jdGlvbi1iaW5kaGFzLXByb3RvaGFzLXN5bWJvbHNodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9oYXNvd24vLS9oYXNvd24tMi4wLjIudGd6aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZnVuY3Rpb24tYmluZC8tL2Z1bmN0aW9uLWJpbmQtMS4xLjIudGd6aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaGFzLXN5bWJvbHMvLS9oYXMtc3ltYm9scy0xLjAuMy50Z3podHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9oYXMtcHJvdG8vLS9oYXMtcHJvdG8tMS4wLjMudGd6aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXMtZXJyb3JzLy0vZXMtZXJyb3JzLTEuMy4wLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NhbGwtYmluZC8tL2NhbGwtYmluZC0xLjAuNy50Z3plcy1kZWZpbmUtcHJvcGVydHlzZXQtZnVuY3Rpb24tbGVuZ3RoaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2V0LWZ1bmN0aW9uLWxlbmd0aC8tL3NldC1mdW5jdGlvbi1sZW5ndGgtMS4yLjIudGd6ZGVmaW5lLWRhdGEtcHJvcGVydHloYXMtcHJvcGVydHktZGVzY3JpcHRvcnNodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9oYXMtcHJvcGVydHktZGVzY3JpcHRvcnMvLS9oYXMtcHJvcGVydHktZGVzY3JpcHRvcnMtMS4wLjIudGd6aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXMtZGVmaW5lLXByb3BlcnR5Ly0vZXMtZGVmaW5lLXByb3BlcnR5LTEuMC4wLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2dvcGQvLS9nb3BkLTEuMC4xLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2RlZmluZS1kYXRhLXByb3BlcnR5Ly0vZGVmaW5lLWRhdGEtcHJvcGVydHktMS4xLjQudGd6aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcHJveHktYWRkci8tL3Byb3h5LWFkZHItMi4wLjcudGd6Zm9yd2FyZGVkaXBhZGRyLmpzaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXBhZGRyLmpzLy0vaXBhZGRyLmpzLTEuOS4xLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2ZvcndhcmRlZC8tL2ZvcndhcmRlZC0wLjIuMC50Z3podHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9tZXRob2RzLy0vbWV0aG9kcy0xLjEuMi50Z3podHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hY2NlcHRzLy0vYWNjZXB0cy0xLjMuOC50Z3puZWdvdGlhdG9yaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbmVnb3RpYXRvci8tL25lZ290aWF0b3ItMC42LjMudGd6aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY29va2llLy0vY29va2llLTAuNi4wLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3ZhcnkvLS92YXJ5LTEuMS4yLnRnemJpbi9lc2J1aWxkaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXNidWlsZC8tL2VzYnVpbGQtMC4yMy4xLnRnekBlc2J1aWxkL2FpeC1wcGM2NEBlc2J1aWxkL2FuZHJvaWQtYXJtQGVzYnVpbGQvYW5kcm9pZC1hcm02NEBlc2J1aWxkL2FuZHJvaWQteDY0QGVzYnVpbGQvZGFyd2luLWFybTY0QGVzYnVpbGQvZGFyd2luLXg2NEBlc2J1aWxkL2ZyZWVic2QtYXJtNjRAZXNidWlsZC9mcmVlYnNkLXg2NEBlc2J1aWxkL2xpbnV4LWFybUBlc2J1aWxkL2xpbnV4LWFybTY0QGVzYnVpbGQvbGludXgtaWEzMkBlc2J1aWxkL2xpbnV4LWxvb25nNjRAZXNidWlsZC9saW51eC1taXBzNjRlbEBlc2J1aWxkL2xpbnV4LXBwYzY0QGVzYnVpbGQvbGludXgtcmlzY3Y2NEBlc2J1aWxkL2xpbnV4LXMzOTB4QGVzYnVpbGQvbGludXgteDY0QGVzYnVpbGQvbmV0YnNkLXg2NEBlc2J1aWxkL29wZW5ic2QtYXJtNjRAZXNidWlsZC9vcGVuYnNkLXg2NEBlc2J1aWxkL3N1bm9zLXg2NEBlc2J1aWxkL3dpbjMyLWFybTY0QGVzYnVpbGQvd2luMzItaWEzMkBlc2J1aWxkL3dpbjMyLXg2NGh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Blc2J1aWxkL3dpbjMyLXg2NC8tL3dpbjMyLXg2NC0wLjIzLjEudGd6aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGVzYnVpbGQvd2luMzItaWEzMi8tL3dpbjMyLWlhMzItMC4yMy4xLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Blc2J1aWxkL3dpbjMyLWFybTY0Ly0vd2luMzItYXJtNjQtMC4yMy4xLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Blc2J1aWxkL3N1bm9zLXg2NC8tL3N1bm9zLXg2NC0wLjIzLjEudGd6aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGVzYnVpbGQvb3BlbmJzZC14NjQvLS9vcGVuYnNkLXg2NC0wLjIzLjEudGd6aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGVzYnVpbGQvb3BlbmJzZC1hcm02NC8tL29wZW5ic2QtYXJtNjQtMC4yMy4xLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Blc2J1aWxkL25ldGJzZC14NjQvLS9uZXRic2QteDY0LTAuMjMuMS50Z3podHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AZXNidWlsZC9saW51eC14NjQvLS9saW51eC14NjQtMC4yMy4xLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Blc2J1aWxkL2xpbnV4LXMzOTB4Ly0vbGludXgtczM5MHgtMC4yMy4xLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Blc2J1aWxkL2xpbnV4LXJpc2N2NjQvLS9saW51eC1yaXNjdjY0LTAuMjMuMS50Z3podHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AZXNidWlsZC9saW51eC1wcGM2NC8tL2xpbnV4LXBwYzY0LTAuMjMuMS50Z3podHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AZXNidWlsZC9saW51eC1taXBzNjRlbC8tL2xpbnV4LW1pcHM2NGVsLTAuMjMuMS50Z3podHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AZXNidWlsZC9saW51eC1sb29uZzY0Ly0vbGludXgtbG9vbmc2NC0wLjIzLjEudGd6aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGVzYnVpbGQvbGludXgtaWEzMi8tL2xpbnV4LWlhMzItMC4yMy4xLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Blc2J1aWxkL2xpbnV4LWFybTY0Ly0vbGludXgtYXJtNjQtMC4yMy4xLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Blc2J1aWxkL2xpbnV4LWFybS8tL2xpbnV4LWFybS0wLjIzLjEudGd6aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGVzYnVpbGQvZnJlZWJzZC14NjQvLS9mcmVlYnNkLXg2NC0wLjIzLjEudGd6aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGVzYnVpbGQvZnJlZWJzZC1hcm02NC8tL2ZyZWVic2QtYXJtNjQtMC4yMy4xLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Blc2J1aWxkL2Rhcndpbi14NjQvLS9kYXJ3aW4teDY0LTAuMjMuMS50Z3podHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AZXNidWlsZC9kYXJ3aW4tYXJtNjQvLS9kYXJ3aW4tYXJtNjQtMC4yMy4xLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Blc2J1aWxkL2FuZHJvaWQteDY0Ly0vYW5kcm9pZC14NjQtMC4yMy4xLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Blc2J1aWxkL2FuZHJvaWQtYXJtNjQvLS9hbmRyb2lkLWFybTY0LTAuMjMuMS50Z3podHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AZXNidWlsZC9hbmRyb2lkLWFybS8tL2FuZHJvaWQtYXJtLTAuMjMuMS50Z3podHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AZXNidWlsZC9haXgtcHBjNjQvLS9haXgtcHBjNjQtMC4yMy4xLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VzLW1haW4vLS9lcy1tYWluLTEuMy4wLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2RpZmYvLS9kaWZmLTcuMC4wLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BheW9ubGkvanNleHQvLS9qc2V4dC0wLjkuNjMudGd6c3Vkby1wcm9tcHRodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zdWRvLXByb21wdC8tL3N1ZG8tcHJvbXB0LTkuMi4xLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2ljb252LWxpdGUvLS9pY29udi1saXRlLTAuNi4zLnRnej49IDIuMS4yIDwgMy4wLjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==' +WHERE hash = -28028598712388162 AND workspace_id = 'admins'; \ No newline at end of file diff --git a/backend/migrations/20240908222917_migrate_to_new_cli_3.down.sql b/backend/migrations/20240908222917_migrate_to_new_cli_3.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20240908222917_migrate_to_new_cli_3.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20240908222917_migrate_to_new_cli_3.up.sql b/backend/migrations/20240908222917_migrate_to_new_cli_3.up.sql new file mode 100644 index 0000000000000..678fbc81d71cb --- /dev/null +++ b/backend/migrations/20240908222917_migrate_to_new_cli_3.up.sql @@ -0,0 +1,15 @@ +-- Add up migration script here +UPDATE script SET content = 'import * as wmill from "windmill-cli@1.393.2" + +export async function main() { + await wmill.hubPull({ workspace: "admins", token: process.env["WM_TOKEN"], baseUrl: globalThis.process.env["BASE_URL"] }); +} +', language = 'bun', +lock = '{ + "dependencies": { + "windmill-cli": "latest" + } +} +//bun.lockb +IyEvdXNyL2Jpbi9lbnYgYnVuCmJ1bi1sb2NrZmlsZS1mb3JtYXQtdjAKAgAAADZs4+6pAntv6Gcmv9boDBPUxzf1WFcr6QlPZXdejHxj3rsAAAAAAAB/AAAAAAAAAAgAAAAAAAAACAAAAAAAAACAAAAAAAAAAAN+AAAAAAAAAAAAAAAAAAAAAAAAAAAMAACAjgAAAA8AAIDeAAAAFAAAgHdoaWNoAAAAaXNleGUAAAB3cwAAAAAAAH8AAAAPAACAb3BlbgAAAABpcy13c2wAAJMCAAATAACAKAMAAAkAAICDAgAAEAAAgHQCAAAPAACABAQAABIAAID5AwAACwAAgKAEAAAPAACAdgAAAAkAAIAwBQAADwAAgIUFAAAOAACAanN6aXAAAAAYBgAAEgAAgAkGAAAPAACA9QYAAA4AAIDnBgAADgAAgNwGAAALAACAyAYAABQAAIBpc2FycmF5AGluaGVyaXRzvAYAAAwAAIBwYWtvAAAAAGxpZQAAAAAAJgkAAAkAAIBmAAAAEAAAgGV4cHJlc3MArAoAABMAAIDcBgAACwAAgJsKAAARAACAiwoAABAAAIB9CgAADgAAgG8KAAAOAACAYgoAAA0AAIBWCgAADAAAgAYKAAALAACA6AkAAAkAAIBwYXJzZXVybHNlbmQAAAAASgoAAAwAAIAcCgAACwAAgGVlLWZpcnN0EQoAAAsAAIC9DgAADAAAgHN0YXR1c2VzZGVwZAAAAABkZXN0cm95AGZyZXNoAAAAZGVidWcAAABtcwAAAAAAAG1pbWUAAAAAZXRhZwAAAABtcwAAAAAAAD4KAAAMAACAdW5waXBlAAAyCgAADAAAgCcKAAALAACA+wkAAAsAAID0EQAACgAAgEcSAAAMAACAcmF3LWJvZHlieXRlcwAAAHR5cGUtaXMAPhMAAAsAAIA0EwAACgAAgG1pbWUtZGIAcXMAAAAAAAAoFAAADAAAgJMUAAAOAACAhhQAAA0AAIBoYXNvd24AACgVAAANAACAPhUAAAsAAIA1FQAACQAAgH0UAAAJAACAdBQAAAkAAIC9FgAAEwAAgDIXAAAYAACAqxYAABIAAIBnb3BkAAAAAB4XAAAUAACA8QkAAAoAAICzGAAACQAAgKoYAAAJAACAbWV0aG9kcwBhY2NlcHRzAJwZAAAKAACAY29va2llAAB2YXJ5AAAAAGVzYnVpbGQAVhwAABIAAIBDHAAAEwAAgC8cAAAUAACAHRwAABIAAIAJHAAAFAAAgPMbAAAWAACA4BsAABMAAIDOGwAAEgAAgLobAAAUAACApBsAABYAAICQGwAAFAAAgHkbAAAXAACAYxsAABYAAIBQGwAAEwAAgDwbAAAUAACAKhsAABIAAIAWGwAAFAAAgAAbAAAWAACA7RoAABMAAIDYGgAAFQAAgMQaAAAUAACArhoAABYAAICaGgAAFAAAgIgaAAASAACAZXMtbWFpbgBkaWZmAAAAAFkAAAANAACAySMAAAsAAID0EQAACgAAgAAAAAAAAAAAjXMqtgf1QSfVqtrJiGJRfQkrLIxflZh6zG2O96NP8kaoLFfaUxLq1wcESX24jjzLmQ1nY/ePqP86/4YWqwXdAiLwpdtElNniRZFku3lzNwR46KOUH/7zM3q/FOAUERX5jwge6KFzpdc5tTtdIg2K5DCQVnHT53CASLo1WxSMLiMfAuJeUe7ucFm/7gWc3u0oV1HUTV3yyeGhAGTHGI/oi3ivxiIcTZjCy+0FWEEmvzaiM9ZOn6X5N7vS5mKoc7SHIdsvXideIefLO0Y7l3ulTxPefb/TYzkSEZrqFxjf1Ge2h6G4RW+Ips8pG9voSJrm03RIAmd848v0i2YEy18wuWI1+rrrUq2yLUrGRXEubx7dQ0Hc3VH6qSHbL14nXiHnTtp2+m5wviqbvCu3PnmxOnc+72XAbJAuC3Znf9Xf/iuETwhuPIOZWpt8LAXlw/fhyT/azL6Im7S0qOJ6Dzeu9HIQv7fy+VyQNs3oOqeu6P0G6CHMTQoMsThFZaJiAxdbEI95h4xd7WhNmb434wqMrt2MxpELDAct4RvC9IRrAfE0jrBCvDhscI5ukc7EeeM1+8ASh8Vgb52OgwA04RrKxqS0xNW1149IZiOG1+0PgQK7ZxljywG5KqS0xNW1149IalsvWr3TBCSOWeuZeCgtmxtg85GEWxZQVuHuNK1GLpUsytXsrdATRcmvPrpkVDwg+Q0itRVAoPB4NFx+gLclgqjINcRNuuZtc1/8HZD4iEFiWaeBsOaPOC8Bk5dey2H0w8Wk8f3GpW4XeINmbZ3zzQ0W+FrwjOB9RXlCmrvBRQ3srz2hFLVVKEg/iwmJSuDQm5nKGnFtuAsHnJHMI4Pmoh0c/X+RqufJJU0hoMQ/3BM/XvJ2+kOfrPC3iJCZCOU4og6YuXWNu0AYn3uZjahUMv0/Ucm4aJeZ1RzA3FO0xKRtxKN+P97YUeer5VNuspkUe/TWOX+rcFjk0RGQrjZf7dTAB0Tn+biUcgVr5uhAkPiT06TkMVPtBRDg22TUyYyIECM9Q3cH87c2TMy2oZK0eggRPiu4AZTMyPaAH3ykVZPB5ZGoExdH95M77CNqjZqIMhF9VuG6UmKIBKxoXxE6eOeWdPKhP/a7Yhb8CQ8fFPZsYKL/1pG5QSoSKDMBi+Oh0aEQHcQo6U+rRmldcj8nnKKpfmruCCXS24NmRjGW2sFpuTyoNAZt5sIA7kcm6QJADRdE6Z6udscwQppftwYPAp4bMLrT6WNaGPr6MVLKNmVSPtArHB0Rp8gHUJdG6G3C3t6/nasyvTmXXSZYY/glCeh4dtSNTIka5NOL1K5eN/SPRV5V16nxj8mvPrpkVDwgAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAFwAAAEIAAIABAAAAiQEAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAJ0AAABBAACAAAAAABIAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAADyAAAASgAAgAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAUgEAADIAAIAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAIQBAAAyAACAAwAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAC2AQAALQAAgAgAAAASAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAA+wEAAEgAAIABAAAAbAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAEMCAAAxAACACgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAACmAgAANAAAgAMAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAA2gIAAE4AAIABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAADEDAAA6AACAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAABrAwAASAAAgAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAswMAAEYAAIAFAAAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAABYEAABMAACABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAABiBAAAPgAAgAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAArwQAAEYAAIAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAPUEAAA7AACACgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAA/BQAARgAAgAIAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAkwUAAEQAAIABAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAANcFAAAyAACAAwAAAAcAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAqBgAATAAAgAEAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAdgYAAEYAAIACAAAAAwAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAMHAABEAACAAQAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAABHBwAARAAAgAEAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAiwcAAD4AAIAFAAAAAQAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAMkHAABQAACAAgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAZCAAANgAAgAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAATwgAADgAAIACAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAIcIAABAAACAAQAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAADHCAAAMQAAgAEAAAAAAAAACwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAA+AgAAC4AAIADAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAC8JAAA6AACAAwAAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAABpCQAASAAAgAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAsQkAADcAAIAEAAAAEwAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAL8KAABOAACAAAAAAAUAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAANCwAAPgAAgAUAAAACAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAASwsAAEoAAIABAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAJULAABIAACAAQAAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAADdCwAARAAAgAEAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAIQwAAEQAAIAAAAAAAQAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAGUMAABCAACAAQAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAACnDAAAQQAAgAEAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAA6AwAAD4AAIABAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAACYNAAA6AACAAQAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAABgDQAAOAAAgAEAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAmA0AADEAAIAAAAAAEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAMkNAABAAACAAQAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAJDgAAPgAAgAIAAAAEAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAARw4AADgAAIABAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAH8OAAA+AACAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAADJDgAAQAAAgAEAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAACQ8AADgAAIACAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAEEPAAAwAACAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAABxDwAANgAAgAEAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAApw8AADIAAIAAAAAABQAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAANkPAAAyAACAAgAAAAYAAAAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAALEAAALAAAgAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAANxAAADAAAIABAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAGcQAAAwAACAAQAAAAgAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAACXEAAALAAAgAIAAAABAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAwxAAAEAAAIABAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAMRAAA0AACAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAA3EQAAQAAAgAEAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAdxEAAD4AAIABAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAALURAAA/AACAAQAAABQAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAD+EQAAPQAAgAAAAAAEAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAUxIAAEAAAIACAAAAAQAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAJMSAAA4AACAAgAAAAUAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAADLEgAAMgAAgAMAAAABAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAA/RIAADcAAIABAAAABgAAABIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAEkTAAA+AACAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAACHEwAAPQAAgAIAAAABAAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAxBMAADcAAIABAAAANAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAPsTAAAtAACABgAAAAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAA0FAAAQAAAgAEAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAoRQAAEUAAIABAAAADQAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAOYUAABCAACAAQAAAAIAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAABJFQAANAAAgAIAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAfRUAAEIAAIABAAAAAQAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAL8VAAA+AACAAQAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAD9FQAAOgAAgAEAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAANxYAADoAAIABAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAHEWAAA6AACAAQAAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAADQFgAATgAAgAEAAAACAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAShcAAFgAAIABAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAKIXAABMAACAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAADuFwAAMAAAgAEAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAHhgAAFAAAIABAAAAAQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAG4YAAA8AACAAgAAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAC8GAAAOgAAgAEAAAAJAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAA9hgAADoAAIAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAADAZAAA2AACAAQAAAAEAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAABmGQAANgAAgAEAAAADAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAphkAADwAAIAAAAAABgAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAOIZAAA0AACAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAWGgAAMAAAgAEAAAABAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAURoAADcAAIAAAAAAFwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAGgcAABEAACAAAAAABcAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAACsHAAARgAAgAAAAAAXAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAA8hwAAEgAAIAAAAAAFwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAADodAABEAACAAAAAABcAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAB+HQAASAAAgAAAAAAXAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAxh0AAEwAAIAAAAAAFwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAABIeAABGAACAAAAAABcAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAABYHgAARAAAgAAAAAAXAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAnB4AAEgAAIAAAAAAFwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAOQeAABMAACAAAAAABcAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAwHwAASAAAgAAAAAAXAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAeB8AAE4AAIAAAAAAFwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAMYfAABMAACAAAAAABcAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAASIAAARgAAgAAAAAAXAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAWCAAAEgAAIAAAAAAFwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAKAgAABEAACAAAAAABcAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAADkIAAASAAAgAAAAAAXAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAALCEAAEwAAIAAAAAAFwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAHghAABGAACAAAAAABcAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAC+IQAASgAAgAAAAAAXAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAACCIAAEgAAIAAAAAAFwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAFAiAABMAACAAAAAABcAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAACcIgAASAAAgAAAAAAXAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAA5CIAAEQAAIAAAAAAFwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAACgjAAA2AACAAQAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAABeIwAAMAAAgAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAjiMAADsAAIAAAAAACQAAAD8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAANQjAAA+AACACQAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAASJAAAPAAAgAAAAAAGAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAAAAwAAAANAAAAAgAAAA8AAAAAAAAADwAAAAEAAAAQAAAAAAAAABAAAAACAAAAEgAAAAAAAAASAAAABAAAABYAAAABAAAAFwAAAAEAAAAYAAAAAAAAABgAAAAAAAAAGAAAAAIAAAAaAAAAAAAAABoAAAABAAAAGwAAAAAAAAAbAAAAAQAAABwAAAABAAAAHQAAAAAAAAAdAAAABAAAACEAAAAAAAAAIQAAAAcAAAAoAAAAAAAAACgAAAABAAAAKQAAAAAAAAApAAAAAAAAACkAAAAAAAAAKQAAAAAAAAApAAAAAAAAACkAAAAAAAAAKQAAAAEAAAAqAAAAAAAAACoAAAAAAAAAKgAAAB8AAABJAAAAAQAAAEoAAAAAAAAASgAAAAAAAABKAAAAAAAAAEoAAAAAAAAASgAAAAAAAABKAAAAAAAAAEoAAAAEAAAATgAAAAAAAABOAAAAAAAAAE4AAAAAAAAATgAAAA0AAABbAAAAAAAAAFsAAAABAAAAXAAAAAAAAABcAAAABQAAAGEAAAAAAAAAYQAAAAAAAABhAAAAAAAAAGEAAAAAAAAAYQAAAAAAAABhAAAAAQAAAGIAAAAAAAAAYgAAAAAAAABiAAAAAAAAAGIAAAAAAAAAYgAAAAcAAABpAAAAAAAAAGkAAAAAAAAAaQAAAAAAAABpAAAADAAAAHUAAAABAAAAdgAAAAAAAAB2AAAABAAAAHoAAAAAAAAAegAAAAIAAAB8AAAAAAAAAHwAAAABAAAAfQAAAAAAAAB9AAAAAQAAAH4AAAAEAAAAggAAAAAAAACCAAAABQAAAIcAAAABAAAAiAAAAAAAAACIAAAAAAAAAIgAAAAAAAAAiAAAAAAAAACIAAAABQAAAI0AAAAGAAAAkwAAAAEAAACUAAAAAQAAAJUAAAABAAAAlgAAAAMAAACZAAAAAgAAAJsAAAAAAAAAmwAAAAAAAACbAAAAAAAAAJsAAAACAAAAnQAAAAAAAACdAAAAAAAAAJ0AAAAAAAAAnQAAABgAAAC1AAAAAAAAALUAAAAAAAAAtQAAAAAAAAC1AAAAAAAAALUAAAAAAAAAtQAAAAAAAAC1AAAAAAAAALUAAAAAAAAAtQAAAAAAAAC1AAAAAAAAALUAAAAAAAAAtQAAAAAAAAC1AAAAAAAAALUAAAAAAAAAtQAAAAAAAAC1AAAAAAAAALUAAAAAAAAAtQAAAAAAAAC1AAAAAAAAALUAAAAAAAAAtQAAAAAAAAC1AAAAAAAAALUAAAAAAAAAtQAAAAAAAAC1AAAAAAAAALUAAAAAAAAAtQAAAAMAAAC4AAAAAAAAALgAAAABAAAAAAAAAAEAAAABAAAADAAAAA0AAAACAAAADwAAAAAAAAAPAAAAAQAAABAAAAAAAAAAEAAAAAIAAAASAAAAAAAAABIAAAAEAAAAFgAAAAEAAAAXAAAAAQAAABgAAAAAAAAAGAAAAAAAAAAYAAAAAgAAABoAAAAAAAAAGgAAAAEAAAAbAAAAAAAAABsAAAABAAAAHAAAAAEAAAAdAAAAAAAAAB0AAAAEAAAAIQAAAAAAAAAhAAAABwAAACgAAAAAAAAAKAAAAAEAAAApAAAAAAAAACkAAAAAAAAAKQAAAAAAAAApAAAAAAAAACkAAAAAAAAAKQAAAAAAAAApAAAAAQAAACoAAAAAAAAAKgAAAAAAAAAqAAAAHwAAAEkAAAABAAAASgAAAAAAAABKAAAAAAAAAEoAAAAAAAAASgAAAAAAAABKAAAAAAAAAEoAAAAAAAAASgAAAAQAAABOAAAAAAAAAE4AAAAAAAAATgAAAAAAAABOAAAADQAAAFsAAAAAAAAAWwAAAAEAAABcAAAAAAAAAFwAAAAFAAAAYQAAAAAAAABhAAAAAAAAAGEAAAAAAAAAYQAAAAAAAABhAAAAAAAAAGEAAAABAAAAYgAAAAAAAABiAAAAAAAAAGIAAAAAAAAAYgAAAAAAAABiAAAABwAAAGkAAAAAAAAAaQAAAAAAAABpAAAAAAAAAGkAAAAMAAAAdQAAAAEAAAB2AAAAAAAAAHYAAAAEAAAAegAAAAAAAAB6AAAAAgAAAHwAAAAAAAAAfAAAAAEAAAB9AAAAAAAAAH0AAAABAAAAfgAAAAQAAACCAAAAAAAAAIIAAAAFAAAAhwAAAAEAAACIAAAAAAAAAIgAAAAAAAAAiAAAAAAAAACIAAAAAAAAAIgAAAAFAAAAjQAAAAYAAACTAAAAAQAAAJQAAAABAAAAlQAAAAEAAACWAAAAAwAAAJkAAAACAAAAmwAAAAAAAACbAAAAAAAAAJsAAAAAAAAAmwAAAAIAAACdAAAAAAAAAJ0AAAAAAAAAnQAAAAAAAACdAAAAGAAAALUAAAAAAAAAtQAAAAAAAAC1AAAAAAAAALUAAAAAAAAAtQAAAAAAAAC1AAAAAAAAALUAAAAAAAAAtQAAAAAAAAC1AAAAAAAAALUAAAAAAAAAtQAAAAAAAAC1AAAAAAAAALUAAAAAAAAAtQAAAAAAAAC1AAAAAAAAALUAAAAAAAAAtQAAAAAAAAC1AAAAAAAAALUAAAAAAAAAtQAAAAAAAAC1AAAAAAAAALUAAAAAAAAAtQAAAAAAAAC1AAAAAAAAALUAAAAAAAAAtQAAAAAAAAC1AAAAAwAAALgAAAAAAAAAuAAAAAEAAAAAAP4P/gEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAQD+D/4BAAABAAAAAAAAAAAAAAAEnFcorsSkCz8vYXAoZrKLi9czdIvLIYptbISOLuy4R+UtJGOUkjeYcwquPiSjBCSKdzYL5hFPVeFeiuj7326sDgEAAAEA/g/+AQAAAgAAAAAAAAAAAAAABKENAlZjoqOt8JYcEBe+cwOIqKJT7zsAKCtMrs3EuWwwtSVLx98tRkvMT4fBDqXKA0EVOBUxvDkH8YaUfnOg68wBAAABAP4P/gEAAAMAAAAAAAAAAAAAAATicyF5ykaU+LRxLNPrsv5Ob4Y4mq+6TyCocHOKpxRA5que4hrHXP3r+AkcJIjPZnTOHETpHPBvchlc+0WHnWP7AQAAAQD+D/4BAAAEAAAAAAAAAAAAAAAEGlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscgEAAAEA/g/+AQAABQAAAAAAAAAAAAAABC6Qf+eAfv9ieYakO4pmR33VN9TpYEKse2YnFZZJvZM4Pf8PBiixHBXyZf7ewwhA7njsgQA+swgsEzuhc7NDaBEBAAABAP4P/gEAAAYAAAAAAAAAAAAAAATxVt9Z8cttvC7f43o4qw4ykF1PiRc8MMH1wmTZsnqaH25zF2Wc28fV76uhiQqY303HDbKPPtXN472g7PbMnTg/AQAAAQD+D/4BAAAHAAAAAAAAAAAAAAAEUjCbBB2IeyMVoDyO16boHEsTus2npVtXyER2pfP0zm7rmp6ko65HA3OXvMzhMVq3hW9RQ5esc3mrkTnb19PIawEAAAEA/g/+AQAACAAAAAAAAAAAAAAABJp5HkNaj+VHtsHfmor0w9zR3f5Wfei7tI4H9KcJLSz7cenE2Yh+7cnhkUR7NM19K262oVz515VJ23l8mgQbiGsBAAABAP4P/gEAAAkAAAAAAAAAAAAAAARRxV9V9orhJzibtfd1RKgeijNAYEQV4ML7NWjTq33zF7wLMdJlkF6Q1cf627Q1qUeiVwn9AAapLjod5/tBcEgzAQAAAQD+D/4BAAAKAAAAAAAAAAAAAAAEKIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRAEAAAEA/g/+AQAACwAAAAAAAAAAAAAABHpY3IBA5RJ7P+wFxaLAeSv9pwjOD+xUD5BnPw1i8ua5hRFr2Wshq4pNXff0CGOZyeH/WLFbwZAOpCaR5/ayEnUBAAABAP4P/gEAAAwAAAAAAAAAAAAAAAQ34x5diiqvek6CfzF/JE9EQ3uAdqQtiOGweFYZPd9YCIvgiQC3SIPDXhCKISbZsTfRzldfmrQW0ADcIrl/38FSAQAAAQD+D/4BAAANAAAAAAAAAAAAAAAEWY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8XgEAAAEA/g/+AQAADgAAAAAAAAAAAAAABAOqf6bv+n8gXANU0c/xqlmD1YqZa37XFtoGQvau/Z4DQigHkf194HBHV0B5eCjV1ft8ICCdQj5CUNyBzOpXLMgBAAABAP4P/gEAAA8AAAAAAAAAAAAAAAS2PAzl7EyDoEZEj6Q2ZOe02y91lLVfwEVhLq2cnaF0fSRXEzr95VnbHL4WpK1Ja9ia18UwMsjG6uisfAMp8PPlAQAAAQD+D/4BAAAQAAAAAAAAAAAAAAAE9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1AEAAAEA/g/+AQAAEQAAAAAAAAAAAAAABHrYV07d0hhkfveYLnZqidXjYUTu3hhBiIGAPb5z2rSuP3rc9jBFQ56ORjAom3TE7gTMhJcyJYMTJ2tyveFwyA0BAAABAP4P/gEAABIAAAAAAAAAAAAAAARecAi9Dx4z6QLppQvHrC5CLBWyfOyL13dbHNXcWlZMYDX0XrbWTB1uwBwUpeApQdlazL6ZjqIvWwdPFYQULK0MAQAAAQD+D/4BAAATAAAAAAAAAAAAAAAE3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5PwEAAAEA/g/+AQAAFAAAAAAAAAAAAAAABIIS9Lc9VxvWRJkTHBDdr7e8Wm6w3ahx3spIAEaZmdAYiHLVsTOO1bet2TtnZ6eEGLf8SVSy8uWb9Zf8UXYdm8oBAAABAP4P/gEAABUAAAAAAAAAAAAAAAQuLkA6qtlYJUDafmSvLMSapqLpspIi+nPmhQkc9WPr52xsPdfWLG2xjm0Sexo2kfekUAeYbx4gdSu0S2iGuD5RAQAAAQD+D/4BAAAWAAAAAAAAAAAAAAAE8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdAEAAAEA/g/+AQAAFwAAAAAAAAAAAAAABBDw+atbl8hcSaQqy5wnNZx56t4Dmug2QaHACIiNk2kggO1QidVCQzGoAsyJFzbFGHw9XWiv/y0xEPMYiG6x7XMBAAABAP4P/gEAABgAAAAAAAAAAAAAAASf9KGe8OLoUdttV++Kuj5aiOIXO/6zww8wcFzNV499SkMkvCgtPSG3WXhjAEJuLykkC94QR2eQfI/JM/+bNF/CAQAAAQD+D/4BAAAZAAAAAAAAAAAAAAAEGd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+gEAAAEA/g/+AQAAGgAAAAAAAAAAAAAABN6LlDqUIbYK2zmteye/rsTk6SE2Fmhj+/wIaEd/gPv9XvbJK83pRov3V8xGMr28bmxBelp9sqbHEyoiiRRZ9WoBAAABAP4P/gEAABsAAAAAAAAAAAAAAARUuCEhY0zoQtDOjvPCZyDQ2ZNXJYpiO8h4zzfKOnTBENOZSeszrvx9BtwoGjqfYIkQXSzOgb//K2D5MqVrz0AtAQAAAQD+D/4BAAAcAAAAAAAAAAAAAAAEk/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQEAAAEA/g/+AQAAHQAAAAAAAAAAAAAABGUAb4tQ3KSeBg6mp47nGdh498BDuaWQ0vPQVm5HK73cZLCaK8FAw2Wpl/ZXRZKfWsNpZgQy4JDmxAOA1jSfRWEBAAABAP4P/gEAAB4AAAAAAAAAAAAAAATiEsHw/LjNlx7mzjJ31fOimrBW//IY2FXUGXw1OYKrXvrcd4rb4TBVO/6V4Z4vXcOeHbB9uqjBU9cIg7TPi1pjAQAAAQD+D/4BAAAfAAAAAAAAAAAAAAAEUaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQEAAAEA/g/+AQAAIAAAAAAAAAAAAAAABF1zhbcqg4zQwEMVX2Mbhe4PSJfyG1pppUINjGCjh/BMSE9aoOsXOM8ktx2hBAE4LNW7X88ateXIlImO4I0l0RkBAAABAP4P/gEAACEAAAAAAAAAAAAAAARfqampS/n25YsYPifeFnwK7wpsXY8xY9IVibFmN2SmbfI5TuFJRifNORkjWZxapyGmG+rK7Pf8GGAFHgT8m2QKAQAAAQD+D/4BAAAiAAAAAAAAAAAAAAAE5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9QEAAAEA/g/+AQAAIwAAAAAAAAAAAAAABBb3mUzbhsNOHMZQIlm84us0wC/5YXoWlm07YJbiYePxPeQ6jME5oWtymTdWgFgPHBSIR8zGVLy3r5MOUapPrUkBAAABAP4P/gEAACQAAAAAAAAAAAAAAASundKjTspx2aYpsa+Bo3FBImvtsZVJWTlL0SrUX6mltGjvT5h5oPGTDkN3w0834YPpuOdibZW4+4Jeam5i+YJdAQAAAQD+D/4BAAAlAAAAAAAAAAAAAAAEcCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1wEAAAEA/g/+AQAAJgAAAAAAAAAAAAAABEAA85Wh3PInFfCO722iVycKHfR1mKfLgqn9cWuDnzbtU+yVcUCK1IDlrR3TQ7T4ssJhW4ktdlY6LSFy6yjN6K0BAAABAP4P/gEAACcAAAAAAAAAAAAAAAQTksNftaunzkqKXluFm/jqPyM55ugqrkkyZgzeBUZ0YfzEWk9ZdQyw2uU4MKuSjEwR42L9dkjC5G9jhc3BgwmnAQAAAQD+D/4BAAAoAAAAAAAAAAAAAAAE5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQEAAAEA/g/+AQAAKQAAAAAAAAAAAAAABDwlQELMFnprulHcbAxRV//oFXmKigKHdw91FZvdYx8Mp4LjsAL2D4cfJzZTPvjakXCugscaVGn45oSHSoh4m6oBAAABAP4P/gEAACoAAAAAAAAAAAAAAARca5EM2NdSKOxQvS+XqdIPtzBRG7MSCCVs5oW5kz2DeTANc5ZVNyTSMvOM/MYP5NrNZtuhli7nb/39c91SCd72AQAAAQD+D/4BAAArAAAAAAAAAAAAAAAENiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9owEAAAEA/g/+AQAALAAAAAAAAAAAAAAABEzyV6vCahWlWJtglpj75z9iMqOGUjO/0CnEprjCwzm36R+X4u0VBpnf60w3/q7rf7Gog4kBHlUzYAJiRHQDsdMBAAABAP4P/gEAAC0AAAAAAAAAAAAAAAQKLJ47EVP8lnI3mbTP099fDhIIEnpLKDPUOmXTCqOWEMQYYE/UaexRUQvSnreGgbV9yPd8fKdeL01g7idY4v6pAQAAAQD+D/4BAAAuAAAAAAAAAAAAAAAEqqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXgEAAAEA/g/+AQAALwAAAAAAAAAAAAAABB64LMfqK6qMoJ5oRWymhxOnNveifh0wEF6MRBeoDbqUTpphiUaMs3xt3HAL3qgga8K/9ssUOQVXfxk5eWoDsEoBAAABAP4P/gEAADAAAAAAAAAAAAAAAAShWXOSDcQ0CEKTbN2/sgnB39BQPjPZHFHCmRwZjymwJVwJhk2rjBidVYAscz5uu24mN49aJgX8KWa4OvwKHn6SAQAAAQD+D/4BAAAxAAAAAAAAAAAAAAAEWMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlowEAAAEA/g/+AQAAMgAAAAAAAAAAAAAABBbcKxv3rgc2hI2HkajoJcuxtKr4ol6CVp7xB9mdaZQXV4G8o79+KR00m/c6HhzMg8t9/g1suVrfVqPk1EbTmEkBAAABAP4P/gEAADMAAAAAAAAAAAAAAASjmxI8oSSD8MhA2YfjdXT+56suunNV52RSHy0Y29p5el+m7CMp6eVKjH/Y78FOVlS0R74kbuzliETPrTw+UAdEAQAAAQD+D/4BAAA0AAAAAAAAAAAAAAAERwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQEAAAEA/g/+AQAANQAAAAAAAAAAAAAABIO5x+j+ncg4qCaIAABqaxqQrVSJiYaT5P66As3W93yIetf7P5z7H0eqJ8jMJAgEfzpQt8gQtJREr1KEBALLCK8BAAABAP4P/gEAADYAAAAAAAAAAAAAAATawkYlNpcghpHXDiIlI2g3SGcxjsalz+fwPipIInDxCoVZd/ty4CCcQfEGnB5pVw968LaXcqmNgLHc3KlBCBomAQAAAQD+D/4BAAA3AAAAAAAAAAAAAAAEzJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8QEAAAEA/g/+AQAAOAAAAAAAAAAAAAAABGwuxJa3SWiZz2wD/tRKLWL6mbG93nJecIugX4ugSU1HDaMKenL7KYNI1850Uyg45vxOwHYBQVXgD1TDXChrBzABAAABAP4P/gEAADkAAAAAAAAAAAAAAAROmnrQ/ohQkNO46r/lnxx2yTMm6N/Cp85OSvAjCPshEhKmeQmdPpLIng8I+cYygWML112FqXkpUhi0C33uLHTkAQAAAQD+D/4BAAA6AAAAAAAAAAAAAAAEx0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQegEAAAEA/g/+AQAAOwAAAAAAAAAAAAAABGiC+Rce5msFWt9NGpdgZxBOIjb6NahE8S6zyP6NOS+8+oKO3wsNSehEJmyuBZidgEu5IFRfyhGVrnwX3QpTHD4BAAABAP4P/gEAADwAAAAAAAAAAAAAAAToWXO5tMtkbcnZr81UICV4SGPOrmjGAfJoJT3Jhe9wuy+hVocmr+znFcjr9dc/q3PtH3EA60edI7+1e0XdZFOUAQAAAQD+D/4BAAA9AAAAAAAAAAAAAAAE5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISgEAAAEA/g/+AQAAPgAAAAAAAAAAAAAABKY8tm2IUrLn8FpSsD3Ppd3De/sLiZSurs9GHSRDpUA25eo6P2JT4uJm/GoFJFQvARe1fDbs3sjzakZLAN4c7SkBAAABAP4P/gEAAD8AAAAAAAAAAAAAAASdOOp9wEUSKkp1cK/hgNBYJ+ZwtkqbzWV0XSkCilO/KsUZVtxHo/9UAB3kbs37S1OvxCqJTS0Vp0PoUrg20nA4AQAAAQD+D/4BAABAAAAAAAAAAAAAAAAEpMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hAEAAAEA/g/+AQAAQQAAAAAAAAAAAAAABJpfaUXgrtzOtZBpaqE5trpkl05UU7hk8dG32I/riFCimMnBuTbUm3nrVd32klOke2ozj8NIPydT7yuKjcu7OWwBAAABAP4P/gEAAEIAAAAAAAAAAAAAAAS/cxedkBy+fLCRNQRmiYgBy2V7tFdd5505HfXDCXtWXKhc7hCL1qu9J6c1Bad7VNxHCEIvUfAsjbVsSp2mPz+sAQAAAQD+D/4BAABDAAAAAAAAAAAAAAAEYZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtgEAAAEA/g/+AQAARAAAAAAAAAAAAAAABPMxqsqXxDYwiKhoYF06AvGgdq+2KwV/gEAHyD7PzJZPgbT087Tr00tNTUVv9xIetCfmuPJbfKrAs4q0OpaAlXwBAAABAP4P/gEAAEUAAAAAAAAAAAAAAAT81/tPLNPHpLfJEk5s4BXv3nqvxyvb46PwALl23zBI/cFACh5fnw2gfIJTw/zMaQ1dK2NNKLp/M7oXSkF1xhsSAQAAAQD+D/4BAABGAAAAAAAAAAAAAAAETkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8gEAAAEA/g/+AQAARwAAAAAAAAAAAAAABHavqnpUPWpB6XDpf4FFUU8VSDpACdcEd0AL2+EbFY0vKFaBYwxk3Ou/cCWJlJpJ1BeR8DCzoG+TvmtysX1mqT0BAAABAP4P/gEAAEgAAAAAAAAAAAAAAARkNj5s+bnNNMX5ikKsBT2crRSAgJg9PRC1PU1lYW/iz75M2RyBVpPSDr7hHa4jgyNCPPKwcHXPG5YvnSHNp5eLAQAAAQD+D/4BAABJAAAAAAAAAAAAAAAEsPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvgEAAAEA/g/+AQAASgAAAAAAAAAAAAAABDL46DAicBGq0m1GJOTvp5qEs0rrUrE8BfOc3Bz0PTq5RaGTmCI2qgQCSKiF46bcg+b04cRqudl7vzGic0ZCJOEBAAABAP4P/gEAAEsAAAAAAAAAAAAAAAR8Nb8RnpD1GI7x4UbweP7u7+hb5es9MgKHAI4zb62HYDo5uUO1hgim972b4q8j1ngL2pIReVoZHptMRgdF66CUAQAAAQD+D/4BAABMAAAAAAAAAAAAAAAEIRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3gEAAAEA/g/+AQAATQAAAAAAAAAAAAAABObmIbCR/FSQU7+6LJYOAc5yWIQ6ESOsGmAsTJgnZ063AqxwP3whSqExc9iSihNB3QxVBe/6ELoc7plySu6WgUUBAAABAP4P/gEAAE4AAAAAAAAAAAAAAATSElT1II++YzMgF1kWo09dZrp2qHtZ0fRwgj3L4LJLysbecvjwFyWtr0eYqFVVQfI9Y0fljvEPAAHtt+BKORQxAQAAAQD+D/4BAABPAAAAAAAAAAAAAAAE7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SAEAAAEA/g/+AQAAUAAAAAAAAAAAAAAABJdywrhejIAzcEwypHWBhIoWI7eaUT2xIOOq7ZZp0j5VG4JgfCziKyiW2GBQUm5z2iXsTCrYjzvIZnkY0c9k3fgBAAABAP4P/gEAAFEAAAAAAAAAAAAAAARInVqZkAlSJlL4+GxUt/m0bJ2VpUHwR0WlpI7iCaJQpQ7GTyrOfkAjLhl4lSaHbbOch2T+4wBRPamXcXHNVQf5AQAAAQD+D/4BAABSAAAAAAAAAAAAAAAEZf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6cswEAAAEA/g/+AQAAUwAAAAAAAAAAAAAABBh00jUmCAkO7HB+7GfjNqxaKUaC4fLdmy0lugW4K7S7GoTiAeYsgFSX/Ro1it3GEw2jI+F3QaTNXAOqSEtCr9sBAAABAP4P/gEAAFQAAAAAAAAAAAAAAASmBFziEnj+w2NYJJL0CadLjTHds0wNOSceAvlRowFMzImdT3QSBaHVHP4wL14W7gG439TBmMpC5j/W/eszscx+AQAAAQD+D/4BAABVAAAAAAAAAAAAAAAE55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrgEAAAEA/g/+AQAAVgAAAAAAAAAAAAAABI8WsiykoaxKqsydHrpkG1YU2EDNuwn09U9+foAoAxaC/NiS7F6kye+s7+gNGCzoBJy1DLy87A7BiK5fDRaU9oEBAAABAP4P/gEAAFcAAAAAAAAAAAAAAAR3rls2Uhp3G+lv8DZptV2WoqpXnreO5GdnVa2TqzWwhHy42xdHvTGojNWrFV/V5OoO6fBPYyRzMR5p7MIpNmHAAQAAAQD+D/4BAABYAAAAAAAAAAAAAAAErBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+AEAAAEA/g/+AQAAWQAAAAAAAAAAAAAABJZULDC0lA1D0+OI3a1Pzt+6pZ4n4rQz/mcK5pmXKEisiyr7WcacldJ9v2w/zeLQQAGf4CRHWVOyjK2qCtfl2AIBAAABAP4P/gEAAFoAAAAAAAAAAAAAAATQoj/rTvGjFJOgfsaM3UV9JsuhTT5u1OJyOxBJZCWH+FnKQ3wqmYx/u5jA9bdH5qRnpH/DXxmVdIcFheJhQ87eAQAAAQD+D/4BAABbAAAAAAAAAAAAAAAEbuRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYowEAAAEA/g/+AQAAXAAAAAAAAAAAAAAABInJQB3jajZuvMxbZ2dHvtS9slCHb8zaGrilOFgQN1bx/7zxYnhe6n0ZcFGVPgwPT/Wz1yEvdLpcaFKAh9t7FdsBAAABAP4P/gEAAF0AAAAAAAAAAAAAAAQ9gC2FNrabZUrG69IPcM8L8bL5T6w4DUsC5PyaSZG6/D40AJJp5cRD40dxUXus42XqpxrFXdS56bBrCT7v5IkvAQAAAQD+D/4BAABeAAAAAAAAAAAAAAAE+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBgEAAAEA/g/+AQAAXwAAAAAAAAAAAAAABFO9XMk2prodQkTQn6RmOraNvJcbzcDxuBrs/xFY4H9yZs79L5Q6dWrU/XkuXQ4zGB7nKR21p7Oi8H9wSs+rL3cBAAABAP4P/gEAAGAAAAAAAAAAAAAAAAQE0ZtYt93R5Q9puGRdRWbSPy669ETJOHmi9Fr93KjD8GoBtknIL7l9T4jNA7OYArNiphEAhKhGF1Cvd4hn89eqAQAAAQD+D/4BAABhAAAAAAAAAAAAAAAEVVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEgIAAAEAAAiAAAAAYgAAAAAAAAAAAAAABAR6RRXrJZFq11slD52ypvsWGFWK7gopxnH7UgWmvM6BfYWTuAXEghVLx1U7c6SGOmM1J2LbhIWfgvYhF48Z2rIBAAABAAgAgAAAAGMAAAAAAAAAAAAAAAQFxovRWfpDALCt7djvXudUdlsBrhQESKDMWbpV2xV1P8xtnfzGiPVf0c+RmFuZoEZQPVby/EB999sN7xsDoAqdAQAAAQAEAIAAAABkAAAAAAAAAAAAAAAE4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6AEAAAEAAAhAAAAAZQAAAAAAAAAAAAAABEQUU9oKhJdCCkAAU+F04+/LaZPb+3oafpms59h21HmZdWDHWhgEKoWqYxkwnu7sO8tH6w4uIEtLh84b6RbiNbABAAABAAAIIAAAAGYAAAAAAAAAAAAAAARpjaAyYqY+HF9T7QR2c35c20ZuN9CDBmPjeTwbd/KsMz9R1nDDrGtbGYOS7PZ4JlyGpV4AGNXkGmKV06tRsFOoAQAAAQAEACAAAABnAAAAAAAAAAAAAAAE3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+QEAAAEAAAgAAAAAaAAAAAAAAAAAAAAABGnrxJAjbuypT0aWC48JnXLjc+mwxYhO2fFwuAj6hMY076x7oIdvEM1F1TmbYmIIXIilGnDZLasXacpqZYpdW3gBAAABAAAIEAAAAGkAAAAAAAAAAAAAAAQRXr6i9OwRcI8CnnyDZ0PrwvGg//ArmlG+DLQn8fE8YHTT2iYU+/dh63QeJqq+siuA9MG4LrAIfUtM5j3UQ7mFAQAAAQAAAhAAAABqAAAAAAAAAAAAAAAE9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDwEAAAEAAAAQAAAAawAAAAAAAAAAAAAABOQFeD86fNH4Ry/NyTOi6AOqU0FVoAdR6LzAbC0PTmViw6lWPDFaGwVzUpgCYv/wrIerXGO3uy58th4NbRJTIyABAAABAIAAEAAAAGwAAAAAAAAAAAAAAAR0o3x+BWp3S9QiPG4kjo//1JJJ7+YH2u8D3wJIfawmeVn84JlY7UMm/GPyO8pN9hR0Z9yrZ0PGgpoLpse5OWBzAQAAAQAAABAAAABtAAAAAAAAAAAAAAAEnrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3QEAAAEAAAAQAAAAbgAAAAAAAAAAAAAABFcdPS8xKAWucw54nh/C0jEU6I+4q/yXqtBruqif9RnAavRpH6BAKF7y4ltVPSdahP2Pzsmqt98OadmVqzTRzRMBAAABAAgAEAAAAG8AAAAAAAAAAAAAAARVM3gS44fBcSRfNfmdO9VjizsT8qvPsI4LzGR+1tspFgCX3q8+JSywaR4wQtAw6cs4nyTcFjX5ljna221mcdxdAQAAAQAEABAAAABwAAAAAAAAAAAAAAAE/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754gEAAAEAAgAQAAAAcQAAAAAAAAAAAAAABAl15M4J/nVwD7N1gcBPir563+FhAsAXX433mB6THlcVhNBHHger4VhkobOsItCGBKjEiM3ThdV40PzJJuXe2XUBAAABAAAICAAAAHIAAAAAAAAAAAAAAASUrV4l7KTVlfxSSWoV3/cDrRS5n/pRV8ZPYu4ajdanj/Pt5FNFhj7TE67aSkKU/68xOL3Ao59eLa+NSk7VGjvqAQAAAQAEAAgAAABzAAAAAAAAAAAAAAAEh1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhAEAAAEAAAgEAAAAdAAAAAAAAAAAAAAABGgpanYEw1T0hBoKAkvEAxt+xrvMnPZUxzQEJbM7UOhDXrShDv/2/Mt9TDLtmWj25+JFbCAAc1S12C4QhnpBg6sBAAABAAQABAAAAHUAAAAAAAAAAAAAAARixLZ7da2CfDtarnddcEtxXomFGwSryGR+D3URJVp0ivOv3A7qMkMxmcJBsebUa5zm38J0OIVJJ9Y/nwU269PdAQAAAQAACAABAAB2AAAAAAAAAAAAAAAEnlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlRegEAAAEABAAAAQAAdwAAAAAAAAAAAAAABMcOdIqcpF3C7LS3lh+1kXULsrCano7gBj3d9L3dYuc0siit1hPoo8x5iysXYgjLR9aR8+/KzoNASkmDkgf9iocBAAABAAIAAAEAAHgAAAAAAAAAAAAAAAS7Pr+0TLYgWb1Fg7K8qXzzN3Nl/AR8pmadf0KPUEeN5IY24Yu4wPWRHzLlu15ibCoqbW2Pybhxv9ooSiuvp8dZAQAAAQCAAAIAAAB5AAAAAAAAAAAAAAAE6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQEAAAEA/g/+AQAAegAAAAAAAAAAAAAABAMzkSnc9Wbfe0822EJyKyN2Yom1qUV1H6aP8NMTidtBqTWHdm3dzFPZt9c0v2idUyZeiXy06JPN2PB4zbp2E9ABAAABAP4P/gEAAHsAAAAAAAAAAAAAAAQ8lYdRvVEV68oLBoUD1GUbm0J34U7mJGH0DwcS2SYEfYuLTeImuIHqbokg3isbPcrcktrAjv+94DXHNEo/ohIHAQAAAQD+D/4BAAB8AAAAAAAAAAAAAAAEWjvinW/rM9KEauFCgiRU1VM6Vn4zvv0bPy6DcvjHLNKl1F9cLMW0axsqGqcpQdEr9X9A5V4lWV2cNiXTDUZXhQEAAAEA/g/+AQAAfQAAAAAAAAAAAAAABDLu0dIOIoPU1LhksSWr58uUb9HoAhLaWUTTK2WmEtb8ZIiMRohlMKHs1Ny2syEPihNOIU603zT4MVOYM4uxeT8BAAABAP4P/gEAAH4AAAAAAAAAAAAAAATh8KTv3CyEx3MynasfTqpaskTiKiWouEJQf46K4iBT75EHT73g2UMvzVq07sZfnm5Qq56jS3Ec228TIjoPtZ0zAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAd21pbGwAAAAMAAAACwAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAPAEAAAoAAIBGAQAADAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAkwIAABMAAIBjbGkuanMAAAIAAAAoAwAACQAAgGNsaS5qcwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAbWltZQAAAABjbGkuanMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAZXNidWlsZABGGgAACwAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASH4AAAAAAADAfgAAAAAAAAo8c3JjLmluc3RhbGwubG9ja2ZpbGUuVHJlZT4gMjAgc2l6ZW9mLCA0IGFsaWdub2YKAAAAAAAAAP7/////////AAAAAHsAAAABAAAALwAAAAAAAAB7AAAAAQAAAAIAAAA5AAAAAAAAAHwAAAABAAAAAwAAAB8AAAAAAAAAfQAAAAEAAAAEAAAAcAAAAAAAAAB+AAAAAQAAAAUAAAAmAAAAAAAAAH8AAAABAAAA8H4AAAAAAADwgAAAAAAAAAo8dTMyPiA0IHNpemVvZiwgNCBhbGlnbm9mCgAAAAAAAAAAAAEAAAACAAAAAwAAAAQAAAAFAAAABgAAAAcAAAAIAAAACQAAAAoAAAALAAAADAAAALUAAAC2AAAAnQAAAJ4AAACfAAAAoAAAAKEAAACiAAAAowAAAKQAAAClAAAApgAAAKcAAACoAAAAqQAAAKoAAACrAAAArAAAAK0AAACuAAAArwAAALAAAACxAAAAsgAAALMAAAC0AAAAKgAAACsAAAAsAAAALQAAAC4AAAAvAAAAMAAAADEAAAAyAAAAMwAAADQAAAA1AAAANgAAADcAAAA4AAAAOQAAADoAAAA7AAAAPAAAAD0AAAA+AAAAPwAAAEAAAABBAAAAQgAAAEMAAABEAAAARQAAAEYAAABHAAAASAAAAB0AAAAeAAAAHwAAACAAAAAbAAAAEgAAABMAAAAUAAAAFQAAAA0AAAAOAAAAuAAAAH0AAABOAAAAUQAAAFQAAACbAAAAnAAAAHsAAACZAAAAmgAAAGsAAABtAAAAcAAAAF0AAABgAAAAWwAAACkAAAAhAAAAIwAAACQAAAAmAAAAJwAAABwAAAAYAAAAGQAAABcAAAAPAAAAfgAAAH8AAACAAAAAgQAAAHwAAAAaAAAAiAAAAIoAAACMAAAAhAAAAIUAAACGAAAAjQAAAJEAAACSAAAAYQAAAHEAAAAlAAAAeAAAACgAAAAggQAAAAAAAASEAAAAAAAACjx1MzI+IDQgc2l6ZW9mLCA0IGFsaWdub2YKAAAAAAABAAAAfAAAAHsAAAB6AAAAYQAAACIAAAAhAAAAFAAAABEAAAAIAAAABwAAAAYAAAACAAAABAAAAAMAAAAFAAAA//////////8NAAAADAAAAAoAAAAJAAAACgAAAAsAAAAPAAAADgAAABAAAAASAAAAEwAAAB8AAAAeAAAAFgAAABUAAAAdAAAAHAAAABsAAAAaAAAAGQAAABgAAAAXAAAAGQAAACAAAABKAAAANQAAADsAAAAuAAAAYAAAADgAAAA3AAAAXwAAAF0AAABcAAAARgAAAC0AAAA0AAAALAAAAFkAAABBAAAAKwAAADIAAAAwAAAAJAAAAEAAAAA/AAAAPQAAAC8AAAAqAAAAKQAAACgAAAAnAAAAJgAAACUAAAAjAAAAJAAAAC4AAAAtAAAALAAAACsAAAA8AAAANQAAADsAAAA6AAAAOAAAADcAAAA2AAAANAAAACwAAAArAAAAMgAAADAAAAAvAAAAMQAAADUAAAAcAAAAJwAAADQAAAAzAAAAOQAAADgAAAA+AAAALQAAADQAAAAsAAAAKwAAADAAAABKAAAANQAAAEUAAAA4AAAAPgAAADYAAABGAAAARAAAAEIAAAAyAAAAMAAAAD8AAABDAAAARQAAAD4AAABCAAAAMgAAAEgAAABHAAAASQAAAEsAAABTAAAAUgAAAE0AAABMAAAAUgAAAE8AAABRAAAAUAAAAE4AAABPAAAAVgAAAFIAAABPAAAATQAAAFQAAABYAAAAUgAAAE8AAABNAAAAVwAAAFUAAABWAAAATQAAAE0AAABWAAAAUgAAAFcAAABbAAAAWgAAAEgAAABeAAAAeQAAAHgAAAB3AAAAdgAAAHUAAAB0AAAAcwAAAHIAAABxAAAAcAAAAG8AAABuAAAAbQAAAGwAAABrAAAAagAAAGkAAABoAAAAZwAAAGYAAABlAAAAZAAAAGMAAABiAAAAfgAAAH0AAAAGAAAAQwAAADiEAAAAAAAAApcAAAAAAAAKPFsyNl11OD4gMjYgc2l6ZW9mLCAxIGFsaWdub2YKAAAAAAAAAAAADAAAgI1zKrYH9UEnAgJsYXRlc3QAAFkAAAANAACA5NOL1K5eN/QCASoAAAAAAAAAZGlmZgAAAADoeHbUjUyJGgIBKgAAAAAAAABlcy1tYWluAJddJlhj+CUJAgEqAAAAAAAAAGVzYnVpbGQAECM9Q3cH87cCASoAAAAAAAAAZXhwcmVzcwAtSsZFcS5vHgIBKgAAAAAAAABmAAAAEAAAgGI1+rrrUq2yAgEqAAAAAAAAAGpzemlwAAAAoQBkxxiP6IsCATMuNy4xAAAAdgAAAAkAAIAfAuJeUe7ucAIBKgAAAAAAAABvcGVuAAAAADr/hharBd0CAgEqAAAAAAAAAH8AAAAPAACAmQ1nY/ePqP8CATEuMzY0LjAAd3MAAAAAAAAHBEl9uI48ywIBKgAAAAAAAACOAAAADwAAgNWq2smIYlF9AgF+MC4xOC4wAHdoaWNoAAAAzG2O96NP8kYCAV40LjAuMAAA3gAAABQAAIAJKyyMX5WYegIBXjAuNS4wAABpc2V4ZQAAAKgsV9pTEurXAgFeMy4xLjEAAOMBAAAKAACAaHOu//oPq2kUAV40LjAuMQAA7QEAAA4AAIDQNRRUWdz0BxQBPj01LjAuMgB0AgAADwAAgI8IHuihc6XXAgFeNS4yLjEAAIMCAAAQAACAer8U4BQRFfkCAV4zLjAuMAAAkwIAABMAAIBFkWS7eXM3BAIBXjEuMC4wAABpcy13c2wAACLwpdtElNniAgFeMy4xLjAAAJMCAAATAACARZFku3lzNwQCAV4xLjAuMAAAKAMAAAkAAIB46KOUH/7zMwIBXjMuMC4wAAD5AwAACwAAgDCQVnHT53CAAgFeNC4xLjAAAAQEAAASAACAObU7XSINiuQCAV41LjAuMAAAoAQAAA8AAIBIujVbFIwuIwIBXjcuMC4wAAAwBQAADwAAgFm/7gWc3u0oAgFeMi4wLjEAAIUFAAAOAACAV1HUTV3yyeECAV4xLjAuMAAAbGllAAAAAADTdEgCZ3zjywIBfjMuMy4wAABwYWtvAAAAAM8pG9voSJrmAgF+MS4wLjIAAAkGAAAPAACAy+0FWEEmvzYCAX4yLjMuNgAAGAYAABIAAIB4r8YiHE2YwgIBfjEuMC4xAAC8BgAADAAAgLaHobhFb4imAgF+MS4wLjAAAGluaGVyaXRzEZrqFxjf1GcCAX4yLjAuMwAAaXNhcnJheQAT3n2/02M5EgIBfjEuMC4wAADIBgAAFAAAgMs7RjuXe6VPAgF+Mi4wLjAAANwGAAALAACAIdsvXideIecCAX41LjEuMQAA5wYAAA4AAIC70uZiqHO0hwIBfjEuMS4xAAD1BgAADgAAgKIz1k6fpfk3AgF+MS4wLjEAANwGAAALAACAIdsvXideIecCAX41LjEuMAAAJgkAAAkAAID0i2YEy18wuQIBfjMuMC41AABxcwAAAAAAABd4g2ZtnfPNAgE2LjExLjAAAGRlcGQAAAAANI6wQrw4bHACATIuMC4wAAAAZXRhZwAAAAC7ZxljywG5KgIBfjEuOC4xAABzZW5kAAAAADbN6Dqnruj9AgEwLjE4LjAAAHZhcnkAAAAAEODbZNTJjIgCAX4xLjEuMgAAZGVidWcAAACOgwA04RrKxgIBMi42LjkAAABmcmVzaAAAAPvAEofFYG+dAgEwLjUuMgAAAGNvb2tpZQAAk9Ok5DFT7QUCATAuNi4wAAAAYWNjZXB0cwDUwAdE5/m4lAIBfjEuMy44AABtZXRob2RzAOTREZCuNl/tAgF+MS4xLjIAAHR5cGUtaXMAc1/8HZD4iEECAX4xLjYuMTgAcGFyc2V1cmxyEL+38vlckAIBfjEuMy4zAABzdGF0dXNlc+EbwvSEawHxAgEyLjAuMQAAAOgJAAAJAACAtKjieg83rvQCAX4xLjAuMgAA8QkAAAoAAIBtxKN+P97YUQIBfjIuMC43AAD7CQAACwAAgCzK1eyt0BNFAgExLjIwLjIAAAYKAAALAACAyT/azL6Im7QCAX4xLjAuMwAAEQoAAAsAAIBNmb434wqMrgIBMi4wLjAAAAAcCgAACwAAgDhFZaJiAxdbAgEyLjQuMQAAANwGAAALAACAIdsvXideIecCATUuMi4xAAAAJwoAAAsAAIBW4e40rUYulQIBMS4wLjEAAAAyCgAADAAAgBtg85GEWxZQAgF+MS4wLjQAAD4KAAAMAACAalsvWr3TBCQCATEuMi4wAAAASgoAAAwAAIAG6CHMTQoMsQIBfjEuMi4xAABWCgAADAAAgJt8LAXlw/fhAgExLjE1LjAAAGIKAAANAACAhE8IbjyDmVoCATEuMS4xAAAAbwoAAA4AAIALdmd/1d/+KwIBMC4xLjcAAAB9CgAADgAAgHc+72XAbJAuAgExLjIuMAAAAIsKAAAQAACAm7wrtz55sToCATEuMC42AAAAmwoAABEAAIBO2nb6bnC+KgIBMS4wLjEAAACsCgAAEwAAgN1DQdzdUfqpAgEwLjUuNAAAANwGAAALAACAIdsvXideIecCATUuMi4xAAAAc2VuZAAAAAA2zeg6p67o/QIBMC4xOC4wAABwYXJzZXVybHIQv7fy+VyQAgF+MS4zLjMAAOgJAAAJAACAtKjieg83rvQCAX4xLjAuMgAABgoAAAsAAIDJP9rMvoibtAIBfjEuMC4zAABtcwAAAAAAAKS0xNW1149IAgEyLjEuMwAAAGRlcGQAAAAANI6wQrw4bHACATIuMC4wAAAAZXRhZwAAAAC7ZxljywG5KgIBfjEuOC4xAABtaW1lAAAAAGYjhtftD4ECAgExLjYuMAAAAGRlYnVnAAAAjoMANOEaysYCATIuNi45AAAAZnJlc2gAAAD7wBKHxWBvnQIBMC41LjIAAABkZXN0cm95AI5ukc7EeeM1AgExLjIuMAAAAHN0YXR1c2Vz4RvC9IRrAfECATIuMC4xAAAA6AkAAAkAAIC0qOJ6Dzeu9AIBfjEuMC4yAAAGCgAACwAAgMk/2sy+iJu0AgF+MS4wLjMAABEKAAALAACATZm+N+MKjK4CATIuMC4wAAAAHAoAAAsAAIA4RWWiYgMXWwIBMi40LjEAAABKCgAADAAAgAboIcxNCgyxAgF+MS4yLjEAAGVlLWZpcnN0EI95h4xd7WgCATEuMS4xAAAAZGVwZAAAAAA0jrBCvDhscAIBMi4wLjAAAABpbmhlcml0cxGa6hcY39RnAgEyLjAuNAAAAH0KAAAOAACAdz7vZcBskC4CATEuMi4wAAAAc3RhdHVzZXPhG8L0hGsB8QIBMi4wLjEAAAC9DgAADAAAgN2MxpELDActAgExLjAuMQAAAG1zAAAAAAAApLTE1bXXj0gCATIuMC4wAAAAZGVidWcAAACOgwA04RrKxgIBMi42LjkAAAB1bnBpcGUAAI5Z65l4KC2bAgF+MS4wLjAAAHBhcnNldXJschC/t/L5XJACAX4xLjMuMwAAc3RhdHVzZXPhG8L0hGsB8QIBMi4wLjEAAADoCQAACQAAgLSo4noPN670AgF+MS4wLjIAAAYKAAALAACAyT/azL6Im7QCAX4xLjAuMwAAHAoAAAsAAIA4RWWiYgMXWwIBMi40LjEAAABxcwAAAAAAABd4g2ZtnfPNAgE2LjExLjAAAGRlcGQAAAAANI6wQrw4bHACATIuMC4wAAAAYnl0ZXMAAACoyDXETbrmbQIBMy4xLjIAAABkZWJ1ZwAAAI6DADThGsrGAgEyLjYuOQAAAHVucGlwZQAAjlnrmXgoLZsCATEuMC4wAAAAZGVzdHJveQCObpHOxHnjNQIBMS4yLjAAAAB0eXBlLWlzAHNf/B2Q+IhBAgF+MS42LjE4AHJhdy1ib2R5eDRcfoC3JYICATIuNS4yAAAA9BEAAAoAAIDJrz66ZFQ8IAIBMC40LjI0AAARCgAACwAAgE2ZvjfjCoyuAgEyLjAuMAAAABwKAAALAACAOEVlomIDF1sCATIuNC4xAAAAMgoAAAwAAIAbYPORhFsWUAIBfjEuMC41AABHEgAADAAAgPkNIrUVQKDwAgE7EgAADAAAgGJ5dGVzAAAAqMg1xE265m0CATMuMS4yAAAAdW5waXBlAACOWeuZeCgtmwIBMS4wLjAAAAD0EQAACgAAgMmvPrpkVDwgAgEwLjQuMjQAABEKAAALAACATZm+N+MKjK4CATIuMC4wAAAANBMAAAoAAIAvAZOXXsth9AIBfjIuMS4yNAA+EwAACwAAgGJZp4Gw5o84AgEwLjMuMAAAAG1pbWUtZGIAw8Wk8f3GpW4CATEuNTIuMAAAKBQAAAwAAIANFvha8IzgfQIBXjEuMC40AAB0FAAACQAAgD9e8nb6Q5+sAgFeMS4wLjcAAH0UAAAJAACAJU0hoMQ/3BMCAV4xLjMuMAAAhhQAAA0AAIDsrz2hFLVVKAIBXjEuMi40AACTFAAADgAAgEV5Qpq7wUUNAgFeMS4xMy4xAH0UAAAJAACAJU0hoMQ/3BMCAV4xLjMuMAAAKBUAAA0AAICbmcoacW24CwIBXjEuMS4yAAA1FQAACQAAgB0c/X+RqufJAgFeMS4wLjEAAD4VAAALAACAB5yRzCOD5qICAV4xLjAuMwAAaGFzb3duAABIP4sJiUrg0AIBXjIuMC4wAAAoFQAADQAAgJuZyhpxbbgLAgFeMS4xLjIAAKsWAAASAACAGJ97mY2oVDICAV4xLjAuMAAAfRQAAAkAAIAlTSGgxD/cEwIBXjEuMy4wAAAoFQAADQAAgJuZyhpxbbgLAgFeMS4xLjIAAIYUAAANAACA7K89oRS1VSgCAV4xLjIuNAAAvRYAABMAAIDwt4iQmQjlOAIBXjEuMi4xAAAeFwAAFAAAgNUcwNxTtMSkAgFeMS4xLjQAAH0UAAAJAACAJU0hoMQ/3BMCAV4xLjMuMAAAKBUAAA0AAICbmcoacW24CwIBXjEuMS4yAACGFAAADQAAgOyvPaEUtVUoAgFeMS4yLjQAAGdvcGQAAAAA/T9Rybhol5kCAV4xLjAuMQAAMhcAABgAAICiDpi5dY27QAIBXjEuMC4yAACrFgAAEgAAgBife5mNqFQyAgFeMS4wLjAAAIYUAAANAACA7K89oRS1VSgCAV4xLjIuNAAAhhQAAA0AAIDsrz2hFLVVKAIBXjEuMS4zAACrFgAAEgAAgBife5mNqFQyAgFeMS4wLjAAAH0UAAAJAACAJU0hoMQ/3BMCAV4xLjMuMAAAZ29wZAAAAAD9P1HJuGiXmQIBXjEuMC4xAACqGAAACQAAgHv01jl/q3BYAgEwLjIuMAAAALMYAAAJAACA56vlU26ymRQCATEuOS4xAAAANBMAAAoAAIAvAZOXXsth9AIBfjIuMS4zNACcGQAACgAAgHIFa+boQJD4AgEwLjYuMwAAAIgaAAASAACA3t6/nasyvTkEATAuMjMuMQAAmhoAABQAAIDIB1CXRuhtwgQBMC4yMy4xAACuGgAAFgAAgFI+0CscHRGnBAEwLjIzLjEAAMQaAAAUAACAGPr6MVLKNmUEATAuMjMuMQAA2BoAABUAAICeGzC60+ljWgQBMC4yMy4xAADtGgAAEwAAgDBCml+3Bg8CBAEwLjIzLjEAAAAbAAAWAACADRdE6Z6udscEATAuMjMuMQAAFhsAABQAAIDCAO5HJukCQAQBMC4yMy4xAAAqGwAAEgAAgGm5PKg0Bm3mBAEwLjIzLjEAADwbAAAUAACA24NmRjGW2sEEATAuMjMuMQAAUBsAABMAAICiqX5q7ggl0gQBMC4yMy4xAABjGwAAFgAAgKtGaV1yPyecBAEwLjIzLjEAAHkbAAAXAACA0aEQHcQo6U8EATAuMjMuMQAAkBsAABQAAIAqEigzAYvjoQQBMC4yMy4xAACkGwAAFgAAgGxgov/WkblBBAEwLjIzLjEAALobAAAUAACAYhb8CQ8fFPYEATAuMjMuMQAAzhsAABIAAIDnlnTyoT/2uwQBMC4yMy4xAADgGwAAEwAAgIgErGhfETp4BAEwLjIzLjEAAPMbAAAWAACAMhF9VuG6UmIEATAuMjMuMQAACRwAABQAAICTO+wjao2aiAQBMC4yMy4xAAAdHAAAEgAAgMHlkagTF0f3BAEwLjIzLjEAAC8cAAAUAACAyPaAH3ykVZMEATAuMjMuMQAAQxwAABMAAIAIET4ruAGUzAQBMC4yMy4xAABWHAAAEgAAgDZMzLahkrR6BAEwLjIzLjEAAPQRAAAKAACAya8+umRUPCACAV4wLjYuMwAAySMAAAsAAICPRV5V16nxjwIBXjkuMi4xAAB3cwAAAAAAAAcESX24jjzLAgFeOC4xNy4wAEcSAAAMAACA+Q0itRVAoPACAU4kAAAQAACATJcAAAAAAABMlwAAAAAAAAo8c3JjLmluc3RhbGwuc2VtdmVyLkV4dGVybmFsU3RyaW5nPiAxNiBzaXplb2YsIDggYWxpZ25vZgp4lwAAAAAAANa7AAAAAAAACjx1OD4gMSBzaXplb2YsIDEgYWxpZ25vZgoAAHdpbmRtaWxsLWNsaWVzbS9tYWluLmpzaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvd2luZG1pbGwtY2xpLy0vd2luZG1pbGwtY2xpLTEuMzkzLjIudGd6QGF5b25saS9qc2V4dGdpdGlnbm9yZS1wYXJzZXJtaW5pbWF0Y2h3aW5kbWlsbC1jbGllbnRAZGVuby9zaGltLWRlbm9odHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AZGVuby9zaGltLWRlbm8vLS9zaGltLWRlbm8tMC4xOC4yLnRnekBkZW5vL3NoaW0tZGVuby10ZXN0aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGRlbm8vc2hpbS1kZW5vLXRlc3QvLS9zaGltLWRlbm8tdGVzdC0wLjUuMC50Z3pub2RlLXdoaWNoYmluL3doaWNoLmpzaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvd2hpY2gvLS93aGljaC00LjAuMC50Z3podHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pc2V4ZS8tL2lzZXhlLTMuMS4xLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3dzLy0vd3MtOC4xOC4wLnRnemJ1ZmZlcnV0aWx1dGYtOC12YWxpZGF0ZWh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3dpbmRtaWxsLWNsaWVudC8tL3dpbmRtaWxsLWNsaWVudC0xLjM2NC4wLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL29wZW4vLS9vcGVuLTEwLjEuMC50Z3pkZWZhdWx0LWJyb3dzZXJkZWZpbmUtbGF6eS1wcm9waXMtaW5zaWRlLWNvbnRhaW5lcmh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzLXdzbC8tL2lzLXdzbC0zLjEuMC50Z3podHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pcy1pbnNpZGUtY29udGFpbmVyLy0vaXMtaW5zaWRlLWNvbnRhaW5lci0xLjAuMC50Z3ppcy1kb2NrZXJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pcy1kb2NrZXIvLS9pcy1kb2NrZXItMy4wLjAudGd6aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZGVmaW5lLWxhenktcHJvcC8tL2RlZmluZS1sYXp5LXByb3AtMy4wLjAudGd6aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZGVmYXVsdC1icm93c2VyLy0vZGVmYXVsdC1icm93c2VyLTUuMi4xLnRnemJ1bmRsZS1uYW1lZGVmYXVsdC1icm93c2VyLWlkaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZGVmYXVsdC1icm93c2VyLWlkLy0vZGVmYXVsdC1icm93c2VyLWlkLTUuMC4wLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2J1bmRsZS1uYW1lLy0vYnVuZGxlLW5hbWUtNC4xLjAudGd6cnVuLWFwcGxlc2NyaXB0aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcnVuLWFwcGxlc2NyaXB0Ly0vcnVuLWFwcGxlc2NyaXB0LTcuMC4wLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL21pbmltYXRjaC8tL21pbmltYXRjaC0xMC4wLjEudGd6YnJhY2UtZXhwYW5zaW9uaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYnJhY2UtZXhwYW5zaW9uLy0vYnJhY2UtZXhwYW5zaW9uLTIuMC4xLnRnemJhbGFuY2VkLW1hdGNoaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYmFsYW5jZWQtbWF0Y2gvLS9iYWxhbmNlZC1tYXRjaC0xLjAuMi50Z3podHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9qc3ppcC8tL2pzemlwLTMuNy4xLnRnenJlYWRhYmxlLXN0cmVhbXNldC1pbW1lZGlhdGUtc2hpbWh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NldC1pbW1lZGlhdGUtc2hpbS8tL3NldC1pbW1lZGlhdGUtc2hpbS0xLjAuMS50Z3podHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yZWFkYWJsZS1zdHJlYW0vLS9yZWFkYWJsZS1zdHJlYW0tMi4zLjgudGd6Y29yZS11dGlsLWlzcHJvY2Vzcy1uZXh0aWNrLWFyZ3NzYWZlLWJ1ZmZlcnN0cmluZ19kZWNvZGVydXRpbC1kZXByZWNhdGVodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy91dGlsLWRlcHJlY2F0ZS8tL3V0aWwtZGVwcmVjYXRlLTEuMC4yLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3N0cmluZ19kZWNvZGVyLy0vc3RyaW5nX2RlY29kZXItMS4xLjEudGd6aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2FmZS1idWZmZXIvLS9zYWZlLWJ1ZmZlci01LjEuMi50Z3podHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wcm9jZXNzLW5leHRpY2stYXJncy8tL3Byb2Nlc3MtbmV4dGljay1hcmdzLTIuMC4xLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2lzYXJyYXkvLS9pc2FycmF5LTEuMC4wLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2luaGVyaXRzLy0vaW5oZXJpdHMtMi4wLjQudGd6aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY29yZS11dGlsLWlzLy0vY29yZS11dGlsLWlzLTEuMC4zLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Bha28vLS9wYWtvLTEuMC4xMS50Z3podHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9saWUvLS9saWUtMy4zLjAudGd6aW1tZWRpYXRlaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaW1tZWRpYXRlLy0vaW1tZWRpYXRlLTMuMC42LnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2dpdGlnbm9yZS1wYXJzZXIvLS9naXRpZ25vcmUtcGFyc2VyLTAuMC4yLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2V4cHJlc3MvLS9leHByZXNzLTQuMTkuMi50Z3plbmNvZGV1cmxwcm94eS1hZGRyYm9keS1wYXJzZXJlc2NhcGUtaHRtbGh0dHAtZXJyb3Jzb24tZmluaXNoZWR1dGlscy1tZXJnZWNvbnRlbnQtdHlwZWZpbmFsaGFuZGxlcnJhbmdlLXBhcnNlcnNlcnZlLXN0YXRpY2FycmF5LWZsYXR0ZW5wYXRoLXRvLXJlZ2V4cHNldHByb3RvdHlwZW9mY29va2llLXNpZ25hdHVyZW1lcmdlLWRlc2NyaXB0b3JzY29udGVudC1kaXNwb3NpdGlvbmh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NvbnRlbnQtZGlzcG9zaXRpb24vLS9jb250ZW50LWRpc3Bvc2l0aW9uLTAuNS40LnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NhZmUtYnVmZmVyLy0vc2FmZS1idWZmZXItNS4yLjEudGd6aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbWVyZ2UtZGVzY3JpcHRvcnMvLS9tZXJnZS1kZXNjcmlwdG9ycy0xLjAuMS50Z3podHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9jb29raWUtc2lnbmF0dXJlLy0vY29va2llLXNpZ25hdHVyZS0xLjAuNi50Z3podHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zZXRwcm90b3R5cGVvZi8tL3NldHByb3RvdHlwZW9mLTEuMi4wLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3BhdGgtdG8tcmVnZXhwLy0vcGF0aC10by1yZWdleHAtMC4xLjcudGd6aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYXJyYXktZmxhdHRlbi8tL2FycmF5LWZsYXR0ZW4tMS4xLjEudGd6aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2VydmUtc3RhdGljLy0vc2VydmUtc3RhdGljLTEuMTUuMC50Z3podHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lc2NhcGUtaHRtbC8tL2VzY2FwZS1odG1sLTEuMC4zLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VuY29kZXVybC8tL2VuY29kZXVybC0xLjAuMi50Z3podHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9wYXJzZXVybC8tL3BhcnNldXJsLTEuMy4zLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NlbmQvLS9zZW5kLTAuMTguMC50Z3podHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9yYW5nZS1wYXJzZXIvLS9yYW5nZS1wYXJzZXItMS4yLjEudGd6aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvb24tZmluaXNoZWQvLS9vbi1maW5pc2hlZC0yLjQuMS50Z3podHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lZS1maXJzdC8tL2VlLWZpcnN0LTEuMS4xLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2h0dHAtZXJyb3JzLy0vaHR0cC1lcnJvcnMtMi4wLjAudGd6dG9pZGVudGlmaWVyaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdG9pZGVudGlmaWVyLy0vdG9pZGVudGlmaWVyLTEuMC4xLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3N0YXR1c2VzLy0vc3RhdHVzZXMtMi4wLjEudGd6aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZGVwZC8tL2RlcGQtMi4wLjAudGd6aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZGVzdHJveS8tL2Rlc3Ryb3ktMS4yLjAudGd6aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZnJlc2gvLS9mcmVzaC0wLjUuMi50Z3podHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9kZWJ1Zy8tL2RlYnVnLTIuNi45LnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL21zLy0vbXMtMi4wLjAudGd6aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbWltZS8tL21pbWUtMS42LjAudGd6aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXRhZy8tL2V0YWctMS44LjEudGd6aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbXMvLS9tcy0yLjEuMy50Z3podHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9maW5hbGhhbmRsZXIvLS9maW5hbGhhbmRsZXItMS4yLjAudGd6aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvdW5waXBlLy0vdW5waXBlLTEuMC4wLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NvbnRlbnQtdHlwZS8tL2NvbnRlbnQtdHlwZS0xLjAuNS50Z3podHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy91dGlscy1tZXJnZS8tL3V0aWxzLW1lcmdlLTEuMC4xLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2JvZHktcGFyc2VyLy0vYm9keS1wYXJzZXItMS4yMC4yLnRnemljb252LWxpdGVodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9pY29udi1saXRlLy0vaWNvbnYtbGl0ZS0wLjQuMjQudGd6Pj0gMi4xLjIgPCAzc2FmZXItYnVmZmVyaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2FmZXItYnVmZmVyLy0vc2FmZXItYnVmZmVyLTIuMS4yLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3Jhdy1ib2R5Ly0vcmF3LWJvZHktMi41LjIudGd6aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvYnl0ZXMvLS9ieXRlcy0zLjEuMi50Z3podHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy90eXBlLWlzLy0vdHlwZS1pcy0xLjYuMTgudGd6bWltZS10eXBlc21lZGlhLXR5cGVyaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbWVkaWEtdHlwZXIvLS9tZWRpYS10eXBlci0wLjMuMC50Z3podHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9taW1lLXR5cGVzLy0vbWltZS10eXBlcy0yLjEuMzUudGd6aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbWltZS1kYi8tL21pbWUtZGItMS41Mi4wLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3FzLy0vcXMtNi4xMS4wLnRnenNpZGUtY2hhbm5lbGh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3NpZGUtY2hhbm5lbC8tL3NpZGUtY2hhbm5lbC0xLjAuNi50Z3pjYWxsLWJpbmRlcy1lcnJvcnNnZXQtaW50cmluc2ljb2JqZWN0LWluc3BlY3RodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9vYmplY3QtaW5zcGVjdC8tL29iamVjdC1pbnNwZWN0LTEuMTMuMi50Z3podHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9nZXQtaW50cmluc2ljLy0vZ2V0LWludHJpbnNpYy0xLjIuNC50Z3pmdW5jdGlvbi1iaW5kaGFzLXByb3RvaGFzLXN5bWJvbHNodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9oYXNvd24vLS9oYXNvd24tMi4wLjIudGd6aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZnVuY3Rpb24tYmluZC8tL2Z1bmN0aW9uLWJpbmQtMS4xLjIudGd6aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaGFzLXN5bWJvbHMvLS9oYXMtc3ltYm9scy0xLjAuMy50Z3podHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9oYXMtcHJvdG8vLS9oYXMtcHJvdG8tMS4wLjMudGd6aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXMtZXJyb3JzLy0vZXMtZXJyb3JzLTEuMy4wLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2NhbGwtYmluZC8tL2NhbGwtYmluZC0xLjAuNy50Z3plcy1kZWZpbmUtcHJvcGVydHlzZXQtZnVuY3Rpb24tbGVuZ3RoaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvc2V0LWZ1bmN0aW9uLWxlbmd0aC8tL3NldC1mdW5jdGlvbi1sZW5ndGgtMS4yLjIudGd6ZGVmaW5lLWRhdGEtcHJvcGVydHloYXMtcHJvcGVydHktZGVzY3JpcHRvcnNodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9oYXMtcHJvcGVydHktZGVzY3JpcHRvcnMvLS9oYXMtcHJvcGVydHktZGVzY3JpcHRvcnMtMS4wLjIudGd6aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXMtZGVmaW5lLXByb3BlcnR5Ly0vZXMtZGVmaW5lLXByb3BlcnR5LTEuMC4wLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2dvcGQvLS9nb3BkLTEuMC4xLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2RlZmluZS1kYXRhLXByb3BlcnR5Ly0vZGVmaW5lLWRhdGEtcHJvcGVydHktMS4xLjQudGd6aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvcHJveHktYWRkci8tL3Byb3h5LWFkZHItMi4wLjcudGd6Zm9yd2FyZGVkaXBhZGRyLmpzaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvaXBhZGRyLmpzLy0vaXBhZGRyLmpzLTEuOS4xLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2ZvcndhcmRlZC8tL2ZvcndhcmRlZC0wLjIuMC50Z3podHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9tZXRob2RzLy0vbWV0aG9kcy0xLjEuMi50Z3podHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9hY2NlcHRzLy0vYWNjZXB0cy0xLjMuOC50Z3puZWdvdGlhdG9yaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvbmVnb3RpYXRvci8tL25lZ290aWF0b3ItMC42LjMudGd6aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvY29va2llLy0vY29va2llLTAuNi4wLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL3ZhcnkvLS92YXJ5LTEuMS4yLnRnemJpbi9lc2J1aWxkaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZXNidWlsZC8tL2VzYnVpbGQtMC4yMy4xLnRnekBlc2J1aWxkL2FpeC1wcGM2NEBlc2J1aWxkL2FuZHJvaWQtYXJtQGVzYnVpbGQvYW5kcm9pZC1hcm02NEBlc2J1aWxkL2FuZHJvaWQteDY0QGVzYnVpbGQvZGFyd2luLWFybTY0QGVzYnVpbGQvZGFyd2luLXg2NEBlc2J1aWxkL2ZyZWVic2QtYXJtNjRAZXNidWlsZC9mcmVlYnNkLXg2NEBlc2J1aWxkL2xpbnV4LWFybUBlc2J1aWxkL2xpbnV4LWFybTY0QGVzYnVpbGQvbGludXgtaWEzMkBlc2J1aWxkL2xpbnV4LWxvb25nNjRAZXNidWlsZC9saW51eC1taXBzNjRlbEBlc2J1aWxkL2xpbnV4LXBwYzY0QGVzYnVpbGQvbGludXgtcmlzY3Y2NEBlc2J1aWxkL2xpbnV4LXMzOTB4QGVzYnVpbGQvbGludXgteDY0QGVzYnVpbGQvbmV0YnNkLXg2NEBlc2J1aWxkL29wZW5ic2QtYXJtNjRAZXNidWlsZC9vcGVuYnNkLXg2NEBlc2J1aWxkL3N1bm9zLXg2NEBlc2J1aWxkL3dpbjMyLWFybTY0QGVzYnVpbGQvd2luMzItaWEzMkBlc2J1aWxkL3dpbjMyLXg2NGh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Blc2J1aWxkL3dpbjMyLXg2NC8tL3dpbjMyLXg2NC0wLjIzLjEudGd6aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGVzYnVpbGQvd2luMzItaWEzMi8tL3dpbjMyLWlhMzItMC4yMy4xLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Blc2J1aWxkL3dpbjMyLWFybTY0Ly0vd2luMzItYXJtNjQtMC4yMy4xLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Blc2J1aWxkL3N1bm9zLXg2NC8tL3N1bm9zLXg2NC0wLjIzLjEudGd6aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGVzYnVpbGQvb3BlbmJzZC14NjQvLS9vcGVuYnNkLXg2NC0wLjIzLjEudGd6aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGVzYnVpbGQvb3BlbmJzZC1hcm02NC8tL29wZW5ic2QtYXJtNjQtMC4yMy4xLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Blc2J1aWxkL25ldGJzZC14NjQvLS9uZXRic2QteDY0LTAuMjMuMS50Z3podHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AZXNidWlsZC9saW51eC14NjQvLS9saW51eC14NjQtMC4yMy4xLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Blc2J1aWxkL2xpbnV4LXMzOTB4Ly0vbGludXgtczM5MHgtMC4yMy4xLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Blc2J1aWxkL2xpbnV4LXJpc2N2NjQvLS9saW51eC1yaXNjdjY0LTAuMjMuMS50Z3podHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AZXNidWlsZC9saW51eC1wcGM2NC8tL2xpbnV4LXBwYzY0LTAuMjMuMS50Z3podHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AZXNidWlsZC9saW51eC1taXBzNjRlbC8tL2xpbnV4LW1pcHM2NGVsLTAuMjMuMS50Z3podHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AZXNidWlsZC9saW51eC1sb29uZzY0Ly0vbGludXgtbG9vbmc2NC0wLjIzLjEudGd6aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGVzYnVpbGQvbGludXgtaWEzMi8tL2xpbnV4LWlhMzItMC4yMy4xLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Blc2J1aWxkL2xpbnV4LWFybTY0Ly0vbGludXgtYXJtNjQtMC4yMy4xLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Blc2J1aWxkL2xpbnV4LWFybS8tL2xpbnV4LWFybS0wLjIzLjEudGd6aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGVzYnVpbGQvZnJlZWJzZC14NjQvLS9mcmVlYnNkLXg2NC0wLjIzLjEudGd6aHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvQGVzYnVpbGQvZnJlZWJzZC1hcm02NC8tL2ZyZWVic2QtYXJtNjQtMC4yMy4xLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Blc2J1aWxkL2Rhcndpbi14NjQvLS9kYXJ3aW4teDY0LTAuMjMuMS50Z3podHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AZXNidWlsZC9kYXJ3aW4tYXJtNjQvLS9kYXJ3aW4tYXJtNjQtMC4yMy4xLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Blc2J1aWxkL2FuZHJvaWQteDY0Ly0vYW5kcm9pZC14NjQtMC4yMy4xLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0Blc2J1aWxkL2FuZHJvaWQtYXJtNjQvLS9hbmRyb2lkLWFybTY0LTAuMjMuMS50Z3podHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AZXNidWlsZC9hbmRyb2lkLWFybS8tL2FuZHJvaWQtYXJtLTAuMjMuMS50Z3podHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9AZXNidWlsZC9haXgtcHBjNjQvLS9haXgtcHBjNjQtMC4yMy4xLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VzLW1haW4vLS9lcy1tYWluLTEuMy4wLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2RpZmYvLS9kaWZmLTcuMC4wLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL0BheW9ubGkvanNleHQvLS9qc2V4dC0wLjkuNjMudGd6c3Vkby1wcm9tcHRodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9zdWRvLXByb21wdC8tL3N1ZG8tcHJvbXB0LTkuMi4xLnRnemh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2ljb252LWxpdGUvLS9pY29udi1saXRlLTAuNi4zLnRnej49IDIuMS4yIDwgMy4wLjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==' +WHERE hash = -28028598712388162 AND workspace_id = 'admins'; \ No newline at end of file diff --git a/backend/migrations/20240910151523_resource_type_file_format.down.sql b/backend/migrations/20240910151523_resource_type_file_format.down.sql new file mode 100644 index 0000000000000..f891983f263a1 --- /dev/null +++ b/backend/migrations/20240910151523_resource_type_file_format.down.sql @@ -0,0 +1,3 @@ +-- Add down migration script here +ALTER TABLE resource_type + DROP COLUMN format_extension; diff --git a/backend/migrations/20240910151523_resource_type_file_format.up.sql b/backend/migrations/20240910151523_resource_type_file_format.up.sql new file mode 100644 index 0000000000000..7bc683ff14a93 --- /dev/null +++ b/backend/migrations/20240910151523_resource_type_file_format.up.sql @@ -0,0 +1,3 @@ +-- Add up migration script here +ALTER TABLE resource_type + ADD COLUMN format_extension VARCHAR(20); diff --git a/backend/migrations/20240917172503_job_routing.down.sql b/backend/migrations/20240917172503_job_routing.down.sql new file mode 100644 index 0000000000000..569385aa5a832 --- /dev/null +++ b/backend/migrations/20240917172503_job_routing.down.sql @@ -0,0 +1,7 @@ +-- Add down migration script here +DROP TABLE http_trigger; +DROP TYPE http_method; + +ALTER TABLE script DROP COLUMN has_preprocessor; + +DROP FUNCTION prevent_route_path_change(); \ No newline at end of file diff --git a/backend/migrations/20240917172503_job_routing.up.sql b/backend/migrations/20240917172503_job_routing.up.sql new file mode 100644 index 0000000000000..42dd41e199fbf --- /dev/null +++ b/backend/migrations/20240917172503_job_routing.up.sql @@ -0,0 +1,61 @@ +-- Add up migration script here +CREATE TYPE http_method AS ENUM ('get', 'post', 'put', 'delete', 'patch'); + +CREATE TABLE http_trigger ( + path VARCHAR(255) NOT NULL, + route_path VARCHAR(255) NOT NULL, + route_path_key VARCHAR(255) NOT NULL, + script_path VARCHAR(255) NOT NULL, + is_flow BOOLEAN NOT NULL, + workspace_id VARCHAR(50) NOT NULL, + edited_by VARCHAR(50) NOT NULL, + email VARCHAR(255) NOT NULL, + edited_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), + extra_perms JSONB NOT NULL DEFAULT '{}', + is_async BOOLEAN NOT NULL DEFAULT FALSE, + requires_auth BOOLEAN NOT NULL DEFAULT FALSE, + http_method http_method NOT NULL, + PRIMARY KEY (path, workspace_id) +); + + +GRANT SELECT, UPDATE ON http_trigger TO windmill_user; +GRANT ALL ON http_trigger TO windmill_admin; + +ALTER TABLE http_trigger ENABLE ROW LEVEL SECURITY; + +CREATE POLICY see_folder_extra_perms_user_select ON http_trigger FOR SELECT TO windmill_user +USING (SPLIT_PART(http_trigger.path, '/', 1) = 'f' AND SPLIT_PART(http_trigger.path, '/', 2) = any(regexp_split_to_array(current_setting('session.folders_read'), ',')::text[])); +CREATE POLICY see_folder_extra_perms_user_update ON http_trigger FOR UPDATE TO windmill_user +USING (SPLIT_PART(http_trigger.path, '/', 1) = 'f' AND SPLIT_PART(http_trigger.path, '/', 2) = any(regexp_split_to_array(current_setting('session.folders_write'), ',')::text[])); + + +CREATE POLICY see_extra_perms_user_select ON http_trigger FOR SELECT TO windmill_user +USING (extra_perms ? CONCAT('u/', current_setting('session.user'))); +CREATE POLICY see_extra_perms_user_update ON http_trigger FOR UPDATE TO windmill_user +USING ((extra_perms ->> CONCAT('u/', current_setting('session.user')))::boolean); + +CREATE POLICY see_extra_perms_groups_select ON http_trigger FOR SELECT TO windmill_user +USING (extra_perms ?| regexp_split_to_array(current_setting('session.pgroups'), ',')::text[]); +CREATE POLICY see_extra_perms_groups_update ON http_trigger FOR UPDATE TO windmill_user +USING (exists( + SELECT key, value FROM jsonb_each_text(extra_perms) + WHERE SPLIT_PART(key, '/', 1) = 'g' AND key = ANY(regexp_split_to_array(current_setting('session.pgroups'), ',')::text[]) + AND value::boolean)); + +CREATE OR REPLACE FUNCTION prevent_route_path_change() +RETURNS TRIGGER AS $$ +BEGIN + IF CURRENT_USER <> 'windmill_admin' AND NEW.route_path <> OLD.route_path THEN + RAISE EXCEPTION 'Modification of route_path is only allowed by admins'; + END IF; + RETURN NEW; +END; +$$ LANGUAGE plpgsql; + +CREATE TRIGGER check_route_path_change +BEFORE UPDATE ON http_trigger +FOR EACH ROW +EXECUTE FUNCTION prevent_route_path_change(); + +ALTER TABLE script ADD COLUMN has_preprocessor BOOLEAN; diff --git a/backend/migrations/20240919200009_migrate_smtp_settings.down.sql b/backend/migrations/20240919200009_migrate_smtp_settings.down.sql new file mode 100644 index 0000000000000..d2f607c5b8bd6 --- /dev/null +++ b/backend/migrations/20240919200009_migrate_smtp_settings.down.sql @@ -0,0 +1 @@ +-- Add down migration script here diff --git a/backend/migrations/20240919200009_migrate_smtp_settings.up.sql b/backend/migrations/20240919200009_migrate_smtp_settings.up.sql new file mode 100644 index 0000000000000..54ac58675efba --- /dev/null +++ b/backend/migrations/20240919200009_migrate_smtp_settings.up.sql @@ -0,0 +1,8 @@ +-- Add up migration script here +INSERT INTO global_settings (name, value) +SELECT 'smtp_settings', config +FROM config +WHERE name = 'server' +ON CONFLICT (name) DO UPDATE SET value = excluded.value; + +DELETE FROM config WHERE name = 'server'; diff --git a/backend/migrations/20240924213010_add_last_occupancy_rates.down.sql b/backend/migrations/20240924213010_add_last_occupancy_rates.down.sql new file mode 100644 index 0000000000000..d2249d992d9bb --- /dev/null +++ b/backend/migrations/20240924213010_add_last_occupancy_rates.down.sql @@ -0,0 +1,5 @@ +-- Add down migration script here +ALTER TABLE worker_ping +DROP COLUMN occupancy_rate_15s, +DROP COLUMN occupancy_rate_5m, +DROP COLUMN occupancy_rate_30m; diff --git a/backend/migrations/20240924213010_add_last_occupancy_rates.up.sql b/backend/migrations/20240924213010_add_last_occupancy_rates.up.sql new file mode 100644 index 0000000000000..39033324c3ea0 --- /dev/null +++ b/backend/migrations/20240924213010_add_last_occupancy_rates.up.sql @@ -0,0 +1,5 @@ +-- Add up migration script here +ALTER TABLE worker_ping +ADD COLUMN occupancy_rate_15s REAL, +ADD COLUMN occupancy_rate_5m REAL, +ADD COLUMN occupancy_rate_30m REAL; diff --git a/backend/oauth_connect.json b/backend/oauth_connect.json new file mode 100644 index 0000000000000..034aece2f4ffe --- /dev/null +++ b/backend/oauth_connect.json @@ -0,0 +1,156 @@ +{ + "github": { + "auth_url": "https://github.com/login/oauth/authorize", + "token_url": "https://github.com/login/oauth/access_token", + "scopes": [ + "workflow", + "repo" + ] + }, + "gitlab": { + "auth_url": "https://gitlab.com/oauth/authorize", + "token_url": "https://gitlab.com/oauth/token", + "scopes": [ + "api" + ] + }, + "bitbucket": { + "auth_url": "https://bitbucket.org/site/oauth2/authorize", + "token_url": "https://bitbucket.org/site/oauth2/access_token", + "scopes": [ + "repository" + ] + }, + "slack": { + "auth_url": "https://slack.com/oauth/authorize", + "token_url": "https://slack.com/api/oauth.access", + "scopes": [ + "chat:write:user", + "users:read", + "users:read.email" + ] + }, + "supabase_wizard": { + "auth_url": "https://api.supabase.com/v1/oauth/authorize", + "token_url": "https://api.supabase.com/v1/oauth/token", + "scopes": [ + "all" + ] + }, + "gsheets": { + "auth_url": "https://accounts.google.com/o/oauth2/v2/auth", + "token_url": "https://oauth2.googleapis.com/token", + "scopes": [ + "https://www.googleapis.com/auth/spreadsheets" + ], + "extra_params": { + "access_type": "offline", + "prompt": "consent" + } + }, + "gdrive": { + "auth_url": "https://accounts.google.com/o/oauth2/v2/auth", + "token_url": "https://oauth2.googleapis.com/token", + "scopes": [ + "https://www.googleapis.com/auth/drive" + ], + "extra_params": { + "access_type": "offline", + "prompt": "consent" + } + }, + "gmail": { + "auth_url": "https://accounts.google.com/o/oauth2/v2/auth", + "token_url": "https://oauth2.googleapis.com/token", + "scopes": [ + "https://www.googleapis.com/auth/gmail.send" + ], + "extra_params": { + "access_type": "offline", + "prompt": "consent" + } + }, + "gcal": { + "auth_url": "https://accounts.google.com/o/oauth2/v2/auth", + "token_url": "https://oauth2.googleapis.com/token", + "scopes": [ + "https://www.googleapis.com/auth/calendar.events" + ], + "extra_params": { + "access_type": "offline", + "prompt": "consent" + } + }, + "gforms": { + "auth_url": "https://accounts.google.com/o/oauth2/v2/auth", + "token_url": "https://oauth2.googleapis.com/token", + "scopes": [ + "https://www.googleapis.com/auth/forms" + ], + "extra_params": { + "access_type": "offline", + "prompt": "consent" + } + }, + "gcloud": { + "auth_url": "https://accounts.google.com/o/oauth2/v2/auth", + "token_url": "https://oauth2.googleapis.com/token", + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ], + "extra_params": { + "access_type": "offline", + "prompt": "consent" + } + }, + "gworkspace": { + "auth_url": "https://accounts.google.com/o/oauth2/v2/auth", + "token_url": "https://oauth2.googleapis.com/token", + "scopes": [ + "https://www.googleapis.com/auth/admin.directory.group", + "https://www.googleapis.com/auth/admin.directory.user", + "https://www.googleapis.com/auth/admin.directory.user.security", + "https://www.googleapis.com/auth/admin.directory.orgunit" + ], + "extra_params": { + "access_type": "offline", + "prompt": "consent" + } + }, + "basecamp": { + "auth_url": "https://launchpad.37signals.com/authorization/new", + "token_url": "https://launchpad.37signals.com/authorization/token", + "scopes": [], + "extra_params": { + "type": "web_server" + } + }, + "linkedin": { + "auth_url": "https://www.linkedin.com/oauth/v2/authorization", + "token_url": "https://www.linkedin.com/oauth/v2/accessToken", + "scopes": [ + "w_member_social", + "r_liteprofile", + "r_emailaddress" + ], + "req_body_auth": true + }, + "quickbooks": { + "auth_url": "https://appcenter.intuit.com/connect/oauth2", + "token_url": "https://oauth.platform.intuit.com/oauth2/v1/tokens/bearer", + "scopes": [ + "com.intuit.quickbooks.accounting" + ] + }, + "visma": { + "auth_url": "https://connect.visma.com/connect/authorize", + "token_url": "https://connect.visma.com/connect/token", + "scopes": [ + "offline_access", + "vismanet_erp_interactive_api:create", + "vismanet_erp_interactive_api:delete", + "vismanet_erp_interactive_api:read", + "vismanet_erp_interactive_api:update" + ] + } +} \ No newline at end of file diff --git a/backend/oauth_login.json b/backend/oauth_login.json new file mode 100644 index 0000000000000..93cdaac2b2028 --- /dev/null +++ b/backend/oauth_login.json @@ -0,0 +1,32 @@ +{ + "github": { + "auth_url": "https://github.com/login/oauth/authorize", + "token_url": "https://github.com/login/oauth/access_token", + "userinfo_url": "https://api.github.com/user", + "scopes": ["user:email"] + }, + "gitlab": { + "auth_url": "https://gitlab.com/oauth/authorize", + "token_url": "https://gitlab.com/oauth/token", + "userinfo_url": "https://gitlab.com/api/v4/user", + "scopes": ["read_user"] + }, + "google": { + "auth_url": "https://accounts.google.com/o/oauth2/v2/auth", + "token_url": "https://oauth2.googleapis.com/token", + "userinfo_url": "https://www.googleapis.com/oauth2/v1/userinfo?alt=json", + "scopes": ["https://www.googleapis.com/auth/userinfo.email"] + }, + "microsoft": { + "auth_url": "https://login.microsoftonline.com/common/oauth2/v2.0/authorize", + "token_url": "https://login.microsoftonline.com/common/oauth2/v2.0/token", + "userinfo_url": "https://graph.microsoft.com/oidc/userinfo", + "scopes": ["openid", "profile", "email"] + }, + "jumpcloud": { + "auth_url": "https://oauth.id.jumpcloud.com/oauth2/auth", + "token_url": "https://oauth.id.jumpcloud.com/oauth2/token", + "userinfo_url": "https://oauth.id.jumpcloud.com/userinfo", + "scopes": ["email"] + } +} diff --git a/backend/openapi-bundled.yaml b/backend/openapi-bundled.yaml new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/backend/openapi-deref.yaml b/backend/openapi-deref.yaml new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/backend/openapi.yaml b/backend/openapi.yaml deleted file mode 100644 index 74b7b5d513d5f..0000000000000 --- a/backend/openapi.yaml +++ /dev/null @@ -1,3406 +0,0 @@ -openapi: "3.0.3" - -info: - version: 1.5.0 - title: Windmill server API - contact: - name: Windmill contact - email: contact@windmill.dev - url: https://windmill.dev - - license: - name: Apache 2.0 - url: https://www.apache.org/licenses/LICENSE-2.0.html - -externalDocs: - description: documentation portal - url: https://docs.windmill.dev - -servers: - - url: /api - -security: - - bearerAuth: [] - - cookieAuth: [] - -paths: - /version: - get: - summary: get backend version - operationId: backendVersion - tags: - - settings - responses: - "200": - description: git version of backend - content: - text/plain: - schema: - type: string - - /openapi.yaml: - get: - summary: get openapi yaml spec - operationId: getOpenApiYaml - tags: - - settings - responses: - "200": - description: openapi yaml file content - content: - text/plain: - schema: - type: string - - /w/{workspace}/audit/get/{id}: - get: - summary: get audit log (requires admin privilege) - operationId: getAuditLog - tags: - - audit - parameters: - - $ref: "#/components/parameters/WorkspaceId" - - $ref: "#/components/parameters/PathId" - responses: - "200": - description: an audit log - content: - application/json: - schema: - $ref: "#/components/schemas/AuditLog" - - /w/{workspace}/audit/list: - get: - summary: list audit logs (requires admin privilege) - operationId: listAuditLogs - tags: - - audit - parameters: - - $ref: "#/components/parameters/WorkspaceId" - - $ref: "#/components/parameters/Page" - - $ref: "#/components/parameters/PerPage" - - $ref: "#/components/parameters/Before" - - $ref: "#/components/parameters/After" - - $ref: "#/components/parameters/Username" - - $ref: "#/components/parameters/Operation" - - $ref: "#/components/parameters/Resource" - - $ref: "#/components/parameters/ActionKind" - - responses: - "200": - description: a list of audit logs - content: - application/json: - schema: - type: array - items: - $ref: "#/components/schemas/AuditLog" - - /auth/login: - post: - security: [] - summary: login with password - operationId: login - tags: - - user - requestBody: - description: Partially filled script - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/Login" - - responses: - "200": - description: > - Successfully authenticated. - The session ID is returned in a cookie named `token` and as plaintext response. - Preferred method of authorization is through the bearer token. The cookie is only for browser convenience. - - headers: - Set-Cookie: - schema: - type: string - example: token=abcde12345; Path=/; HttpOnly - content: - text/plain: - schema: - type: string - - /w/{workspace}/users/add: - post: - summary: create user (require admin privilege) - operationId: createUser - tags: - - user - - admin - parameters: - - $ref: "#/components/parameters/WorkspaceId" - requestBody: - description: new user - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/NewUser" - responses: - "201": - description: user created - content: - text/plain: - schema: - type: string - - /w/{workspace}/users/update/{username}: - post: - summary: update user (require admin privilege) - operationId: updateUser - tags: - - user - - admin - parameters: - - $ref: "#/components/parameters/WorkspaceId" - - name: username - in: path - required: true - schema: - type: string - requestBody: - description: new user - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/EditWorkspaceUser" - responses: - "200": - description: edited user - content: - text/plain: - schema: - type: string - - /users/setpassword: - post: - summary: set password - operationId: setPassword - tags: - - user - requestBody: - description: set password - required: true - content: - application/json: - schema: - type: object - properties: - password: - type: string - required: - - password - responses: - "200": - description: password set - content: - text/plain: - schema: - type: string - - /w/{workspace}/users/delete/{username}: - delete: - summary: delete user (require admin privilege) - operationId: deleteUser - tags: - - user - - admin - parameters: - - $ref: "#/components/parameters/WorkspaceId" - - name: username - in: path - required: true - schema: - type: string - responses: - "200": - description: delete user - content: - text/plain: - schema: - type: string - - /users/logout: - post: - summary: logout - operationId: logout - tags: - - user - responses: - "200": - description: logout - content: - text/plain: - schema: - type: string - - /workspaces/list: - get: - summary: list all workspaces visible to me - operationId: listWorkspaces - tags: - - workspace - responses: - "200": - description: all workspaces - content: - application/json: - schema: - type: array - items: - $ref: "#/components/schemas/Workspace" - - /workspaces/users: - get: - summary: list all workspaces visible to me with user info - operationId: listUserWorkspaces - tags: - - workspace - responses: - "200": - description: workspace with associated username - content: - application/json: - schema: - $ref: "#/components/schemas/UserWorkspaceList" - - /workspaces/list_as_superadmin: - get: - summary: list all workspaces as super admin (require to be super amdin) - operationId: listWorkspacesAsSuperAdmin - tags: - - workspace - parameters: - - $ref: "#/components/parameters/Page" - - $ref: "#/components/parameters/PerPage" - responses: - "200": - description: workspaces - content: - application/json: - schema: - type: array - items: - $ref: "#/components/schemas/Workspace" - - /workspaces/create: - post: - summary: create workspace - operationId: createWorkspace - tags: - - workspace - requestBody: - description: new token - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/CreateWorkspace" - responses: - "201": - description: token created - content: - text/plain: - schema: - type: string - - /workspaces/validate_id: - post: - summary: validate id - operationId: validateId - tags: - - workspace - requestBody: - description: id of workspace - required: true - content: - application/json: - schema: - type: object - properties: - id: - type: string - required: - - id - responses: - "200": - description: status - content: - text/plain: - schema: - type: string - - /workspaces/validate_username: - post: - summary: validate username - operationId: validateUsername - tags: - - workspace - requestBody: - required: true - content: - application/json: - schema: - type: object - properties: - id: - type: string - username: - type: string - required: - - id - - username - responses: - "200": - description: status - content: - text/plain: - schema: - type: string - - /users/email: - get: - summary: get current user email (if logged in) - operationId: getCurrentEmail - tags: - - user - responses: - "200": - description: user email - content: - text/plain: - schema: - type: string - - /users/whoami: - get: - summary: get current global whoami (if logged in) - operationId: globalWhoami - tags: - - user - responses: - "200": - description: user email - content: - application/json: - schema: - $ref: "#/components/schemas/GlobalWhoami" - - /users/list_invites: - get: - summary: list all workspace invites - operationId: listWorkspaceInvites - tags: - - user - responses: - "200": - description: list all workspace invites - content: - application/json: - schema: - type: array - items: - $ref: "#/components/schemas/WorkspaceInvite" - - /w/{workspace}/users/whoami: - get: - summary: whoami - operationId: whoami - tags: - - user - parameters: - - $ref: "#/components/parameters/WorkspaceId" - responses: - "200": - description: user - content: - application/json: - schema: - $ref: "#/components/schemas/User" - - /w/{workspace}/users/leave_workspace: - post: - summary: leave workspace - operationId: leaveWorkspace - tags: - - user - parameters: - - $ref: "#/components/parameters/WorkspaceId" - responses: - "200": - description: status - content: - text/plain: - schema: - type: string - - /users/accept_invite: - post: - summary: accept invite to workspace - operationId: acceptInvite - tags: - - user - requestBody: - description: accept invite - required: true - content: - application/json: - schema: - type: object - properties: - workspace_id: - type: string - username: - type: string - required: - - workspace_id - - username - responses: - "200": - description: status - content: - text/plain: - schema: - type: string - - /users/decline_invite: - post: - summary: decline invite to workspace - operationId: declineInvite - tags: - - user - requestBody: - description: decline invite - required: true - content: - application/json: - schema: - type: object - properties: - workspace_id: - type: string - required: - - workspace_id - responses: - "200": - description: status - content: - text/plain: - schema: - type: string - - /w/{workspace}/workspaces/invite_user: - post: - summary: invite user to workspace - operationId: inviteUser - tags: - - workspace - parameters: - - $ref: "#/components/parameters/WorkspaceId" - requestBody: - description: WorkspaceInvite - required: true - content: - application/json: - schema: - type: object - properties: - email: - type: string - is_admin: - type: boolean - required: - - email - - is_admin - responses: - "200": - description: status - content: - text/plain: - schema: - type: string - - /w/{workspace}/workspaces/delete_invite: - post: - summary: delete user invite - operationId: delete invite - tags: - - workspace - parameters: - - $ref: "#/components/parameters/WorkspaceId" - requestBody: - description: WorkspaceInvite - required: true - content: - application/json: - schema: - type: object - properties: - email: - type: string - is_admin: - type: boolean - required: - - email - - is_admin - responses: - "200": - description: status - content: - text/plain: - schema: - type: string - - /w/{workspace}/workspaces/delete: - delete: - summary: delete workspace - operationId: deleteWorkspace - tags: - - workspace - parameters: - - $ref: "#/components/parameters/WorkspaceId" - responses: - "200": - description: status - content: - text/plain: - schema: - type: string - - /w/{workspace}/users/whois/{username}: - get: - summary: whois - operationId: whois - tags: - - user - parameters: - - $ref: "#/components/parameters/WorkspaceId" - - name: username - in: path - required: true - schema: - type: string - responses: - "200": - description: user - content: - application/json: - schema: - $ref: "#/components/schemas/User" - - /users/list_as_super_admin: - get: - summary: list all users as super admin (require to be super amdin) - operationId: listUsersAsSuperAdmin - tags: - - user - parameters: - - $ref: "#/components/parameters/Page" - - $ref: "#/components/parameters/PerPage" - responses: - "200": - description: user - content: - application/json: - schema: - type: array - items: - $ref: "#/components/schemas/User" - - /w/{workspace}/workspaces/list_pending_invites: - get: - summary: list pending invites for a workspace - operationId: listPendingInvites - tags: - - workspace - parameters: - - $ref: "#/components/parameters/WorkspaceId" - responses: - "200": - description: user - content: - application/json: - schema: - type: array - items: - $ref: "#/components/schemas/WorkspaceInvite" - - /w/{workspace}/workspaces/get_settings: - get: - summary: get settings - operationId: getSettings - tags: - - workspace - parameters: - - $ref: "#/components/parameters/WorkspaceId" - - responses: - "200": - description: status - content: - application/json: - schema: - type: object - properties: - workspace_id: - type: string - slack_name: - type: string - slack_team_id: - type: string - slack_command_script: - type: string - - /w/{workspace}/workspaces/edit_slack_command: - post: - summary: edit slack command - operationId: editSlackCommand - tags: - - workspace - parameters: - - $ref: "#/components/parameters/WorkspaceId" - requestBody: - description: WorkspaceInvite - required: true - content: - application/json: - schema: - type: object - properties: - slack_command_script: - type: string - - responses: - "200": - description: status - content: - text/plain: - schema: - type: string - - /w/{workspace}/users/list: - get: - summary: list users - operationId: listUsers - tags: - - user - parameters: - - $ref: "#/components/parameters/WorkspaceId" - responses: - "200": - description: user - content: - application/json: - schema: - type: array - items: - $ref: "#/components/schemas/User" - - /w/{workspace}/users/list_usernames: - get: - summary: list usernames - operationId: listUsernames - tags: - - user - parameters: - - $ref: "#/components/parameters/WorkspaceId" - responses: - "200": - description: user - content: - application/json: - schema: - type: array - items: - type: string - - /users/tokens/create: - post: - summary: create token - operationId: createToken - tags: - - user - requestBody: - description: new token - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/NewToken" - responses: - "201": - description: token created - content: - text/plain: - schema: - type: string - - /users/tokens/delete/{token_prefix}: - delete: - summary: delete token - operationId: deleteToken - tags: - - user - parameters: - - name: token_prefix - in: path - required: true - schema: - type: string - responses: - "200": - description: delete token - content: - text/plain: - schema: - type: string - - /users/tokens/list: - get: - summary: list token - operationId: listTokens - tags: - - user - responses: - "200": - description: truncated token - content: - application/json: - schema: - type: array - items: - $ref: "#/components/schemas/TruncatedToken" - - /w/{workspace}/variables/create: - post: - summary: create variable - operationId: createVariable - tags: - - variable - parameters: - - $ref: "#/components/parameters/WorkspaceId" - requestBody: - description: new variable - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/CreateVariable" - responses: - "201": - description: variable created - content: - text/plain: - schema: - type: string - - /w/{workspace}/variables/delete/{path}: - delete: - summary: delete variable - operationId: deleteVariable - tags: - - variable - parameters: - - $ref: "#/components/parameters/WorkspaceId" - - $ref: "#/components/parameters/Path" - responses: - "200": - description: variable deleted - content: - text/plain: - schema: - type: string - - /w/{workspace}/variables/update/{path}: - post: - summary: update variable - operationId: updateVariable - tags: - - variable - parameters: - - $ref: "#/components/parameters/WorkspaceId" - - $ref: "#/components/parameters/Path" - requestBody: - description: updated variable - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/EditVariable" - responses: - "200": - description: variable updated - content: - text/plain: - schema: - type: string - - /w/{workspace}/variables/get/{path}: - get: - summary: get variable - operationId: getVariable - tags: - - variable - parameters: - - $ref: "#/components/parameters/WorkspaceId" - - $ref: "#/components/parameters/Path" - - name: decrypt_secret - description: | - ask to decrypt secret if this variable is secret - (if not secret no effect, default: true) - in: query - schema: - type: boolean - responses: - "200": - description: variable - content: - application/json: - schema: - $ref: "#/components/schemas/ListableVariable" - - /w/{workspace}/variables/list: - get: - summary: list variables - operationId: listVariable - tags: - - variable - parameters: - - $ref: "#/components/parameters/WorkspaceId" - responses: - "200": - description: variable list - content: - application/json: - schema: - type: array - items: - $ref: "#/components/schemas/ListableVariable" - - /w/{workspace}/variables/list_contextual: - get: - summary: list contextual variables - operationId: listContextualVariables - tags: - - variable - parameters: - - $ref: "#/components/parameters/WorkspaceId" - responses: - "200": - description: contextual variable list - content: - application/json: - schema: - type: array - items: - $ref: "#/components/schemas/ContextualVariable" - - /w/{workspace}/oauth/disconnect/{client_name}: - post: - summary: disconnect client - operationId: disconnectClient - tags: - - workspace - parameters: - - $ref: "#/components/parameters/WorkspaceId" - - $ref: "#/components/parameters/ClientName" - responses: - "200": - description: disconnected client - content: - text/plain: - schema: - type: string - - /w/{workspace}/resources/create: - post: - summary: create resource - operationId: createResource - tags: - - resource - parameters: - - $ref: "#/components/parameters/WorkspaceId" - requestBody: - description: new resource - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/CreateResource" - responses: - "201": - description: resource created - content: - text/plain: - schema: - type: string - - /w/{workspace}/resources/delete/{path}: - delete: - summary: delete resource - operationId: deleteResource - tags: - - resource - parameters: - - $ref: "#/components/parameters/WorkspaceId" - - $ref: "#/components/parameters/Path" - responses: - "200": - description: resource deleted - content: - text/plain: - schema: - type: string - - /w/{workspace}/resources/update/{path}: - post: - summary: update resource - operationId: updateResource - tags: - - resource - parameters: - - $ref: "#/components/parameters/WorkspaceId" - - $ref: "#/components/parameters/Path" - requestBody: - description: updated resource - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/EditResource" - responses: - "200": - description: resource updated - content: - text/plain: - schema: - type: string - - /w/{workspace}/resources/get/{path}: - get: - summary: get resource - operationId: getResource - tags: - - resource - parameters: - - $ref: "#/components/parameters/WorkspaceId" - - $ref: "#/components/parameters/Path" - responses: - "200": - description: resource deleted - content: - application/json: - schema: - $ref: "#/components/schemas/Resource" - - /w/{workspace}/resources/list: - get: - summary: list resources - operationId: listResource - tags: - - resource - parameters: - - $ref: "#/components/parameters/WorkspaceId" - - $ref: "#/components/parameters/Page" - - $ref: "#/components/parameters/PerPage" - - name: resource_type - description: resource_type to list from - in: query - schema: - type: string - responses: - "200": - description: resource list - content: - application/json: - schema: - type: array - items: - $ref: "#/components/schemas/Resource" - - /w/{workspace}/resources/type/create: - post: - summary: create resource_type - operationId: createResourceType - tags: - - resource - parameters: - - $ref: "#/components/parameters/WorkspaceId" - requestBody: - description: new resource_type - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/ResourceType" - responses: - "201": - description: resource_type created - content: - text/plain: - schema: - type: string - - /w/{workspace}/resources/type/delete/{path}: - delete: - summary: delete resource_type - operationId: deleteResourceType - tags: - - resource - parameters: - - $ref: "#/components/parameters/WorkspaceId" - - $ref: "#/components/parameters/Path" - responses: - "200": - description: resource_type deleted - content: - text/plain: - schema: - type: string - - /w/{workspace}/resources/type/update/{path}: - post: - summary: update resource_type - operationId: updateResourceType - tags: - - resource - parameters: - - $ref: "#/components/parameters/WorkspaceId" - - $ref: "#/components/parameters/Path" - requestBody: - description: updated resource_type - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/EditResourceType" - responses: - "200": - description: resource_type updated - content: - text/plain: - schema: - type: string - - /w/{workspace}/resources/type/get/{path}: - get: - summary: get resource_type - operationId: getResourceType - tags: - - resource - parameters: - - $ref: "#/components/parameters/WorkspaceId" - - $ref: "#/components/parameters/Path" - responses: - "200": - description: resource_type deleted - content: - application/json: - schema: - $ref: "#/components/schemas/ResourceType" - - /w/{workspace}/resources/type/list: - get: - summary: list resource_types - operationId: listResourceType - tags: - - resource - parameters: - - $ref: "#/components/parameters/WorkspaceId" - responses: - "200": - description: resource_type list - content: - application/json: - schema: - type: array - items: - $ref: "#/components/schemas/ResourceType" - - /w/{workspace}/resources/type/listnames: - get: - summary: list resource_types names - operationId: listResourceTypeNames - tags: - - resource - parameters: - - $ref: "#/components/parameters/WorkspaceId" - responses: - "200": - description: resource_type list - content: - application/json: - schema: - type: array - items: - type: string - - /w/{workspace}/scripts/list: - get: - summary: list all available scripts - operationId: listScripts - tags: - - script - parameters: - - $ref: "#/components/parameters/WorkspaceId" - - $ref: "#/components/parameters/Page" - - $ref: "#/components/parameters/PerPage" - - $ref: "#/components/parameters/OrderDesc" - - $ref: "#/components/parameters/CreatedBy" - - name: path_start - description: mask to filter matching starting parh - in: query - schema: - type: string - - name: path_exact - description: mask to filter exact matching path - in: query - schema: - type: string - - name: first_parent_hash - description: mask to filter scripts whom first direct parent has exact hash - in: query - schema: - type: string - - name: last_parent_hash - description: | - mask to filter scripts whom last parent in the chain has exact hash. - Beware that each script stores only a limited number of parents. Hence - the last parent hash for a script is not necessarily its top-most parent. - To find the top-most parent you will have to jump from last to last hash - until finding the parent - in: query - schema: - type: string - - name: parent_hash - description: | - is the hash present in the array of stored parent hashes for this script. - The same warning applies than for last_parent_hash. A script only store a - limited number of direct parent - in: query - schema: - type: string - - name: show_archived - description: | - (default false) - show also the archived files. - when multiple archived hash share the same path, only the ones with the latest create_at - are displayed. - in: query - schema: - type: boolean - - name: is_template - description: | - (default regardless) - if true show only the templates - if false show only the non templates - if not defined, show all regardless of if the script is a template - in: query - schema: - type: boolean - responses: - "200": - description: All available scripts - content: - application/json: - schema: - type: array - items: - $ref: "#/components/schemas/Script" - - /w/{workspace}/scripts/create: - post: - summary: create script - operationId: createScript - tags: - - script - parameters: - - $ref: "#/components/parameters/WorkspaceId" - requestBody: - description: Partially filled script - required: true - content: - application/json: - schema: - type: object - properties: - path: - type: string - parent_hash: - type: string - summary: - type: string - description: - type: string - content: - type: string - schema: - type: object - is_template: - type: boolean - lock: - type: array - items: - type: string - required: - - path - - summary - - description - - content - responses: - "201": - description: script created - content: - text/plain: - schema: - type: string - - /scripts/tojsonschema: - post: - summary: inspect code to infer jsonschema of arguments - operationId: toJsonschema - tags: - - script - requestBody: - description: code with the main function - required: true - content: - application/json: - schema: - type: string - responses: - "200": - description: parsed args - content: - application/json: - schema: - $ref: "#/components/schemas/MainArgSignature" - - /w/{workspace}/scripts/archive/p/{path}: - post: - summary: archive script by path - operationId: archiveScriptByPath - tags: - - script - parameters: - - $ref: "#/components/parameters/WorkspaceId" - - $ref: "#/components/parameters/ScriptPath" - responses: - "200": - description: script archived - content: - text/plain: - schema: - type: string - - /w/{workspace}/scripts/archive/h/{hash}: - post: - summary: archive script by hash - operationId: archiveScriptByHash - tags: - - script - parameters: - - $ref: "#/components/parameters/WorkspaceId" - - $ref: "#/components/parameters/ScriptHash" - responses: - "200": - description: script details - content: - application/json: - schema: - $ref: "#/components/schemas/Script" - - /w/{workspace}/scripts/delete/h/{hash}: - post: - summary: delete script by hash (erase content but keep hash) - operationId: deleteScriptByHash - tags: - - script - parameters: - - $ref: "#/components/parameters/WorkspaceId" - - $ref: "#/components/parameters/ScriptHash" - responses: - "200": - description: script details - content: - application/json: - schema: - $ref: "#/components/schemas/Script" - - /w/{workspace}/scripts/get/p/{path}: - get: - summary: get script by path - operationId: getScriptByPath - tags: - - script - parameters: - - $ref: "#/components/parameters/WorkspaceId" - - $ref: "#/components/parameters/ScriptPath" - responses: - "200": - description: script details - content: - application/json: - schema: - $ref: "#/components/schemas/Script" - - /w/{workspace}/scripts/get/h/{hash}: - get: - summary: get script by hash - operationId: getScriptByHash - tags: - - script - parameters: - - $ref: "#/components/parameters/WorkspaceId" - - $ref: "#/components/parameters/ScriptHash" - responses: - "200": - description: script details - content: - application/json: - schema: - $ref: "#/components/schemas/Script" - - /w/{workspace}/scripts/deployment_status/h/{hash}: - get: - summary: get script deployment status - operationId: getScriptDeploymentStatus - tags: - - script - parameters: - - $ref: "#/components/parameters/WorkspaceId" - - $ref: "#/components/parameters/ScriptHash" - responses: - "200": - description: script details - content: - application/json: - schema: - type: object - properties: - lock: - type: string - lock_error_logs: - type: string - - /w/{workspace}/jobs/run/p/{path}: - post: - summary: run script by path - operationId: runScriptByPath - tags: - - job - parameters: - - $ref: "#/components/parameters/WorkspaceId" - - $ref: "#/components/parameters/ScriptPath" - - name: scheduled_for - description: when to schedule this job (leave empty for immediate run) - in: query - schema: - type: string - format: date-time - - name: scheduled_in_secs - description: schedule the script to execute in the number of seconds starting now - in: query - schema: - type: number - format: int64 - - $ref: "#/components/parameters/ParentJob" - - requestBody: - description: script args - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/ScriptArgs" - - responses: - "201": - description: job created - content: - text/plain: - schema: - type: string - format: uuid - - /w/{workspace}/flows/list: - get: - summary: list all available flows - operationId: listFlows - tags: - - flow - parameters: - - $ref: "#/components/parameters/WorkspaceId" - - $ref: "#/components/parameters/Page" - - $ref: "#/components/parameters/PerPage" - - $ref: "#/components/parameters/OrderDesc" - - $ref: "#/components/parameters/CreatedBy" - - name: path_start - description: mask to filter matching starting parh - in: query - schema: - type: string - - name: path_exact - description: mask to filter exact matching path - in: query - schema: - type: string - - name: show_archived - description: | - (default false) - show also the archived files. - when multiple archived hash share the same path, only the ones with the latest create_at - are displayed. - in: query - schema: - type: boolean - responses: - "200": - description: All available flow - content: - application/json: - schema: - type: array - items: - $ref: "#/components/schemas/Flow" - - /w/{workspace}/flows/get/{path}: - get: - summary: get flow by path - operationId: getFlowByPath - tags: - - flow - parameters: - - $ref: "#/components/parameters/WorkspaceId" - - $ref: "#/components/parameters/ScriptPath" - responses: - "200": - description: flow details - content: - application/json: - schema: - $ref: "#/components/schemas/Flow" - - /w/{workspace}/flows/create: - post: - summary: create flow - operationId: createFlow - tags: - - flow - parameters: - - $ref: "#/components/parameters/WorkspaceId" - requestBody: - description: Partially filled flow - required: true - content: - application/json: - schema: - type: object - properties: - path: - type: string - summary: - type: string - description: - type: string - value: - $ref: "#/components/schemas/FlowValue" - schema: - type: object - required: - - path - - summary - - description - - content - - value - responses: - "201": - description: flow created - content: - text/plain: - schema: - type: string - - /w/{workspace}/flows/update/{path}: - post: - summary: update flow - operationId: updateFlow - tags: - - flow - parameters: - - $ref: "#/components/parameters/WorkspaceId" - - $ref: "#/components/parameters/ScriptPath" - requestBody: - description: Partially filled flow - required: true - content: - application/json: - schema: - type: object - properties: - path: - type: string - summary: - type: string - description: - type: string - value: - $ref: "#/components/schemas/FlowValue" - schema: - type: object - required: - - path - - summary - - description - - content - - value - responses: - "200": - description: flow updated - content: - text/plain: - schema: - type: string - - /w/{workspace}/flows/archive/{path}: - post: - summary: archive flow by path - operationId: archiveFlowByPath - tags: - - flow - parameters: - - $ref: "#/components/parameters/WorkspaceId" - - $ref: "#/components/parameters/ScriptPath" - responses: - "200": - description: flow archived - content: - text/plain: - schema: - type: string - - /w/{workspace}/jobs/run/f/{path}: - post: - summary: run flow by path - operationId: runFlowByPath - tags: - - job - parameters: - - $ref: "#/components/parameters/WorkspaceId" - - $ref: "#/components/parameters/ScriptPath" - - name: scheduled_for - description: when to schedule this job (leave empty for immediate run) - in: query - schema: - type: string - format: date-time - - name: scheduled_in_secs - description: schedule the script to execute in the number of seconds starting now - in: query - schema: - type: number - format: int64 - - $ref: "#/components/parameters/ParentJob" - - requestBody: - description: flow args - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/ScriptArgs" - - responses: - "201": - description: job created - content: - text/plain: - schema: - type: string - format: uuid - - /w/{workspace}/jobs/run/h/{hash}: - post: - summary: run script by hash - operationId: runScriptByHash - tags: - - job - parameters: - - $ref: "#/components/parameters/WorkspaceId" - - $ref: "#/components/parameters/ScriptHash" - - name: scheduled_for - description: when to schedule this job (leave empty for immediate run) - in: query - schema: - type: string - format: date-time - - name: scheduled_in_secs - description: schedule the script to execute in the number of seconds starting now - in: query - schema: - type: number - format: int64 - - $ref: "#/components/parameters/ParentJob" - - requestBody: - description: Partially filled args - required: true - content: - application/json: - schema: - type: object - - responses: - "201": - description: job created - content: - text/plain: - schema: - type: string - format: uuid - - /w/{workspace}/jobs/run/preview: - post: - summary: run script preview - operationId: runScriptPreview - tags: - - job - parameters: - - $ref: "#/components/parameters/WorkspaceId" - requestBody: - description: previw - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/Preview" - - responses: - "201": - description: job created - content: - text/plain: - schema: - type: string - format: uuid - - /w/{workspace}/jobs/run/preview_flow: - post: - summary: run flow preview - operationId: runFlowPreview - tags: - - job - parameters: - - $ref: "#/components/parameters/WorkspaceId" - requestBody: - description: preview - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/FlowPreview" - - responses: - "201": - description: job created - content: - text/plain: - schema: - type: string - format: uuid - - /w/{workspace}/jobs/queue/list: - get: - summary: list all available queued jobs - operationId: listQueue - tags: - - job - parameters: - - $ref: "#/components/parameters/WorkspaceId" - - $ref: "#/components/parameters/OrderDesc" - - $ref: "#/components/parameters/CreatedBy" - - $ref: "#/components/parameters/ParentJob" - - $ref: "#/components/parameters/ScriptExactPath" - - $ref: "#/components/parameters/ScriptStartPath" - - $ref: "#/components/parameters/ScriptExactHash" - - $ref: "#/components/parameters/CreatedBefore" - - $ref: "#/components/parameters/CreatedAfter" - - $ref: "#/components/parameters/Success" - - $ref: "#/components/parameters/JobKinds" - - responses: - "200": - description: All available queued jobs - content: - application/json: - schema: - type: array - items: - $ref: "#/components/schemas/QueuedJob" - - /w/{workspace}/jobs/completed/list: - get: - summary: list all available completed jobs - operationId: listCompletedJobs - tags: - - job - parameters: - - $ref: "#/components/parameters/WorkspaceId" - - $ref: "#/components/parameters/OrderDesc" - - $ref: "#/components/parameters/CreatedBy" - - $ref: "#/components/parameters/ParentJob" - - $ref: "#/components/parameters/ScriptExactPath" - - $ref: "#/components/parameters/ScriptStartPath" - - $ref: "#/components/parameters/ScriptExactHash" - - $ref: "#/components/parameters/CreatedBefore" - - $ref: "#/components/parameters/CreatedAfter" - - $ref: "#/components/parameters/Success" - - $ref: "#/components/parameters/JobKinds" - - responses: - "200": - description: All available completed jobs - content: - application/json: - schema: - type: array - items: - $ref: "#/components/schemas/CompletedJob" - - /w/{workspace}/jobs/list: - get: - summary: list all available jobs - operationId: listJobs - tags: - - job - parameters: - - $ref: "#/components/parameters/WorkspaceId" - - $ref: "#/components/parameters/CreatedBy" - - $ref: "#/components/parameters/ParentJob" - - $ref: "#/components/parameters/ScriptExactPath" - - $ref: "#/components/parameters/ScriptStartPath" - - $ref: "#/components/parameters/ScriptExactHash" - - $ref: "#/components/parameters/CreatedBefore" - - $ref: "#/components/parameters/CreatedAfter" - - $ref: "#/components/parameters/JobKinds" - - - name: success - description: filter on successful jobs - in: query - schema: - type: boolean - responses: - "200": - description: All jobs - content: - application/json: - schema: - type: array - items: - $ref: "#/components/schemas/Job" - - /w/{workspace}/jobs/get/{id}: - get: - summary: get job - operationId: getJob - tags: - - job - parameters: - - $ref: "#/components/parameters/WorkspaceId" - - $ref: "#/components/parameters/JobId" - responses: - "200": - description: job details - content: - application/json: - schema: - $ref: "#/components/schemas/Job" - - /w/{workspace}/jobs/getupdate/{id}: - get: - summary: get job updates - operationId: getJobUpdates - tags: - - job - parameters: - - $ref: "#/components/parameters/WorkspaceId" - - $ref: "#/components/parameters/JobId" - - name: running - in: query - schema: - type: boolean - - name: log_offset - in: query - schema: - type: number - format: i32 - - responses: - "200": - description: job details - content: - application/json: - schema: - type: object - properties: - running: - type: boolean - completed: - type: boolean - new_logs: - type: string - - /w/{workspace}/jobs/completed/get/{id}: - get: - summary: get completed job - operationId: getCompletedJob - tags: - - job - parameters: - - $ref: "#/components/parameters/WorkspaceId" - - $ref: "#/components/parameters/JobId" - responses: - "200": - description: job details - content: - application/json: - schema: - $ref: "#/components/schemas/CompletedJob" - - /w/{workspace}/jobs/completed/delete/{id}: - post: - summary: delete completed job (erase content but keep run id) - operationId: deleteCompletedJob - tags: - - job - parameters: - - $ref: "#/components/parameters/WorkspaceId" - - $ref: "#/components/parameters/JobId" - responses: - "200": - description: job details - content: - application/json: - schema: - $ref: "#/components/schemas/CompletedJob" - - /w/{workspace}/jobs/queue/cancel/{id}: - post: - summary: cancel queued job - operationId: cancelQueuedJob - tags: - - job - parameters: - - $ref: "#/components/parameters/WorkspaceId" - - $ref: "#/components/parameters/JobId" - requestBody: - description: reason - required: true - content: - application/json: - schema: - type: object - properties: - reason: - type: string - - responses: - "200": - description: job canceled - content: - text/plain: - schema: - type: string - - /schedules/preview: - post: - summary: preview schedule - operationId: previewSchedule - tags: - - schedule - requestBody: - description: schedule - required: true - content: - application/json: - schema: - type: object - properties: - schedule: - type: string - offset: - type: integer - required: - - schedule - responses: - "200": - description: the preview of the next 10 time this schedule would apply to - content: - application/json: - schema: - type: array - items: - type: string - format: date-time - - /w/{workspace}/schedules/create: - post: - summary: create schedule - operationId: createSchedule - tags: - - schedule - parameters: - - $ref: "#/components/parameters/WorkspaceId" - requestBody: - description: new schedule - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/NewSchedule" - responses: - "201": - description: schedule created - content: - text/plain: - schema: - type: string - - /w/{workspace}/schedules/update/{path}: - post: - summary: update schedule - operationId: updateSchedule - tags: - - schedule - parameters: - - $ref: "#/components/parameters/WorkspaceId" - - $ref: "#/components/parameters/Path" - requestBody: - description: updated schedule - required: true - content: - application/json: - schema: - $ref: "#/components/schemas/EditSchedule" - responses: - "200": - description: schedule updated - content: - text/plain: - schema: - type: string - - /w/{workspace}/schedules/setenabled/{path}: - post: - summary: set enabled schedule - operationId: setScheduleEnabled - tags: - - schedule - parameters: - - $ref: "#/components/parameters/WorkspaceId" - - $ref: "#/components/parameters/Path" - requestBody: - description: updated schedule enable - required: true - content: - application/json: - schema: - type: object - properties: - enabled: - type: boolean - required: - - enabled - - responses: - "200": - description: schedule enabled set - content: - text/plain: - schema: - type: string - - /w/{workspace}/schedules/get/{path}: - get: - summary: get schedule - operationId: getSchedule - tags: - - schedule - parameters: - - $ref: "#/components/parameters/WorkspaceId" - - $ref: "#/components/parameters/Path" - responses: - "200": - description: schedule deleted - content: - application/json: - schema: - $ref: "#/components/schemas/Schedule" - - /w/{workspace}/schedules/list: - get: - summary: list schedules - operationId: listSchedules - tags: - - schedule - parameters: - - $ref: "#/components/parameters/WorkspaceId" - - $ref: "#/components/parameters/Page" - - $ref: "#/components/parameters/PerPage" - responses: - "200": - description: schedule list - content: - application/json: - schema: - type: array - items: - $ref: "#/components/schemas/Schedule" - - /w/{workspace}/groups/list: - get: - summary: list groups - operationId: listGroups - tags: - - group - parameters: - - $ref: "#/components/parameters/WorkspaceId" - - $ref: "#/components/parameters/Page" - - $ref: "#/components/parameters/PerPage" - responses: - "200": - description: group list - content: - application/json: - schema: - type: array - items: - $ref: "#/components/schemas/Group" - - /w/{workspace}/groups/listnames: - get: - summary: list group names - operationId: listGroupNames - tags: - - group - parameters: - - $ref: "#/components/parameters/WorkspaceId" - responses: - "200": - description: group list - content: - application/json: - schema: - type: array - items: - type: string - - /w/{workspace}/groups/create: - post: - summary: create group - operationId: createGroup - tags: - - group - parameters: - - $ref: "#/components/parameters/WorkspaceId" - requestBody: - description: create group - required: true - content: - application/json: - schema: - type: object - properties: - name: - type: string - summary: - type: string - required: - - name - responses: - "200": - description: group created - content: - text/plain: - schema: - type: string - - /w/{workspace}/groups/update/{name}: - post: - summary: update group - operationId: updateGroup - tags: - - group - parameters: - - $ref: "#/components/parameters/WorkspaceId" - - $ref: "#/components/parameters/Name" - requestBody: - description: updated group - required: true - content: - application/json: - schema: - type: object - properties: - summary: - type: string - responses: - "200": - description: group updated - content: - text/plain: - schema: - type: string - - /w/{workspace}/groups/delete/{name}: - delete: - summary: delete group - operationId: deleteGroup - tags: - - group - parameters: - - $ref: "#/components/parameters/WorkspaceId" - - $ref: "#/components/parameters/Name" - responses: - "200": - description: group deleted - content: - text/plain: - schema: - type: string - - /w/{workspace}/groups/get/{name}: - get: - summary: get group - operationId: getGroup - tags: - - group - parameters: - - $ref: "#/components/parameters/WorkspaceId" - - $ref: "#/components/parameters/Name" - responses: - "200": - description: group - content: - application/json: - schema: - $ref: "#/components/schemas/Group" - - /w/{workspace}/groups/adduser/{name}: - post: - summary: add user to group - operationId: addUserToGroup - tags: - - group - parameters: - - $ref: "#/components/parameters/WorkspaceId" - - $ref: "#/components/parameters/Name" - requestBody: - description: added user to group - required: true - content: - application/json: - schema: - type: object - properties: - username: - type: string - responses: - "200": - description: user added to group - content: - text/plain: - schema: - type: string - - /w/{workspace}/groups/removeuser/{name}: - post: - summary: remove user to group - operationId: removeUserToGroup - tags: - - group - parameters: - - $ref: "#/components/parameters/WorkspaceId" - - $ref: "#/components/parameters/Name" - requestBody: - description: added user to group - required: true - content: - application/json: - schema: - type: object - properties: - username: - type: string - responses: - "200": - description: user removed from group - content: - text/plain: - schema: - type: string - - /workers/list: - get: - summary: list workers - operationId: listWorkers - tags: - - worker - parameters: - - $ref: "#/components/parameters/Page" - - $ref: "#/components/parameters/PerPage" - responses: - "200": - description: a list of workers - content: - application/json: - schema: - type: array - items: - $ref: "#/components/schemas/WorkerPing" - - /w/{workspace}/acls/get/{kind}/{path}: - get: - summary: get granular acls - operationId: getGranularAcls - tags: - - granular_acl - parameters: - - $ref: "#/components/parameters/WorkspaceId" - - $ref: "#/components/parameters/Path" - - name: kind - in: path - required: true - schema: - type: string - enum: [script, group_, resource, schedule, variable, flow] - responses: - "200": - description: acls - content: - application/json: - schema: - type: object - additionalProperties: - type: boolean - - /w/{workspace}/acls/add/{kind}/{path}: - post: - summary: add granular acls - operationId: addGranularAcls - tags: - - granular_acl - parameters: - - $ref: "#/components/parameters/WorkspaceId" - - $ref: "#/components/parameters/Path" - - name: kind - in: path - required: true - schema: - type: string - enum: [script, group_, resource, schedule, variable, flow] - requestBody: - description: acl to add - required: true - content: - application/json: - schema: - type: object - properties: - owner: - type: string - write: - type: boolean - required: [owner] - responses: - "200": - description: granular acl added - content: - text/plain: - schema: - type: string - - /w/{workspace}/acls/remove/{kind}/{path}: - post: - summary: remove granular acls - operationId: removeGranularAcls - tags: - - granular_acl - parameters: - - $ref: "#/components/parameters/WorkspaceId" - - $ref: "#/components/parameters/Path" - - name: kind - in: path - required: true - schema: - type: string - enum: [script, group_, resource, schedule, variable, flow] - requestBody: - description: acl to add - required: true - content: - application/json: - schema: - type: object - properties: - owner: - type: string - required: [owner] - responses: - "200": - description: granular acl removed - content: - text/plain: - schema: - type: string -components: - securitySchemes: - bearerAuth: - type: http - scheme: bearer - cookieAuth: - type: apiKey - in: cookie - name: token - parameters: - WorkspaceId: - name: workspace - in: path - required: true - schema: - type: string - ClientName: - name: client_name - in: path - required: true - schema: - type: string - ScriptPath: - name: path - in: path - required: true - schema: - type: string - ScriptHash: - name: hash - in: path - required: true - schema: - type: string - JobId: - name: id - in: path - required: true - schema: - type: string - format: uuid - Path: - name: path - in: path - required: true - schema: - type: string - PathId: - name: id - in: path - required: true - schema: - type: integer - format: int32 - Name: - name: name - in: path - required: true - schema: - type: string - Page: - name: page - description: which page to return (start at 1, default 1) - in: query - schema: - type: integer - format: int32 - PerPage: - name: per_page - description: number of items to return for a given page (default 30, max 100) - in: query - schema: - type: integer - format: int32 - OrderDesc: - name: order_desc - description: order by desc order (default true) - in: query - schema: - type: boolean - CreatedBy: - name: created_by - description: mask to filter exact matching user creator - in: query - schema: - type: string - ParentJob: - name: parent_job - description: The parent job that is at the origin and responsible for the execution of this script if any - in: query - schema: - type: string - format: uuid - ScriptStartPath: - name: script_path_start - description: mask to filter matching starting path - in: query - schema: - type: string - ScriptExactPath: - name: script_path_exact - description: mask to filter exact matching path - in: query - schema: - type: string - ScriptExactHash: - name: script_hash - description: mask to filter exact matching path - in: query - schema: - type: string - CreatedBefore: - name: created_before - description: filter on created before (inclusive) timestamp - in: query - schema: - type: string - format: date-time - CreatedAfter: - name: created_after - description: filter on created after (exclusive) timestamp - in: query - schema: - type: string - format: date-time - Success: - name: success - description: filter on successful jobs - in: query - schema: - type: boolean - After: - name: after - description: filter on created after (exclusive) timestamp - in: query - schema: - type: string - format: date-time - Before: - name: before - description: filter on created before (exclusive) timestamp - in: query - schema: - type: string - format: date-time - Username: - name: username - description: filter on exact username of user - in: query - schema: - type: string - Operation: - name: operation - description: filter on exact or prefix name of operation - in: query - schema: - type: string - Resource: - name: resource - description: filter on exact or prefix name of resource - in: query - schema: - type: string - ActionKind: - name: action_kind - description: filter on type of operation - in: query - schema: - type: string - enum: [Create, Update, Delete, Execute] - JobKinds: - name: job_kinds - description: filter on job kind (values 'preview', 'script', 'dependencies', 'flow') separated by, - in: query - schema: - type: string - # correct type is below but explode not supported by our codegen - # type: array - # items: - # type: string - # enum: ["preview", "script", "dependencies"] - # explode: false - - schemas: - Script: - type: object - properties: - workspace_id: - type: string - hash: - type: string - path: - type: string - parent_hashes: - type: array - description: | - The first element is the direct parent of the script, the second is the parent of the first, etc - items: - type: string - summary: - type: string - description: - type: string - content: - type: string - created_by: - type: string - created_at: - type: string - format: date-time - archived: - type: boolean - schema: - type: object - deleted: - type: boolean - is_template: - type: boolean - extra_perms: - type: object - additionalProperties: - type: boolean - lock: - type: string - lock_error_logs: - type: string - required: - - hash - - path - - summary - - content - - created_by - - created_at - - archived - - deleted - - is_template - - extra_perms - - ScriptArgs: - type: object - additionalProperties: true - - QueuedJob: - type: object - properties: - id: - type: string - format: uuid - parent_job: - type: string - format: uuid - created_by: - type: string - created_at: - type: string - format: date-time - started_at: - type: string - format: date-time - scheduled_for: - type: string - format: date-time - running: - type: boolean - script_path: - type: string - script_hash: - type: string - args: - $ref: "#/components/schemas/ScriptArgs" - logs: - type: string - raw_code: - type: string - canceled: - type: boolean - canceled_by: - type: string - canceled_reason: - type: string - last_ping: - type: string - format: date-time - job_kind: - type: string - enum: ["script", "preview", "dependencies", "flow", "flowpreview"] - schedule_path: - type: string - permissioned_as: - type: string - description: | - The user (u/userfoo) or group (g/groupfoo) whom - the execution of this script will be permissioned_as and by extension its DT_TOKEN. - flow_status: - $ref: "#/components/schemas/FlowStatus" - raw_flow: - $ref: "#/components/schemas/FlowValue" - is_flow_step: - type: boolean - required: - - id - - running - - canceled - - job_kind - - permissioned_as - - is_flow_step - - CompletedJob: - type: object - properties: - id: - type: string - format: uuid - parent_job: - type: string - format: uuid - created_by: - type: string - created_at: - type: string - format: date-time - duration: - type: integer - success: - type: boolean - script_path: - type: string - script_hash: - type: string - args: - $ref: "#/components/schemas/ScriptArgs" - result: - type: object - logs: - type: string - deleted: - type: boolean - raw_code: - type: string - canceled: - type: boolean - canceled_by: - type: string - canceled_reason: - type: string - job_kind: - type: string - enum: ["script", "preview", "dependencies", "flow", "flowpreview"] - schedule_path: - type: string - permissioned_as: - type: string - description: | - The user (u/userfoo) or group (g/groupfoo) whom - the execution of this script will be permissioned_as and by extension its DT_TOKEN. - flow_status: - $ref: "#/components/schemas/FlowStatus" - raw_flow: - $ref: "#/components/schemas/FlowValue" - is_flow_step: - type: boolean - required: - - id - - success - - canceled - - job_kind - - permissioned_as - - is_flow_step - - Job: - allOf: - - oneOf: - - $ref: "#/components/schemas/CompletedJob" - - $ref: "#/components/schemas/QueuedJob" - - type: object - properties: - type: - type: string - enum: [CompletedJob, QueuedJob] - discriminator: - propertyName: type - - User: - type: object - properties: - email: - type: string - username: - type: string - is_admin: - type: boolean - is_super_admin: - type: boolean - created_at: - type: string - format: date-time - operator: - type: boolean - disabled: - type: boolean - groups: - type: array - items: - type: string - required: - - email - - username - - is_admin - - is_super_admin - - created_at - - operator - - disabled - - Login: - type: object - properties: - email: - type: string - password: - type: string - required: - - email - - password - - NewUser: - type: object - properties: - email: - type: string - username: - type: string - is_admin: - type: boolean - required: - - email - - username - - is_admin - - EditWorkspaceUser: - type: object - properties: - is_admin: - type: boolean - - TruncatedToken: - type: object - properties: - label: - type: string - expiration: - type: string - format: date-time - token_prefix: - type: string - created_at: - type: string - format: date-time - last_used_at: - type: string - format: date-time - required: - - token_prefix - - created_at - - last_used_at - - NewToken: - type: object - properties: - label: - type: string - expiration: - type: string - format: date-time - - ListableVariable: - type: object - properties: - workspace_id: - type: string - path: - type: string - value: - type: string - is_secret: - type: boolean - description: - type: string - extra_perms: - type: object - additionalProperties: - type: boolean - required: - - workspace_id - - path - - is_secret - - extra_perms - - ContextualVariable: - type: object - properties: - name: - type: string - value: - type: string - description: - type: string - required: - - name - - value - - description - - CreateVariable: - type: object - properties: - path: - type: string - value: - type: string - is_secret: - type: boolean - description: - type: string - required: - - path - - value - - is_secret - - description - - EditVariable: - type: object - properties: - path: - type: string - value: - type: string - is_secret: - type: boolean - description: - type: string - - AuditLog: - type: object - properties: - id: - type: integer - format: int32 - timestamp: - type: string - format: date-time - username: - type: string - operation: - type: string - enum: - - "jobs.run" - - "scripts.create" - - "scripts.update" - - "users.create" - - "users.delete" - - "users.setpassword" - - "users.update" - - "users.login" - - "users.token.create" - - "users.token.delete" - - "variables.create" - - "variables.delete" - - "variables.update" - action_kind: - type: string - enum: ["Created", "Updated", "Delete", "Execute"] - resource: - type: string - parameters: - type: object - required: - - id - - timestamp - - username - - operation - - action_kind - - MainArgSignature: - type: object - properties: - star_args: - type: boolean - star_kwargs: - type: boolean - args: - type: array - items: - type: object - properties: - name: - type: string - typ: - type: string - enum: ["str", "float", "int", "bool", "unknown"] - has_default: - type: boolean - default: {} - required: - - name - - typ - required: - - star_args - - start_kwargs - - args - - Preview: - type: object - properties: - content: - type: string - path: - type: string - args: - $ref: "#/components/schemas/ScriptArgs" - - required: - - content - - args - - CreateResource: - type: object - properties: - path: - type: string - value: - type: object - description: - type: string - resource_type: - type: string - required: - - path - - value - - resource_type - - EditResource: - type: object - properties: - path: - type: string - description: - type: string - value: - type: object - - Resource: - type: object - properties: - workspace_id: - type: string - path: - type: string - description: - type: string - resource_type: - type: string - value: - type: object - extra_perms: - type: object - additionalProperties: - type: boolean - required: - - path - - resource_type - - ResourceType: - type: object - properties: - workspace_id: - type: string - name: - type: string - schema: {} - description: - type: string - required: - - name - - EditResourceType: - type: object - properties: - schema: - type: string - description: - type: string - - Schedule: - type: object - properties: - path: - type: string - edited_by: - type: string - edited_at: - type: string - format: date-time - schedule: - type: string - offset_: - type: integer - enabled: - type: boolean - script_path: - type: string - is_flow: - type: boolean - args: - $ref: "#/components/schemas/ScriptArgs" - extra_perms: - type: object - additionalProperties: - type: boolean - required: - - path - - edited_by - - edited_at - - schedule - - script_path - - offset_ - - extra_perms - - is_flow - - NewSchedule: - type: object - properties: - path: - type: string - schedule: - type: string - offset: - type: integer - script_path: - type: string - is_flow: - type: boolean - args: - $ref: "#/components/schemas/ScriptArgs" - required: - - path - - schedule - - script_path - - is_flow - - args - - EditSchedule: - type: object - properties: - schedule: - type: string - script_path: - type: string - is_flow: - type: boolean - args: - $ref: "#/components/schemas/ScriptArgs" - required: - - schedule - - script_path - - is_flow - - args - - Group: - type: object - properties: - name: - type: string - summary: - type: string - members: - type: array - items: - type: string - extra_perms: - type: object - additionalProperties: - type: boolean - required: - - name - - WorkerPing: - type: object - properties: - worker: - type: string - worker_instance: - type: string - ping_at: - type: string - format: date-time - started_at: - type: string - format: date-time - ip: - type: string - jobs_executed: - type: number - format: int32 - required: - - worker - - worker_instance - - ping_at - - started_at - - ip - - jobs_executed - - UserWorkspaceList: - type: object - properties: - email: - type: string - workspaces: - type: array - items: - type: object - properties: - id: - type: string - name: - type: string - username: - type: string - required: - - id - - name - - username - required: - - email - - workspaces - - CreateWorkspace: - type: object - properties: - id: - type: string - name: - type: string - username: - type: string - domain: - type: string - required: - - id - - name - - username - - domain - - Workspace: - type: object - properties: - id: - type: string - name: - type: string - owner: - type: string - domain: - type: string - required: - - id - - name - - owner - - WorkspaceInvite: - type: object - properties: - workspace_id: - type: string - email: - type: string - is_admin: - type: boolean - required: - - workspace_id - - email - - is_admin - - GlobalWhoami: - type: object - properties: - email: - type: string - login_type: - type: string - enum: ["password", "github"] - super_admin: - type: boolean - verified: - type: boolean - name: - type: string - company: - type: string - - required: - - email - - login_type - - super_admin - - verified - - Flow: - type: object - properties: - workspace_id: - type: string - path: - type: string - summary: - type: string - description: - type: string - value: - $ref: "#/components/schemas/FlowValue" - edited_by: - type: string - edited_at: - type: string - format: date-time - archived: - type: boolean - schema: - type: object - extra_perms: - type: object - additionalProperties: - type: boolean - required: - - path - - summary - - value - - edited_by - - edited_at - - archived - - extra_perms - - FlowValue: - type: object - properties: - modules: - type: array - items: - $ref: "#/components/schemas/FlowModule" - failure_module: - $ref: "#/components/schemas/FlowModule" - required: - - modules - - FlowModule: - type: object - properties: - input_transform: - type: object - additionalProperties: - $ref: "#/components/schemas/InputTransform" - value: - $ref: "#/components/schemas/FlowModuleValue" - required: - - input_transform - - value - - InputTransform: - type: object - properties: - type: - type: string - enum: - - static - - javascript - step: - type: number - value: {} - expr: - type: string - - FlowModuleValue: - type: object - properties: - path: - type: string - type: - type: string - enum: - - script - - flow - required: - - type - - path - - FlowPreview: - type: object - properties: - value: - $ref: "#/components/schemas/FlowValue" - path: - type: string - args: - $ref: "#/components/schemas/ScriptArgs" - - required: - - value - - content - - args - - FlowStatus: - type: object - properties: - step: - type: integer - modules: - type: array - items: - $ref: "#/components/schemas/FlowStatusModule" - failure_module: - $ref: "#/components/schemas/FlowStatusModule" - required: - - step - - modules - - failure_module - - FlowStatusModule: - type: object - properties: - type: - type: string - enum: - - WaitingForPriorSteps - - WaitingForEvent - - WaitingForExecutor - - InProgress - - Success - - Failure - job: - type: string - format: uuid - event: - type: string - - required: [type] diff --git a/backend/out.json b/backend/out.json new file mode 100644 index 0000000000000..04766e0f9b62a --- /dev/null +++ b/backend/out.json @@ -0,0 +1 @@ +{"completed":true,"result":{"error":{"name":"Exception","stack":" File \"/tmp/u/ruben/gentle_script.py\", line 35, in main\n print(wmill.get_variable(\"u/admin/adorable_postgresql\"))\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n File \"/tmp/windmill/cache/pip/wmill==1.166.0/wmill/client.py\", line 336, in get_variable\n raise Exception(\n","message":"Variable at path u/admin/adorable_postgresql does not exist or you do not have read permissions on it"}}} \ No newline at end of file diff --git a/backend/overwrite_migrations.py b/backend/overwrite_migrations.py new file mode 100644 index 0000000000000..ccda8cf789bad --- /dev/null +++ b/backend/overwrite_migrations.py @@ -0,0 +1,28 @@ +import sys +import os +import subprocess + +database_url = sys.argv[1] + +print(f"database_url: {database_url}") + +if database_url is None: + print("Please provide a database url") + sys.exit(1) + +for f in os.listdir("migrations"): + if f.endswith(".up.sql"): + version = f.split("_")[0] + cmd = f"cat migrations/{f} | openssl dgst -sha384 | cut -d ' ' -f 2" + ps = subprocess.Popen( + cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT + ) + digest = ps.communicate()[0].decode("utf-8").strip() + + cmd = f"psql '{database_url}' -c \"UPDATE _sqlx_migrations SET checksum = '\\x{digest}' WHERE version = {version};\"" + ps = subprocess.Popen( + cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT + ) + out = ps.communicate()[0].decode("utf-8").strip() + print(f, cmd) + print(version, digest, out) diff --git a/backend/parsers/windmill-parser-bash/Cargo.toml b/backend/parsers/windmill-parser-bash/Cargo.toml new file mode 100644 index 0000000000000..4c7db233133f3 --- /dev/null +++ b/backend/parsers/windmill-parser-bash/Cargo.toml @@ -0,0 +1,21 @@ +[package] +name = "windmill-parser-bash" +version.workspace = true +edition.workspace = true +authors.workspace = true + +[lib] +name = "windmill_parser_bash" +path = "./src/lib.rs" + +[target.'cfg(target_arch = "wasm32")'.dependencies] +regex-lite.workspace = true + +[target.'cfg(not(target_arch = "wasm32"))'.dependencies] +regex.workspace = true + +[dependencies] +windmill-parser.workspace = true +anyhow.workspace = true +lazy_static.workspace = true +serde_json.workspace = true diff --git a/backend/parsers/windmill-parser-bash/src/lib.rs b/backend/parsers/windmill-parser-bash/src/lib.rs new file mode 100644 index 0000000000000..9b62ad3b0c69c --- /dev/null +++ b/backend/parsers/windmill-parser-bash/src/lib.rs @@ -0,0 +1,195 @@ +#![allow(non_snake_case)] // TODO: switch to parse_* function naming + +use anyhow::anyhow; + +#[cfg(not(target_arch = "wasm32"))] +use regex::Regex; +#[cfg(target_arch = "wasm32")] +use regex_lite::Regex; + +use serde_json::json; + +use std::collections::HashMap; +use windmill_parser::{Arg, MainArgSignature, Typ}; + +pub fn parse_bash_sig(code: &str) -> anyhow::Result { + let parsed = parse_bash_file(&code)?; + if let Some(x) = parsed { + let args = x; + Ok(MainArgSignature { + star_args: false, + star_kwargs: false, + args, + no_main_func: None, + has_preprocessor: None, + }) + } else { + Err(anyhow!("Error parsing bash script".to_string())) + } +} + +pub fn parse_powershell_sig(code: &str) -> anyhow::Result { + let parsed = parse_powershell_file(&code)?; + if let Some(x) = parsed { + let args = x; + Ok(MainArgSignature { + star_args: false, + star_kwargs: false, + args, + no_main_func: None, + has_preprocessor: None, + }) + } else { + Err(anyhow!("Error parsing powershell script".to_string())) + } +} + +lazy_static::lazy_static! { + static ref RE_BASH: Regex = Regex::new(r#"(?m)^(\w+)="\$(?:(\d+)|\{(\d+):-(.*)\})"(?:[\t ]*)?(?:#.*)?$"#).unwrap(); + + pub static ref RE_POWERSHELL_PARAM: Regex = Regex::new(r#"(?m)param[\t ]*\(([^)]*)\)"#).unwrap(); + static ref RE_POWERSHELL_ARGS: Regex = Regex::new(r#"(?:\[(\w+)\])?\$(\w+)[\t ]*(?:=[\t ]*(?:(?:(?:"|')([^"\n\r\$]*)(?:"|'))|([\d.]+)))?"#).unwrap(); +} + +fn parse_bash_file(code: &str) -> anyhow::Result>> { + let mut hm: HashMap)> = HashMap::new(); + for cap in RE_BASH.captures_iter(code) { + hm.insert( + cap.get(2) + .or(cap.get(3)) + .and_then(|x| x.as_str().parse::().ok()) + .ok_or_else(|| anyhow!("Impossible to parse arg digit"))?, + ( + cap[1].to_string(), + cap.get(4).map(|x| x.as_str().to_string()), + ), + ); + } + let mut args = vec![]; + for i in 1..20 { + if hm.contains_key(&i) { + let (name, default) = hm.get(&i).unwrap(); + args.push(Arg { + name: name.clone(), + typ: Typ::Str(None), + default: default.clone().map(|x| json!(x)), + otyp: None, + has_default: default.is_some(), + oidx: None, + }); + } else { + break; + } + } + Ok(Some(args)) +} + +fn parse_powershell_file(code: &str) -> anyhow::Result>> { + let param_wrapper = RE_POWERSHELL_PARAM.captures(code); + let mut args = vec![]; + if let Some(param_wrapper) = param_wrapper { + let param_wrapper = param_wrapper.get(1).unwrap().as_str(); + for cap in RE_POWERSHELL_ARGS.captures_iter(param_wrapper) { + let typ = cap + .get(1) + .map(|x| x.as_str().to_string()) + .unwrap_or("string".to_string()); + let name = cap.get(2).unwrap().as_str().to_string(); + let default = cap + .get(3) + .or(cap.get(4)) + .map(|x| json!(x.as_str().to_string())); + + args.push(Arg { + name: name, + typ: match typ.as_str() { + "string" => Typ::Str(None), + "int" | "long" => Typ::Int, + "decimal" | "double" | "single" => Typ::Float, + "datetime" | "DateTime" => Typ::Datetime, + _ => Typ::Str(None), + }, + default: default.clone(), + otyp: None, + has_default: default.is_some(), + oidx: None, + }); + } + } + Ok(Some(args)) +} + +#[cfg(test)] +mod tests { + + use serde_json::json; + + use super::*; + + #[test] + fn test_parse_bash_sig() -> anyhow::Result<()> { + let code = r#" +token="$1" +image="$2" +digest="${3:-latest with spaces}" +text="$4" # with comment +non_required="${5:-}" + + +"#; + //println!("{}", serde_json::to_string()?); + assert_eq!( + parse_bash_sig(code)?, + MainArgSignature { + star_args: false, + star_kwargs: false, + args: vec![ + Arg { + otyp: None, + name: "token".to_string(), + typ: Typ::Str(None), + default: None, + has_default: false, + oidx: None + }, + Arg { + otyp: None, + name: "image".to_string(), + typ: Typ::Str(None), + default: None, + has_default: false, + oidx: None + }, + Arg { + otyp: None, + name: "digest".to_string(), + typ: Typ::Str(None), + default: Some(json!("latest with spaces")), + has_default: true, + oidx: None + }, + Arg { + otyp: None, + name: "text".to_string(), + typ: Typ::Str(None), + default: None, + has_default: false, + oidx: None + }, + Arg { + otyp: None, + name: "non_required".to_string(), + typ: Typ::Str(None), + default: Some(json!("")), + has_default: true, + oidx: None + } + ], + no_main_func: None, + has_preprocessor: None + } + ); + + Ok(()) + } +} diff --git a/backend/parsers/windmill-parser-go/Cargo.toml b/backend/parsers/windmill-parser-go/Cargo.toml new file mode 100644 index 0000000000000..ecba62cff4d29 --- /dev/null +++ b/backend/parsers/windmill-parser-go/Cargo.toml @@ -0,0 +1,17 @@ +[package] +name = "windmill-parser-go" +version.workspace = true +edition.workspace = true +authors.workspace = true + +[lib] +name = "windmill_parser_go" +path = "./src/lib.rs" + +[dependencies] +windmill-parser.workspace = true +itertools.workspace = true +anyhow.workspace = true +gosyn.workspace = true +lazy_static.workspace = true +regex.workspace = true \ No newline at end of file diff --git a/backend/parsers/windmill-parser-go/src/lib.rs b/backend/parsers/windmill-parser-go/src/lib.rs new file mode 100644 index 0000000000000..218a6dc3ec5bd --- /dev/null +++ b/backend/parsers/windmill-parser-go/src/lib.rs @@ -0,0 +1,329 @@ +#![allow(non_snake_case)] // TODO: switch to parse_* function naming + +use gosyn::{ + ast::{Declaration, Expression, Field, Ident, StructType}, + parse_source, +}; +use itertools::Itertools; + +use regex::Regex; +use windmill_parser::{Arg, MainArgSignature, ObjectProperty, Typ}; + +lazy_static::lazy_static! { + pub static ref REQUIRE_PARSE: Regex = Regex::new(r"//require (.*)\n").unwrap(); +} + +pub fn parse_go_sig(code: &str) -> anyhow::Result { + let filtered_code = filter_non_main(code); + let file = parse_source(&filtered_code).map_err(|x| anyhow::anyhow!(x.to_string()))?; + if let Some(func) = file.decl.iter().find_map(|x| match x { + Declaration::Function(func) if &func.name.name == "main" => Some(func), + _ => None, + }) { + let args = func + .typ + .params + .list + .iter() + .map(|param| { + let (otyp, typ) = parse_go_typ(¶m.typ); + Arg { + name: get_name(param), + otyp, + typ, + default: None, + has_default: false, + oidx: None, + } + }) + .collect_vec(); + Ok(MainArgSignature { + star_args: false, + star_kwargs: false, + args, + no_main_func: Some(false), + has_preprocessor: None, + }) + } else { + Ok(MainArgSignature { + star_args: false, + star_kwargs: false, + args: vec![], + no_main_func: Some(true), + has_preprocessor: None, + }) + } +} + +pub fn parse_go_imports(code: &str) -> anyhow::Result> { + let file = + parse_source(filter_non_imports(code)).map_err(|x| anyhow::anyhow!(x.to_string()))?; + let mut imports: Vec = file + .imports + .iter() + .filter_map(|x| { + if x.path.value.contains("/") { + Some(x.path.value.clone()) + } else { + None + } + }) + .collect(); + imports.sort(); + Ok([ + imports, + REQUIRE_PARSE + .captures_iter(code) + .map(|x| x[1].to_string()) + .collect_vec(), + ] + .concat()) +} + +fn get_name(param: &Field) -> String { + param + .name + .first() + .map(|y| y.name.to_string()) + .unwrap_or_else(|| "".to_string()) +} + +fn parse_go_typ(typ: &Expression) -> (Option, Typ) { + match typ { + Expression::Ident(Ident { name, .. }) => ( + Some((name).to_string()), + match name.as_str() { + "int" => Typ::Int, + "int16" => Typ::Int, + "int32" => Typ::Int, + "int64" => Typ::Int, + "string" => Typ::Str(None), + "bool" => Typ::Bool, + _ => Typ::Unknown, + }, + ), + Expression::TypeSlice(slice_type) => { + let (inner_otyp, inner_typ) = parse_go_typ(&*slice_type.typ); + ( + inner_otyp.map(|x| format!("[]{}", x)), + Typ::List(Box::new(inner_typ)), + ) + } + Expression::TypeArray(array_type) => { + let (inner_otyp, inner_typ) = parse_go_typ(&*array_type.typ); + ( + inner_otyp.map(|x| format!("[]{x}")), + Typ::List(Box::new(inner_typ)), + ) + } + Expression::TypeStruct(StructType { fields, .. }) => { + let (otyps, typs): (Vec, Vec) = fields + .iter() + .map(|field| { + let json_tag = field + .tag + .as_ref() + .and_then(|x| x.value.strip_prefix("`json:\"")) + .and_then(|x| x.strip_suffix("\"`")) + .and_then(|x| x.split(',').next().map(|x| x.to_string())); + let (otyp, typ) = parse_go_typ(&field.typ); + let name = get_name(field); + let key = json_tag.unwrap_or_else(|| name.to_string()); + ( + format!("{name} {} `json:\"{key}\"`", otyp_to_string(otyp)), + ObjectProperty { key, typ: Box::new(typ) }, + ) + }) + .collect::>() + .into_iter() + .unzip(); + ( + Some(format!( + "struct {{ {} }}", + otyps.iter().join("; ").to_string() + )), + Typ::Object(typs), + ) + } + Expression::TypeInterface(_) => (Some("interface{}".to_string()), Typ::Object(vec![])), + Expression::TypeMap(_) => ( + Some("map[string]interface{}".to_string()), + Typ::Object(vec![]), + ), + _ => (None, Typ::Unknown), + } +} + +pub fn otyp_to_string(otyp: Option) -> String { + otyp.unwrap_or_else(|| "interface{}".to_string()) +} + +#[cfg(test)] +mod tests { + + use super::*; + + #[test] + fn test_parse_go_sig() -> anyhow::Result<()> { + let code = r#" + +package main + +import "fmt" + +func main(x int, y string, z bool, l []string, o struct { Name string `json:"name"` }, n interface{}, m map[string]interface{}) { + fmt.Println("hello world") +} + +"#; + //println!("{}", serde_json::to_string()?); + assert_eq!( + parse_go_sig(code)?, + MainArgSignature { + star_args: false, + star_kwargs: false, + args: vec![ + Arg { + otyp: Some("int".to_string()), + name: "x".to_string(), + typ: Typ::Int, + has_default: false, + default: None, + oidx: None + }, + Arg { + otyp: Some("string".to_string()), + name: "y".to_string(), + typ: Typ::Str(None), + default: None, + has_default: false, + oidx: None + }, + Arg { + otyp: Some("bool".to_string()), + name: "z".to_string(), + typ: Typ::Bool, + default: None, + has_default: false, + oidx: None + }, + Arg { + otyp: Some("[]string".to_string()), + name: "l".to_string(), + typ: Typ::List(Box::new(Typ::Str(None))), + default: None, + has_default: false, + oidx: None + }, + Arg { + otyp: Some("struct { Name string `json:\"name\"` }".to_string()), + name: "o".to_string(), + typ: Typ::Object(vec![ObjectProperty { + key: "name".to_string(), + typ: Box::new(Typ::Str(None)) + },]), + default: None, + has_default: false, + oidx: None + }, + Arg { + otyp: Some("interface{}".to_string()), + name: "n".to_string(), + typ: Typ::Object(vec![]), + default: None, + has_default: false, + oidx: None + }, + Arg { + otyp: Some("map[string]interface{}".to_string()), + name: "m".to_string(), + typ: Typ::Object(vec![]), + default: None, + has_default: false, + oidx: None + }, + ], + no_main_func: Some(false), + has_preprocessor: None + } + ); + + Ok(()) + } +} + +#[test] +fn test_parse_go_import() -> anyhow::Result<()> { + let code = r#" +package inner + +import ( + "fmt" + "rsc.io/quote" + wmill "github.com/windmill-labs/windmill-go-client" +) + +// the main must return (interface{}, error) + +func main(x string, nested struct { + Foo string `json:"foo"` +}) (interface{}, error) { + fmt.Println("Hello, World") + fmt.Println(nested.Foo) + fmt.Println(quote.Opt()) + v, _ := wmill.GetVariable("f/examples/secret") + return v, nil +} +"#; + + assert_eq!( + parse_go_imports(code)?, + vec![ + "\"github.com/windmill-labs/windmill-go-client\"", + "\"rsc.io/quote\"" + ] + ); + + Ok(()) +} + +fn filter_non_imports(code: &str) -> String { + code.split_once("func ") + .map(|(x, _)| x.to_string()) + .unwrap_or_else(|| code.to_string()) +} +fn filter_non_main(code: &str) -> String { + const FUNC_MAIN: &str = "func main("; + + let mut filtered_code = "package main;\n".to_string(); + let mut code_iter = code.split("\n"); + let mut remaining: String = String::new(); + while let Some(line) = code_iter.next() { + if line.starts_with(FUNC_MAIN) { + filtered_code += FUNC_MAIN; + remaining += line.strip_prefix(FUNC_MAIN).unwrap(); + remaining += &code_iter.join("\n"); + break; + } + } + if filtered_code.is_empty() { + return String::new(); + } + let mut chars = remaining.chars(); + let mut open_parens = 1; + + while let Some(c) = chars.next() { + if c == '(' { + open_parens += 1; + } else if c == ')' { + open_parens -= 1; + } + filtered_code.push(c); + if open_parens == 0 { + break; + } + } + + filtered_code.push_str("{}"); + return filtered_code; +} diff --git a/backend/parsers/windmill-parser-graphql/Cargo.toml b/backend/parsers/windmill-parser-graphql/Cargo.toml new file mode 100644 index 0000000000000..7f0a93b6f3f7b --- /dev/null +++ b/backend/parsers/windmill-parser-graphql/Cargo.toml @@ -0,0 +1,21 @@ +[package] +name = "windmill-parser-graphql" +version.workspace = true +edition.workspace = true +authors.workspace = true + +[lib] +name = "windmill_parser_graphql" +path = "./src/lib.rs" + +[target.'cfg(target_arch = "wasm32")'.dependencies] +regex-lite.workspace = true + +[target.'cfg(not(target_arch = "wasm32"))'.dependencies] +regex.workspace = true + +[dependencies] +windmill-parser.workspace = true +anyhow.workspace = true +lazy_static.workspace = true +serde_json.workspace = true diff --git a/backend/parsers/windmill-parser-graphql/src/lib.rs b/backend/parsers/windmill-parser-graphql/src/lib.rs new file mode 100644 index 0000000000000..a900c3244dcb7 --- /dev/null +++ b/backend/parsers/windmill-parser-graphql/src/lib.rs @@ -0,0 +1,135 @@ +#![allow(non_snake_case)] // TODO: switch to parse_* function naming + +use anyhow::anyhow; + +#[cfg(not(target_arch = "wasm32"))] +use regex::Regex; +#[cfg(target_arch = "wasm32")] +use regex_lite::Regex; + +use serde_json::json; + +use windmill_parser::{Arg, MainArgSignature, Typ}; + +pub fn parse_graphql_sig(code: &str) -> anyhow::Result { + let parsed = parse_graphql_file(&code)?; + if let Some(x) = parsed { + let args = x; + Ok(MainArgSignature { + star_args: false, + star_kwargs: false, + args, + no_main_func: None, + has_preprocessor: None, + }) + } else { + Err(anyhow!("Error parsing sql".to_string())) + } +} + +lazy_static::lazy_static! { + static ref RE_ARG_GRAPHQL: Regex = Regex::new(r#"\$(\w+)\s*:\s*(?:(\w+)(!)?|\[(\w+)!?\])(!)?\s*(?:=\s*"?(\w+)"?\s*)?"#).unwrap(); +} + +fn parse_graphql_file(code: &str) -> anyhow::Result>> { + let mut args: Vec = vec![]; + + for cap in RE_ARG_GRAPHQL.captures_iter(code) { + let name = cap.get(1).map(|x| x.as_str().to_string()).unwrap(); + let mut typ = cap.get(2).map(|x| x.as_str().to_string()); + + let parsed_typ = if typ.is_none() { + let inner_typ = cap.get(4).map(|x| x.as_str().to_string()); + typ = inner_typ.clone().map(|x| format!("[{}]", x.to_string())); + Typ::List(Box::new(parse_graphql_typ(inner_typ.unwrap().as_str()))) + } else { + parse_graphql_typ(typ.clone().unwrap().as_str()) + }; + + let (has_default, default) = match cap.get(6).map(|x| x.as_str().to_string()) { + Some(x) => (true, Some(x)), // default value => optional + None => (cap.get(3).is_none() && cap.get(5).is_none(), None), // optional if no ! + }; + + let parsed_default = default.and_then(|x| match parsed_typ { + Typ::Int => x.parse::().ok().map(|x| json!(x)), + Typ::Float => x.parse::().ok().map(|x| json!(x)), + _ => Some(json!(x)), + }); + args.push(Arg { + name, + typ: parsed_typ, + default: parsed_default, + otyp: Some(typ.unwrap()), + has_default, + oidx: None, + }); + } + + Ok(Some(args)) +} + +pub fn parse_graphql_typ(typ: &str) -> Typ { + match typ { + "String" | "ID" => Typ::Str(None), + "Int" => Typ::Int, + "Boolean" => Typ::Bool, + "Float" => Typ::Float, + _ => Typ::Object(vec![]), + } +} + +#[cfg(test)] +mod tests { + + use super::*; + + #[test] + fn test_parse_graphql_sig() -> anyhow::Result<()> { + let code = r#" +query($i: Int, $arr: [String]!, $wahoo: String = "wahoo") { + books { + title + } +} +"#; + //println!("{}", serde_json::to_string()?); + assert_eq!( + parse_graphql_sig(code)?, + MainArgSignature { + star_args: false, + star_kwargs: false, + args: vec![ + Arg { + otyp: Some("Int".to_string()), + name: "i".to_string(), + typ: Typ::Int, + default: None, + has_default: true, + oidx: None + }, + Arg { + otyp: Some("[String]".to_string()), + name: "arr".to_string(), + typ: Typ::List(Box::new(Typ::Str(None))), + default: None, + has_default: false, + oidx: None + }, + Arg { + otyp: Some("String".to_string()), + name: "wahoo".to_string(), + typ: Typ::Str(None), + default: Some(json!("wahoo")), + has_default: true, + oidx: None + } + ], + no_main_func: None, + has_preprocessor: None + } + ); + + Ok(()) + } +} diff --git a/backend/parsers/windmill-parser-php/Cargo.toml b/backend/parsers/windmill-parser-php/Cargo.toml new file mode 100644 index 0000000000000..8bd3182f91124 --- /dev/null +++ b/backend/parsers/windmill-parser-php/Cargo.toml @@ -0,0 +1,16 @@ +[package] +name = "windmill-parser-php" +version.workspace = true +edition.workspace = true +authors.workspace = true + +[lib] +name = "windmill_parser_php" +path = "./src/lib.rs" + +[dependencies] +windmill-parser.workspace = true +itertools.workspace = true +serde_json.workspace = true +anyhow.workspace = true +php-parser-rs.workspace = true diff --git a/backend/parsers/windmill-parser-php/src/lib.rs b/backend/parsers/windmill-parser-php/src/lib.rs new file mode 100644 index 0000000000000..4c239c21c9540 --- /dev/null +++ b/backend/parsers/windmill-parser-php/src/lib.rs @@ -0,0 +1,171 @@ +use serde_json::Value; +use windmill_parser::{to_snake_case, Arg, MainArgSignature, Typ}; + +use php_parser_rs::parser::{ + self, + ast::{ + data_type::Type, + functions::{FunctionParameterList, FunctionStatement}, + literals::Literal, + Expression, Statement, + }, +}; + +fn parse_php_type(e: Type) -> Typ { + match e { + Type::Float(_) => Typ::Float, + Type::Boolean(_) => Typ::Bool, + Type::Integer(_) => Typ::Int, + Type::String(_) => Typ::Str(None), + Type::Array(_) => Typ::List(Box::new(Typ::Str(None))), + Type::Object(_) => Typ::Object(vec![]), + Type::Named(_, name) => Typ::Resource(to_snake_case(name.to_string().as_ref())), + _ => Typ::Unknown, + } +} + +fn parse_default_expr(e: Expression) -> Option { + match e { + Expression::Literal(l) => match l { + Literal::String(s) => Some(Value::String(s.value.to_string())), + Literal::Integer(i) => match i.value.to_string().parse() { + Ok(i) => Some(Value::Number(i)), + Err(_) => None, + }, + Literal::Float(f) => match f.value.to_string().parse() { + Ok(i) => Some(Value::Number(i)), + Err(_) => None, + }, + }, + Expression::Bool(b) => Some(Value::Bool(b.value)), + _ => None, + } +} + +pub fn parse_php_signature( + code: &str, + override_main: Option, +) -> anyhow::Result { + let main_name = override_main.unwrap_or("main".to_string()); + + let ast = parser::parse(code) + .map_err(|e| anyhow::anyhow!("Error parsing code: {}", e.to_string()))?; + + let params = ast.into_iter().find_map(|x| match x { + Statement::Function(FunctionStatement { + name, + parameters: FunctionParameterList { parameters, .. }, + .. + }) if name.to_string() == main_name => Some(parameters), + _ => None, + }); + + if let Some(params) = params { + let args = params + .into_iter() + .map(|x| { + let typ = x.data_type.map_or(Typ::Unknown, |e| parse_php_type(e)); + let default = x.default.map_or(None, |e| parse_default_expr(e)); + Arg { + otyp: None, + name: x.name.to_string().trim_start_matches('$').to_string(), + typ, + has_default: default.is_some(), + default, + oidx: None, + } + }) + .collect(); + + Ok(MainArgSignature { + star_args: false, + star_kwargs: false, + args, + no_main_func: Some(false), + has_preprocessor: None, + }) + } else { + Ok(MainArgSignature { + star_args: false, + star_kwargs: false, + args: vec![], + no_main_func: Some(true), + has_preprocessor: None, + }) + } +} + +#[cfg(test)] +mod tests { + + use serde_json::Number; + + use super::*; + + #[test] + fn test_parse_php_sig() -> anyhow::Result<()> { + let code = " + = phf_map! { + "psycopg2" => "psycopg2-binary", + "psycopg" => "psycopg[binary, pool]", + "yaml" => "pyyaml", + "git" => "GitPython", + "shopify" => "ShopifyAPI", + "seleniumwire" => "selenium-wire", + "openbb-terminal" => "openbb[all]", + "riskfolio" => "riskfolio-lib", + "smb" => "pysmb", + "PIL" => "Pillow", + "googleapiclient" => "google-api-python-client", + "dateutil" => "python-dateutil", + "mailparser" => "mail-parser", + "mailparser-reply" => "mail-parser-reply", + "gitlab" => "python-gitlab", + "smbclient" => "smbprotocol", + "playhouse" => "peewee", + "dns" => "dnspython", + "msoffcrypto" => "msoffcrypto-tool", + "tabula" => "tabula-py", + "shapefile" => "pyshp", + "sklearn" => "scikit-learn", + "umap" => "umap-learn", + "cv2" => "opencv-python", + "atlassian" => "atlassian-python-api", + "mysql" => "mysql-connector-python", + "tenable" => "pytenable", + "ns1" => "ns1-python", + "pymsql" => "PyMySQL", + "haystack" => "haystack-ai", + "github" => "PyGithub", + "ldap" => "python-ldap", + "opensearchpy" => "opensearch-py", + "lokalise" => "python-lokalise-api", + "msgraph" => "msgraph-sdk", +}; + +fn replace_import(x: String) -> String { + PYTHON_IMPORTS_REPLACEMENT + .get(&x) + .map(|x| x.to_owned()) + .unwrap_or(&x) + .to_string() +} + +lazy_static! { + static ref RE: Regex = Regex::new(r"^\#\s?(\S+)\s*$").unwrap(); +} + +fn process_import(module: Option, path: &str, level: usize) -> Vec { + if level > 0 { + let mut imports = vec![]; + let splitted_path = path.split("/"); + let base = splitted_path + .clone() + .take(splitted_path.count() - level) + .join("/"); + if let Some(m) = module { + imports.push(format!("relative:{base}/{}", m.replace(".", "/"))); + } else { + imports.push(format!("relative:{base}")); + } + imports + } else if let Some(module) = module { + let imprt = module.split('.').next().unwrap_or("").replace("_", "-"); + if imprt == "u" || imprt == "f" { + vec![format!("relative:{}", module.replace(".", "/"))] + } else { + vec![imprt] + } + } else { + vec![] + } +} + +pub fn parse_relative_imports(code: &str, path: &str) -> error::Result> { + let nimports = parse_code_for_imports(code, path)?; + return Ok(nimports + .into_iter() + .filter_map(|x| { + if x.starts_with("relative:") { + Some(x.replace("relative:", "")) + } else { + None + } + }) + .collect()); +} + +fn parse_code_for_imports(code: &str, path: &str) -> error::Result> { + let mut code = code.split(DEF_MAIN).next().unwrap_or("").to_string(); + + // remove main function decorator from end of file if it exists + if code + .lines() + .last() + .map(|x| x.starts_with("@")) + .unwrap_or(false) + { + code = code + .lines() + .take(code.lines().count() - 1) + .collect::>() + .join("\n") + + "\n"; + } + + let ast = Suite::parse(&code, "main.py").map_err(|e| { + error::Error::ExecutionErr(format!("Error parsing code for imports: {}", e.to_string())) + })?; + let nimports: Vec = ast + .into_iter() + .filter_map(|x| match x { + Stmt::Import(StmtImport { names, .. }) => Some( + names + .into_iter() + .map(|x| { + let name = x.name.to_string(); + process_import(Some(name), path, 0) + }) + .flatten() + .collect::>(), + ), + Stmt::ImportFrom(StmtImportFrom { level: Some(i), module, .. }) if i.to_u32() > 0 => { + Some(process_import( + module.map(|x| x.to_string()), + path, + i.to_usize(), + )) + } + Stmt::ImportFrom(StmtImportFrom { level: _, module, .. }) => { + Some(process_import(module.map(|x| x.to_string()), path, 0)) + } + _ => None, + }) + .flatten() + .filter(|x| !STDIMPORTS.contains(&x.as_str())) + .unique() + .collect(); + return Ok(nimports); +} + +#[async_recursion] +pub async fn parse_python_imports( + code: &str, + w_id: &str, + path: &str, + db: &Pool, + already_visited: &mut Vec, +) -> error::Result> { + let find_requirements = code + .lines() + .find_position(|x| x.starts_with("#requirements:") || x.starts_with("# requirements:")); + if let Some((pos, _)) = find_requirements { + let lines = code + .lines() + .skip(pos + 1) + .map_while(|x| { + RE.captures(x) + .map(|x| x.get(1).unwrap().as_str().to_string()) + }) + .collect(); + Ok(lines) + } else { + let find_extra_requirements = code.lines().find_position(|x| { + x.starts_with("#extra_requirements:") || x.starts_with("# extra_requirements:") + }); + let mut imports: Vec = vec![]; + if let Some((pos, _)) = find_extra_requirements { + let lines: Vec = code + .lines() + .skip(pos + 1) + .map_while(|x| { + RE.captures(x) + .map(|x| x.get(1).unwrap().as_str().to_string()) + }) + .collect(); + imports.extend(lines); + } + + let nimports = parse_code_for_imports(code, path)?; + for n in nimports.iter() { + let nested = if n.starts_with("relative:") { + let rpath = n.replace("relative:", ""); + let code = sqlx::query_scalar!( + r#" + SELECT content FROM script WHERE path = $1 AND workspace_id = $2 + AND created_at = (SELECT max(created_at) FROM script WHERE path = $1 AND + workspace_id = $2) + "#, + &rpath, + w_id + ) + .fetch_optional(db) + .await? + .unwrap_or_else(|| "".to_string()); + if already_visited.contains(&rpath) { + vec![] + } else { + already_visited.push(rpath.clone()); + parse_python_imports(&code, w_id, &rpath, db, already_visited).await? + } + } else { + vec![replace_import(n.to_string())] + }; + for imp in nested { + if !imports.contains(&imp) { + imports.push(imp); + } + } + } + imports.sort(); + Ok(imports) + } +} + +const STDIMPORTS: [&str; 302] = [ + "--future--", + "-abc", + "-aix-support", + "-ast", + "-asyncio", + "-bisect", + "-blake2", + "-bootsubprocess", + "-bz2", + "-codecs", + "-codecs-cn", + "-codecs-hk", + "-codecs-iso2022", + "-codecs-jp", + "-codecs-kr", + "-codecs-tw", + "-collections", + "-collections-abc", + "-compat-pickle", + "-compression", + "-contextvars", + "-crypt", + "-csv", + "-ctypes", + "-curses", + "-curses-panel", + "-datetime", + "-dbm", + "-decimal", + "-elementtree", + "-frozen-importlib", + "-frozen-importlib-external", + "-functools", + "-gdbm", + "-hashlib", + "-heapq", + "-imp", + "-io", + "-json", + "-locale", + "-lsprof", + "-lzma", + "-markupbase", + "-md5", + "-msi", + "-multibytecodec", + "-multiprocessing", + "-opcode", + "-operator", + "-osx-support", + "-overlapped", + "-pickle", + "-posixshmem", + "-posixsubprocess", + "-py-abc", + "-pydecimal", + "-pyio", + "-queue", + "-random", + "-sha1", + "-sha256", + "-sha3", + "-sha512", + "-signal", + "-sitebuiltins", + "-socket", + "-sqlite3", + "-sre", + "-ssl", + "-stat", + "-statistics", + "-string", + "-strptime", + "-struct", + "-symtable", + "-thread", + "-threading-local", + "-tkinter", + "-tracemalloc", + "-uuid", + "-warnings", + "-weakref", + "-weakrefset", + "-winapi", + "-zoneinfo", + "zoneinfo", + "abc", + "aifc", + "antigravity", + "argparse", + "array", + "ast", + "asynchat", + "asyncio", + "asyncore", + "atexit", + "audioop", + "base64", + "bdb", + "binascii", + "binhex", + "bisect", + "builtins", + "bz2", + "cProfile", + "calendar", + "cgi", + "cgitb", + "chunk", + "cmath", + "cmd", + "code", + "codecs", + "codeop", + "collections", + "colorsys", + "compileall", + "concurrent", + "configparser", + "contextlib", + "contextvars", + "copy", + "copyreg", + "crypt", + "csv", + "ctypes", + "curses", + "dataclasses", + "datetime", + "dbm", + "decimal", + "difflib", + "dis", + "distutils", + "doctest", + "email", + "encodings", + "ensurepip", + "enum", + "errno", + "faulthandler", + "fcntl", + "filecmp", + "fileinput", + "fnmatch", + "fractions", + "ftplib", + "functools", + "gc", + "genericpath", + "getopt", + "getpass", + "gettext", + "glob", + "graphlib", + "grp", + "gzip", + "hashlib", + "heapq", + "hmac", + "html", + "http", + "idlelib", + "imaplib", + "imghdr", + "imp", + "importlib", + "inspect", + "io", + "ipaddress", + "itertools", + "json", + "keyword", + "lib2to3", + "linecache", + "locale", + "logging", + "lzma", + "mailbox", + "mailcap", + "marshal", + "math", + "mimetypes", + "mmap", + "modulefinder", + "msilib", + "msvcrt", + "multiprocessing", + "netrc", + "nis", + "nntplib", + "nt", + "ntpath", + "nturl2path", + "numbers", + "opcode", + "operator", + "optparse", + "os", + "ossaudiodev", + "pathlib", + "pdb", + "pickle", + "pickletools", + "pipes", + "pkgutil", + "platform", + "plistlib", + "poplib", + "posix", + "posixpath", + "pprint", + "profile", + "pstats", + "pty", + "pwd", + "py-compile", + "pyclbr", + "pydoc", + "pydoc-data", + "pyexpat", + "queue", + "quopri", + "random", + "re", + "readline", + "reprlib", + "resource", + "rlcompleter", + "runpy", + "sched", + "secrets", + "select", + "selectors", + "shelve", + "shlex", + "shutil", + "signal", + "site", + "smtpd", + "smtplib", + "sndhdr", + "socket", + "socketserver", + "spwd", + "sqlite3", + "sre-compile", + "sre-constants", + "sre-parse", + "ssl", + "stat", + "statistics", + "string", + "stringprep", + "struct", + "subprocess", + "sunau", + "symtable", + "sys", + "sysconfig", + "syslog", + "tabnanny", + "tarfile", + "telnetlib", + "tempfile", + "termios", + "textwrap", + "this", + "threading", + "time", + "timeit", + "tkinter", + "token", + "tokenize", + "trace", + "traceback", + "tracemalloc", + "tty", + "turtle", + "turtledemo", + "types", + "typing", + "unicodedata", + "unittest", + "urllib", + "uu", + "uuid", + "venv", + "warnings", + "wave", + "weakref", + "webbrowser", + "winreg", + "winsound", + "wsgiref", + "xdrlib", + "xml", + "xmlrpc", + "zipapp", + "zipfile", + "zipimport", + "", +]; diff --git a/backend/parsers/windmill-parser-py-imports/tests/fixtures/base.sql b/backend/parsers/windmill-parser-py-imports/tests/fixtures/base.sql new file mode 100644 index 0000000000000..d75bf4396c3fc --- /dev/null +++ b/backend/parsers/windmill-parser-py-imports/tests/fixtures/base.sql @@ -0,0 +1,2583 @@ +-- +-- PostgreSQL database dump +-- + +-- Dumped from database version 15.3 +-- Dumped by pg_dump version 15.3 + +SET statement_timeout = 0; +SET lock_timeout = 0; +SET idle_in_transaction_session_timeout = 0; +SET client_encoding = 'UTF8'; +SET standard_conforming_strings = on; +SELECT pg_catalog.set_config('search_path', '', false); +SET check_function_bodies = false; +SET xmloption = content; +SET client_min_messages = warning; +SET row_security = off; + +-- +-- Name: _sqlx_test; Type: SCHEMA; Schema: -; Owner: postgres +-- + +CREATE SCHEMA _sqlx_test; + + +ALTER SCHEMA _sqlx_test OWNER TO postgres; + +-- +-- Name: extensions; Type: SCHEMA; Schema: -; Owner: postgres +-- + +CREATE SCHEMA extensions; + + +ALTER SCHEMA extensions OWNER TO postgres; + +-- +-- Name: uuid-ossp; Type: EXTENSION; Schema: -; Owner: - +-- + +CREATE EXTENSION IF NOT EXISTS "uuid-ossp" WITH SCHEMA extensions; + + +-- +-- Name: EXTENSION "uuid-ossp"; Type: COMMENT; Schema: -; Owner: +-- + +COMMENT ON EXTENSION "uuid-ossp" IS 'generate universally unique identifiers (UUIDs)'; + + +-- +-- Name: action_kind; Type: TYPE; Schema: public; Owner: postgres +-- + +CREATE TYPE public.action_kind AS ENUM ( + 'create', + 'update', + 'delete', + 'execute' +); + + +ALTER TYPE public.action_kind OWNER TO postgres; + +-- +-- Name: draft_type; Type: TYPE; Schema: public; Owner: postgres +-- + +CREATE TYPE public.draft_type AS ENUM ( + 'script', + 'flow', + 'app' +); + + +ALTER TYPE public.draft_type OWNER TO postgres; + +-- +-- Name: favorite_kind; Type: TYPE; Schema: public; Owner: postgres +-- + +CREATE TYPE public.favorite_kind AS ENUM ( + 'app', + 'script', + 'flow', + 'raw_app' +); + + +ALTER TYPE public.favorite_kind OWNER TO postgres; + +-- +-- Name: job_kind; Type: TYPE; Schema: public; Owner: postgres +-- + +CREATE TYPE public.job_kind AS ENUM ( + 'script', + 'preview', + 'flow', + 'dependencies', + 'flowpreview', + 'script_hub', + 'identity', + 'flowdependencies', + 'http', + 'graphql', + 'postgresql', + 'noop' +); + + +ALTER TYPE public.job_kind OWNER TO postgres; + +-- +-- Name: login_type; Type: TYPE; Schema: public; Owner: postgres +-- + +CREATE TYPE public.login_type AS ENUM ( + 'password', + 'github' +); + + +ALTER TYPE public.login_type OWNER TO postgres; + +-- +-- Name: runnable_type; Type: TYPE; Schema: public; Owner: postgres +-- + +CREATE TYPE public.runnable_type AS ENUM ( + 'ScriptHash', + 'ScriptPath', + 'FlowPath' +); + + +ALTER TYPE public.runnable_type OWNER TO postgres; + +-- +-- Name: script_kind; Type: TYPE; Schema: public; Owner: postgres +-- + +CREATE TYPE public.script_kind AS ENUM ( + 'script', + 'trigger', + 'failure', + 'command', + 'approval' +); + + +ALTER TYPE public.script_kind OWNER TO postgres; + +-- +-- Name: script_lang; Type: TYPE; Schema: public; Owner: postgres +-- + +CREATE TYPE public.script_lang AS ENUM ( + 'python3', + 'deno', + 'go', + 'bash', + 'postgresql', + 'nativets', + 'Nativets', + 'bun', + 'mysql' +); + + +ALTER TYPE public.script_lang OWNER TO postgres; + +-- +-- Name: workspace_key_kind; Type: TYPE; Schema: public; Owner: postgres +-- + +CREATE TYPE public.workspace_key_kind AS ENUM ( + 'cloud' +); + + +ALTER TYPE public.workspace_key_kind OWNER TO postgres; + +-- +-- Name: database_ids; Type: SEQUENCE; Schema: _sqlx_test; Owner: postgres +-- + +CREATE SEQUENCE _sqlx_test.database_ids + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE _sqlx_test.database_ids OWNER TO postgres; + +SET default_tablespace = ''; + +SET default_table_access_method = heap; + +-- +-- Name: databases; Type: TABLE; Schema: _sqlx_test; Owner: postgres +-- + +CREATE TABLE _sqlx_test.databases ( + db_name text NOT NULL, + test_path text NOT NULL, + created_at timestamp with time zone DEFAULT now() NOT NULL +); + + +ALTER TABLE _sqlx_test.databases OWNER TO postgres; + +-- +-- Name: _sqlx_migrations; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public._sqlx_migrations ( + version bigint NOT NULL, + description text NOT NULL, + installed_on timestamp with time zone DEFAULT now() NOT NULL, + success boolean NOT NULL, + checksum bytea NOT NULL, + execution_time bigint NOT NULL +); + + +ALTER TABLE public._sqlx_migrations OWNER TO postgres; + +-- +-- Name: account; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.account ( + workspace_id character varying(50) NOT NULL, + id integer NOT NULL, + expires_at timestamp with time zone NOT NULL, + refresh_token character varying(1500) NOT NULL, + owner character varying(50) NOT NULL, + client character varying(50) NOT NULL, + refresh_error text +); + + +ALTER TABLE public.account OWNER TO postgres; + +-- +-- Name: account_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres +-- + +CREATE SEQUENCE public.account_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.account_id_seq OWNER TO postgres; + +-- +-- Name: account_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres +-- + +ALTER SEQUENCE public.account_id_seq OWNED BY public.account.id; + + +-- +-- Name: app; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.app ( + id bigint NOT NULL, + workspace_id character varying(50) NOT NULL, + path character varying(255) NOT NULL, + summary character varying(1000) DEFAULT ''::character varying NOT NULL, + policy jsonb NOT NULL, + versions bigint[] NOT NULL, + extra_perms jsonb DEFAULT '{}'::jsonb NOT NULL, + draft_only boolean +); + + +ALTER TABLE public.app OWNER TO postgres; + +-- +-- Name: app_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres +-- + +CREATE SEQUENCE public.app_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.app_id_seq OWNER TO postgres; + +-- +-- Name: app_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres +-- + +ALTER SEQUENCE public.app_id_seq OWNED BY public.app.id; + + +-- +-- Name: app_version; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.app_version ( + id bigint NOT NULL, + app_id bigint NOT NULL, + value json NOT NULL, + created_by character varying(50) NOT NULL, + created_at timestamp with time zone DEFAULT now() NOT NULL +); + + +ALTER TABLE public.app_version OWNER TO postgres; + +-- +-- Name: app_version_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres +-- + +CREATE SEQUENCE public.app_version_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.app_version_id_seq OWNER TO postgres; + +-- +-- Name: app_version_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres +-- + +ALTER SEQUENCE public.app_version_id_seq OWNED BY public.app_version.id; + + +-- +-- Name: audit; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.audit ( + workspace_id character varying(50) NOT NULL, + id integer NOT NULL, + "timestamp" timestamp with time zone DEFAULT now() NOT NULL, + username character varying(255) NOT NULL, + operation character varying(50) NOT NULL, + action_kind public.action_kind NOT NULL, + resource character varying(255), + parameters jsonb +); + + +ALTER TABLE public.audit OWNER TO postgres; + +-- +-- Name: audit_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres +-- + +CREATE SEQUENCE public.audit_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +ALTER TABLE public.audit_id_seq OWNER TO postgres; + +-- +-- Name: audit_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: postgres +-- + +ALTER SEQUENCE public.audit_id_seq OWNED BY public.audit.id; + + +-- +-- Name: capture; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.capture ( + workspace_id character varying(50) NOT NULL, + path character varying(255) NOT NULL, + created_at timestamp with time zone DEFAULT now() NOT NULL, + created_by character varying(50) NOT NULL, + payload jsonb DEFAULT 'null'::jsonb NOT NULL, + CONSTRAINT capture_payload_too_big CHECK ((length((payload)::text) < (512 * 1024))) +); + + +ALTER TABLE public.capture OWNER TO postgres; + +-- +-- Name: completed_job; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.completed_job ( + id uuid NOT NULL, + workspace_id character varying(50) NOT NULL, + parent_job uuid, + created_by character varying(255) NOT NULL, + created_at timestamp with time zone NOT NULL, + duration_ms integer NOT NULL, + success boolean NOT NULL, + script_hash bigint, + script_path character varying(255), + args jsonb, + result jsonb, + logs text, + deleted boolean DEFAULT false NOT NULL, + raw_code text, + canceled boolean DEFAULT false NOT NULL, + canceled_by character varying(50), + canceled_reason text, + job_kind public.job_kind DEFAULT 'script'::public.job_kind NOT NULL, + env_id integer DEFAULT 0 NOT NULL, + schedule_path character varying(255), + permissioned_as character varying(55) DEFAULT 'g/all'::character varying NOT NULL, + flow_status jsonb, + raw_flow jsonb, + is_flow_step boolean DEFAULT false, + language public.script_lang DEFAULT 'python3'::public.script_lang, + started_at timestamp with time zone DEFAULT now() NOT NULL, + is_skipped boolean DEFAULT false NOT NULL, + raw_lock text, + email character varying(50) DEFAULT 'missing@email.xyz'::character varying NOT NULL, + visible_to_owner boolean DEFAULT true, + mem_peak integer, + tag character varying(50) DEFAULT 'other'::character varying NOT NULL +); + + +ALTER TABLE public.completed_job OWNER TO postgres; + +-- +-- Name: demo; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.demo ( + key text, + value bigint +); + + +ALTER TABLE public.demo OWNER TO postgres; + +-- +-- Name: draft; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.draft ( + workspace_id character varying(50) NOT NULL, + path character varying(255) NOT NULL, + typ public.draft_type NOT NULL, + value json NOT NULL, + created_at timestamp without time zone DEFAULT now() NOT NULL +); + + +ALTER TABLE public.draft OWNER TO postgres; + +-- +-- Name: email_to_igroup; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.email_to_igroup ( + email character varying(255) NOT NULL, + igroup character varying(255) NOT NULL +); + + +ALTER TABLE public.email_to_igroup OWNER TO postgres; + +-- +-- Name: favorite; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.favorite ( + usr character varying(50) NOT NULL, + workspace_id character varying(50) NOT NULL, + path character varying(255) NOT NULL, + favorite_kind public.favorite_kind NOT NULL +); + + +ALTER TABLE public.favorite OWNER TO postgres; + +-- +-- Name: flow; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.flow ( + workspace_id character varying(50) NOT NULL, + path character varying(255) NOT NULL, + summary text NOT NULL, + description text NOT NULL, + value jsonb NOT NULL, + edited_by character varying(50) NOT NULL, + edited_at timestamp with time zone DEFAULT now() NOT NULL, + archived boolean DEFAULT false NOT NULL, + schema json, + extra_perms jsonb DEFAULT '{}'::jsonb NOT NULL, + dependency_job uuid, + draft_only boolean, + tag character varying(50), + CONSTRAINT proper_id CHECK (((path)::text ~ '^[ufg](\/[\w-]+){2,}$'::text)) +); + + +ALTER TABLE public.flow OWNER TO postgres; + +-- +-- Name: folder; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.folder ( + name character varying(255) NOT NULL, + workspace_id character varying(50) NOT NULL, + display_name character varying(100) NOT NULL, + owners character varying(255)[] NOT NULL, + extra_perms jsonb DEFAULT '{}'::jsonb NOT NULL +); + + +ALTER TABLE public.folder OWNER TO postgres; + +-- +-- Name: group_; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.group_ ( + workspace_id character varying(50) NOT NULL, + name character varying(50) NOT NULL, + summary text, + extra_perms jsonb DEFAULT '{}'::jsonb NOT NULL, + CONSTRAINT proper_name CHECK (((name)::text ~ '^[\w-]+$'::text)) +); + + +ALTER TABLE public.group_ OWNER TO postgres; + +-- +-- Name: input; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.input ( + id uuid NOT NULL, + workspace_id character varying(50) NOT NULL, + runnable_id character varying(255) NOT NULL, + runnable_type public.runnable_type NOT NULL, + name text NOT NULL, + args jsonb NOT NULL, + created_at timestamp with time zone DEFAULT now() NOT NULL, + created_by character varying(50) NOT NULL, + is_public boolean DEFAULT false NOT NULL +); + + +ALTER TABLE public.input OWNER TO postgres; + +-- +-- Name: instance_group; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.instance_group ( + name character varying(255) NOT NULL, + summary character varying(2000), + external_id character varying(1000) +); + + +ALTER TABLE public.instance_group OWNER TO postgres; + +-- +-- Name: magic_link; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.magic_link ( + email character varying(50) NOT NULL, + token character varying(100) NOT NULL, + expiration timestamp with time zone DEFAULT (now() + '1 day'::interval) NOT NULL +); + + +ALTER TABLE public.magic_link OWNER TO postgres; + +-- +-- Name: password; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.password ( + email character varying(50) NOT NULL, + password_hash character varying(100), + login_type character varying(50) NOT NULL, + super_admin boolean DEFAULT false NOT NULL, + verified boolean DEFAULT false NOT NULL, + name character varying(255), + company character varying(255), + first_time_user boolean DEFAULT false NOT NULL +); + + +ALTER TABLE public.password OWNER TO postgres; + +-- +-- Name: pip_resolution_cache; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.pip_resolution_cache ( + hash character varying(255) NOT NULL, + expiration timestamp without time zone NOT NULL, + lockfile text NOT NULL +); + + +ALTER TABLE public.pip_resolution_cache OWNER TO postgres; + +-- +-- Name: queue; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.queue ( + id uuid NOT NULL, + workspace_id character varying(50) NOT NULL, + parent_job uuid, + created_by character varying(255) NOT NULL, + created_at timestamp with time zone DEFAULT now() NOT NULL, + started_at timestamp with time zone, + scheduled_for timestamp with time zone NOT NULL, + running boolean DEFAULT false NOT NULL, + script_hash bigint, + script_path character varying(255), + args jsonb, + logs text, + raw_code text, + canceled boolean DEFAULT false NOT NULL, + canceled_by character varying(50), + canceled_reason text, + last_ping timestamp with time zone DEFAULT now() NOT NULL, + job_kind public.job_kind DEFAULT 'script'::public.job_kind NOT NULL, + env_id integer, + schedule_path character varying(255), + permissioned_as character varying(55) DEFAULT 'g/all'::character varying NOT NULL, + flow_status jsonb, + raw_flow jsonb, + is_flow_step boolean DEFAULT false, + language public.script_lang DEFAULT 'python3'::public.script_lang, + suspend integer DEFAULT 0 NOT NULL, + suspend_until timestamp with time zone, + same_worker boolean DEFAULT false, + raw_lock text, + pre_run_error text, + email character varying(50) DEFAULT 'missing@email.xyz'::character varying NOT NULL, + visible_to_owner boolean DEFAULT true, + mem_peak integer, + root_job uuid, + leaf_jobs jsonb, + tag character varying(50) DEFAULT 'other'::character varying NOT NULL, + concurrent_limit integer, + concurrency_time_window_s integer +); + + +ALTER TABLE public.queue OWNER TO postgres; + +-- +-- Name: raw_app; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.raw_app ( + path character varying(255) NOT NULL, + version integer DEFAULT 0 NOT NULL, + workspace_id character varying(50) NOT NULL, + summary character varying(1000) DEFAULT ''::character varying NOT NULL, + edited_at timestamp with time zone DEFAULT now() NOT NULL, + data text NOT NULL, + extra_perms jsonb DEFAULT '{}'::jsonb NOT NULL +); + + +ALTER TABLE public.raw_app OWNER TO postgres; + +-- +-- Name: resource; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.resource ( + workspace_id character varying(50) NOT NULL, + path character varying(255) NOT NULL, + value jsonb, + description text, + resource_type character varying(50) NOT NULL, + extra_perms jsonb DEFAULT '{}'::jsonb NOT NULL, + CONSTRAINT proper_id CHECK (((path)::text ~ '^[ufg](\/[\w-]+){2,}$'::text)) +); + + +ALTER TABLE public.resource OWNER TO postgres; + +-- +-- Name: resource_type; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.resource_type ( + workspace_id character varying(50) NOT NULL, + name character varying(50) NOT NULL, + schema jsonb, + description text, + CONSTRAINT proper_name CHECK (((name)::text ~ '^[\w-]+$'::text)) +); + + +ALTER TABLE public.resource_type OWNER TO postgres; + +-- +-- Name: resume_job; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.resume_job ( + id uuid NOT NULL, + job uuid NOT NULL, + flow uuid NOT NULL, + created_at timestamp with time zone DEFAULT now() NOT NULL, + value jsonb DEFAULT 'null'::jsonb NOT NULL, + approver character varying(50), + resume_id integer DEFAULT 0 NOT NULL, + CONSTRAINT resume_job_value_check CHECK ((length((value)::text) < (10 * 1024))) +); + + +ALTER TABLE public.resume_job OWNER TO postgres; + +-- +-- Name: schedule; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.schedule ( + workspace_id character varying(50) NOT NULL, + path character varying(255) NOT NULL, + edited_by character varying(255) NOT NULL, + edited_at timestamp with time zone DEFAULT now() NOT NULL, + schedule character varying(255) NOT NULL, + enabled boolean DEFAULT true NOT NULL, + script_path character varying(255) NOT NULL, + args jsonb, + extra_perms jsonb DEFAULT '{}'::jsonb NOT NULL, + is_flow boolean DEFAULT false NOT NULL, + email character varying(50) DEFAULT 'missing@email.xyz'::character varying NOT NULL, + error text, + timezone character varying(255) DEFAULT 'UTC'::character varying NOT NULL, + on_failure character varying(1000) DEFAULT NULL::character varying, + CONSTRAINT proper_id CHECK (((path)::text ~ '^[ufg](\/[\w-]+){2,}$'::text)) +); + + +ALTER TABLE public.schedule OWNER TO postgres; + +-- +-- Name: script; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.script ( + workspace_id character varying(50) NOT NULL, + hash bigint NOT NULL, + path character varying(255) NOT NULL, + parent_hashes bigint[], + summary text NOT NULL, + description text NOT NULL, + content text NOT NULL, + created_by character varying(50) NOT NULL, + created_at timestamp with time zone DEFAULT now() NOT NULL, + archived boolean DEFAULT false NOT NULL, + schema json, + deleted boolean DEFAULT false NOT NULL, + is_template boolean DEFAULT false, + extra_perms jsonb DEFAULT '{}'::jsonb NOT NULL, + lock text, + lock_error_logs text, + language public.script_lang DEFAULT 'python3'::public.script_lang NOT NULL, + kind public.script_kind DEFAULT 'script'::public.script_kind NOT NULL, + tag character varying(50), + draft_only boolean, + envs character varying(1000)[], + concurrent_limit integer, + concurrency_time_window_s integer, + dedicated_worker boolean, + CONSTRAINT proper_id CHECK (((path)::text ~ '^[ufg](\/[\w-]+){2,}$'::text)) +); + + +ALTER TABLE public.script OWNER TO postgres; + +-- +-- Name: token; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.token ( + token character varying(50) NOT NULL, + label character varying(50), + expiration timestamp with time zone, + workspace_id character varying(50), + owner character varying(55), + email character varying(50), + super_admin boolean DEFAULT false NOT NULL, + created_at timestamp with time zone DEFAULT now() NOT NULL, + last_used_at timestamp with time zone DEFAULT now() NOT NULL, + scopes text[] +); + + +ALTER TABLE public.token OWNER TO postgres; + +-- +-- Name: usage; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.usage ( + id character varying(50) NOT NULL, + is_workspace boolean NOT NULL, + month_ integer NOT NULL, + usage integer NOT NULL +); + + +ALTER TABLE public.usage OWNER TO postgres; + +-- +-- Name: usr; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.usr ( + workspace_id character varying(50) NOT NULL, + username character varying(50) NOT NULL, + email character varying(50) NOT NULL, + is_admin boolean DEFAULT false NOT NULL, + created_at timestamp with time zone DEFAULT now() NOT NULL, + operator boolean DEFAULT false NOT NULL, + disabled boolean DEFAULT false NOT NULL, + role character varying(50), + CONSTRAINT proper_email CHECK (((email)::text ~* '^(?:[a-z0-9!#$%&''*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&''*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9]))\.){3}(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9])|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])$'::text)), + CONSTRAINT proper_username CHECK (((username)::text ~ '^[\w-]+$'::text)) +); + + +ALTER TABLE public.usr OWNER TO postgres; + +-- +-- Name: usr_to_group; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.usr_to_group ( + workspace_id character varying(50) NOT NULL, + group_ character varying(50) NOT NULL, + usr character varying(50) DEFAULT 'ruben'::character varying NOT NULL +); + + +ALTER TABLE public.usr_to_group OWNER TO postgres; + +-- +-- Name: variable; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.variable ( + workspace_id character varying(50) NOT NULL, + path character varying(255) NOT NULL, + value character varying(15000) NOT NULL, + is_secret boolean DEFAULT false NOT NULL, + description character varying(255) DEFAULT ''::character varying NOT NULL, + extra_perms jsonb DEFAULT '{}'::jsonb NOT NULL, + account integer, + is_oauth boolean DEFAULT false NOT NULL, + CONSTRAINT proper_id CHECK (((path)::text ~ '^[ufg](\/[\w-]+){2,}$'::text)) +); + + +ALTER TABLE public.variable OWNER TO postgres; + +-- +-- Name: worker_ping; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.worker_ping ( + worker character varying(50) NOT NULL, + worker_instance character varying(50) NOT NULL, + ping_at timestamp with time zone DEFAULT now() NOT NULL, + started_at timestamp with time zone DEFAULT now() NOT NULL, + ip character varying(50) DEFAULT 'NO IP'::character varying NOT NULL, + jobs_executed integer DEFAULT 0 NOT NULL, + custom_tags text[] +); + + +ALTER TABLE public.worker_ping OWNER TO postgres; + +-- +-- Name: workspace; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.workspace ( + id character varying(50) NOT NULL, + name character varying(50) NOT NULL, + owner character varying(50) NOT NULL, + deleted boolean DEFAULT false NOT NULL, + premium boolean DEFAULT false NOT NULL, + CONSTRAINT proper_id CHECK (((id)::text ~ '^\w+(-\w+)*$'::text)) +); + + +ALTER TABLE public.workspace OWNER TO postgres; + +-- +-- Name: workspace_invite; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.workspace_invite ( + workspace_id character varying(50) NOT NULL, + email character varying(50) NOT NULL, + is_admin boolean DEFAULT false NOT NULL, + operator boolean DEFAULT false NOT NULL, + CONSTRAINT proper_email CHECK (((email)::text ~* '^(?:[a-z0-9!#$%&''*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&''*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9]))\.){3}(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9])|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])$'::text)) +); + + +ALTER TABLE public.workspace_invite OWNER TO postgres; + +-- +-- Name: workspace_key; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.workspace_key ( + workspace_id character varying(50) NOT NULL, + kind public.workspace_key_kind NOT NULL, + key character varying(255) DEFAULT 'changeme'::character varying NOT NULL +); + + +ALTER TABLE public.workspace_key OWNER TO postgres; + +-- +-- Name: workspace_settings; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.workspace_settings ( + workspace_id character varying(50) NOT NULL, + slack_team_id character varying(50), + slack_name character varying(50), + slack_command_script character varying(255), + slack_email character varying(50) DEFAULT 'missing@email.xyz'::character varying NOT NULL, + auto_invite_domain character varying(50), + auto_invite_operator boolean DEFAULT false, + customer_id character varying(100), + plan character varying(40), + webhook text, + deploy_to character varying(255), + error_handler character varying(1000), + openai_resource_path character varying(1000) +); + + +ALTER TABLE public.workspace_settings OWNER TO postgres; + +-- +-- Name: account id; Type: DEFAULT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.account ALTER COLUMN id SET DEFAULT nextval('public.account_id_seq'::regclass); + + +-- +-- Name: app id; Type: DEFAULT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.app ALTER COLUMN id SET DEFAULT nextval('public.app_id_seq'::regclass); + + +-- +-- Name: app_version id; Type: DEFAULT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.app_version ALTER COLUMN id SET DEFAULT nextval('public.app_version_id_seq'::regclass); + + +-- +-- Name: audit id; Type: DEFAULT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.audit ALTER COLUMN id SET DEFAULT nextval('public.audit_id_seq'::regclass); + + +-- +-- Name: databases databases_pkey; Type: CONSTRAINT; Schema: _sqlx_test; Owner: postgres +-- + +ALTER TABLE ONLY _sqlx_test.databases + ADD CONSTRAINT databases_pkey PRIMARY KEY (db_name); + + +-- +-- Name: _sqlx_migrations _sqlx_migrations_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public._sqlx_migrations + ADD CONSTRAINT _sqlx_migrations_pkey PRIMARY KEY (version); + + +-- +-- Name: account account_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.account + ADD CONSTRAINT account_pkey PRIMARY KEY (workspace_id, id); + + +-- +-- Name: app app_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.app + ADD CONSTRAINT app_pkey PRIMARY KEY (id); + + +-- +-- Name: app_version app_version_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.app_version + ADD CONSTRAINT app_version_pkey PRIMARY KEY (id); + + +-- +-- Name: audit audit_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.audit + ADD CONSTRAINT audit_pkey PRIMARY KEY (workspace_id, id); + + +-- +-- Name: capture capture_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.capture + ADD CONSTRAINT capture_pkey PRIMARY KEY (workspace_id, path); + + +-- +-- Name: completed_job completed_job_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.completed_job + ADD CONSTRAINT completed_job_pkey PRIMARY KEY (id); + + +-- +-- Name: draft draft_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.draft + ADD CONSTRAINT draft_pkey PRIMARY KEY (workspace_id, path, typ); + + +-- +-- Name: email_to_igroup email_to_igroup_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.email_to_igroup + ADD CONSTRAINT email_to_igroup_pkey PRIMARY KEY (email, igroup); + + +-- +-- Name: favorite favorite_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.favorite + ADD CONSTRAINT favorite_pkey PRIMARY KEY (usr, workspace_id, favorite_kind, path); + + +-- +-- Name: flow flow_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.flow + ADD CONSTRAINT flow_pkey PRIMARY KEY (workspace_id, path); + + +-- +-- Name: folder folder_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.folder + ADD CONSTRAINT folder_pkey PRIMARY KEY (workspace_id, name); + + +-- +-- Name: group_ group__pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.group_ + ADD CONSTRAINT group__pkey PRIMARY KEY (workspace_id, name); + + +-- +-- Name: input input_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.input + ADD CONSTRAINT input_pkey PRIMARY KEY (id); + + +-- +-- Name: instance_group instance_group_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.instance_group + ADD CONSTRAINT instance_group_pkey PRIMARY KEY (name); + + +-- +-- Name: magic_link magic_link_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.magic_link + ADD CONSTRAINT magic_link_pkey PRIMARY KEY (email, token); + + +-- +-- Name: password password_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.password + ADD CONSTRAINT password_pkey PRIMARY KEY (email); + + +-- +-- Name: pip_resolution_cache pip_resolution_cache_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.pip_resolution_cache + ADD CONSTRAINT pip_resolution_cache_pkey PRIMARY KEY (hash); + + +-- +-- Name: queue queue_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.queue + ADD CONSTRAINT queue_pkey PRIMARY KEY (id); + + +-- +-- Name: raw_app raw_app_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.raw_app + ADD CONSTRAINT raw_app_pkey PRIMARY KEY (path); + + +-- +-- Name: resource resource_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.resource + ADD CONSTRAINT resource_pkey PRIMARY KEY (workspace_id, path); + + +-- +-- Name: resource_type resource_type_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.resource_type + ADD CONSTRAINT resource_type_pkey PRIMARY KEY (workspace_id, name); + + +-- +-- Name: resume_job resume_job_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.resume_job + ADD CONSTRAINT resume_job_pkey PRIMARY KEY (id); + + +-- +-- Name: schedule schedule_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.schedule + ADD CONSTRAINT schedule_pkey PRIMARY KEY (workspace_id, path); + + +-- +-- Name: script script_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.script + ADD CONSTRAINT script_pkey PRIMARY KEY (workspace_id, hash); + + +-- +-- Name: token token_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.token + ADD CONSTRAINT token_pkey PRIMARY KEY (token); + + +-- +-- Name: app unique_path_workspace_id; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.app + ADD CONSTRAINT unique_path_workspace_id UNIQUE (workspace_id, path); + + +-- +-- Name: usage usage_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.usage + ADD CONSTRAINT usage_pkey PRIMARY KEY (id, is_workspace, month_); + + +-- +-- Name: usr usr_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.usr + ADD CONSTRAINT usr_pkey PRIMARY KEY (workspace_id, username); + + +-- +-- Name: usr_to_group usr_to_group_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.usr_to_group + ADD CONSTRAINT usr_to_group_pkey PRIMARY KEY (workspace_id, usr, group_); + + +-- +-- Name: variable variable_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.variable + ADD CONSTRAINT variable_pkey PRIMARY KEY (workspace_id, path); + + +-- +-- Name: worker_ping worker_ping_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.worker_ping + ADD CONSTRAINT worker_ping_pkey PRIMARY KEY (worker); + + +-- +-- Name: workspace_invite workspace_invite_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.workspace_invite + ADD CONSTRAINT workspace_invite_pkey PRIMARY KEY (workspace_id, email); + + +-- +-- Name: workspace_key workspace_key_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.workspace_key + ADD CONSTRAINT workspace_key_pkey PRIMARY KEY (workspace_id, kind); + + +-- +-- Name: workspace workspace_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.workspace + ADD CONSTRAINT workspace_pkey PRIMARY KEY (id); + + +-- +-- Name: workspace_settings workspace_settings_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.workspace_settings + ADD CONSTRAINT workspace_settings_pkey PRIMARY KEY (workspace_id); + + +-- +-- Name: workspace_settings workspace_settings_slack_team_id_key; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.workspace_settings + ADD CONSTRAINT workspace_settings_slack_team_id_key UNIQUE (slack_team_id); + + +-- +-- Name: databases_created_at; Type: INDEX; Schema: _sqlx_test; Owner: postgres +-- + +CREATE INDEX databases_created_at ON _sqlx_test.databases USING btree (created_at); + + +-- +-- Name: flow_extra_perms; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX flow_extra_perms ON public.flow USING gin (extra_perms); + + +-- +-- Name: folder_extra_perms; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX folder_extra_perms ON public.folder USING gin (extra_perms); + + +-- +-- Name: folder_owners; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX folder_owners ON public.folder USING gin (owners); + + +-- +-- Name: group_extra_perms; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX group_extra_perms ON public.group_ USING gin (extra_perms); + + +-- +-- Name: index_completed_on_created; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX index_completed_on_created ON public.completed_job USING btree (created_at); + + +-- +-- Name: index_completed_on_script_hash; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX index_completed_on_script_hash ON public.completed_job USING btree (script_hash); + + +-- +-- Name: index_completed_on_script_path; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX index_completed_on_script_path ON public.completed_job USING btree (script_path); + + +-- +-- Name: index_completed_on_workspace_id; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX index_completed_on_workspace_id ON public.completed_job USING btree (workspace_id); + + +-- +-- Name: index_magic_link_exp; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX index_magic_link_exp ON public.magic_link USING btree (expiration); + + +-- +-- Name: index_queue_on_created; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX index_queue_on_created ON public.queue USING btree (created_at); + + +-- +-- Name: index_queue_on_running; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX index_queue_on_running ON public.queue USING btree (running); + + +-- +-- Name: index_queue_on_scheduled_for; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX index_queue_on_scheduled_for ON public.queue USING btree (scheduled_for); + + +-- +-- Name: index_queue_on_script_hash; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX index_queue_on_script_hash ON public.queue USING btree (script_hash); + + +-- +-- Name: index_queue_on_script_path; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX index_queue_on_script_path ON public.queue USING btree (script_path); + + +-- +-- Name: index_queue_on_workspace_id; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX index_queue_on_workspace_id ON public.queue USING btree (workspace_id); + + +-- +-- Name: index_script_on_path_created_at; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX index_script_on_path_created_at ON public.script USING btree (path, created_at); + + +-- +-- Name: index_token_exp; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX index_token_exp ON public.token USING btree (expiration); + + +-- +-- Name: index_usr_email; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX index_usr_email ON public.usr USING btree (email); + + +-- +-- Name: resource_extra_perms; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX resource_extra_perms ON public.resource USING gin (extra_perms); + + +-- +-- Name: schedule_extra_perms; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX schedule_extra_perms ON public.schedule USING gin (extra_perms); + + +-- +-- Name: script_extra_perms; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX script_extra_perms ON public.script USING gin (extra_perms); + + +-- +-- Name: variable_extra_perms; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX variable_extra_perms ON public.variable USING gin (extra_perms); + + +-- +-- Name: worker_ping_on_ping_at; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX worker_ping_on_ping_at ON public.worker_ping USING btree (ping_at); + + +-- +-- Name: account account_workspace_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.account + ADD CONSTRAINT account_workspace_id_fkey FOREIGN KEY (workspace_id) REFERENCES public.workspace(id); + + +-- +-- Name: app_version app_version_flow_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.app_version + ADD CONSTRAINT app_version_flow_id_fkey FOREIGN KEY (app_id) REFERENCES public.app(id) ON DELETE CASCADE; + + +-- +-- Name: app app_workspace_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.app + ADD CONSTRAINT app_workspace_id_fkey FOREIGN KEY (workspace_id) REFERENCES public.workspace(id); + + +-- +-- Name: capture capture_workspace_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.capture + ADD CONSTRAINT capture_workspace_id_fkey FOREIGN KEY (workspace_id) REFERENCES public.workspace(id); + + +-- +-- Name: completed_job completed_job_workspace_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.completed_job + ADD CONSTRAINT completed_job_workspace_id_fkey FOREIGN KEY (workspace_id) REFERENCES public.workspace(id); + + +-- +-- Name: draft draft_workspace_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.draft + ADD CONSTRAINT draft_workspace_id_fkey FOREIGN KEY (workspace_id) REFERENCES public.workspace(id); + + +-- +-- Name: usr_to_group fk_group; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.usr_to_group + ADD CONSTRAINT fk_group FOREIGN KEY (workspace_id, group_) REFERENCES public.group_(workspace_id, name); + + +-- +-- Name: flow flow_workspace_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.flow + ADD CONSTRAINT flow_workspace_id_fkey FOREIGN KEY (workspace_id) REFERENCES public.workspace(id); + + +-- +-- Name: folder folder_workspace_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.folder + ADD CONSTRAINT folder_workspace_id_fkey FOREIGN KEY (workspace_id) REFERENCES public.workspace(id) ON DELETE CASCADE; + + +-- +-- Name: group_ group__workspace_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.group_ + ADD CONSTRAINT group__workspace_id_fkey FOREIGN KEY (workspace_id) REFERENCES public.workspace(id); + + +-- +-- Name: input input_workspace_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.input + ADD CONSTRAINT input_workspace_id_fkey FOREIGN KEY (workspace_id) REFERENCES public.workspace(id); + + +-- +-- Name: queue queue_workspace_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.queue + ADD CONSTRAINT queue_workspace_id_fkey FOREIGN KEY (workspace_id) REFERENCES public.workspace(id); + + +-- +-- Name: raw_app raw_app_workspace_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.raw_app + ADD CONSTRAINT raw_app_workspace_id_fkey FOREIGN KEY (workspace_id) REFERENCES public.workspace(id); + + +-- +-- Name: resource_type resource_type_workspace_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.resource_type + ADD CONSTRAINT resource_type_workspace_id_fkey FOREIGN KEY (workspace_id) REFERENCES public.workspace(id); + + +-- +-- Name: resource resource_workspace_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.resource + ADD CONSTRAINT resource_workspace_id_fkey FOREIGN KEY (workspace_id) REFERENCES public.workspace(id); + + +-- +-- Name: resume_job resume_job_flow_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.resume_job + ADD CONSTRAINT resume_job_flow_fkey FOREIGN KEY (flow) REFERENCES public.queue(id) ON DELETE CASCADE; + + +-- +-- Name: schedule schedule_workspace_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.schedule + ADD CONSTRAINT schedule_workspace_id_fkey FOREIGN KEY (workspace_id) REFERENCES public.workspace(id); + + +-- +-- Name: script script_workspace_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.script + ADD CONSTRAINT script_workspace_id_fkey FOREIGN KEY (workspace_id) REFERENCES public.workspace(id); + + +-- +-- Name: token token_workspace_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.token + ADD CONSTRAINT token_workspace_id_fkey FOREIGN KEY (workspace_id) REFERENCES public.workspace(id); + + +-- +-- Name: usr_to_group usr_to_group_workspace_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.usr_to_group + ADD CONSTRAINT usr_to_group_workspace_id_fkey FOREIGN KEY (workspace_id) REFERENCES public.workspace(id); + + +-- +-- Name: usr usr_workspace_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.usr + ADD CONSTRAINT usr_workspace_id_fkey FOREIGN KEY (workspace_id) REFERENCES public.workspace(id); + + +-- +-- Name: variable variable_workspace_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.variable + ADD CONSTRAINT variable_workspace_id_fkey FOREIGN KEY (workspace_id) REFERENCES public.workspace(id); + + +-- +-- Name: workspace_invite workspace_invite_workspace_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.workspace_invite + ADD CONSTRAINT workspace_invite_workspace_id_fkey FOREIGN KEY (workspace_id) REFERENCES public.workspace(id); + + +-- +-- Name: workspace_key workspace_key_workspace_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.workspace_key + ADD CONSTRAINT workspace_key_workspace_id_fkey FOREIGN KEY (workspace_id) REFERENCES public.workspace(id); + + +-- +-- Name: workspace_settings workspace_settings_workspace_id_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.workspace_settings + ADD CONSTRAINT workspace_settings_workspace_id_fkey FOREIGN KEY (workspace_id) REFERENCES public.workspace(id); + + +-- +-- Name: account; Type: ROW SECURITY; Schema: public; Owner: postgres +-- + +ALTER TABLE public.account ENABLE ROW LEVEL SECURITY; + +-- +-- Name: app; Type: ROW SECURITY; Schema: public; Owner: postgres +-- + +ALTER TABLE public.app ENABLE ROW LEVEL SECURITY; + +-- +-- Name: audit; Type: ROW SECURITY; Schema: public; Owner: postgres +-- + +ALTER TABLE public.audit ENABLE ROW LEVEL SECURITY; + +-- +-- Name: capture; Type: ROW SECURITY; Schema: public; Owner: postgres +-- + +ALTER TABLE public.capture ENABLE ROW LEVEL SECURITY; + +-- +-- Name: completed_job; Type: ROW SECURITY; Schema: public; Owner: postgres +-- + +ALTER TABLE public.completed_job ENABLE ROW LEVEL SECURITY; + +-- +-- Name: flow; Type: ROW SECURITY; Schema: public; Owner: postgres +-- + +ALTER TABLE public.flow ENABLE ROW LEVEL SECURITY; + +-- +-- Name: folder; Type: ROW SECURITY; Schema: public; Owner: postgres +-- + +ALTER TABLE public.folder ENABLE ROW LEVEL SECURITY; + +-- +-- Name: queue; Type: ROW SECURITY; Schema: public; Owner: postgres +-- + +ALTER TABLE public.queue ENABLE ROW LEVEL SECURITY; + +-- +-- Name: raw_app; Type: ROW SECURITY; Schema: public; Owner: postgres +-- + +ALTER TABLE public.raw_app ENABLE ROW LEVEL SECURITY; + +-- +-- Name: resource; Type: ROW SECURITY; Schema: public; Owner: postgres +-- + +ALTER TABLE public.resource ENABLE ROW LEVEL SECURITY; + +-- +-- Name: audit schedule; Type: POLICY; Schema: public; Owner: postgres +-- + +CREATE POLICY schedule ON public.audit FOR INSERT WITH CHECK (((username)::text ~~ 'schedule-%'::text)); + + +-- +-- Name: schedule; Type: ROW SECURITY; Schema: public; Owner: postgres +-- + +ALTER TABLE public.schedule ENABLE ROW LEVEL SECURITY; + +-- +-- Name: script; Type: ROW SECURITY; Schema: public; Owner: postgres +-- + +ALTER TABLE public.script ENABLE ROW LEVEL SECURITY; + +-- +-- Name: app see_extra_perms_groups; Type: POLICY; Schema: public; Owner: postgres +-- + +CREATE POLICY see_extra_perms_groups ON public.app USING ((extra_perms ?| regexp_split_to_array(current_setting('session.pgroups'::text), ','::text))) WITH CHECK ((EXISTS ( SELECT jsonb_each_text.key, + jsonb_each_text.value + FROM jsonb_each_text(app.extra_perms) jsonb_each_text(key, value) + WHERE ((split_part(jsonb_each_text.key, '/'::text, 1) = 'g'::text) AND (jsonb_each_text.key = ANY (regexp_split_to_array(current_setting('session.pgroups'::text), ','::text))) AND (jsonb_each_text.value)::boolean)))); + + +-- +-- Name: flow see_extra_perms_groups; Type: POLICY; Schema: public; Owner: postgres +-- + +CREATE POLICY see_extra_perms_groups ON public.flow USING ((extra_perms ?| regexp_split_to_array(current_setting('session.pgroups'::text), ','::text))) WITH CHECK ((EXISTS ( SELECT jsonb_each_text.key, + jsonb_each_text.value + FROM jsonb_each_text(flow.extra_perms) jsonb_each_text(key, value) + WHERE ((split_part(jsonb_each_text.key, '/'::text, 1) = 'g'::text) AND (jsonb_each_text.key = ANY (regexp_split_to_array(current_setting('session.pgroups'::text), ','::text))) AND (jsonb_each_text.value)::boolean)))); + + +-- +-- Name: folder see_extra_perms_groups; Type: POLICY; Schema: public; Owner: postgres +-- + +CREATE POLICY see_extra_perms_groups ON public.folder USING (((extra_perms ?| regexp_split_to_array(current_setting('session.pgroups'::text), ','::text)) OR (EXISTS ( SELECT o.o + FROM unnest(folder.owners) o(o) + WHERE ((o.o)::text = ANY (regexp_split_to_array(current_setting('session.pgroups'::text), ','::text))))))) WITH CHECK ((EXISTS ( SELECT o.o + FROM unnest(folder.owners) o(o) + WHERE ((o.o)::text = ANY (regexp_split_to_array(current_setting('session.pgroups'::text), ','::text)))))); + + +-- +-- Name: raw_app see_extra_perms_groups; Type: POLICY; Schema: public; Owner: postgres +-- + +CREATE POLICY see_extra_perms_groups ON public.raw_app USING ((extra_perms ?| regexp_split_to_array(current_setting('session.pgroups'::text), ','::text))) WITH CHECK ((EXISTS ( SELECT jsonb_each_text.key, + jsonb_each_text.value + FROM jsonb_each_text(raw_app.extra_perms) jsonb_each_text(key, value) + WHERE ((split_part(jsonb_each_text.key, '/'::text, 1) = 'g'::text) AND (jsonb_each_text.key = ANY (regexp_split_to_array(current_setting('session.pgroups'::text), ','::text))) AND (jsonb_each_text.value)::boolean)))); + + +-- +-- Name: resource see_extra_perms_groups; Type: POLICY; Schema: public; Owner: postgres +-- + +CREATE POLICY see_extra_perms_groups ON public.resource USING ((extra_perms ?| regexp_split_to_array(current_setting('session.pgroups'::text), ','::text))) WITH CHECK ((EXISTS ( SELECT jsonb_each_text.key, + jsonb_each_text.value + FROM jsonb_each_text(resource.extra_perms) jsonb_each_text(key, value) + WHERE ((split_part(jsonb_each_text.key, '/'::text, 1) = 'g'::text) AND (jsonb_each_text.key = ANY (regexp_split_to_array(current_setting('session.pgroups'::text), ','::text))) AND (jsonb_each_text.value)::boolean)))); + + +-- +-- Name: schedule see_extra_perms_groups; Type: POLICY; Schema: public; Owner: postgres +-- + +CREATE POLICY see_extra_perms_groups ON public.schedule USING ((extra_perms ?| regexp_split_to_array(current_setting('session.pgroups'::text), ','::text))) WITH CHECK ((EXISTS ( SELECT jsonb_each_text.key, + jsonb_each_text.value + FROM jsonb_each_text(schedule.extra_perms) jsonb_each_text(key, value) + WHERE ((split_part(jsonb_each_text.key, '/'::text, 1) = 'g'::text) AND (jsonb_each_text.key = ANY (regexp_split_to_array(current_setting('session.pgroups'::text), ','::text))) AND (jsonb_each_text.value)::boolean)))); + + +-- +-- Name: script see_extra_perms_groups; Type: POLICY; Schema: public; Owner: postgres +-- + +CREATE POLICY see_extra_perms_groups ON public.script USING ((extra_perms ?| regexp_split_to_array(current_setting('session.pgroups'::text), ','::text))) WITH CHECK ((EXISTS ( SELECT jsonb_each_text.key, + jsonb_each_text.value + FROM jsonb_each_text(script.extra_perms) jsonb_each_text(key, value) + WHERE ((split_part(jsonb_each_text.key, '/'::text, 1) = 'g'::text) AND (jsonb_each_text.key = ANY (regexp_split_to_array(current_setting('session.pgroups'::text), ','::text))) AND (jsonb_each_text.value)::boolean)))); + + +-- +-- Name: usr_to_group see_extra_perms_groups; Type: POLICY; Schema: public; Owner: postgres +-- + +CREATE POLICY see_extra_perms_groups ON public.usr_to_group USING (true) WITH CHECK ((EXISTS ( SELECT f.key, + f.value + FROM public.group_ g, + LATERAL jsonb_each_text(g.extra_perms) f(key, value) + WHERE (((usr_to_group.group_)::text = (g.name)::text) AND ((usr_to_group.workspace_id)::text = (g.workspace_id)::text) AND (split_part(f.key, '/'::text, 1) = 'g'::text) AND (f.key = ANY (regexp_split_to_array(current_setting('session.pgroups'::text), ','::text))) AND (f.value)::boolean)))); + + +-- +-- Name: variable see_extra_perms_groups; Type: POLICY; Schema: public; Owner: postgres +-- + +CREATE POLICY see_extra_perms_groups ON public.variable USING ((extra_perms ?| regexp_split_to_array(current_setting('session.pgroups'::text), ','::text))) WITH CHECK ((EXISTS ( SELECT jsonb_each_text.key, + jsonb_each_text.value + FROM jsonb_each_text(variable.extra_perms) jsonb_each_text(key, value) + WHERE ((split_part(jsonb_each_text.key, '/'::text, 1) = 'g'::text) AND (jsonb_each_text.key = ANY (regexp_split_to_array(current_setting('session.pgroups'::text), ','::text))) AND (jsonb_each_text.value)::boolean)))); + + +-- +-- Name: app see_extra_perms_user; Type: POLICY; Schema: public; Owner: postgres +-- + +CREATE POLICY see_extra_perms_user ON public.app USING ((extra_perms ? concat('u/', current_setting('session.user'::text)))) WITH CHECK (((extra_perms ->> concat('u/', current_setting('session.user'::text))))::boolean); + + +-- +-- Name: flow see_extra_perms_user; Type: POLICY; Schema: public; Owner: postgres +-- + +CREATE POLICY see_extra_perms_user ON public.flow USING ((extra_perms ? concat('u/', current_setting('session.user'::text)))) WITH CHECK (((extra_perms ->> concat('u/', current_setting('session.user'::text))))::boolean); + + +-- +-- Name: folder see_extra_perms_user; Type: POLICY; Schema: public; Owner: postgres +-- + +CREATE POLICY see_extra_perms_user ON public.folder USING (((extra_perms ? concat('u/', current_setting('session.user'::text))) OR (concat('u/', current_setting('session.user'::text)) = ANY ((owners)::text[])))) WITH CHECK ((concat('u/', current_setting('session.user'::text)) = ANY ((owners)::text[]))); + + +-- +-- Name: raw_app see_extra_perms_user; Type: POLICY; Schema: public; Owner: postgres +-- + +CREATE POLICY see_extra_perms_user ON public.raw_app USING ((extra_perms ? concat('u/', current_setting('session.user'::text)))) WITH CHECK (((extra_perms ->> concat('u/', current_setting('session.user'::text))))::boolean); + + +-- +-- Name: resource see_extra_perms_user; Type: POLICY; Schema: public; Owner: postgres +-- + +CREATE POLICY see_extra_perms_user ON public.resource USING ((extra_perms ? concat('u/', current_setting('session.user'::text)))) WITH CHECK (((extra_perms ->> concat('u/', current_setting('session.user'::text))))::boolean); + + +-- +-- Name: schedule see_extra_perms_user; Type: POLICY; Schema: public; Owner: postgres +-- + +CREATE POLICY see_extra_perms_user ON public.schedule USING ((extra_perms ? concat('u/', current_setting('session.user'::text)))) WITH CHECK (((extra_perms ->> concat('u/', current_setting('session.user'::text))))::boolean); + + +-- +-- Name: script see_extra_perms_user; Type: POLICY; Schema: public; Owner: postgres +-- + +CREATE POLICY see_extra_perms_user ON public.script USING ((extra_perms ? concat('u/', current_setting('session.user'::text)))) WITH CHECK (((extra_perms ->> concat('u/', current_setting('session.user'::text))))::boolean); + + +-- +-- Name: usr_to_group see_extra_perms_user; Type: POLICY; Schema: public; Owner: postgres +-- + +CREATE POLICY see_extra_perms_user ON public.usr_to_group USING (true) WITH CHECK ((EXISTS ( SELECT 1 + FROM public.group_ + WHERE (((usr_to_group.group_)::text = (group_.name)::text) AND ((usr_to_group.workspace_id)::text = (group_.workspace_id)::text) AND ((group_.extra_perms ->> concat('u/', current_setting('session.user'::text))))::boolean)))); + + +-- +-- Name: variable see_extra_perms_user; Type: POLICY; Schema: public; Owner: postgres +-- + +CREATE POLICY see_extra_perms_user ON public.variable USING ((extra_perms ? concat('u/', current_setting('session.user'::text)))) WITH CHECK (((extra_perms ->> concat('u/', current_setting('session.user'::text))))::boolean); + + +-- +-- Name: account see_folder_extra_perms_user; Type: POLICY; Schema: public; Owner: postgres +-- + +CREATE POLICY see_folder_extra_perms_user ON public.account USING (((split_part((owner)::text, '/'::text, 1) = 'f'::text) AND (split_part((owner)::text, '/'::text, 2) = ANY (regexp_split_to_array(current_setting('session.folders_read'::text), ','::text))))) WITH CHECK (((split_part((owner)::text, '/'::text, 1) = 'f'::text) AND (split_part((owner)::text, '/'::text, 2) = ANY (regexp_split_to_array(current_setting('session.folders_write'::text), ','::text))))); + + +-- +-- Name: app see_folder_extra_perms_user; Type: POLICY; Schema: public; Owner: postgres +-- + +CREATE POLICY see_folder_extra_perms_user ON public.app USING (((split_part((path)::text, '/'::text, 1) = 'f'::text) AND (split_part((path)::text, '/'::text, 2) = ANY (regexp_split_to_array(current_setting('session.folders_read'::text), ','::text))))) WITH CHECK (((split_part((path)::text, '/'::text, 1) = 'f'::text) AND (split_part((path)::text, '/'::text, 2) = ANY (regexp_split_to_array(current_setting('session.folders_write'::text), ','::text))))); + + +-- +-- Name: capture see_folder_extra_perms_user; Type: POLICY; Schema: public; Owner: postgres +-- + +CREATE POLICY see_folder_extra_perms_user ON public.capture USING (((split_part((path)::text, '/'::text, 1) = 'f'::text) AND (split_part((path)::text, '/'::text, 2) = ANY (regexp_split_to_array(current_setting('session.folders_read'::text), ','::text))))) WITH CHECK (((split_part((path)::text, '/'::text, 1) = 'f'::text) AND (split_part((path)::text, '/'::text, 2) = ANY (regexp_split_to_array(current_setting('session.folders_write'::text), ','::text))))); + + +-- +-- Name: completed_job see_folder_extra_perms_user; Type: POLICY; Schema: public; Owner: postgres +-- + +CREATE POLICY see_folder_extra_perms_user ON public.completed_job USING (((visible_to_owner IS TRUE) AND (split_part((script_path)::text, '/'::text, 1) = 'f'::text) AND (split_part((script_path)::text, '/'::text, 2) = ANY (regexp_split_to_array(current_setting('session.folders_read'::text), ','::text))))); + + +-- +-- Name: flow see_folder_extra_perms_user; Type: POLICY; Schema: public; Owner: postgres +-- + +CREATE POLICY see_folder_extra_perms_user ON public.flow USING (((split_part((path)::text, '/'::text, 1) = 'f'::text) AND (split_part((path)::text, '/'::text, 2) = ANY (regexp_split_to_array(current_setting('session.folders_read'::text), ','::text))))) WITH CHECK (((split_part((path)::text, '/'::text, 1) = 'f'::text) AND (split_part((path)::text, '/'::text, 2) = ANY (regexp_split_to_array(current_setting('session.folders_write'::text), ','::text))))); + + +-- +-- Name: queue see_folder_extra_perms_user; Type: POLICY; Schema: public; Owner: postgres +-- + +CREATE POLICY see_folder_extra_perms_user ON public.queue USING (((visible_to_owner IS TRUE) AND (split_part((script_path)::text, '/'::text, 1) = 'f'::text) AND (split_part((script_path)::text, '/'::text, 2) = ANY (regexp_split_to_array(current_setting('session.folders_read'::text), ','::text))))); + + +-- +-- Name: raw_app see_folder_extra_perms_user; Type: POLICY; Schema: public; Owner: postgres +-- + +CREATE POLICY see_folder_extra_perms_user ON public.raw_app USING (((split_part((path)::text, '/'::text, 1) = 'f'::text) AND (split_part((path)::text, '/'::text, 2) = ANY (regexp_split_to_array(current_setting('session.folders_read'::text), ','::text))))) WITH CHECK (((split_part((path)::text, '/'::text, 1) = 'f'::text) AND (split_part((path)::text, '/'::text, 2) = ANY (regexp_split_to_array(current_setting('session.folders_write'::text), ','::text))))); + + +-- +-- Name: resource see_folder_extra_perms_user; Type: POLICY; Schema: public; Owner: postgres +-- + +CREATE POLICY see_folder_extra_perms_user ON public.resource USING (((split_part((path)::text, '/'::text, 1) = 'f'::text) AND (split_part((path)::text, '/'::text, 2) = ANY (regexp_split_to_array(current_setting('session.folders_read'::text), ','::text))))) WITH CHECK (((split_part((path)::text, '/'::text, 1) = 'f'::text) AND (split_part((path)::text, '/'::text, 2) = ANY (regexp_split_to_array(current_setting('session.folders_write'::text), ','::text))))); + + +-- +-- Name: schedule see_folder_extra_perms_user; Type: POLICY; Schema: public; Owner: postgres +-- + +CREATE POLICY see_folder_extra_perms_user ON public.schedule USING (((split_part((path)::text, '/'::text, 1) = 'f'::text) AND (split_part((path)::text, '/'::text, 2) = ANY (regexp_split_to_array(current_setting('session.folders_read'::text), ','::text))))) WITH CHECK (((split_part((path)::text, '/'::text, 1) = 'f'::text) AND (split_part((path)::text, '/'::text, 2) = ANY (regexp_split_to_array(current_setting('session.folders_write'::text), ','::text))))); + + +-- +-- Name: script see_folder_extra_perms_user; Type: POLICY; Schema: public; Owner: postgres +-- + +CREATE POLICY see_folder_extra_perms_user ON public.script USING (((split_part((path)::text, '/'::text, 1) = 'f'::text) AND (split_part((path)::text, '/'::text, 2) = ANY (regexp_split_to_array(current_setting('session.folders_read'::text), ','::text))))) WITH CHECK (((split_part((path)::text, '/'::text, 1) = 'f'::text) AND (split_part((path)::text, '/'::text, 2) = ANY (regexp_split_to_array(current_setting('session.folders_write'::text), ','::text))))); + + +-- +-- Name: variable see_folder_extra_perms_user; Type: POLICY; Schema: public; Owner: postgres +-- + +CREATE POLICY see_folder_extra_perms_user ON public.variable USING (((split_part((path)::text, '/'::text, 1) = 'f'::text) AND (split_part((path)::text, '/'::text, 2) = ANY (regexp_split_to_array(current_setting('session.folders_read'::text), ','::text))))) WITH CHECK (((split_part((path)::text, '/'::text, 1) = 'f'::text) AND (split_part((path)::text, '/'::text, 2) = ANY (regexp_split_to_array(current_setting('session.folders_write'::text), ','::text))))); + + +-- +-- Name: account see_member; Type: POLICY; Schema: public; Owner: postgres +-- + +CREATE POLICY see_member ON public.account USING (((split_part((owner)::text, '/'::text, 1) = 'g'::text) AND (split_part((owner)::text, '/'::text, 2) = ANY (regexp_split_to_array(current_setting('session.groups'::text), ','::text))))); + + +-- +-- Name: app see_member; Type: POLICY; Schema: public; Owner: postgres +-- + +CREATE POLICY see_member ON public.app USING (((split_part((path)::text, '/'::text, 1) = 'g'::text) AND (split_part((path)::text, '/'::text, 2) = ANY (regexp_split_to_array(current_setting('session.groups'::text), ','::text))))); + + +-- +-- Name: capture see_member; Type: POLICY; Schema: public; Owner: postgres +-- + +CREATE POLICY see_member ON public.capture USING (((split_part((path)::text, '/'::text, 1) = 'g'::text) AND (split_part((path)::text, '/'::text, 2) = ANY (regexp_split_to_array(current_setting('session.groups'::text), ','::text))))); + + +-- +-- Name: completed_job see_member; Type: POLICY; Schema: public; Owner: postgres +-- + +CREATE POLICY see_member ON public.completed_job USING (((split_part((permissioned_as)::text, '/'::text, 1) = 'g'::text) AND (split_part((permissioned_as)::text, '/'::text, 2) = ANY (regexp_split_to_array(current_setting('session.groups'::text), ','::text))))); + + +-- +-- Name: flow see_member; Type: POLICY; Schema: public; Owner: postgres +-- + +CREATE POLICY see_member ON public.flow USING (((split_part((path)::text, '/'::text, 1) = 'g'::text) AND (split_part((path)::text, '/'::text, 2) = ANY (regexp_split_to_array(current_setting('session.groups'::text), ','::text))))); + + +-- +-- Name: queue see_member; Type: POLICY; Schema: public; Owner: postgres +-- + +CREATE POLICY see_member ON public.queue USING (((split_part((permissioned_as)::text, '/'::text, 1) = 'g'::text) AND (split_part((permissioned_as)::text, '/'::text, 2) = ANY (regexp_split_to_array(current_setting('session.groups'::text), ','::text))))); + + +-- +-- Name: raw_app see_member; Type: POLICY; Schema: public; Owner: postgres +-- + +CREATE POLICY see_member ON public.raw_app USING (((split_part((path)::text, '/'::text, 1) = 'g'::text) AND (split_part((path)::text, '/'::text, 2) = ANY (regexp_split_to_array(current_setting('session.groups'::text), ','::text))))); + + +-- +-- Name: resource see_member; Type: POLICY; Schema: public; Owner: postgres +-- + +CREATE POLICY see_member ON public.resource USING (((split_part((path)::text, '/'::text, 1) = 'g'::text) AND (split_part((path)::text, '/'::text, 2) = ANY (regexp_split_to_array(current_setting('session.groups'::text), ','::text))))); + + +-- +-- Name: schedule see_member; Type: POLICY; Schema: public; Owner: postgres +-- + +CREATE POLICY see_member ON public.schedule USING (((split_part((path)::text, '/'::text, 1) = 'g'::text) AND (split_part((path)::text, '/'::text, 2) = ANY (regexp_split_to_array(current_setting('session.groups'::text), ','::text))))); + + +-- +-- Name: script see_member; Type: POLICY; Schema: public; Owner: postgres +-- + +CREATE POLICY see_member ON public.script USING (((split_part((path)::text, '/'::text, 1) = 'g'::text) AND (split_part((path)::text, '/'::text, 2) = ANY (regexp_split_to_array(current_setting('session.groups'::text), ','::text))))); + + +-- +-- Name: variable see_member; Type: POLICY; Schema: public; Owner: postgres +-- + +CREATE POLICY see_member ON public.variable USING (((split_part((path)::text, '/'::text, 1) = 'g'::text) AND (split_part((path)::text, '/'::text, 2) = ANY (regexp_split_to_array(current_setting('session.groups'::text), ','::text))))); + + +-- +-- Name: completed_job see_member_path; Type: POLICY; Schema: public; Owner: postgres +-- + +CREATE POLICY see_member_path ON public.completed_job USING (((visible_to_owner IS TRUE) AND (split_part((script_path)::text, '/'::text, 1) = 'g'::text) AND (split_part((script_path)::text, '/'::text, 2) = ANY (regexp_split_to_array(current_setting('session.groups'::text), ','::text))))); + + +-- +-- Name: queue see_member_path; Type: POLICY; Schema: public; Owner: postgres +-- + +CREATE POLICY see_member_path ON public.queue USING (((visible_to_owner IS TRUE) AND (split_part((script_path)::text, '/'::text, 1) = 'g'::text) AND (split_part((script_path)::text, '/'::text, 2) = ANY (regexp_split_to_array(current_setting('session.groups'::text), ','::text))))); + + +-- +-- Name: account see_own; Type: POLICY; Schema: public; Owner: postgres +-- + +CREATE POLICY see_own ON public.account USING (((split_part((owner)::text, '/'::text, 1) = 'u'::text) AND (split_part((owner)::text, '/'::text, 2) = current_setting('session.user'::text)))); + + +-- +-- Name: app see_own; Type: POLICY; Schema: public; Owner: postgres +-- + +CREATE POLICY see_own ON public.app USING (((split_part((path)::text, '/'::text, 1) = 'u'::text) AND (split_part((path)::text, '/'::text, 2) = current_setting('session.user'::text)))); + + +-- +-- Name: audit see_own; Type: POLICY; Schema: public; Owner: postgres +-- + +CREATE POLICY see_own ON public.audit USING (((username)::text = current_setting('session.user'::text))); + + +-- +-- Name: capture see_own; Type: POLICY; Schema: public; Owner: postgres +-- + +CREATE POLICY see_own ON public.capture USING (((split_part((path)::text, '/'::text, 1) = 'u'::text) AND (split_part((path)::text, '/'::text, 2) = current_setting('session.user'::text)))); + + +-- +-- Name: completed_job see_own; Type: POLICY; Schema: public; Owner: postgres +-- + +CREATE POLICY see_own ON public.completed_job USING (((split_part((permissioned_as)::text, '/'::text, 1) = 'u'::text) AND (split_part((permissioned_as)::text, '/'::text, 2) = current_setting('session.user'::text)))); + + +-- +-- Name: flow see_own; Type: POLICY; Schema: public; Owner: postgres +-- + +CREATE POLICY see_own ON public.flow USING (((split_part((path)::text, '/'::text, 1) = 'u'::text) AND (split_part((path)::text, '/'::text, 2) = current_setting('session.user'::text)))); + + +-- +-- Name: queue see_own; Type: POLICY; Schema: public; Owner: postgres +-- + +CREATE POLICY see_own ON public.queue USING (((split_part((permissioned_as)::text, '/'::text, 1) = 'u'::text) AND (split_part((permissioned_as)::text, '/'::text, 2) = current_setting('session.user'::text)))); + + +-- +-- Name: raw_app see_own; Type: POLICY; Schema: public; Owner: postgres +-- + +CREATE POLICY see_own ON public.raw_app USING (((split_part((path)::text, '/'::text, 1) = 'u'::text) AND (split_part((path)::text, '/'::text, 2) = current_setting('session.user'::text)))); + + +-- +-- Name: resource see_own; Type: POLICY; Schema: public; Owner: postgres +-- + +CREATE POLICY see_own ON public.resource USING (((split_part((path)::text, '/'::text, 1) = 'u'::text) AND (split_part((path)::text, '/'::text, 2) = current_setting('session.user'::text)))); + + +-- +-- Name: schedule see_own; Type: POLICY; Schema: public; Owner: postgres +-- + +CREATE POLICY see_own ON public.schedule USING (((split_part((path)::text, '/'::text, 1) = 'u'::text) AND (split_part((path)::text, '/'::text, 2) = current_setting('session.user'::text)))); + + +-- +-- Name: script see_own; Type: POLICY; Schema: public; Owner: postgres +-- + +CREATE POLICY see_own ON public.script USING (((split_part((path)::text, '/'::text, 1) = 'u'::text) AND (split_part((path)::text, '/'::text, 2) = current_setting('session.user'::text)))); + + +-- +-- Name: variable see_own; Type: POLICY; Schema: public; Owner: postgres +-- + +CREATE POLICY see_own ON public.variable USING (((split_part((path)::text, '/'::text, 1) = 'u'::text) AND (split_part((path)::text, '/'::text, 2) = current_setting('session.user'::text)))); + + +-- +-- Name: completed_job see_own_path; Type: POLICY; Schema: public; Owner: postgres +-- + +CREATE POLICY see_own_path ON public.completed_job USING (((visible_to_owner IS TRUE) AND (split_part((script_path)::text, '/'::text, 1) = 'u'::text) AND (split_part((script_path)::text, '/'::text, 2) = current_setting('session.user'::text)))); + + +-- +-- Name: queue see_own_path; Type: POLICY; Schema: public; Owner: postgres +-- + +CREATE POLICY see_own_path ON public.queue USING (((visible_to_owner IS TRUE) AND (split_part((script_path)::text, '/'::text, 1) = 'u'::text) AND (split_part((script_path)::text, '/'::text, 2) = current_setting('session.user'::text)))); + + +-- +-- Name: usr_to_group; Type: ROW SECURITY; Schema: public; Owner: postgres +-- + +ALTER TABLE public.usr_to_group ENABLE ROW LEVEL SECURITY; + +-- +-- Name: variable; Type: ROW SECURITY; Schema: public; Owner: postgres +-- + +ALTER TABLE public.variable ENABLE ROW LEVEL SECURITY; + +-- +-- Name: TABLE _sqlx_migrations; Type: ACL; Schema: public; Owner: postgres +-- + +GRANT ALL ON TABLE public._sqlx_migrations TO windmill_user; +GRANT ALL ON TABLE public._sqlx_migrations TO windmill_admin; + + +-- +-- Name: TABLE account; Type: ACL; Schema: public; Owner: postgres +-- + +GRANT ALL ON TABLE public.account TO windmill_user; +GRANT ALL ON TABLE public.account TO windmill_admin; + + +-- +-- Name: SEQUENCE account_id_seq; Type: ACL; Schema: public; Owner: postgres +-- + +GRANT ALL ON SEQUENCE public.account_id_seq TO windmill_user; +GRANT ALL ON SEQUENCE public.account_id_seq TO windmill_admin; + + +-- +-- Name: TABLE app; Type: ACL; Schema: public; Owner: postgres +-- + +GRANT ALL ON TABLE public.app TO windmill_user; +GRANT ALL ON TABLE public.app TO windmill_admin; + + +-- +-- Name: SEQUENCE app_id_seq; Type: ACL; Schema: public; Owner: postgres +-- + +GRANT ALL ON SEQUENCE public.app_id_seq TO windmill_user; +GRANT ALL ON SEQUENCE public.app_id_seq TO windmill_admin; + + +-- +-- Name: TABLE app_version; Type: ACL; Schema: public; Owner: postgres +-- + +GRANT ALL ON TABLE public.app_version TO windmill_user; +GRANT ALL ON TABLE public.app_version TO windmill_admin; + + +-- +-- Name: SEQUENCE app_version_id_seq; Type: ACL; Schema: public; Owner: postgres +-- + +GRANT ALL ON SEQUENCE public.app_version_id_seq TO windmill_user; +GRANT ALL ON SEQUENCE public.app_version_id_seq TO windmill_admin; + + +-- +-- Name: TABLE audit; Type: ACL; Schema: public; Owner: postgres +-- + +GRANT ALL ON TABLE public.audit TO windmill_user; +GRANT ALL ON TABLE public.audit TO windmill_admin; + + +-- +-- Name: SEQUENCE audit_id_seq; Type: ACL; Schema: public; Owner: postgres +-- + +GRANT ALL ON SEQUENCE public.audit_id_seq TO windmill_user; +GRANT ALL ON SEQUENCE public.audit_id_seq TO windmill_admin; + + +-- +-- Name: TABLE capture; Type: ACL; Schema: public; Owner: postgres +-- + +GRANT ALL ON TABLE public.capture TO windmill_user; +GRANT ALL ON TABLE public.capture TO windmill_admin; + + +-- +-- Name: TABLE completed_job; Type: ACL; Schema: public; Owner: postgres +-- + +GRANT ALL ON TABLE public.completed_job TO windmill_user; +GRANT ALL ON TABLE public.completed_job TO windmill_admin; + + +-- +-- Name: TABLE demo; Type: ACL; Schema: public; Owner: postgres +-- + +GRANT ALL ON TABLE public.demo TO windmill_user; + + +-- +-- Name: TABLE draft; Type: ACL; Schema: public; Owner: postgres +-- + +GRANT ALL ON TABLE public.draft TO windmill_user; +GRANT ALL ON TABLE public.draft TO windmill_admin; + + +-- +-- Name: TABLE email_to_igroup; Type: ACL; Schema: public; Owner: postgres +-- + +GRANT ALL ON TABLE public.email_to_igroup TO windmill_user; +GRANT ALL ON TABLE public.email_to_igroup TO windmill_admin; + + +-- +-- Name: TABLE favorite; Type: ACL; Schema: public; Owner: postgres +-- + +GRANT ALL ON TABLE public.favorite TO windmill_user; +GRANT ALL ON TABLE public.favorite TO windmill_admin; + + +-- +-- Name: TABLE flow; Type: ACL; Schema: public; Owner: postgres +-- + +GRANT ALL ON TABLE public.flow TO windmill_user; +GRANT ALL ON TABLE public.flow TO windmill_admin; + + +-- +-- Name: TABLE folder; Type: ACL; Schema: public; Owner: postgres +-- + +GRANT ALL ON TABLE public.folder TO windmill_user; +GRANT ALL ON TABLE public.folder TO windmill_admin; + + +-- +-- Name: TABLE group_; Type: ACL; Schema: public; Owner: postgres +-- + +GRANT ALL ON TABLE public.group_ TO windmill_user; +GRANT ALL ON TABLE public.group_ TO windmill_admin; + + +-- +-- Name: TABLE input; Type: ACL; Schema: public; Owner: postgres +-- + +GRANT ALL ON TABLE public.input TO windmill_user; +GRANT ALL ON TABLE public.input TO windmill_admin; + + +-- +-- Name: TABLE instance_group; Type: ACL; Schema: public; Owner: postgres +-- + +GRANT ALL ON TABLE public.instance_group TO windmill_user; +GRANT ALL ON TABLE public.instance_group TO windmill_admin; + + +-- +-- Name: TABLE magic_link; Type: ACL; Schema: public; Owner: postgres +-- + +GRANT ALL ON TABLE public.magic_link TO windmill_user; +GRANT ALL ON TABLE public.magic_link TO windmill_admin; + + +-- +-- Name: TABLE password; Type: ACL; Schema: public; Owner: postgres +-- + +GRANT ALL ON TABLE public.password TO windmill_user; +GRANT ALL ON TABLE public.password TO windmill_admin; + + +-- +-- Name: TABLE pip_resolution_cache; Type: ACL; Schema: public; Owner: postgres +-- + +GRANT ALL ON TABLE public.pip_resolution_cache TO windmill_user; + + +-- +-- Name: TABLE queue; Type: ACL; Schema: public; Owner: postgres +-- + +GRANT ALL ON TABLE public.queue TO windmill_user; +GRANT ALL ON TABLE public.queue TO windmill_admin; + + +-- +-- Name: TABLE raw_app; Type: ACL; Schema: public; Owner: postgres +-- + +GRANT ALL ON TABLE public.raw_app TO windmill_user; +GRANT ALL ON TABLE public.raw_app TO windmill_admin; + + +-- +-- Name: TABLE resource; Type: ACL; Schema: public; Owner: postgres +-- + +GRANT ALL ON TABLE public.resource TO windmill_user; +GRANT ALL ON TABLE public.resource TO windmill_admin; + + +-- +-- Name: TABLE resource_type; Type: ACL; Schema: public; Owner: postgres +-- + +GRANT ALL ON TABLE public.resource_type TO windmill_user; +GRANT ALL ON TABLE public.resource_type TO windmill_admin; + + +-- +-- Name: TABLE resume_job; Type: ACL; Schema: public; Owner: postgres +-- + +GRANT ALL ON TABLE public.resume_job TO windmill_user; +GRANT ALL ON TABLE public.resume_job TO windmill_admin; + + +-- +-- Name: TABLE schedule; Type: ACL; Schema: public; Owner: postgres +-- + +GRANT ALL ON TABLE public.schedule TO windmill_user; +GRANT ALL ON TABLE public.schedule TO windmill_admin; + + +-- +-- Name: TABLE script; Type: ACL; Schema: public; Owner: postgres +-- + +GRANT ALL ON TABLE public.script TO windmill_user; +GRANT ALL ON TABLE public.script TO windmill_admin; + + +-- +-- Name: TABLE token; Type: ACL; Schema: public; Owner: postgres +-- + +GRANT ALL ON TABLE public.token TO windmill_user; +GRANT ALL ON TABLE public.token TO windmill_admin; + + +-- +-- Name: TABLE usage; Type: ACL; Schema: public; Owner: postgres +-- + +GRANT ALL ON TABLE public.usage TO windmill_user; +GRANT ALL ON TABLE public.usage TO windmill_admin; + + +-- +-- Name: TABLE usr; Type: ACL; Schema: public; Owner: postgres +-- + +GRANT ALL ON TABLE public.usr TO windmill_user; +GRANT ALL ON TABLE public.usr TO windmill_admin; + + +-- +-- Name: TABLE usr_to_group; Type: ACL; Schema: public; Owner: postgres +-- + +GRANT ALL ON TABLE public.usr_to_group TO windmill_user; +GRANT ALL ON TABLE public.usr_to_group TO windmill_admin; + + +-- +-- Name: TABLE variable; Type: ACL; Schema: public; Owner: postgres +-- + +GRANT ALL ON TABLE public.variable TO windmill_user; +GRANT ALL ON TABLE public.variable TO windmill_admin; + + +-- +-- Name: TABLE worker_ping; Type: ACL; Schema: public; Owner: postgres +-- + +GRANT ALL ON TABLE public.worker_ping TO windmill_user; +GRANT ALL ON TABLE public.worker_ping TO windmill_admin; + + +-- +-- Name: TABLE workspace; Type: ACL; Schema: public; Owner: postgres +-- + +GRANT ALL ON TABLE public.workspace TO windmill_user; +GRANT ALL ON TABLE public.workspace TO windmill_admin; + + +-- +-- Name: TABLE workspace_invite; Type: ACL; Schema: public; Owner: postgres +-- + +GRANT ALL ON TABLE public.workspace_invite TO windmill_user; +GRANT ALL ON TABLE public.workspace_invite TO windmill_admin; + + +-- +-- Name: TABLE workspace_key; Type: ACL; Schema: public; Owner: postgres +-- + +GRANT ALL ON TABLE public.workspace_key TO windmill_user; +GRANT ALL ON TABLE public.workspace_key TO windmill_admin; + + +-- +-- Name: TABLE workspace_settings; Type: ACL; Schema: public; Owner: postgres +-- + +GRANT ALL ON TABLE public.workspace_settings TO windmill_user; +GRANT ALL ON TABLE public.workspace_settings TO windmill_admin; + + +-- +-- Name: DEFAULT PRIVILEGES FOR SEQUENCES; Type: DEFAULT ACL; Schema: public; Owner: postgres +-- + +ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA public GRANT ALL ON SEQUENCES TO windmill_user; + + +-- +-- Name: DEFAULT PRIVILEGES FOR TABLES; Type: DEFAULT ACL; Schema: public; Owner: postgres +-- + +ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA public GRANT ALL ON TABLES TO windmill_user; + + +-- +-- PostgreSQL database dump complete +-- + + + +-- used for backend automated testing +-- https://docs.rs/sqlx/latest/sqlx/attr.test.html + + +INSERT INTO public.workspace + (id, name, owner) + VALUES ('test-workspace', 'test-workspace', 'test-user'); + +INSERT INTO public.usr(workspace_id, email, username, is_admin, role) VALUES + ('test-workspace', 'test@windmill.dev', 'test-user', true, 'Admin'); + +INSERT INTO public.workspace_key(workspace_id, kind, key) VALUES + ('test-workspace', 'cloud', 'test-key'); + +insert INTO public.token(token, email, label, super_admin) VALUES ('SECRET_TOKEN', 'test@windmill.dev', 'test token', true); + +INSERT INTO public.script(workspace_id, created_by, content, schema, summary, description, path, hash, language, lock) VALUES ( +'test-workspace', +'system', +' +import pandas as pd +import pandas2 +', +'{}', +'', +'', +'f/foo/bar', -28028598712388162, 'python3', ''); + +INSERT INTO public.script(workspace_id, created_by, content, schema, summary, description, path, hash, language, lock) VALUES ( +'test-workspace', +'system', +' +import numpy as np +', +'{}', +'', +'', +'f/foo/baz', -28028598712388161, 'python3', ''); + +INSERT INTO public.script(workspace_id, created_by, content, schema, summary, description, path, hash, language, lock) VALUES ( +'test-workspace', +'system', +' +import difffolder +from .bar import main +', +'{}', +'', +'', +'f/foobar/baz', -28028598712388160, 'python3', ''); + +INSERT INTO public.script(workspace_id, created_by, content, schema, summary, description, path, hash, language, lock) VALUES ( +'test-workspace', +'system', +' +import innerdifffolder +', +'{}', +'', +'', +'f/foobar/bar', -28028598712388159, 'python3', ''); \ No newline at end of file diff --git a/backend/parsers/windmill-parser-py-imports/tests/tests.rs b/backend/parsers/windmill-parser-py-imports/tests/tests.rs new file mode 100644 index 0000000000000..436493e132743 --- /dev/null +++ b/backend/parsers/windmill-parser-py-imports/tests/tests.rs @@ -0,0 +1,106 @@ +mod tests { + + use sqlx::{Pool, Postgres}; + use windmill_parser_py_imports::parse_python_imports; + + #[sqlx::test(fixtures("base"))] + async fn test_parse_python_imports(db: Pool) -> anyhow::Result<()> { + //let code = "print(2 + 3, fd=sys.stderr)"; + let code = " + +import os +import wmill +from zanzibar.estonie import talin +import matplotlib.pyplot as plt +from . import tests + +def main(): + pass + +"; + let mut already_visited = vec![]; + let r = parse_python_imports( + code, + "test-workspace", + "f/foo/bar", + &db, + &mut already_visited, + ) + .await?; + // println!("{}", serde_json::to_string(&r)?); + assert_eq!(r, vec!["matplotlib", "wmill", "zanzibar"]); + Ok(()) + } + + #[sqlx::test(fixtures("base"))] + async fn test_parse_python_imports2(db: Pool) -> anyhow::Result<()> { + //let code = "print(2 + 3, fd=sys.stderr)"; + let code = " +#requirements: +#burkina=0.4 +#nigeria +# +#congo + +import os +import wmill +from zanzibar.estonie import talin + +def main(): + pass + +"; + let mut already_visited = vec![]; + let r = parse_python_imports( + code, + "test-workspace", + "f/foo/bar", + &db, + &mut already_visited, + ) + .await?; + println!("{}", serde_json::to_string(&r)?); + assert_eq!(r, vec!["burkina=0.4", "nigeria"]); + + Ok(()) + } + + #[sqlx::test(fixtures("base"))] + async fn test_parse_python_imports_local(db: Pool) -> anyhow::Result<()> { + //let code = "print(2 + 3, fd=sys.stderr)"; + let code = " +from f.foo.bar import main1 +from .baz import main2 +from ..foo.bar import main3 +import f.foo.bar as bar +from ..foobar.baz import main4 + +def main(): + pass + +"; + let mut already_visited = vec![]; + + let r = parse_python_imports( + code, + "test-workspace", + "f/foo/bar", + &db, + &mut already_visited, + ) + .await?; + println!("{}", serde_json::to_string(&r)?); + assert_eq!( + r, + [ + "difffolder", + "innerdifffolder", + "numpy", + "pandas", + "pandas2", + ] + ); + + Ok(()) + } +} diff --git a/backend/parsers/windmill-parser-py/Cargo.toml b/backend/parsers/windmill-parser-py/Cargo.toml new file mode 100644 index 0000000000000..9111534406f5d --- /dev/null +++ b/backend/parsers/windmill-parser-py/Cargo.toml @@ -0,0 +1,16 @@ +[package] +name = "windmill-parser-py" +version.workspace = true +edition.workspace = true +authors.workspace = true + +[lib] +name = "windmill_parser_py" +path = "./src/lib.rs" + +[dependencies] +windmill-parser.workspace = true +rustpython-parser.workspace = true +itertools.workspace = true +serde_json.workspace = true +anyhow.workspace = true \ No newline at end of file diff --git a/backend/parsers/windmill-parser-py/src/lib.rs b/backend/parsers/windmill-parser-py/src/lib.rs new file mode 100644 index 0000000000000..5b421714786b9 --- /dev/null +++ b/backend/parsers/windmill-parser-py/src/lib.rs @@ -0,0 +1,596 @@ +/* + * Author: Ruben Fiszel + * Copyright: Windmill Labs, Inc 2022 + * This file and its contents are licensed under the AGPLv3 License. + * Please see the included NOTICE for copyright information and + * LICENSE-AGPL for a copy of the license. + */ + +use std::collections::HashMap; + +use itertools::Itertools; + +use serde_json::json; +use windmill_parser::{json_to_typ, Arg, MainArgSignature, Typ}; + +use rustpython_parser::{ + ast::{ + Constant, Expr, ExprConstant, ExprDict, ExprList, ExprName, Stmt, StmtFunctionDef, Suite, + }, + Parse, +}; + +const FUNCTION_CALL: &str = ""; + +fn filter_non_main(code: &str, main_name: &str) -> String { + let def_main = format!("def {}(", main_name); + let mut filtered_code = String::new(); + let mut code_iter = code.split("\n"); + let mut remaining: String = String::new(); + while let Some(line) = code_iter.next() { + if line.starts_with(&def_main) { + filtered_code += &def_main; + remaining += line.strip_prefix(&def_main).unwrap(); + remaining += &code_iter.join("\n"); + break; + } + } + if filtered_code.is_empty() { + return String::new(); + } + let mut chars = remaining.chars(); + let mut open_parens = 1; + + while let Some(c) = chars.next() { + if c == '(' { + open_parens += 1; + } else if c == ')' { + open_parens -= 1; + } + filtered_code.push(c); + if open_parens == 0 { + break; + } + } + + filtered_code.push_str(": return"); + return filtered_code; +} + +pub fn parse_python_signature( + code: &str, + override_main: Option, +) -> anyhow::Result { + let main_name = override_main.unwrap_or("main".to_string()); + + let has_preprocessor = !filter_non_main(code, "preprocessor").is_empty(); + + let filtered_code = filter_non_main(code, &main_name); + if filtered_code.is_empty() { + return Ok(MainArgSignature { + star_args: false, + star_kwargs: false, + args: vec![], + no_main_func: Some(true), + has_preprocessor: Some(has_preprocessor), + }); + } + let ast = Suite::parse(&filtered_code, "main.py") + .map_err(|e| anyhow::anyhow!("Error parsing code: {}", e.to_string()))?; + + let param = ast.into_iter().find_map(|x| match x { + Stmt::FunctionDef(StmtFunctionDef { name, args, .. }) if &name == &main_name => Some(*args), + _ => None, + }); + if let Some(params) = param { + //println!("{:?}", params); + let def_arg_start = params.args.len() - params.defaults().count(); + Ok(MainArgSignature { + star_args: params.vararg.is_some(), + star_kwargs: params.kwarg.is_some(), + args: params + .args + .iter() + .enumerate() + .map(|(i, x)| { + let default = if i >= def_arg_start { + params + .defaults() + .nth(i - def_arg_start) + .map(to_value) + .flatten() + } else { + None + }; + + let mut typ = x + .as_arg() + .annotation + .as_ref() + .map_or(Typ::Unknown, |e| parse_expr(e)); + + if typ == Typ::Unknown + && default.is_some() + && default != Some(json!(FUNCTION_CALL)) + { + typ = json_to_typ(default.as_ref().unwrap()); + } + + Arg { + otyp: None, + name: x.as_arg().arg.to_string(), + typ, + has_default: default.is_some(), + default, + oidx: None, + } + }) + .collect(), + no_main_func: Some(false), + has_preprocessor: Some(has_preprocessor), + }) + } else { + Ok(MainArgSignature { + star_args: false, + star_kwargs: false, + args: vec![], + no_main_func: Some(true), + has_preprocessor: Some(has_preprocessor), + }) + } +} + +fn parse_expr(e: &Box) -> Typ { + match e.as_ref() { + Expr::Name(ExprName { id, .. }) => parse_typ(id.as_ref()), + Expr::Attribute(x) => { + if x.value + .as_name_expr() + .is_some_and(|x| x.id.as_str() == "wmill") + { + parse_typ(x.attr.as_str()) + } else { + Typ::Unknown + } + } + Expr::Subscript(x) => match x.value.as_ref() { + Expr::Name(ExprName { id, .. }) => match id.as_str() { + "Literal" => { + let values = match x.slice.as_ref() { + Expr::Tuple(elts) => { + let v: Vec = elts + .elts + .iter() + .map(|x| match x { + Expr::Constant(c) => c.value.as_str().map(|x| x.to_string()), + _ => None, + }) + .filter_map(|x| x) + .collect(); + if v.is_empty() { + None + } else { + Some(v) + } + } + _ => None, + }; + Typ::Str(values) + } + "List" => Typ::List(Box::new(parse_expr(&x.slice))), + _ => Typ::Unknown, + }, + _ => Typ::Unknown, + }, + _ => Typ::Unknown, + } +} + +fn parse_typ(id: &str) -> Typ { + match id { + "str" => Typ::Str(None), + "float" => Typ::Float, + "int" => Typ::Int, + "bool" => Typ::Bool, + "dict" => Typ::Object(vec![]), + "list" => Typ::List(Box::new(Typ::Str(None))), + "bytes" => Typ::Bytes, + "datetime" => Typ::Datetime, + "datetime.datetime" => Typ::Datetime, + "Sql" | "sql" => Typ::Sql, + x @ _ if x.starts_with("DynSelect_") => { + Typ::DynSelect(x.strip_prefix("DynSelect_").unwrap().to_string()) + } + _ => Typ::Resource(id.to_string()), + } +} + +fn to_value(et: &Expr) -> Option { + match et { + Expr::Constant(ExprConstant { value, .. }) => Some(constant_to_value(value)), + Expr::Dict(ExprDict { keys, values, .. }) => { + let v = keys + .into_iter() + .zip(values) + .map(|(k, v)| { + let key = k + .as_ref() + .map(to_value) + .flatten() + .and_then(|x| match x { + serde_json::Value::String(s) => Some(s), + _ => None, + }) + .unwrap_or_else(|| "no_key".to_string()); + (key, to_value(&v)) + }) + .collect::>(); + Some(json!(v)) + } + Expr::List(ExprList { elts, .. }) => { + let v = elts.into_iter().map(|x| to_value(&x)).collect::>(); + Some(json!(v)) + } + Expr::Call { .. } => Some(json!(FUNCTION_CALL)), + _ => None, + } +} + +fn constant_to_value(c: &Constant) -> serde_json::Value { + match c { + Constant::None => json!(null), + Constant::Bool(b) => json!(b), + Constant::Str(s) => json!(s), + Constant::Bytes(b) => json!(b), + Constant::Int(i) => serde_json::from_str(&i.to_string()).unwrap_or(json!("invalid number")), + Constant::Tuple(t) => json!(t.iter().map(constant_to_value).collect::>()), + Constant::Float(f) => json!(f), + Constant::Complex { real, imag } => json!([real, imag]), + Constant::Ellipsis => json!("..."), + } +} + +#[cfg(test)] +mod tests { + + use serde_json::json; + + use super::*; + + #[test] + fn test_parse_python_sig() -> anyhow::Result<()> { + let code = " + +import os + +def main(test1: str, name: datetime.datetime = datetime.now(), byte: bytes = bytes(1), f = \"wewe\", g = 21, h = [1,2], i = True): + + print(f\"Hello World and a warm welcome especially to {name}\") + print(\"The env variable at `all/pretty_secret`: \", os.environ.get(\"ALL_PRETTY_SECRET\")) + return {\"len\": len(name), \"splitted\": name.split() } + +"; + //println!("{}", serde_json::to_string()?); + assert_eq!( + parse_python_signature(code, None)?, + MainArgSignature { + star_args: false, + star_kwargs: false, + args: vec![ + Arg { + otyp: None, + name: "test1".to_string(), + typ: Typ::Str(None), + default: None, + has_default: false, + oidx: None + }, + Arg { + otyp: None, + name: "name".to_string(), + typ: Typ::Unknown, + default: Some(json!("")), + has_default: true, + oidx: None + }, + Arg { + otyp: None, + name: "byte".to_string(), + typ: Typ::Bytes, + default: Some(json!("")), + has_default: true, + oidx: None + }, + Arg { + otyp: None, + name: "f".to_string(), + typ: Typ::Str(None), + default: Some(json!("wewe")), + has_default: true, + oidx: None + }, + Arg { + otyp: None, + name: "g".to_string(), + typ: Typ::Int, + default: Some(json!(21)), + has_default: true, + oidx: None + }, + Arg { + otyp: None, + name: "h".to_string(), + typ: Typ::List(Box::new(Typ::Int)), + default: Some(json!([1, 2])), + has_default: true, + oidx: None + }, + Arg { + otyp: None, + name: "i".to_string(), + typ: Typ::Bool, + default: Some(json!(true)), + has_default: true, + oidx: None + }, + ], + no_main_func: Some(false), + has_preprocessor: Some(false) + } + ); + + Ok(()) + } + + #[test] + fn test_parse_python_sig_2() -> anyhow::Result<()> { + let code = " + +import os + +postgresql = dict +def main(test1: str, + name: datetime.datetime = datetime.now(), + byte: bytes = bytes(1), + resource: postgresql = \"$res:g/all/resource\"): + + print(f\"Hello World and a warm welcome especially to {name}\") + print(\"The env variable at `all/pretty_secret`: \", os.environ.get(\"ALL_PRETTY_SECRET\")) + return {\"len\": len(name), \"splitted\": name.split() } + +"; + //println!("{}", serde_json::to_string()?); + assert_eq!( + parse_python_signature(code, None)?, + MainArgSignature { + star_args: false, + star_kwargs: false, + args: vec![ + Arg { + otyp: None, + name: "test1".to_string(), + typ: Typ::Str(None), + default: None, + has_default: false, + oidx: None + }, + Arg { + otyp: None, + name: "name".to_string(), + typ: Typ::Unknown, + default: Some(json!("")), + has_default: true, + oidx: None + }, + Arg { + otyp: None, + name: "byte".to_string(), + typ: Typ::Bytes, + default: Some(json!("")), + has_default: true, + oidx: None + }, + Arg { + otyp: None, + name: "resource".to_string(), + typ: Typ::Resource("postgresql".to_string()), + default: Some(json!("$res:g/all/resource")), + has_default: true, + oidx: None + } + ], + no_main_func: Some(false), + has_preprocessor: Some(false) + } + ); + + Ok(()) + } + + #[test] + fn test_parse_python_sig_3() -> anyhow::Result<()> { + let code = " + +import os + +def main(test1: str, + s3o: wmill.S3Object, + name = \"test\", + byte: bytes = bytes(1)): return + +"; + //println!("{}", serde_json::to_string()?); + assert_eq!( + parse_python_signature(code, None)?, + MainArgSignature { + star_args: false, + star_kwargs: false, + args: vec![ + Arg { + otyp: None, + name: "test1".to_string(), + typ: Typ::Str(None), + default: None, + has_default: false, + oidx: None + }, + Arg { + otyp: None, + name: "s3o".to_string(), + typ: Typ::Resource("S3Object".to_string()), + default: None, + has_default: false, + oidx: None + }, + Arg { + otyp: None, + name: "name".to_string(), + typ: Typ::Str(None), + default: Some(json!("test")), + has_default: true, + oidx: None + }, + Arg { + otyp: None, + name: "byte".to_string(), + typ: Typ::Bytes, + default: Some(json!("")), + has_default: true, + oidx: None + } + ], + no_main_func: Some(false), + has_preprocessor: Some(false) + } + ); + + Ok(()) + } + + #[test] + fn test_parse_python_sig_4() -> anyhow::Result<()> { + let code = r#" + +import os + +def main(test1: Literal["foo", "bar"], test2: List[Literal["foo", "bar"]]): return + +"#; + //println!("{}", serde_json::to_string()?); + assert_eq!( + parse_python_signature(code, None)?, + MainArgSignature { + star_args: false, + star_kwargs: false, + args: vec![ + Arg { + otyp: None, + name: "test1".to_string(), + typ: Typ::Str(Some(vec!["foo".to_string(), "bar".to_string()])), + default: None, + has_default: false, + oidx: None + }, + Arg { + otyp: None, + name: "test2".to_string(), + typ: Typ::List(Box::new(Typ::Str(Some(vec![ + "foo".to_string(), + "bar".to_string() + ])))), + default: None, + has_default: false, + oidx: None + } + ], + no_main_func: Some(false), + has_preprocessor: Some(false) + } + ); + + Ok(()) + } + + #[test] + fn test_parse_python_sig_5() -> anyhow::Result<()> { + let code = r#" + +import os + +def main(test1: DynSelect_foo): return + +"#; + //println!("{}", serde_json::to_string()?); + assert_eq!( + parse_python_signature(code, None)?, + MainArgSignature { + star_args: false, + star_kwargs: false, + args: vec![Arg { + otyp: None, + name: "test1".to_string(), + typ: Typ::DynSelect("foo".to_string()), + default: None, + has_default: false, + oidx: None + }], + no_main_func: Some(false), + has_preprocessor: Some(false) + } + ); + + Ok(()) + } + + #[test] + fn test_parse_python_sig_6() -> anyhow::Result<()> { + let code = r#" + +import os + +def hello(): return + +"#; + //println!("{}", serde_json::to_string()?); + assert_eq!( + parse_python_signature(code, None)?, + MainArgSignature { + star_args: false, + star_kwargs: false, + args: vec![], + no_main_func: Some(true), + has_preprocessor: Some(false) + } + ); + + Ok(()) + } + + #[test] + fn test_parse_python_sig_7() -> anyhow::Result<()> { + let code = r#" + +import os + +def preprocessor(): return + +def main(): return + + + +"#; + //println!("{}", serde_json::to_string()?); + assert_eq!( + parse_python_signature(code, None)?, + MainArgSignature { + star_args: false, + star_kwargs: false, + args: vec![], + no_main_func: Some(false), + has_preprocessor: Some(true) + } + ); + + Ok(()) + } +} diff --git a/backend/parsers/windmill-parser-rust/Cargo.toml b/backend/parsers/windmill-parser-rust/Cargo.toml new file mode 100644 index 0000000000000..e1dcf844494f6 --- /dev/null +++ b/backend/parsers/windmill-parser-rust/Cargo.toml @@ -0,0 +1,22 @@ +[package] +name = "windmill-parser-rust" +version.workspace = true +edition.workspace = true +authors.workspace = true + +[lib] +name = "windmill_parser_rust" +path = "./src/lib.rs" + +[dependencies] +windmill-parser.workspace = true +itertools.workspace = true +serde_json.workspace = true +anyhow.workspace = true +convert_case.workspace = true +lazy_static.workspace = true +regex.workspace = true +pulldown-cmark.workspace = true +toml.workspace = true +syn.workspace = true +quote.workspace = true diff --git a/backend/parsers/windmill-parser-rust/manifest/Cargo.toml.default b/backend/parsers/windmill-parser-rust/manifest/Cargo.toml.default new file mode 100644 index 0000000000000..6c9e93c8a1d50 --- /dev/null +++ b/backend/parsers/windmill-parser-rust/manifest/Cargo.toml.default @@ -0,0 +1,16 @@ +[[bin]] +name = "main" +path = "./main.rs" + +[package] +authors = ["Anonymous"] +edition = "2021" +name = "main" +version = "0.1.0" + +[profile.release] +strip = true + +[dependencies] +serde = { version = "1.0.207", features = ["derive"] } +serde_json = "1.0.124" diff --git a/backend/parsers/windmill-parser-rust/src/lib.rs b/backend/parsers/windmill-parser-rust/src/lib.rs new file mode 100644 index 0000000000000..5d4d626f4c48c --- /dev/null +++ b/backend/parsers/windmill-parser-rust/src/lib.rs @@ -0,0 +1,500 @@ +use anyhow::anyhow; +use itertools::Itertools; +use quote::ToTokens; +use regex::Regex; +use windmill_parser::{Arg, MainArgSignature, Typ}; + +pub fn otyp_to_string(otyp: Option) -> String { + otyp.unwrap() +} + +pub fn parse_rust_signature(code: &str) -> anyhow::Result { + let ast: syn::File = syn::parse_file(code)?; + + if let Some(main_fn) = ast.items.iter().find_map(|item| match item { + syn::Item::Fn(f) if f.sig.ident == "main" => Some(f), + _ => None, + }) { + let args = main_fn + .sig + .inputs + .iter() + .map(|param| { + let (otyp, typ, name) = parse_rust_typ(param); + Arg { name, otyp, typ, default: None, has_default: false, oidx: None } + }) + .collect_vec(); + Ok(MainArgSignature { + star_args: false, + star_kwargs: false, + args, + no_main_func: Some(false), + has_preprocessor: None, + }) + } else { + Ok(MainArgSignature { + star_args: false, + star_kwargs: false, + args: vec![], + no_main_func: Some(true), + has_preprocessor: None, + }) + } +} + +pub fn parse_rust_deps_into_manifest(code: &str) -> anyhow::Result { + const MODIFIABLE_MANIFEST_TABLES: &[&str] = &["dependencies"]; + + let partial_manifest = find_embedded_manifest(code).unwrap_or(Manifest::Toml("".to_string())); + let partial_manifest = partial_manifest.into_toml()?; + let mut manif = default_manifest(); + for table_name in MODIFIABLE_MANIFEST_TABLES { + match partial_manifest.get(*table_name) { + Some(toml::Value::Table(tab)) => { + // Merge. + match manif.entry(*table_name) { + toml::map::Entry::Vacant(e) => { + e.insert(toml::Value::Table(tab.to_owned())); + } + toml::map::Entry::Occupied(e) => { + let into_t = match e.into_mut() { + toml::Value::Table(t) => Some(t), + _ => None, + }; + into_t.ok_or(anyhow!(""))?.extend(tab.to_owned()); + } + } + } + Some(v) => { + // Just replace. + manif.insert(table_name.to_string(), v.to_owned()); + } + None => (), + } + } + + Ok(manif.to_string()) +} + +fn parse_pat_type(p: Box) -> Typ { + match *p { + syn::Type::Array(a) => { + let inner_typ = parse_pat_type(a.elem); + Typ::List(Box::new(inner_typ)) + } + // syn::Type::BareFn(_) => todo!(), + // syn::Type::Group(_) => todo!(), + // syn::Type::ImplTrait(_) => todo!(), + // syn::Type::Infer(_) => todo!(), + // syn::Type::Macro(_) => todo!(), + // syn::Type::Never(_) => todo!(), + syn::Type::Paren(e) => parse_pat_type(e.elem), + syn::Type::Path(e) => { + if let Some(u) = e.path.segments.last() { + match u.ident.to_string().as_str() { + "usize" | "u8" | "u16" | "u32" | "u64" | "u128" | "isize" | "i8" | "i16" + | "i32" | "i64" | "i128" => Typ::Int, + "String" | "str" => Typ::Str(None), + "bool" => Typ::Bool, + "f32" | "f64" => Typ::Float, + "Vec" => { + if let syn::PathArguments::AngleBracketed(t) = &u.arguments { + if let Some(syn::GenericArgument::Type(a)) = t.args.last() { + Typ::List(Box::new(parse_pat_type(Box::new(a.clone())))) + } else { + Typ::Unknown + } + } else { + Typ::Unknown + } + } + _ => Typ::Unknown, + } + } else { + Typ::Unknown + } + } + // syn::Type::Ptr(_) => todo!(), + syn::Type::Reference(e) => parse_pat_type(e.elem), + syn::Type::Slice(e) => Typ::List(Box::new(parse_pat_type(e.elem))), + // syn::Type::TraitObject(_) => todo!(), + // syn::Type::Tuple(_) => todo!(), + // syn::Type::Verbatim(_) => todo!(), + _ => Typ::Unknown, + } +} + +fn parse_rust_typ(param_typ: &syn::FnArg) -> (Option, Typ, String) { + match param_typ { + syn::FnArg::Receiver(_) => (None, Typ::Unknown, "self".to_string()), + syn::FnArg::Typed(s) => { + let name = match *s.pat.clone() { + syn::Pat::Ident(p) => p.ident.to_string(), + _ => "undefined".to_string(), + }; + + let otyp = Some(s.ty.to_token_stream().to_string()); + let typ = parse_pat_type(s.ty.clone()); + (otyp, typ, name) + } + } +} + +#[derive(Debug, PartialEq)] +enum Manifest { + Toml(String), + DepList(String), +} + +impl Manifest { + pub fn into_toml(self) -> anyhow::Result { + match self { + Manifest::Toml(s) => toml::from_str(&s), + Manifest::DepList(s) => Manifest::dep_list_to_toml(&s), + } + .map_err(|e| anyhow!("Could not parse embedded manifest: {}", e)) + } + + fn dep_list_to_toml(s: &str) -> ::std::result::Result { + let mut r = String::new(); + r.push_str("[dependencies]\n"); + for dep in s.trim().split(',') { + // If there's no version specified, add one. + match dep.contains('=') { + true => { + r.push_str(dep); + r.push('\n'); + } + false => { + r.push_str(dep); + r.push_str("=\"*\"\n"); + } + } + } + + toml::from_str(&r) + } +} + +fn default_manifest() -> toml::value::Table { + toml::from_str(include_str!("../manifest/Cargo.toml.default")) + .expect("Failed to parse Cargo.toml.default") +} + +/** +* Get a `Manifest` that can be made into a TOML table. The format and logic are the same as in +* the rust-script or cargo-eval projects. +*/ +fn find_embedded_manifest(s: &str) -> Option { + find_short_hand_manifest(s).or_else(|| find_code_block_manifest(s)) +} + +fn find_short_hand_manifest(s: &str) -> Option { + let re: Regex = Regex::new(r"^(?i)\s*//\s*cargo-deps\s*:(.*?)(\r\n|\n)").unwrap(); + /* + This is pretty simple: the only valid syntax for this is for the first, non-blank line to contain a single-line comment whose first token is `cargo-deps:`. That's it. + */ + if let Some(cap) = re.captures(s) { + if let Some(m) = cap.get(1) { + return Some(Manifest::DepList(m.as_str().to_string())); + } + } + None +} + +/** +Locates a "code block manifest" in Rust source. +*/ +fn find_code_block_manifest(s: &str) -> Option { + let re_crate_comment: Regex = { + Regex::new( + r"(?x) + ^\s* + (/\*!|//(!|/)) + ", + ) + .unwrap() + }; + + let start = match re_crate_comment.captures(s) { + Some(cap) => match cap.get(1) { + Some(m) => m.start(), + None => return None, + }, + None => return None, + }; + + let comment = match extract_comment(&s[start..]) { + Some(s) => s, + None => { + return None; + } + }; + + scrape_markdown_manifest(&comment).map(|s| Manifest::Toml(s)) +} + +/** +Extracts the first `Cargo` fenced code block from a chunk of Markdown. +*/ +fn scrape_markdown_manifest(content: &str) -> Option { + use pulldown_cmark::{CodeBlockKind, Event, Options, Parser, Tag}; + + // To match librustdoc/html/markdown.rs, opts. + let exts = Options::ENABLE_TABLES | Options::ENABLE_FOOTNOTES; + + let md = Parser::new_ext(content, exts); + + let mut found = false; + let mut output = None; + + for item in md { + match item { + Event::Start(Tag::CodeBlock(CodeBlockKind::Fenced(ref info))) + if info.to_lowercase() == "cargo" && output.is_none() => + { + found = true; + } + Event::Text(ref text) if found => { + let s = output.get_or_insert(String::new()); + s.push_str(text); + } + Event::End(Tag::CodeBlock(_)) if found => { + found = false; + } + _ => (), + } + } + + output +} + +/** +Extracts the contents of a Rust doc comment. +*/ +fn extract_comment(s: &str) -> Option { + use std::cmp::min; + + fn extract_block(s: &str) -> Option { + /* + On every line: + + - update nesting level and detect end-of-comment + - if margin is None: + - if there appears to be a margin, set margin. + - strip off margin marker + - update the leading space counter + - strip leading space + - append content + */ + let mut r = String::new(); + + let margin_re: Regex = Regex::new(r"^\s*\*( |$)").unwrap(); + let space_re: Regex = Regex::new(r"^(\s+)").unwrap(); + let nesting_re: Regex = Regex::new(r"/\*|\*/").unwrap(); + + let mut leading_space = None; + let mut margin = None; + let mut depth: u32 = 1; + + for line in s.lines() { + if depth == 0 { + break; + } + + let mut end_of_comment = None; + + for (end, marker) in nesting_re.find_iter(line).map(|m| (m.start(), m.as_str())) { + match (marker, depth) { + ("/*", _) => depth += 1, + ("*/", 1) => { + end_of_comment = Some(end); + depth = 0; + break; + } + ("*/", _) => depth -= 1, + _ => return None, + } + } + + let line = end_of_comment.map(|end| &line[..end]).unwrap_or(line); + + margin = margin.or_else(|| margin_re.find(line).map(|m| m.as_str())); + + let line = if let Some(margin) = margin { + let end = line + .char_indices() + .take(margin.len()) + .map(|(i, c)| i + c.len_utf8()) + .last() + .unwrap_or(0); + &line[end..] + } else { + line + }; + + leading_space = leading_space.or_else(|| space_re.find(line).map(|m| m.end())); + + let strip_len = min(leading_space.unwrap_or(0), line.len()); + let line = &line[strip_len..]; + + r.push_str(line); + + r.push('\n'); + } + + Some(r) + } + + fn extract_line(s: &str) -> Option { + let mut r = String::new(); + + let comment_re = Regex::new(r"^\s*//(!|/)").unwrap(); + + let space_re = Regex::new(r"^(\s+)").unwrap(); + + let mut leading_space = None; + + for line in s.lines() { + let content = match comment_re.find(line) { + Some(m) => &line[m.end()..], + None => break, + }; + + leading_space = leading_space.or_else(|| { + space_re + .captures(content) + .and_then(|c| c.get(1)) + .map(|m| m.end()) + }); + + let strip_len = min(leading_space.unwrap_or(0), content.len()); + let content = &content[strip_len..]; + + r.push_str(content); + + r.push('\n'); + } + + Some(r) + } + + if let Some(stripped) = s.strip_prefix("/*!") { + extract_block(stripped) + } else if s.starts_with("//!") || s.starts_with("///") { + extract_line(s) + } else { + None + } +} + +#[cfg(test)] +mod test { + use super::*; + #[test] + fn test_parse_rust_signature() { + let code = r#" +// commenting comments + +fn main( + my_int: i8, + my_vec: Vec, + mut my_arr: [u8; 9], + my_complex: Vec>, +) -> Result { + println!("My int is {}", my_int); +}"#; + + let ret = parse_rust_signature(code).unwrap(); + + assert_eq!(ret.args.len(), 4); + + assert_eq!(ret.args[0].name, "my_int"); + assert_eq!(ret.args[0].otyp, Some("i8".to_string())); + assert_eq!(ret.args[0].typ, Typ::Int); + + assert_eq!(ret.args[1].name, "my_vec"); + assert_eq!(ret.args[1].otyp, Some("Vec < u8 >".to_string())); + assert_eq!(ret.args[1].typ, Typ::List(Box::new(Typ::Int))); + + assert_eq!(ret.args[2].name, "my_arr"); + assert_eq!(ret.args[2].otyp, Some("[u8 ; 9]".to_string())); + assert_eq!(ret.args[2].typ, Typ::List(Box::new(Typ::Int))); + + assert_eq!(ret.args[3].name, "my_complex"); + assert_eq!( + ret.args[3].otyp, + Some("Vec < Result < MyStruct , anyhow :: Error > >".to_string()) + ); + assert_eq!(ret.args[3].typ, Typ::List(Box::new(Typ::Unknown))); + + let code = r#" +// commenting comments + +fn main( + my_str_slice: &str, + my_String: String, + mut my_mut_ref_to_string: &mut String, + my_string_vec: Vec, +) -> Result { + println!("My int is {}", my_int); +}"#; + + let ret = parse_rust_signature(code).unwrap(); + + assert_eq!(ret.args.len(), 4); + + assert_eq!(ret.args[0].name, "my_str_slice"); + assert_eq!(ret.args[0].otyp, Some("& str".to_string())); + assert_eq!(ret.args[0].typ, Typ::Str(None)); + + assert_eq!(ret.args[1].name, "my_String"); + assert_eq!(ret.args[1].otyp, Some("String".to_string())); + assert_eq!(ret.args[1].typ, Typ::Str(None)); + + assert_eq!(ret.args[2].name, "my_mut_ref_to_string"); + assert_eq!(ret.args[2].otyp, Some("& mut String".to_string())); + assert_eq!(ret.args[2].typ, Typ::Str(None)); + + assert_eq!(ret.args[3].name, "my_string_vec"); + assert_eq!(ret.args[3].otyp, Some("Vec < String >".to_string())); + assert_eq!(ret.args[3].typ, Typ::List(Box::new(Typ::Str(None)))); + } + + #[test] + fn test_parse_rust_manifest() { + assert_eq!(find_embedded_manifest("fn main() {}"), None); + + let code = r#" + +//! Crate doc comment right here +//! We need to use the `cargo` language in the code bloc +//! +//! ```cargo +//! [dependencies] +//! time = "0.1.25" +//! ``` + +fn main() { + println!("{}", time::now().rfc822z()); +} + "#; + let manif = find_embedded_manifest(code); + + assert_eq!( + manif, + Some(Manifest::Toml( + r#"[dependencies] +time = "0.1.25" +"# + .to_string() + )) + ); + let _full_manif = parse_rust_deps_into_manifest(code).unwrap(); + } + + #[test] + fn test_default_manifest() { + default_manifest(); + } +} diff --git a/backend/parsers/windmill-parser-sql/Cargo.toml b/backend/parsers/windmill-parser-sql/Cargo.toml new file mode 100644 index 0000000000000..085b709faabca --- /dev/null +++ b/backend/parsers/windmill-parser-sql/Cargo.toml @@ -0,0 +1,21 @@ +[package] +name = "windmill-parser-sql" +version.workspace = true +edition.workspace = true +authors.workspace = true + +[lib] +name = "windmill_parser_sql" +path = "./src/lib.rs" + +[target.'cfg(target_arch = "wasm32")'.dependencies] +regex-lite.workspace = true + +[target.'cfg(not(target_arch = "wasm32"))'.dependencies] +regex.workspace = true + +[dependencies] +windmill-parser.workspace = true +anyhow.workspace = true +lazy_static.workspace = true +serde_json.workspace = true diff --git a/backend/parsers/windmill-parser-sql/src/lib.rs b/backend/parsers/windmill-parser-sql/src/lib.rs new file mode 100644 index 0000000000000..dd6bc2b955341 --- /dev/null +++ b/backend/parsers/windmill-parser-sql/src/lib.rs @@ -0,0 +1,970 @@ +#![allow(non_snake_case)] // TODO: switch to parse_* function naming + +use anyhow::anyhow; + +#[cfg(not(target_arch = "wasm32"))] +use regex::Regex; +#[cfg(target_arch = "wasm32")] +use regex_lite::Regex; + +use serde_json::json; + +use std::{ + collections::{HashMap, HashSet}, + iter::Peekable, + str::CharIndices, +}; +pub use windmill_parser::{Arg, MainArgSignature, Typ}; + +pub fn parse_mysql_sig(code: &str) -> anyhow::Result { + let parsed = parse_mysql_file(&code)?; + if let Some(x) = parsed { + let args = x; + Ok(MainArgSignature { + star_args: false, + star_kwargs: false, + args, + no_main_func: None, + has_preprocessor: None, + }) + } else { + Err(anyhow!("Error parsing sql".to_string())) + } +} + +pub fn parse_pgsql_sig(code: &str) -> anyhow::Result { + let parsed = parse_pg_file(&code)?; + if let Some(x) = parsed { + let args = x; + Ok(MainArgSignature { + star_args: false, + star_kwargs: false, + args, + no_main_func: None, + has_preprocessor: None, + }) + } else { + Err(anyhow!("Error parsing sql".to_string())) + } +} + +pub fn parse_bigquery_sig(code: &str) -> anyhow::Result { + let parsed = parse_bigquery_file(&code)?; + if let Some(x) = parsed { + let args = x; + Ok(MainArgSignature { + star_args: false, + star_kwargs: false, + args, + no_main_func: None, + has_preprocessor: None, + }) + } else { + Err(anyhow!("Error parsing sql".to_string())) + } +} + +pub fn parse_snowflake_sig(code: &str) -> anyhow::Result { + let parsed = parse_snowflake_file(&code)?; + if let Some(x) = parsed { + let args = x; + Ok(MainArgSignature { + star_args: false, + star_kwargs: false, + args, + no_main_func: None, + has_preprocessor: None, + }) + } else { + Err(anyhow!("Error parsing sql".to_string())) + } +} + +pub fn parse_mssql_sig(code: &str) -> anyhow::Result { + let parsed = parse_mssql_file(&code)?; + if let Some(x) = parsed { + let args = x; + Ok(MainArgSignature { + star_args: false, + star_kwargs: false, + args, + no_main_func: None, + has_preprocessor: None, + }) + } else { + Err(anyhow!("Error parsing sql".to_string())) + } +} + +pub fn parse_db_resource(code: &str) -> Option { + let cap = RE_DB.captures(code); + cap.map(|x| x.get(1).map(|x| x.as_str().to_string()).unwrap()) +} + +pub fn parse_sql_blocks(code: &str) -> Vec<&str> { + let mut blocks = vec![]; + let mut last_idx = 0; + + run_on_sql_statement_matches( + code, + |char, _| char == ';', + |idx, _| { + blocks.push(&code[last_idx..=idx]); + last_idx = idx + 1; + }, + ); + if last_idx < code.len() { + let last_block = &code[last_idx..]; + if RE_NONEMPTY_SQL_BLOCK.is_match(last_block) { + blocks.push(last_block); + } + } + blocks +} + +lazy_static::lazy_static! { + static ref RE_CODE_PGSQL: Regex = Regex::new(r#"(?m)\$(\d+)(?:::(\w+(?:\[\])?))?"#).unwrap(); + + static ref RE_NONEMPTY_SQL_BLOCK: Regex = Regex::new(r#"(?m)^\s*[^\s](?:[^-]|$)"#).unwrap(); + + static ref RE_DB: Regex = Regex::new(r#"(?m)^-- database (\S+) *(?:\r|\n|$)"#).unwrap(); + + // -- $1 name (type) = default + static ref RE_ARG_MYSQL: Regex = Regex::new(r#"(?m)^-- \? (\w+) \((\w+)\)(?: ?\= ?(.+))? *(?:\r|\n|$)"#).unwrap(); + pub static ref RE_ARG_MYSQL_NAMED: Regex = Regex::new(r#"(?m)^-- :([a-z_][a-z0-9_]*) \((\w+)\)(?: ?\= ?(.+))? *(?:\r|\n|$)"#).unwrap(); + + static ref RE_ARG_PGSQL: Regex = Regex::new(r#"(?m)^-- \$(\d+) (\w+)(?: ?\= ?(.+))? *(?:\r|\n|$)"#).unwrap(); + + // -- @name (type) = default + static ref RE_ARG_BIGQUERY: Regex = Regex::new(r#"(?m)^-- @(\w+) \((\w+(?:\[\])?)\)(?: ?\= ?(.+))? *(?:\r|\n|$)"#).unwrap(); + + static ref RE_ARG_SNOWFLAKE: Regex = Regex::new(r#"(?m)^-- \? (\w+) \((\w+)\)(?: ?\= ?(.+))? *(?:\r|\n|$)"#).unwrap(); + + + static ref RE_ARG_MSSQL: Regex = Regex::new(r#"(?m)^-- @(?:P|p)\d+ (\w+) \((\w+)\)(?: ?\= ?(.+))? *(?:\r|\n|$)"#).unwrap(); + +} + +fn parsed_default(parsed_typ: &Typ, default: String) -> Option { + match parsed_typ { + _ if default.to_lowercase() == "null" => None, + Typ::Int => default.parse::().ok().map(|x| json!(x)), + Typ::Float => default.parse::().ok().map(|x| json!(x)), + Typ::Bool => default.parse::().ok().map(|x| json!(x)), + Typ::Str(_) if default.len() >= 2 && default.starts_with("'") && default.ends_with("'") => { + Some(json!(&default[1..default.len() - 1])) + } + _ => Some(json!(default)), + } +} +fn parse_mysql_file(code: &str) -> anyhow::Result>> { + let mut args: Vec = vec![]; + + let mut using_named_args = false; + for cap in RE_ARG_MYSQL_NAMED.captures_iter(code) { + using_named_args = true; + let name = cap.get(1).map(|x| x.as_str().to_string()).unwrap(); + let typ = cap + .get(2) + .map(|x| x.as_str().to_string().to_lowercase()) + .unwrap(); + let default = cap.get(3).map(|x| x.as_str().to_string()); + let has_default = default.is_some(); + let parsed_typ = parse_mysql_typ(typ.as_str()); + + let parsed_default = default.and_then(|x| parsed_default(&parsed_typ, x)); + args.push(Arg { + name, + typ: parsed_typ, + default: parsed_default, + otyp: Some(typ), + has_default, + oidx: None, + }); + } + + if !using_named_args { + // backwards compatibility + for cap in RE_ARG_MYSQL.captures_iter(code) { + let name = cap.get(1).map(|x| x.as_str().to_string()).unwrap(); + let typ = cap + .get(2) + .map(|x| x.as_str().to_string().to_lowercase()) + .unwrap(); + let default = cap.get(3).map(|x| x.as_str().to_string()); + let has_default = default.is_some(); + let parsed_typ = parse_mysql_typ(typ.as_str()); + + let parsed_default = default.and_then(|x| parsed_default(&parsed_typ, x)); + + args.push(Arg { + name, + typ: parsed_typ, + default: parsed_default, + otyp: Some(typ), + has_default, + oidx: None, + }); + } + } + + Ok(Some(args)) +} + +enum ParserState { + Normal, + InSingleQuote, + InDoubleQuote, + InSingleLineComment, + InMultiLineComment, +} + +fn run_on_sql_statement_matches< + F1: FnMut(char, &mut Peekable) -> bool, + F2: FnMut(usize, &mut Peekable) -> (), +>( + code: &str, + mut cond: F1, + mut case: F2, +) { + let mut chars = code.char_indices().peekable(); + let mut state = ParserState::Normal; + while let Some((idx, char)) = chars.next() { + match (&state, char) { + (ParserState::Normal, '\'') => { + state = ParserState::InSingleQuote; + } + (ParserState::Normal, '"') => { + state = ParserState::InDoubleQuote; + } + (ParserState::Normal, '-') + if chars.peek().is_some_and(|&(_, next_char)| next_char == '-') => + { + state = ParserState::InSingleLineComment; + } + (ParserState::Normal, '/') + if chars.peek().is_some_and(|&(_, next_char)| next_char == '*') => + { + state = ParserState::InMultiLineComment; + } + (ParserState::Normal, _) if cond(char, &mut chars) => { + case(idx, &mut chars); + } + (ParserState::InSingleQuote, '\'') => { + if chars + .peek() + .is_some_and(|&(_, next_char)| next_char == '\'') + { + chars.next(); // skip the escaped single quote + } else { + state = ParserState::Normal; + } + } + (ParserState::InDoubleQuote, '"') => { + if chars.peek().is_some_and(|&(_, next_char)| next_char == '"') { + chars.next(); // skip the escaped single quote + } else { + state = ParserState::Normal; + } + } + (ParserState::InSingleLineComment, '\n') => { + state = ParserState::Normal; + } + (ParserState::InMultiLineComment, '*') + if chars.peek().is_some_and(|&(_, next_char)| next_char == '/') => + { + state = ParserState::Normal; + } + _ => {} + } + } +} + +pub fn parse_pg_statement_arg_indices(code: &str) -> HashSet { + let mut arg_indices = HashSet::new(); + run_on_sql_statement_matches( + code, + |char, chars| { + char == '$' + && chars + .peek() + .is_some_and(|&(_, next_char)| next_char.is_ascii_digit()) + }, + |_, chars| { + let mut arg_idx = String::new(); + while let Some(&(_, char)) = chars.peek() { + if char.is_ascii_digit() { + arg_idx.push(char); + chars.next(); + } else { + break; + } + } + if let Ok(arg_idx) = arg_idx.parse::() { + arg_indices.insert(arg_idx); + } + }, + ); + arg_indices +} + +fn parse_pg_file(code: &str) -> anyhow::Result>> { + let mut args = vec![]; + let mut hm: HashMap = HashMap::new(); + for cap in RE_CODE_PGSQL.captures_iter(code) { + hm.insert( + cap.get(1) + .and_then(|x| x.as_str().parse::().ok()) + .ok_or_else(|| anyhow!("Impossible to parse arg digit"))?, + cap.get(2) + .map(|x| x.as_str().to_string()) + .unwrap_or_else(|| "text".to_string()), + ); + } + for (i, v) in hm.iter() { + let typ = v.to_lowercase(); + args.push(Arg { + name: format!("${}", i), + typ: parse_pg_typ(typ.as_str()), + default: None, + otyp: Some(typ), + has_default: false, + oidx: Some(*i), + }); + } + args.sort_by(|a, b| a.oidx.unwrap().cmp(&b.oidx.unwrap())); + for cap in RE_ARG_PGSQL.captures_iter(code) { + let i = cap + .get(1) + .and_then(|x| x.as_str().parse::().ok()) + .map(|x| x); + + if let Some(arg_pos) = args + .iter() + .position(|x| i.is_some_and(|i| x.oidx.unwrap() == i)) + { + let name = cap.get(2).map(|x| x.as_str().to_string()).unwrap(); + let default = cap.get(3).map(|x| x.as_str().to_string()); + let has_default = default.is_some(); + let oarg = args[arg_pos].clone(); + let parsed_default = default.and_then(|x| parsed_default(&oarg.typ, x)); + + args[arg_pos] = Arg { + name, + typ: oarg.typ, + default: parsed_default, + otyp: oarg.otyp, + has_default, + oidx: oarg.oidx, + }; + } + } + + Ok(Some(args)) +} + +pub fn parse_sql_statement_named_params(code: &str, prefix: char) -> HashSet { + let mut arg_names = HashSet::new(); + run_on_sql_statement_matches( + code, + |char, chars| { + char == prefix + && chars + .peek() + .is_some_and(|&(_, next_char)| next_char.is_alphanumeric() || next_char == '_') + }, + |_, chars| { + let mut arg_name = String::new(); + while let Some(&(_, char)) = chars.peek() { + if char.is_alphanumeric() || char == '_' { + arg_name.push(char); + chars.next(); + } else { + break; + } + } + arg_names.insert(arg_name); + }, + ); + arg_names +} + +fn parse_bigquery_file(code: &str) -> anyhow::Result>> { + let mut args: Vec = vec![]; + + for cap in RE_ARG_BIGQUERY.captures_iter(code) { + let name = cap.get(1).map(|x| x.as_str().to_string()).unwrap(); + let typ = cap + .get(2) + .map(|x| x.as_str().to_string().to_lowercase()) + .unwrap(); + let default = cap.get(3).map(|x| x.as_str().to_string()); + let has_default = default.is_some(); + let parsed_typ = parse_bigquery_typ(typ.as_str()); + + let parsed_default = default.and_then(|x| parsed_default(&parsed_typ, x)); + + args.push(Arg { + name, + typ: parsed_typ, + default: parsed_default, + otyp: Some(typ), + has_default, + oidx: None, + }); + } + + Ok(Some(args)) +} + +fn parse_snowflake_file(code: &str) -> anyhow::Result>> { + let mut args: Vec = vec![]; + + for cap in RE_ARG_SNOWFLAKE.captures_iter(code) { + let name = cap.get(1).map(|x| x.as_str().to_string()).unwrap(); + let typ = cap + .get(2) + .map(|x| x.as_str().to_string().to_lowercase()) + .unwrap(); + let default = cap.get(3).map(|x| x.as_str().to_string()); + let has_default = default.is_some(); + let parsed_typ = parse_snowflake_typ(typ.as_str()); + + let parsed_default = default.and_then(|x| parsed_default(&parsed_typ, x)); + + args.push(Arg { + name, + typ: parsed_typ, + default: parsed_default, + otyp: Some(typ), + has_default, + oidx: None, + }); + } + + Ok(Some(args)) +} + +fn parse_mssql_file(code: &str) -> anyhow::Result>> { + let mut args: Vec = vec![]; + + for cap in RE_ARG_MSSQL.captures_iter(code) { + let name = cap.get(1).map(|x| x.as_str().to_string()).unwrap(); + let typ = cap + .get(2) + .map(|x| x.as_str().to_string().to_lowercase()) + .unwrap(); + let default = cap.get(3).map(|x| x.as_str().to_string()); + let has_default = default.is_some(); + let parsed_typ = parse_mssql_typ(typ.as_str()); + + let parsed_default = default.and_then(|x| parsed_default(&parsed_typ, x)); + + args.push(Arg { + name, + typ: parsed_typ, + default: parsed_default, + otyp: Some(typ), + has_default, + oidx: None, + }); + } + + Ok(Some(args)) +} + +pub fn parse_mysql_typ(typ: &str) -> Typ { + match typ { + "varchar" | "char" | "binary" | "varbinary" | "blob" | "text" | "enum" | "set" => { + Typ::Str(None) + } + "int" | "uint" | "integer" => Typ::Int, + "bool" | "bit" => Typ::Bool, + "double precision" | "float" | "real" | "dec" | "fixed" => Typ::Float, + "date" | "datetime" | "timestamp" | "time" => Typ::Datetime, + _ => Typ::Str(None), + } +} + +pub fn parse_pg_typ(typ: &str) -> Typ { + if typ.ends_with("[]") { + let base_typ = parse_pg_typ(typ.strip_suffix("[]").unwrap()); + Typ::List(Box::new(base_typ)) + } else { + match typ { + "varchar" | "character varying" => Typ::Str(None), + "text" => Typ::Str(None), + "int" | "integer" | "int4" => Typ::Int, + "bigint" => Typ::Int, + "bool" | "boolean" => Typ::Bool, + "char" | "character" => Typ::Str(None), + "json" | "jsonb" => Typ::Object(vec![]), + "smallint" | "int2" => Typ::Int, + "smallserial" | "serial2" => Typ::Int, + "serial" | "serial4" => Typ::Int, + "bigserial" | "serial8" => Typ::Int, + "real" | "float4" => Typ::Float, + "double" | "double precision" | "float8" => Typ::Float, + "numeric" | "decimal" => Typ::Float, + "oid" => Typ::Int, + "date" + | "time" + | "timetz" + | "time with time zone" + | "time without time zone" + | "timestamp" + | "timestamptz" + | "timestamp with time zone" + | "timestamp without time zone" => Typ::Datetime, + "bytea" => Typ::Bytes, + _ => Typ::Str(None), + } + } +} + +pub fn parse_bigquery_typ(typ: &str) -> Typ { + if typ.ends_with("[]") { + let base_typ = parse_bigquery_typ(typ.strip_suffix("[]").unwrap()); + Typ::List(Box::new(base_typ)) + } else { + match typ { + "string" => Typ::Str(None), + "bytes" => Typ::Bytes, + "json" => Typ::Object(vec![]), + "timestamp" | "date" | "time" | "datetime" => Typ::Datetime, + "integer" | "int64" => Typ::Int, + "float" | "float64" | "numeric" | "bignumeric" => Typ::Float, + "boolean" | "bool" => Typ::Bool, + _ => Typ::Str(None), + } + } +} + +pub fn parse_snowflake_typ(typ: &str) -> Typ { + match typ { + "varchar" => Typ::Str(None), + "binary" => Typ::Bytes, + "date" | "time" | "timestamp" => Typ::Datetime, + "int" => Typ::Int, + "float" => Typ::Float, + "boolean" => Typ::Bool, + _ => Typ::Str(None), + } +} + +pub fn parse_mssql_typ(typ: &str) -> Typ { + match typ { + "char" | "text" | "varchar" | "nchar" | "nvarchar" | "ntext" => Typ::Str(None), + "binary" | "varbinary" | "image" => Typ::Bytes, + "date" | "datetime2" | "datetime" | "datetimeoffset" | "smalldatetime" | "time" => { + Typ::Datetime + } + "bigint" | "int" | "tinyint" | "smallint" => Typ::Int, + "float" | "real" | "numeric" | "decimal" => Typ::Float, + "bit" => Typ::Bool, + _ => Typ::Str(None), + } +} + +#[cfg(test)] +mod tests { + + use super::*; + + #[test] + fn test_parse_pgsql_sig() -> anyhow::Result<()> { + let code = r#" +SELECT * FROM table WHERE token=$1::TEXT AND image=$2::BIGINT +"#; + //println!("{}", serde_json::to_string()?); + assert_eq!( + parse_pgsql_sig(code)?, + MainArgSignature { + star_args: false, + star_kwargs: false, + args: vec![ + Arg { + otyp: Some("text".to_string()), + name: "$1".to_string(), + typ: Typ::Str(None), + default: None, + has_default: false, + oidx: Some(1), + }, + Arg { + otyp: Some("bigint".to_string()), + name: "$2".to_string(), + typ: Typ::Int, + default: None, + has_default: false, + oidx: Some(2), + }, + ], + no_main_func: None, + has_preprocessor: None + } + ); + + Ok(()) + } + + #[test] + fn test_parse_pgsql_mutli_sig() -> anyhow::Result<()> { + let code = r#" +-- $1 param1 +-- $2 param2 +-- $3 param3 +SELECT $3::TEXT, $1::BIGINT; +SELECT $2::TEXT; +"#; + //println!("{}", serde_json::to_string()?); + assert_eq!( + parse_pgsql_sig(code)?, + MainArgSignature { + star_args: false, + star_kwargs: false, + args: vec![ + Arg { + otyp: Some("bigint".to_string()), + name: "param1".to_string(), + typ: Typ::Int, + default: None, + has_default: false, + oidx: Some(1), + }, + Arg { + otyp: Some("text".to_string()), + name: "param2".to_string(), + typ: Typ::Str(None), + default: None, + has_default: false, + oidx: Some(2), + }, + Arg { + otyp: Some("text".to_string()), + name: "param3".to_string(), + typ: Typ::Str(None), + default: None, + has_default: false, + oidx: Some(3), + }, + ], + no_main_func: None, + has_preprocessor: None + } + ); + + Ok(()) + } + + #[test] + fn test_parse_sql_blocks_multi_2semi() -> anyhow::Result<()> { + let code = r#" +-- $1 param1 +-- $2 param2 +-- $3 param3 +SELECT '--', ';' $3::TEXT, $1::BIGINT; +-- ; +SELECT $2::TEXT; +"#; + assert_eq!(parse_sql_blocks(code).len(), 2); + + Ok(()) + } + + #[test] + fn test_parse_sql_blocks_multi_1semi() -> anyhow::Result<()> { + let code = r#" +-- $1 param1 +-- $2 param2 +-- $3 param3 +SELECT '--', ';' $3::TEXT, $1::BIGINT; +-- ; +SELECT $2::TEXT +"#; + assert_eq!( + parse_sql_blocks(code), + vec![ + r#" +-- $1 param1 +-- $2 param2 +-- $3 param3 +SELECT '--', ';' $3::TEXT, $1::BIGINT;"#, + r#" +-- ; +SELECT $2::TEXT +"# + ] + ); + + Ok(()) + } + + #[test] + fn test_parse_sql_blocks_single_1semi() -> anyhow::Result<()> { + let code = r#" +-- $1 param1 +-- $2 param2 +-- $3 param3 +SELECT '--', ';' $3::TEXT, $1::BIGINT; +-- hey +"#; + assert_eq!( + parse_sql_blocks(code), + vec![ + r#" +-- $1 param1 +-- $2 param2 +-- $3 param3 +SELECT '--', ';' $3::TEXT, $1::BIGINT;"#, + ] + ); + + Ok(()) + } + + #[test] + fn test_parse_sql_blocks_single_nosemi() -> anyhow::Result<()> { + let code = r#" +-- $1 param1 +-- $2 param2 +-- $3 param3 +SELECT '--', ';' $3::TEXT, $1::BIGINT +"#; + assert_eq!( + parse_sql_blocks(code), + vec![ + r#" +-- $1 param1 +-- $2 param2 +-- $3 param3 +SELECT '--', ';' $3::TEXT, $1::BIGINT +"# + ] + ); + + Ok(()) + } + + #[test] + fn test_parse_mysql_positional_sig() -> anyhow::Result<()> { + let code = r#" +-- ? param1 (int) = 3 +-- ? param2 (text) +SELECT ?, ?; +"#; + assert_eq!( + parse_mysql_sig(code)?, + MainArgSignature { + star_args: false, + star_kwargs: false, + args: vec![ + Arg { + otyp: Some("int".to_string()), + name: "param1".to_string(), + typ: Typ::Int, + default: Some(json!(3)), + has_default: true, + oidx: None, + }, + Arg { + otyp: Some("text".to_string()), + name: "param2".to_string(), + typ: Typ::Str(None), + default: None, + has_default: false, + oidx: None, + }, + ], + no_main_func: None, + has_preprocessor: None + } + ); + + Ok(()) + } + + #[test] + fn test_parse_mysql_sig() -> anyhow::Result<()> { + let code = r#" +-- :param1 (int) = 3 +-- :param2 (text) +-- :param_3 (text) +SELECT :param_3, :param1; +SELECT :param2; +"#; + assert_eq!( + parse_mysql_sig(code)?, + MainArgSignature { + star_args: false, + star_kwargs: false, + args: vec![ + Arg { + otyp: Some("int".to_string()), + name: "param1".to_string(), + typ: Typ::Int, + default: Some(json!(3)), + has_default: true, + oidx: None, + }, + Arg { + otyp: Some("text".to_string()), + name: "param2".to_string(), + typ: Typ::Str(None), + default: None, + has_default: false, + oidx: None, + }, + Arg { + otyp: Some("text".to_string()), + name: "param_3".to_string(), + typ: Typ::Str(None), + default: None, + has_default: false, + oidx: None, + }, + ], + no_main_func: None, + has_preprocessor: None + } + ); + + Ok(()) + } + + #[test] + fn test_parse_bigquery_sig() -> anyhow::Result<()> { + let code = r#" +-- @token (string) = abc +-- @image (int64) +SELECT * FROM table WHERE token=@token AND image=@image; +SELECT @token; +"#; + //println!("{}", serde_json::to_string()?); + assert_eq!( + parse_bigquery_sig(code)?, + MainArgSignature { + star_args: false, + star_kwargs: false, + args: vec![ + Arg { + otyp: Some("string".to_string()), + name: "token".to_string(), + typ: Typ::Str(None), + default: Some(json!("abc")), + has_default: true, + oidx: None, + }, + Arg { + otyp: Some("int64".to_string()), + name: "image".to_string(), + typ: Typ::Int, + default: None, + has_default: false, + oidx: None, + }, + ], + no_main_func: None, + has_preprocessor: None + } + ); + + Ok(()) + } + + #[test] + fn test_parse_snowflake_sig() -> anyhow::Result<()> { + let code = r#" +-- ? param1 (int) = 3 +-- ? param2 (varchar) +SELECT ?, ?; +-- ? param3 (varchar) +SELECT ?; +"#; + assert_eq!( + parse_snowflake_sig(code)?, + MainArgSignature { + star_args: false, + star_kwargs: false, + args: vec![ + Arg { + otyp: Some("int".to_string()), + name: "param1".to_string(), + typ: Typ::Int, + default: Some(json!(3)), + has_default: true, + oidx: None, + }, + Arg { + otyp: Some("varchar".to_string()), + name: "param2".to_string(), + typ: Typ::Str(None), + default: None, + has_default: false, + oidx: None, + }, + Arg { + otyp: Some("varchar".to_string()), + name: "param3".to_string(), + typ: Typ::Str(None), + default: None, + has_default: false, + oidx: None, + } + ], + no_main_func: None, + has_preprocessor: None + } + ); + + Ok(()) + } + + #[test] + fn test_parse_mssql_sig() -> anyhow::Result<()> { + let code = r#" +-- @p1 param1 (int) = 3 +-- @p2 param2 (varchar) +-- @p3 param3 (varchar) +SELECT @p3, @p1; +SELECT @p2; +"#; + assert_eq!( + parse_mssql_sig(code)?, + MainArgSignature { + star_args: false, + star_kwargs: false, + args: vec![ + Arg { + otyp: Some("int".to_string()), + name: "param1".to_string(), + typ: Typ::Int, + default: Some(json!(3)), + has_default: true, + oidx: None, + }, + Arg { + otyp: Some("varchar".to_string()), + name: "param2".to_string(), + typ: Typ::Str(None), + default: None, + has_default: false, + oidx: None, + }, + Arg { + otyp: Some("varchar".to_string()), + name: "param3".to_string(), + typ: Typ::Str(None), + default: None, + has_default: false, + oidx: None, + }, + ], + no_main_func: None, + has_preprocessor: None + } + ); + + Ok(()) + } +} diff --git a/backend/parsers/windmill-parser-ts/Cargo.toml b/backend/parsers/windmill-parser-ts/Cargo.toml new file mode 100644 index 0000000000000..5f04b14f3b1b8 --- /dev/null +++ b/backend/parsers/windmill-parser-ts/Cargo.toml @@ -0,0 +1,26 @@ +[package] +name = "windmill-parser-ts" +version.workspace = true +edition.workspace = true +authors.workspace = true + + +[lib] +name = "windmill_parser_ts" +path = "./src/lib.rs" + +[target.'cfg(target_arch = "wasm32")'.dependencies] +wasm-bindgen.workspace = true +serde-wasm-bindgen.workspace = true + +[dependencies] +windmill-parser.workspace = true +swc_common.workspace = true +triomphe.workspace = true +swc_ecma_parser.workspace = true +swc_ecma_ast.workspace = true +swc_ecma_visit.workspace = true +serde_json.workspace = true +anyhow.workspace = true +regex.workspace = true +lazy_static.workspace = true diff --git a/backend/parsers/windmill-parser-ts/src/lib.rs b/backend/parsers/windmill-parser-ts/src/lib.rs new file mode 100644 index 0000000000000..742a8408022e1 --- /dev/null +++ b/backend/parsers/windmill-parser-ts/src/lib.rs @@ -0,0 +1,569 @@ +/* + * Author: Ruben Fiszel + * Copyright: Windmill Labs, Inc 2022 + * This file and its contents are licensed under the AGPLv3 License. + * Please see the included NOTICE for copyright information and + * LICENSE-AGPL for a copy of the license. + */ +// use deno_core::{serde_v8, v8, JsRuntime, RuntimeOptions}; +use serde_json::Value; +use std::collections::HashSet; +use swc_ecma_visit::{noop_visit_type, Visit, VisitWith}; +use windmill_parser::{ + json_to_typ, to_snake_case, Arg, MainArgSignature, ObjectProperty, OneOfVariant, Typ, +}; + +use swc_common::{sync::Lrc, FileName, SourceMap, SourceMapper, Span, Spanned}; +use swc_ecma_ast::{ + ArrayLit, AssignPat, BigInt, BindingIdent, Bool, Decl, ExportDecl, Expr, FnDecl, Ident, Lit, + MemberExpr, MemberProp, ModuleDecl, ModuleItem, Number, ObjectLit, ObjectPat, Param, Pat, Str, + TsArrayType, TsEntityName, TsKeywordType, TsKeywordTypeKind, TsLit, TsLitType, TsOptionalType, + TsParenthesizedType, TsPropertySignature, TsType, TsTypeAnn, TsTypeElement, TsTypeLit, + TsTypeRef, TsUnionOrIntersectionType, TsUnionType, +}; +use swc_ecma_parser::{lexer::Lexer, EsConfig, Parser, StringInput, Syntax, TsConfig}; + +use regex::Regex; +#[cfg(target_arch = "wasm32")] +use wasm_bindgen::prelude::*; + +struct ImportsFinder { + imports: HashSet, +} + +impl Visit for ImportsFinder { + noop_visit_type!(); + + fn visit_import_decl(&mut self, n: &swc_ecma_ast::ImportDecl) { + if let Some(ref s) = n.src.raw { + let s = s.to_string(); + if s.starts_with("'") && s.ends_with("'") { + self.imports.insert(s[1..s.len() - 1].to_string()); + } else if s.starts_with("\"") && s.ends_with("\"") { + self.imports.insert(s[1..s.len() - 1].to_string()); + } + } + } +} + +pub fn parse_expr_for_imports(code: &str) -> anyhow::Result> { + let cm: Lrc = Default::default(); + let fm = cm.new_source_file(FileName::Custom("main.d.ts".into()), code.into()); + let lexer = Lexer::new( + Syntax::Typescript(TsConfig::default()), + // EsVersion defaults to es5 + Default::default(), + StringInput::from(&*fm), + None, + ); + + let mut parser = Parser::new_from(lexer); + + let mut err_s = "".to_string(); + for e in parser.take_errors() { + err_s += &e.into_kind().msg().to_string(); + } + + let expr = parser.parse_module().map_err(|e| { + anyhow::anyhow!("Error while parsing code, it is invalid TypeScript: {err_s}, {e:?}") + })?; + + let mut visitor = ImportsFinder { imports: HashSet::new() }; + swc_ecma_visit::visit_module(&mut visitor, &expr); + + Ok(visitor.imports.into_iter().collect()) +} + +struct OutputFinder { + idents: HashSet<(String, String)>, +} + +impl Visit for OutputFinder { + noop_visit_type!(); + + fn visit_member_expr(&mut self, m: &MemberExpr) { + m.obj.visit_with(self); + if let MemberProp::Computed(c) = &m.prop { + c.visit_with(self); + } + match m { + MemberExpr { obj, prop: MemberProp::Ident(Ident { sym, .. }), .. } => { + match *obj.to_owned() { + Expr::Ident(Ident { sym: sym_i, .. }) => { + self.idents.insert((sym_i.to_string(), sym.to_string())); + } + _ => (), + } + } + _ => (), + } + } +} + +pub fn parse_expr_for_ids(code: &str) -> anyhow::Result> { + let cm: Lrc = Default::default(); + let fm = cm.new_source_file(FileName::Custom("main.ts".into()), code.into()); + let lexer = Lexer::new( + // We want to parse ecmascript + Syntax::Es(EsConfig { jsx: false, ..Default::default() }), + // EsVersion defaults to es5 + Default::default(), + StringInput::from(&*fm), + None, + ); + + let mut parser = Parser::new_from(lexer); + + let mut err_s = "".to_string(); + for e in parser.take_errors() { + err_s += &e.into_kind().msg().to_string(); + } + + let expr = parser.parse_module().map_err(|e| { + anyhow::anyhow!("Error while parsing code, it is invalid TypeScript: {err_s}, {e:?}") + })?; + + let mut visitor = OutputFinder { idents: HashSet::new() }; + swc_ecma_visit::visit_module(&mut visitor, &expr); + + Ok(visitor.idents.into_iter().collect()) +} + +pub fn parse_deno_signature( + code: &str, + skip_dflt: bool, + main_override: Option, +) -> anyhow::Result { + let cm: Lrc = Default::default(); + let fm = cm.new_source_file(FileName::Custom("main.ts".into()), code.into()); + let lexer = Lexer::new( + // We want to parse ecmascript + Syntax::Typescript(TsConfig::default()), + // EsVersion defaults to es5 + Default::default(), + StringInput::from(&*fm), + None, + ); + + let mut parser = Parser::new_from(lexer); + + let mut err_s = "".to_string(); + for e in parser.take_errors() { + err_s += &e.into_kind().msg().to_string(); + } + + let ast = parser + .parse_module() + .map_err(|e| { + anyhow::anyhow!("Error while parsing code, it is invalid TypeScript: {err_s}, {e:?}") + })? + .body; + + let has_preprocessor = ast.iter().any(|x| match x { + ModuleItem::ModuleDecl(ModuleDecl::ExportDecl(ExportDecl { + decl: Decl::Fn(FnDecl { ident: Ident { sym, .. }, .. }), + .. + })) => &sym.to_string() == "preprocessor", + _ => false, + }); + + let main_name = main_override.unwrap_or("main".to_string()); + let params = ast.into_iter().find_map(|x| match x { + ModuleItem::ModuleDecl(ModuleDecl::ExportDecl(ExportDecl { + decl: Decl::Fn(FnDecl { ident: Ident { sym, .. }, function, .. }), + .. + })) if &sym.to_string() == &main_name => Some(function.params), + _ => None, + }); + + let mut c: u16 = 0; + if let Some(params) = params { + let r = MainArgSignature { + star_args: false, + star_kwargs: false, + args: params + .into_iter() + .map(|x| parse_param(x, &cm, skip_dflt, &mut c)) + .collect::>>()?, + no_main_func: Some(false), + has_preprocessor: Some(has_preprocessor), + }; + Ok(r) + } else { + Ok(MainArgSignature { + star_args: false, + star_kwargs: false, + args: vec![], + no_main_func: Some(true), + has_preprocessor: Some(has_preprocessor), + }) + } +} + +fn parse_param( + x: Param, + cm: &Lrc, + skip_dflt: bool, + counter: &mut u16, +) -> anyhow::Result { + let r = match x.pat { + Pat::Ident(ident) => { + let (name, typ, nullable) = binding_ident_to_arg(&ident); + Ok(Arg { + otyp: None, + name, + typ, + default: None, + has_default: ident.id.optional || nullable, + oidx: None, + }) + } + // Pat::Object(ObjectPat { ... }) = todo!() + Pat::Assign(AssignPat { left, right, .. }) => { + let (name, mut typ, _nullable) = match *left { + Pat::Ident(ident) => binding_ident_to_arg(&ident), + Pat::Object(ObjectPat { type_ann, .. }) => { + let (typ, nullable) = eval_type_ann(&type_ann); + *counter += 1; + let name = format!("anon{}", counter); + (name, typ, nullable) + } + _ => { + return Err(anyhow::anyhow!( + "parameter syntax unsupported: `{}`: {:#?}", + cm.span_to_snippet(left.span()) + .unwrap_or_else(|_| cm.span_to_string(left.span())), + *left + )) + } + }; + + let dflt = if skip_dflt { + None + } else { + match *right { + Expr::Lit(Lit::Str(Str { value, .. })) => { + Some(Value::String(value.to_string())) + } + Expr::Lit(Lit::Num(Number { value, .. })) + if (value == (value as u64) as f64) => + { + Some(serde_json::json!(value as u64)) + } + Expr::Lit(Lit::Num(Number { value, .. })) => Some(serde_json::json!(value)), + Expr::Lit(Lit::BigInt(BigInt { value, .. })) => Some(serde_json::json!(value)), + Expr::Lit(Lit::Bool(Bool { value, .. })) => Some(Value::Bool(value)), + Expr::Object(ObjectLit { span, .. }) => eval_span(span, cm), + Expr::Array(ArrayLit { span, .. }) => eval_span(span, cm), + _ => None, + } + }; + + if typ == Typ::Unknown && dflt.is_some() { + typ = json_to_typ(dflt.as_ref().unwrap()); + } + Ok(Arg { otyp: None, name, typ, default: dflt, has_default: true, oidx: None }) + } + Pat::Object(ObjectPat { type_ann, .. }) => { + let (typ, nullable) = eval_type_ann(&type_ann); + *counter += 1; + let name = format!("anon{}", counter); + Ok(Arg { otyp: None, name, typ, default: None, has_default: nullable, oidx: None }) + } + _ => Err(anyhow::anyhow!( + "parameter syntax unsupported: `{}`: {:#?}", + cm.span_to_snippet(x.span()) + .unwrap_or_else(|_| cm.span_to_string(x.span())), + x.pat + )), + }; + r +} + +fn eval_span(span: Span, cm: &Lrc) -> Option { + let expr = cm + .span_to_snippet(span) + .ok() + .map(|x| serde_json::from_str(&x).map_err(|_| x)); + + match expr { + Some(Ok(x)) => Some(x), + Some(Err(x)) => eval_sync(&x).ok(), + None => None, + } +} + +fn eval_type_ann(type_ann: &Option>) -> (Typ, bool) { + return type_ann + .as_ref() + .map(|x| tstype_to_typ(&*x.type_ann)) + .unwrap_or((Typ::Unknown, false)); +} +fn binding_ident_to_arg(BindingIdent { id, type_ann }: &BindingIdent) -> (String, Typ, bool) { + let (typ, nullable) = eval_type_ann(type_ann); + (id.sym.to_string(), typ, nullable) +} + +lazy_static::lazy_static! { + static ref IMPORTS_VERSION: Regex = Regex::new(r"^((?:\@[^\/\@]+\/[^\/\@]+)|(?:[^\/\@]+))(?:\@(?:[^\/]+))?(.*)$").unwrap(); + +} + +pub fn remove_pinned_imports(code: &str) -> anyhow::Result { + let mut imports = parse_expr_for_imports(code)?; + imports.sort_by_key(|f| 0 - (f.len() as i32)); + let mut content = code.to_string(); + for import in imports { + let to_c = IMPORTS_VERSION.captures(&import); + if let Some(to) = to_c.and_then(|x| { + x.get(1).map(|y| { + format!( + "{}{}", + y.as_str(), + x.get(2).map(|z| z.as_str()).unwrap_or("") + ) + }) + }) { + content = content.replace(&import, &to); + } + } + Ok(content) +} + +fn tstype_to_typ(ts_type: &TsType) -> (Typ, bool) { + match ts_type { + TsType::TsKeywordType(t) => ( + match t.kind { + TsKeywordTypeKind::TsObjectKeyword => Typ::Object(vec![]), + TsKeywordTypeKind::TsBooleanKeyword => Typ::Bool, + TsKeywordTypeKind::TsBigIntKeyword => Typ::Int, + TsKeywordTypeKind::TsNumberKeyword => Typ::Float, + TsKeywordTypeKind::TsStringKeyword => Typ::Str(None), + _ => Typ::Unknown, + }, + false, + ), + TsType::TsTypeLit(TsTypeLit { members, .. }) => { + let properties = members + .into_iter() + .filter_map(|x| match x { + TsTypeElement::TsPropertySignature(TsPropertySignature { + key, + type_ann, + .. + }) => match (*key.to_owned(), type_ann) { + (Expr::Ident(Ident { sym, .. }), type_ann) => Some(ObjectProperty { + key: sym.to_string(), + typ: type_ann + .as_ref() + .map(|typ| Box::new(tstype_to_typ(&*typ.type_ann).0)) + .unwrap_or(Box::new(Typ::Unknown)), + }), + _ => None, + }, + _ => None, + }) + .collect(); + (Typ::Object(properties), false) + } + TsType::TsParenthesizedType(TsParenthesizedType { type_ann, .. }) => { + tstype_to_typ(type_ann) + } + // TODO: we can do better here and extract the inner type of array + TsType::TsArrayType(TsArrayType { elem_type, .. }) => { + (Typ::List(Box::new(tstype_to_typ(&**elem_type).0)), false) + } + TsType::TsLitType(TsLitType { lit: TsLit::Str(Str { value, .. }), .. }) => { + (Typ::Str(Some(vec![value.to_string()])), false) + } + TsType::TsOptionalType(TsOptionalType { type_ann, .. }) => { + (tstype_to_typ(type_ann).0, true) + } + TsType::TsUnionOrIntersectionType(TsUnionOrIntersectionType::TsUnionType( + TsUnionType { types, .. }, + )) => { + let (is_undefined_option, undefined_position) = if types.len() == 2 { + (true, find_undefined(types)) + } else if types.into_iter().all(|x| { + x.as_ts_lit_type().is_some_and(|y| y.lit.as_str().is_some()) + || x.as_ts_keyword_type().is_some_and(|y| { + y.kind == TsKeywordTypeKind::TsUndefinedKeyword + || y.kind == TsKeywordTypeKind::TsStringKeyword + || y.kind == TsKeywordTypeKind::TsNullKeyword + }) + }) { + (false, find_undefined(types)) + } else { + (false, None) + }; + + if is_undefined_option && undefined_position.is_some() { + let other_p = if undefined_position.unwrap() == 0 { + 1 + } else { + 0 + }; + (tstype_to_typ(&types[other_p]).0, true) + } else { + if types.len() > 1 { + let one_of_values: Vec = + types.into_iter().map_while(parse_one_of_type).collect(); + + if one_of_values.len() == types.len() { + return (Typ::OneOf(one_of_values), false); + } + } + + let literals = types + .into_iter() + .filter(|x| match ***x { + TsType::TsKeywordType(TsKeywordType { kind, .. }) => { + kind != TsKeywordTypeKind::TsStringKeyword + && kind != TsKeywordTypeKind::TsUndefinedKeyword + && kind != TsKeywordTypeKind::TsNullKeyword + } + _ => true, + }) + .map(|x| match &**x { + TsType::TsLitType(TsLitType { + lit: TsLit::Str(Str { value, .. }), .. + }) => Some(value.to_string()), + _ => None, + }) + .collect::>(); + if literals.iter().find(|x| x.is_none()).is_some() { + (Typ::Unknown, false) + } else { + ( + Typ::Str(Some(literals.into_iter().filter_map(|x| x).collect())), + undefined_position.is_some(), + ) + } + } + } + TsType::TsTypeRef(TsTypeRef { type_name, type_params, .. }) => { + let sym = match type_name { + TsEntityName::Ident(Ident { sym, .. }) => sym, + TsEntityName::TsQualifiedName(p) => &*p.right.sym, + }; + match sym.to_string().as_str() { + "Resource" => ( + Typ::Resource( + type_params + .as_ref() + .and_then(|x| { + x.params.get(0).and_then(|y| { + y.as_ts_lit_type().and_then(|z| { + z.lit.as_str().map(|a| a.to_owned().value.to_string()) + }) + }) + }) + .unwrap_or_else(|| "unknown".to_string()), + ), + false, + ), + "Date" => (Typ::Datetime, false), + "Base64" => (Typ::Bytes, false), + "Email" => (Typ::Email, false), + "Sql" => (Typ::Sql, false), + x @ _ if x.starts_with("DynSelect_") => ( + Typ::DynSelect(x.strip_prefix("DynSelect_").unwrap().to_string()), + false, + ), + x @ _ => (Typ::Resource(to_snake_case(x)), false), + } + } + _ => (Typ::Unknown, false), + } +} + +fn parse_one_of_type(x: &Box) -> Option { + match &**x { + TsType::TsTypeLit(TsTypeLit { members, .. }) => { + let label = one_of_label(members)?; + let properties = one_of_properties(members); + Some(OneOfVariant { label, properties }) + } + _ => None, + } +} + +fn one_of_label(members: &Vec) -> Option { + members.iter().find_map(|y| { + let TsTypeElement::TsPropertySignature(TsPropertySignature { key, type_ann, .. }) = y + else { + return None; + }; + + let Expr::Ident(Ident { sym, .. }) = &**key else { + return None; + }; + if sym != "label" { + return None; + } + + let Some(type_ann) = type_ann.as_ref() else { + return None; + }; + let TsType::TsLitType(TsLitType { lit: TsLit::Str(Str { value, .. }), .. }) = + &*type_ann.type_ann + else { + return None; + }; + + Some(value.to_string()) + }) +} + +fn one_of_properties(members: &Vec) -> Vec { + members + .iter() + .filter_map(|x| { + let TsTypeElement::TsPropertySignature(TsPropertySignature { key, type_ann, .. }) = x + else { + return None; + }; + + let Expr::Ident(Ident { sym, .. }) = *key.to_owned() else { + return None; + }; + let typ = type_ann + .as_ref() + .map(|typ| Box::new(tstype_to_typ(&*typ.type_ann).0)) + .unwrap_or(Box::new(Typ::Unknown)); + + Some(ObjectProperty { key: sym.to_string(), typ }) + }) + .collect() +} + +fn find_undefined(types: &Vec>) -> Option { + types.into_iter().position(|x| match **x { + TsType::TsKeywordType(TsKeywordType { kind, .. }) => { + kind == TsKeywordTypeKind::TsUndefinedKeyword + || kind == TsKeywordTypeKind::TsNullKeyword + } + _ => false, + }) +} + +#[cfg(target_arch = "wasm32")] +#[wasm_bindgen] +extern "C" { + pub fn eval(s: &str) -> JsValue; + pub fn alert(s: &str); + #[wasm_bindgen(js_namespace = console)] + fn log(s: &str); + +} + +#[cfg(target_arch = "wasm32")] +pub fn eval_sync(code: &str) -> Result { + serde_wasm_bindgen::from_value(eval(format!("let x = {}; x", code).as_str())) + .map_err(|err| format!("Cannot deserialize value: {:?}", err)) +} + +#[cfg(not(target_arch = "wasm32"))] +pub fn eval_sync(_code: &str) -> Result { + panic!("eval_sync is only available in wasm32") +} diff --git a/backend/parsers/windmill-parser-wasm/Cargo.toml b/backend/parsers/windmill-parser-wasm/Cargo.toml new file mode 100644 index 0000000000000..2513ece67bf51 --- /dev/null +++ b/backend/parsers/windmill-parser-wasm/Cargo.toml @@ -0,0 +1,44 @@ +[package] +name = "windmill-parser-wasm" +version.workspace = true +edition.workspace = true +authors.workspace = true + + +[lib] +crate-type = ["cdylib"] +name = "windmill_parser_wasm" +path = "./src/lib.rs" + +[dev-dependencies] +wasm-bindgen-test.workspace = true +windmill-parser-ts.workspace = true +windmill-parser-bash.workspace = true + +[features] +default = [] +go-parser = [ "dep:windmill-parser-go"] +bash-parser = [ "dep:windmill-parser-bash"] +sql-parser = [ "dep:windmill-parser-sql"] +py-parser = [ "dep:windmill-parser-py"] +ts-parser = [ "dep:windmill-parser-ts"] +php-parser = [ "dep:windmill-parser-php"] +rust-parser = [ "dep:windmill-parser-rust"] +graphql-parser = [ "dep:windmill-parser-graphql"] +ansible-parser = [ "dep:windmill-parser-yaml"] + +[dependencies] +anyhow.workspace = true +windmill-parser.workspace = true +windmill-parser-go = { workspace = true, optional = true } +windmill-parser-bash = { workspace = true, optional = true } +windmill-parser-sql = { workspace = true, optional = true } +windmill-parser-py = { workspace = true, optional = true } +windmill-parser-ts = { workspace = true, optional = true } +windmill-parser-php = { workspace = true, optional = true } +windmill-parser-graphql = { workspace = true, optional = true } +windmill-parser-rust = { workspace = true, optional = true } +windmill-parser-yaml = { workspace = true, optional = true } +wasm-bindgen.workspace = true +serde_json.workspace = true +getrandom = { workspace = true, features = ["js"] } diff --git a/backend/parsers/windmill-parser-wasm/README_DEV.md b/backend/parsers/windmill-parser-wasm/README_DEV.md new file mode 100644 index 0000000000000..ff3f866f4ee60 --- /dev/null +++ b/backend/parsers/windmill-parser-wasm/README_DEV.md @@ -0,0 +1,25 @@ +### Windmill parser wasm + +How to build + +``` +wasm-pack build --release --target web +``` + +#### Prerequisite + +Install wasm-pack + +``` +cargo install wasm-pack +``` + +#### To use it on a dev environment + +Go to frontend and run: + +``` +npm install ../backend/parsers/windmill-parser-wasm/pkg +``` + +Make sure to not reset the package.json before commiting diff --git a/backend/parsers/windmill-parser-wasm/build-pkgs-mac.sh b/backend/parsers/windmill-parser-wasm/build-pkgs-mac.sh new file mode 100755 index 0000000000000..7803fe22f0faf --- /dev/null +++ b/backend/parsers/windmill-parser-wasm/build-pkgs-mac.sh @@ -0,0 +1,50 @@ +#!/bin/bash +set -eou pipefail + +# full pkg +OUT_DIR="pkg" +wasm-pack build --release --target web --out-dir $OUT_DIR --all-features \ + -Z build-std=panic_abort,std -Z build-std-features=panic_immediate_abort + +# bun and deno +OUT_DIR="pkg-ts" +wasm-pack build --release --target web --out-dir $OUT_DIR --features "ts-parser" \ + -Z build-std=panic_abort,std -Z build-std-features=panic_immediate_abort +sed -i '' 's/"windmill-parser-wasm"/"windmill-parser-wasm-ts"/' $OUT_DIR/package.json + +# sql languages, graphql and bash/powershell, since they all use regex +OUT_DIR="pkg-regex" +wasm-pack build --release --target web --out-dir $OUT_DIR \ + --features "sql-parser,graphql-parser,bash-parser" \ + -Z build-std=panic_abort,std -Z build-std-features=panic_immediate_abort +sed -i '' 's/"windmill-parser-wasm"/"windmill-parser-wasm-regex"/' $OUT_DIR/package.json + +# python +OUT_DIR="pkg-py" +wasm-pack build --release --target web --out-dir $OUT_DIR --features "py-parser" \ + -Z build-std=panic_abort,std -Z build-std-features=panic_immediate_abort +sed -i '' 's/"windmill-parser-wasm"/"windmill-parser-wasm-py"/' $OUT_DIR/package.json + +# go +OUT_DIR="pkg-go" +wasm-pack build --release --target web --out-dir $OUT_DIR --features "go-parser" \ + -Z build-std=panic_abort,std -Z build-std-features=panic_immediate_abort +sed -i '' 's/"windmill-parser-wasm"/"windmill-parser-wasm-go"/' $OUT_DIR/package.json + +# php +OUT_DIR="pkg-php" +wasm-pack build --release --target web --out-dir $OUT_DIR --features "php-parser" \ + -Z build-std=panic_abort,std -Z build-std-features=panic_immediate_abort +sed -i '' 's/"windmill-parser-wasm"/"windmill-parser-wasm-php"/' $OUT_DIR/package.json + +# rust +OUT_DIR="pkg-rust" +wasm-pack build --release --target web --out-dir $OUT_DIR --features "rust-parser" \ + -Z build-std=panic_abort,std -Z build-std-features=panic_immediate_abort +sed -i '' 's/"windmill-parser-wasm"/"windmill-parser-wasm-rust"/' $OUT_DIR/package.json + +# ansible +OUT_DIR="pkg-yaml" +wasm-pack build --release --target web --out-dir $OUT_DIR --features "ansible-parser" \ + -Z build-std=panic_abort,std -Z build-std-features=panic_immediate_abort +sed -i '' 's/"windmill-parser-wasm"/"windmill-parser-wasm-yaml"/' $OUT_DIR/package.json diff --git a/backend/parsers/windmill-parser-wasm/build-pkgs.sh b/backend/parsers/windmill-parser-wasm/build-pkgs.sh new file mode 100755 index 0000000000000..66dafe3cccbc3 --- /dev/null +++ b/backend/parsers/windmill-parser-wasm/build-pkgs.sh @@ -0,0 +1,50 @@ +#!/bin/bash +set -eou pipefail + +# full pkg +OUT_DIR="pkg" +wasm-pack build --release --target web --out-dir $OUT_DIR --all-features \ + -Z build-std=panic_abort,std -Z build-std-features=panic_immediate_abort + +# bun and deno +OUT_DIR="pkg-ts" +wasm-pack build --release --target web --out-dir $OUT_DIR --features "ts-parser" \ + -Z build-std=panic_abort,std -Z build-std-features=panic_immediate_abort +sed -i 's/"windmill-parser-wasm"/"windmill-parser-wasm-ts"/' $OUT_DIR/package.json + +# sql languages, graphql and bash/powershell, since they all use regex +OUT_DIR="pkg-regex" +wasm-pack build --release --target web --out-dir $OUT_DIR \ + --features "sql-parser,graphql-parser,bash-parser" \ + -Z build-std=panic_abort,std -Z build-std-features=panic_immediate_abort +sed -i 's/"windmill-parser-wasm"/"windmill-parser-wasm-regex"/' $OUT_DIR/package.json + +# python +OUT_DIR="pkg-py" +wasm-pack build --release --target web --out-dir $OUT_DIR --features "py-parser" \ + -Z build-std=panic_abort,std -Z build-std-features=panic_immediate_abort +sed -i 's/"windmill-parser-wasm"/"windmill-parser-wasm-py"/' $OUT_DIR/package.json + +# go +OUT_DIR="pkg-go" +wasm-pack build --release --target web --out-dir $OUT_DIR --features "go-parser" \ + -Z build-std=panic_abort,std -Z build-std-features=panic_immediate_abort +sed -i 's/"windmill-parser-wasm"/"windmill-parser-wasm-go"/' $OUT_DIR/package.json + +# php +OUT_DIR="pkg-php" +wasm-pack build --release --target web --out-dir $OUT_DIR --features "php-parser" \ + -Z build-std=panic_abort,std -Z build-std-features=panic_immediate_abort +sed -i 's/"windmill-parser-wasm"/"windmill-parser-wasm-php"/' $OUT_DIR/package.json + +# rust +OUT_DIR="pkg-rust" +wasm-pack build --release --target web --out-dir $OUT_DIR --features "rust-parser" \ + -Z build-std=panic_abort,std -Z build-std-features=panic_immediate_abort +sed -i 's/"windmill-parser-wasm"/"windmill-parser-wasm-rust"/' $OUT_DIR/package.json + +# ansible +OUT_DIR="pkg-yaml" +wasm-pack build --release --target web --out-dir $OUT_DIR --features "ansible-parser" \ + -Z build-std=panic_abort,std -Z build-std-features=panic_immediate_abort +sed -i 's/"windmill-parser-wasm"/"windmill-parser-wasm-yaml"/' $OUT_DIR/package.json diff --git a/backend/parsers/windmill-parser-wasm/build.sh b/backend/parsers/windmill-parser-wasm/build.sh new file mode 100755 index 0000000000000..b872e2c9128d0 --- /dev/null +++ b/backend/parsers/windmill-parser-wasm/build.sh @@ -0,0 +1,4 @@ +#!/bin/bash +set -eou pipefail + +deno task wasmbuild --out ../../../cli/wasm/ -p windmill-parser-wasm --all-features diff --git a/backend/parsers/windmill-parser-wasm/deno.json b/backend/parsers/windmill-parser-wasm/deno.json new file mode 100644 index 0000000000000..abdd5e39d13ea --- /dev/null +++ b/backend/parsers/windmill-parser-wasm/deno.json @@ -0,0 +1,5 @@ +{ + "tasks": { + "wasmbuild": "deno run -A jsr:@deno/wasmbuild@0.17.2" + } +} diff --git a/backend/parsers/windmill-parser-wasm/lib/windmill_parser_wasm.generated.d.ts b/backend/parsers/windmill-parser-wasm/lib/windmill_parser_wasm.generated.d.ts new file mode 100644 index 0000000000000..10824a1c62f85 --- /dev/null +++ b/backend/parsers/windmill-parser-wasm/lib/windmill_parser_wasm.generated.d.ts @@ -0,0 +1,126 @@ +// deno-lint-ignore-file +// deno-fmt-ignore-file + +export interface InstantiateResult { + instance: WebAssembly.Instance; + exports: { + parse_deno: typeof parse_deno; + parse_outputs: typeof parse_outputs; + parse_ts_imports: typeof parse_ts_imports; + parse_bash: typeof parse_bash; + parse_powershell: typeof parse_powershell; + parse_go: typeof parse_go; + parse_python: typeof parse_python; + parse_sql: typeof parse_sql; + parse_mysql: typeof parse_mysql; + parse_bigquery: typeof parse_bigquery; + parse_snowflake: typeof parse_snowflake; + parse_mssql: typeof parse_mssql; + parse_db_resource: typeof parse_db_resource; + parse_graphql: typeof parse_graphql; + parse_php: typeof parse_php; + parse_rust: typeof parse_rust + }; +} + +/** Gets if the Wasm module has been instantiated. */ +export function isInstantiated(): boolean; + +/** Options for instantiating a Wasm instance. */ +export interface InstantiateOptions { + /** Optional url to the Wasm file to instantiate. */ + url?: URL; + /** Callback to decompress the raw Wasm file bytes before instantiating. */ + decompress?: (bytes: Uint8Array) => Uint8Array; +} + +/** Instantiates an instance of the Wasm module returning its functions. +* @remarks It is safe to call this multiple times and once successfully +* loaded it will always return a reference to the same object. */ +export function instantiate(opts?: InstantiateOptions): Promise; + +/** Instantiates an instance of the Wasm module along with its exports. + * @remarks It is safe to call this multiple times and once successfully + * loaded it will always return a reference to the same object. */ +export function instantiateWithInstance(opts?: InstantiateOptions): Promise; + +/** +* @param {string} code +* @returns {string} +*/ +export function parse_deno(code: string): string; +/** +* @param {string} code +* @returns {string} +*/ +export function parse_outputs(code: string): string; +/** +* @param {string} code +* @returns {string} +*/ +export function parse_ts_imports(code: string): string; +/** +* @param {string} code +* @returns {string} +*/ +export function parse_bash(code: string): string; +/** +* @param {string} code +* @returns {string} +*/ +export function parse_powershell(code: string): string; +/** +* @param {string} code +* @returns {string} +*/ +export function parse_go(code: string): string; +/** +* @param {string} code +* @returns {string} +*/ +export function parse_python(code: string): string; +/** +* @param {string} code +* @returns {string} +*/ +export function parse_sql(code: string): string; +/** +* @param {string} code +* @returns {string} +*/ +export function parse_mysql(code: string): string; +/** +* @param {string} code +* @returns {string} +*/ +export function parse_bigquery(code: string): string; +/** +* @param {string} code +* @returns {string} +*/ +export function parse_snowflake(code: string): string; +/** +* @param {string} code +* @returns {string} +*/ +export function parse_mssql(code: string): string; +/** +* @param {string} code +* @returns {string | undefined} +*/ +export function parse_db_resource(code: string): string | undefined; +/** +* @param {string} code +* @returns {string} +*/ +export function parse_graphql(code: string): string; +/** +* @param {string} code +* @returns {string} +*/ +export function parse_php(code: string): string; +/** +* @param {string} code +* @returns {string} +*/ +export function parse_rust(code: string): string; diff --git a/backend/parsers/windmill-parser-wasm/lib/windmill_parser_wasm.generated.js b/backend/parsers/windmill-parser-wasm/lib/windmill_parser_wasm.generated.js new file mode 100644 index 0000000000000..ea2404efeb2f9 --- /dev/null +++ b/backend/parsers/windmill-parser-wasm/lib/windmill_parser_wasm.generated.js @@ -0,0 +1,1166 @@ +// @generated file from wasmbuild -- do not edit +// @ts-nocheck: generated +// deno-lint-ignore-file +// deno-fmt-ignore-file +/// + +// source-hash: d36b5583d8f6223c130a246a8713b8621d55b990 +let wasm; + +const heap = new Array(128).fill(undefined); + +heap.push(undefined, null, true, false); + +function getObject(idx) { + return heap[idx]; +} + +let WASM_VECTOR_LEN = 0; + +let cachedUint8Memory0 = null; + +function getUint8Memory0() { + if (cachedUint8Memory0 === null || cachedUint8Memory0.byteLength === 0) { + cachedUint8Memory0 = new Uint8Array(wasm.memory.buffer); + } + return cachedUint8Memory0; +} + +const cachedTextEncoder = typeof TextEncoder !== "undefined" + ? new TextEncoder("utf-8") + : { + encode: () => { + throw Error("TextEncoder not available"); + }, + }; + +const encodeString = function (arg, view) { + return cachedTextEncoder.encodeInto(arg, view); +}; + +function passStringToWasm0(arg, malloc, realloc) { + if (realloc === undefined) { + const buf = cachedTextEncoder.encode(arg); + const ptr = malloc(buf.length, 1) >>> 0; + getUint8Memory0().subarray(ptr, ptr + buf.length).set(buf); + WASM_VECTOR_LEN = buf.length; + return ptr; + } + + let len = arg.length; + let ptr = malloc(len, 1) >>> 0; + + const mem = getUint8Memory0(); + + let offset = 0; + + for (; offset < len; offset++) { + const code = arg.charCodeAt(offset); + if (code > 0x7F) break; + mem[ptr + offset] = code; + } + + if (offset !== len) { + if (offset !== 0) { + arg = arg.slice(offset); + } + ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0; + const view = getUint8Memory0().subarray(ptr + offset, ptr + len); + const ret = encodeString(arg, view); + + offset += ret.written; + ptr = realloc(ptr, len, offset, 1) >>> 0; + } + + WASM_VECTOR_LEN = offset; + return ptr; +} + +function isLikeNone(x) { + return x === undefined || x === null; +} + +let cachedInt32Memory0 = null; + +function getInt32Memory0() { + if (cachedInt32Memory0 === null || cachedInt32Memory0.byteLength === 0) { + cachedInt32Memory0 = new Int32Array(wasm.memory.buffer); + } + return cachedInt32Memory0; +} + +let heap_next = heap.length; + +function dropObject(idx) { + if (idx < 132) return; + heap[idx] = heap_next; + heap_next = idx; +} + +function takeObject(idx) { + const ret = getObject(idx); + dropObject(idx); + return ret; +} + +let cachedFloat64Memory0 = null; + +function getFloat64Memory0() { + if (cachedFloat64Memory0 === null || cachedFloat64Memory0.byteLength === 0) { + cachedFloat64Memory0 = new Float64Array(wasm.memory.buffer); + } + return cachedFloat64Memory0; +} + +function addHeapObject(obj) { + if (heap_next === heap.length) heap.push(heap.length + 1); + const idx = heap_next; + heap_next = heap[idx]; + + heap[idx] = obj; + return idx; +} + +const cachedTextDecoder = typeof TextDecoder !== "undefined" + ? new TextDecoder("utf-8", { ignoreBOM: true, fatal: true }) + : { + decode: () => { + throw Error("TextDecoder not available"); + }, + }; + +if (typeof TextDecoder !== "undefined") cachedTextDecoder.decode(); + +function getStringFromWasm0(ptr, len) { + ptr = ptr >>> 0; + return cachedTextDecoder.decode(getUint8Memory0().subarray(ptr, ptr + len)); +} + +let cachedBigInt64Memory0 = null; + +function getBigInt64Memory0() { + if ( + cachedBigInt64Memory0 === null || cachedBigInt64Memory0.byteLength === 0 + ) { + cachedBigInt64Memory0 = new BigInt64Array(wasm.memory.buffer); + } + return cachedBigInt64Memory0; +} + +function debugString(val) { + // primitive types + const type = typeof val; + if (type == "number" || type == "boolean" || val == null) { + return `${val}`; + } + if (type == "string") { + return `"${val}"`; + } + if (type == "symbol") { + const description = val.description; + if (description == null) { + return "Symbol"; + } else { + return `Symbol(${description})`; + } + } + if (type == "function") { + const name = val.name; + if (typeof name == "string" && name.length > 0) { + return `Function(${name})`; + } else { + return "Function"; + } + } + // objects + if (Array.isArray(val)) { + const length = val.length; + let debug = "["; + if (length > 0) { + debug += debugString(val[0]); + } + for (let i = 1; i < length; i++) { + debug += ", " + debugString(val[i]); + } + debug += "]"; + return debug; + } + // Test for built-in + const builtInMatches = /\[object ([^\]]+)\]/.exec(toString.call(val)); + let className; + if (builtInMatches.length > 1) { + className = builtInMatches[1]; + } else { + // Failed to match the standard '[object ClassName]' + return toString.call(val); + } + if (className == "Object") { + // we're a user defined class or Object + // JSON.stringify avoids problems with cycles, and is generally much + // easier than looping through ownProperties of `val`. + try { + return "Object(" + JSON.stringify(val) + ")"; + } catch (_) { + return "Object"; + } + } + // errors + if (val instanceof Error) { + return `${val.name}: ${val.message}\n${val.stack}`; + } + // TODO we could test for more things here, like `Set`s and `Map`s. + return className; +} +/** + * @param {string} code + * @returns {string} + */ +export function parse_deno(code) { + let deferred2_0; + let deferred2_1; + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + const ptr0 = passStringToWasm0( + code, + wasm.__wbindgen_malloc, + wasm.__wbindgen_realloc, + ); + const len0 = WASM_VECTOR_LEN; + wasm.parse_deno(retptr, ptr0, len0); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + deferred2_0 = r0; + deferred2_1 = r1; + return getStringFromWasm0(r0, r1); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + wasm.__wbindgen_free(deferred2_0, deferred2_1, 1); + } +} + +/** + * @param {string} code + * @returns {string} + */ +export function parse_outputs(code) { + let deferred2_0; + let deferred2_1; + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + const ptr0 = passStringToWasm0( + code, + wasm.__wbindgen_malloc, + wasm.__wbindgen_realloc, + ); + const len0 = WASM_VECTOR_LEN; + wasm.parse_outputs(retptr, ptr0, len0); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + deferred2_0 = r0; + deferred2_1 = r1; + return getStringFromWasm0(r0, r1); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + wasm.__wbindgen_free(deferred2_0, deferred2_1, 1); + } +} + +/** + * @param {string} code + * @returns {string} + */ +export function parse_ts_imports(code) { + let deferred2_0; + let deferred2_1; + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + const ptr0 = passStringToWasm0( + code, + wasm.__wbindgen_malloc, + wasm.__wbindgen_realloc, + ); + const len0 = WASM_VECTOR_LEN; + wasm.parse_ts_imports(retptr, ptr0, len0); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + deferred2_0 = r0; + deferred2_1 = r1; + return getStringFromWasm0(r0, r1); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + wasm.__wbindgen_free(deferred2_0, deferred2_1, 1); + } +} + +/** + * @param {string} code + * @returns {string} + */ +export function parse_bash(code) { + let deferred2_0; + let deferred2_1; + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + const ptr0 = passStringToWasm0( + code, + wasm.__wbindgen_malloc, + wasm.__wbindgen_realloc, + ); + const len0 = WASM_VECTOR_LEN; + wasm.parse_bash(retptr, ptr0, len0); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + deferred2_0 = r0; + deferred2_1 = r1; + return getStringFromWasm0(r0, r1); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + wasm.__wbindgen_free(deferred2_0, deferred2_1, 1); + } +} + +/** + * @param {string} code + * @returns {string} + */ +export function parse_powershell(code) { + let deferred2_0; + let deferred2_1; + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + const ptr0 = passStringToWasm0( + code, + wasm.__wbindgen_malloc, + wasm.__wbindgen_realloc, + ); + const len0 = WASM_VECTOR_LEN; + wasm.parse_powershell(retptr, ptr0, len0); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + deferred2_0 = r0; + deferred2_1 = r1; + return getStringFromWasm0(r0, r1); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + wasm.__wbindgen_free(deferred2_0, deferred2_1, 1); + } +} + +/** + * @param {string} code + * @returns {string} + */ +export function parse_go(code) { + let deferred2_0; + let deferred2_1; + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + const ptr0 = passStringToWasm0( + code, + wasm.__wbindgen_malloc, + wasm.__wbindgen_realloc, + ); + const len0 = WASM_VECTOR_LEN; + wasm.parse_go(retptr, ptr0, len0); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + deferred2_0 = r0; + deferred2_1 = r1; + return getStringFromWasm0(r0, r1); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + wasm.__wbindgen_free(deferred2_0, deferred2_1, 1); + } +} + +/** + * @param {string} code + * @returns {string} + */ +export function parse_python(code) { + let deferred2_0; + let deferred2_1; + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + const ptr0 = passStringToWasm0( + code, + wasm.__wbindgen_malloc, + wasm.__wbindgen_realloc, + ); + const len0 = WASM_VECTOR_LEN; + wasm.parse_python(retptr, ptr0, len0); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + deferred2_0 = r0; + deferred2_1 = r1; + return getStringFromWasm0(r0, r1); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + wasm.__wbindgen_free(deferred2_0, deferred2_1, 1); + } +} + +/** + * @param {string} code + * @returns {string} + */ +export function parse_sql(code) { + let deferred2_0; + let deferred2_1; + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + const ptr0 = passStringToWasm0( + code, + wasm.__wbindgen_malloc, + wasm.__wbindgen_realloc, + ); + const len0 = WASM_VECTOR_LEN; + wasm.parse_sql(retptr, ptr0, len0); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + deferred2_0 = r0; + deferred2_1 = r1; + return getStringFromWasm0(r0, r1); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + wasm.__wbindgen_free(deferred2_0, deferred2_1, 1); + } +} + +/** + * @param {string} code + * @returns {string} + */ +export function parse_mysql(code) { + let deferred2_0; + let deferred2_1; + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + const ptr0 = passStringToWasm0( + code, + wasm.__wbindgen_malloc, + wasm.__wbindgen_realloc, + ); + const len0 = WASM_VECTOR_LEN; + wasm.parse_mysql(retptr, ptr0, len0); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + deferred2_0 = r0; + deferred2_1 = r1; + return getStringFromWasm0(r0, r1); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + wasm.__wbindgen_free(deferred2_0, deferred2_1, 1); + } +} + +/** + * @param {string} code + * @returns {string} + */ +export function parse_bigquery(code) { + let deferred2_0; + let deferred2_1; + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + const ptr0 = passStringToWasm0( + code, + wasm.__wbindgen_malloc, + wasm.__wbindgen_realloc, + ); + const len0 = WASM_VECTOR_LEN; + wasm.parse_bigquery(retptr, ptr0, len0); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + deferred2_0 = r0; + deferred2_1 = r1; + return getStringFromWasm0(r0, r1); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + wasm.__wbindgen_free(deferred2_0, deferred2_1, 1); + } +} + +/** + * @param {string} code + * @returns {string} + */ +export function parse_snowflake(code) { + let deferred2_0; + let deferred2_1; + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + const ptr0 = passStringToWasm0( + code, + wasm.__wbindgen_malloc, + wasm.__wbindgen_realloc, + ); + const len0 = WASM_VECTOR_LEN; + wasm.parse_snowflake(retptr, ptr0, len0); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + deferred2_0 = r0; + deferred2_1 = r1; + return getStringFromWasm0(r0, r1); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + wasm.__wbindgen_free(deferred2_0, deferred2_1, 1); + } +} + +/** + * @param {string} code + * @returns {string} + */ +export function parse_mssql(code) { + let deferred2_0; + let deferred2_1; + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + const ptr0 = passStringToWasm0( + code, + wasm.__wbindgen_malloc, + wasm.__wbindgen_realloc, + ); + const len0 = WASM_VECTOR_LEN; + wasm.parse_mssql(retptr, ptr0, len0); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + deferred2_0 = r0; + deferred2_1 = r1; + return getStringFromWasm0(r0, r1); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + wasm.__wbindgen_free(deferred2_0, deferred2_1, 1); + } +} + +/** + * @param {string} code + * @returns {string | undefined} + */ +export function parse_db_resource(code) { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + const ptr0 = passStringToWasm0( + code, + wasm.__wbindgen_malloc, + wasm.__wbindgen_realloc, + ); + const len0 = WASM_VECTOR_LEN; + wasm.parse_db_resource(retptr, ptr0, len0); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + let v2; + if (r0 !== 0) { + v2 = getStringFromWasm0(r0, r1).slice(); + wasm.__wbindgen_free(r0, r1 * 1, 1); + } + return v2; + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + } +} + +/** + * @param {string} code + * @returns {string} + */ +export function parse_graphql(code) { + let deferred2_0; + let deferred2_1; + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + const ptr0 = passStringToWasm0( + code, + wasm.__wbindgen_malloc, + wasm.__wbindgen_realloc, + ); + const len0 = WASM_VECTOR_LEN; + wasm.parse_graphql(retptr, ptr0, len0); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + deferred2_0 = r0; + deferred2_1 = r1; + return getStringFromWasm0(r0, r1); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + wasm.__wbindgen_free(deferred2_0, deferred2_1, 1); + } +} + +/** + * @param {string} code + * @returns {string} + */ +export function parse_php(code) { + let deferred2_0; + let deferred2_1; + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + const ptr0 = passStringToWasm0( + code, + wasm.__wbindgen_malloc, + wasm.__wbindgen_realloc, + ); + const len0 = WASM_VECTOR_LEN; + wasm.parse_php(retptr, ptr0, len0); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + deferred2_0 = r0; + deferred2_1 = r1; + return getStringFromWasm0(r0, r1); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + wasm.__wbindgen_free(deferred2_0, deferred2_1, 1); + } +} + +/** + * @param {string} code + * @returns {string} + */ +export function parse_rust(code) { + let deferred2_0; + let deferred2_1; + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + const ptr0 = passStringToWasm0( + code, + wasm.__wbindgen_malloc, + wasm.__wbindgen_realloc, + ); + const len0 = WASM_VECTOR_LEN; + wasm.parse_rust(retptr, ptr0, len0); + var r0 = getInt32Memory0()[retptr / 4 + 0]; + var r1 = getInt32Memory0()[retptr / 4 + 1]; + deferred2_0 = r0; + deferred2_1 = r1; + return getStringFromWasm0(r0, r1); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + wasm.__wbindgen_free(deferred2_0, deferred2_1, 1); + } +} + +function handleError(f, args) { + try { + return f.apply(this, args); + } catch (e) { + wasm.__wbindgen_exn_store(addHeapObject(e)); + } +} + +const imports = { + __wbindgen_placeholder__: { + __wbindgen_string_get: function (arg0, arg1) { + const obj = getObject(arg1); + const ret = typeof obj === "string" ? obj : undefined; + var ptr1 = isLikeNone(ret) + ? 0 + : passStringToWasm0( + ret, + wasm.__wbindgen_malloc, + wasm.__wbindgen_realloc, + ); + var len1 = WASM_VECTOR_LEN; + getInt32Memory0()[arg0 / 4 + 1] = len1; + getInt32Memory0()[arg0 / 4 + 0] = ptr1; + }, + __wbindgen_object_drop_ref: function (arg0) { + takeObject(arg0); + }, + __wbindgen_boolean_get: function (arg0) { + const v = getObject(arg0); + const ret = typeof v === "boolean" ? (v ? 1 : 0) : 2; + return ret; + }, + __wbindgen_is_bigint: function (arg0) { + const ret = typeof (getObject(arg0)) === "bigint"; + return ret; + }, + __wbindgen_number_get: function (arg0, arg1) { + const obj = getObject(arg1); + const ret = typeof obj === "number" ? obj : undefined; + getFloat64Memory0()[arg0 / 8 + 1] = isLikeNone(ret) ? 0 : ret; + getInt32Memory0()[arg0 / 4 + 0] = !isLikeNone(ret); + }, + __wbindgen_is_object: function (arg0) { + const val = getObject(arg0); + const ret = typeof val === "object" && val !== null; + return ret; + }, + __wbindgen_in: function (arg0, arg1) { + const ret = getObject(arg0) in getObject(arg1); + return ret; + }, + __wbindgen_bigint_from_i64: function (arg0) { + const ret = arg0; + return addHeapObject(ret); + }, + __wbindgen_jsval_eq: function (arg0, arg1) { + const ret = getObject(arg0) === getObject(arg1); + return ret; + }, + __wbindgen_bigint_from_u64: function (arg0) { + const ret = BigInt.asUintN(64, arg0); + return addHeapObject(ret); + }, + __wbindgen_error_new: function (arg0, arg1) { + const ret = new Error(getStringFromWasm0(arg0, arg1)); + return addHeapObject(ret); + }, + __wbg_eval_c227cc6614cd76e5: function (arg0, arg1) { + const ret = eval(getStringFromWasm0(arg0, arg1)); + return addHeapObject(ret); + }, + __wbindgen_jsval_loose_eq: function (arg0, arg1) { + const ret = getObject(arg0) == getObject(arg1); + return ret; + }, + __wbg_get_bd8e338fbd5f5cc8: function (arg0, arg1) { + const ret = getObject(arg0)[arg1 >>> 0]; + return addHeapObject(ret); + }, + __wbg_length_cd7af8117672b8b8: function (arg0) { + const ret = getObject(arg0).length; + return ret; + }, + __wbindgen_is_function: function (arg0) { + const ret = typeof (getObject(arg0)) === "function"; + return ret; + }, + __wbg_next_40fc327bfc8770e6: function (arg0) { + const ret = getObject(arg0).next; + return addHeapObject(ret); + }, + __wbg_next_196c84450b364254: function () { + return handleError(function (arg0) { + const ret = getObject(arg0).next(); + return addHeapObject(ret); + }, arguments); + }, + __wbg_done_298b57d23c0fc80c: function (arg0) { + const ret = getObject(arg0).done; + return ret; + }, + __wbg_value_d93c65011f51a456: function (arg0) { + const ret = getObject(arg0).value; + return addHeapObject(ret); + }, + __wbg_iterator_2cee6dadfd956dfa: function () { + const ret = Symbol.iterator; + return addHeapObject(ret); + }, + __wbg_get_e3c254076557e348: function () { + return handleError(function (arg0, arg1) { + const ret = Reflect.get(getObject(arg0), getObject(arg1)); + return addHeapObject(ret); + }, arguments); + }, + __wbg_call_27c0f87801dedf93: function () { + return handleError(function (arg0, arg1) { + const ret = getObject(arg0).call(getObject(arg1)); + return addHeapObject(ret); + }, arguments); + }, + __wbg_isArray_2ab64d95e09ea0ae: function (arg0) { + const ret = Array.isArray(getObject(arg0)); + return ret; + }, + __wbg_instanceof_ArrayBuffer_836825be07d4c9d2: function (arg0) { + let result; + try { + result = getObject(arg0) instanceof ArrayBuffer; + } catch (_) { + result = false; + } + const ret = result; + return ret; + }, + __wbg_instanceof_Map_87917e0a7aaf4012: function (arg0) { + let result; + try { + result = getObject(arg0) instanceof Map; + } catch (_) { + result = false; + } + const ret = result; + return ret; + }, + __wbg_isSafeInteger_f7b04ef02296c4d2: function (arg0) { + const ret = Number.isSafeInteger(getObject(arg0)); + return ret; + }, + __wbg_entries_95cc2c823b285a09: function (arg0) { + const ret = Object.entries(getObject(arg0)); + return addHeapObject(ret); + }, + __wbg_buffer_12d079cc21e14bdb: function (arg0) { + const ret = getObject(arg0).buffer; + return addHeapObject(ret); + }, + __wbg_new_63b92bc8671ed464: function (arg0) { + const ret = new Uint8Array(getObject(arg0)); + return addHeapObject(ret); + }, + __wbg_set_a47bac70306a19a7: function (arg0, arg1, arg2) { + getObject(arg0).set(getObject(arg1), arg2 >>> 0); + }, + __wbg_length_c20a40f15020d68a: function (arg0) { + const ret = getObject(arg0).length; + return ret; + }, + __wbg_instanceof_Uint8Array_2b3bbecd033d19f6: function (arg0) { + let result; + try { + result = getObject(arg0) instanceof Uint8Array; + } catch (_) { + result = false; + } + const ret = result; + return ret; + }, + __wbindgen_bigint_get_as_i64: function (arg0, arg1) { + const v = getObject(arg1); + const ret = typeof v === "bigint" ? v : undefined; + getBigInt64Memory0()[arg0 / 8 + 1] = isLikeNone(ret) ? BigInt(0) : ret; + getInt32Memory0()[arg0 / 4 + 0] = !isLikeNone(ret); + }, + __wbindgen_debug_string: function (arg0, arg1) { + const ret = debugString(getObject(arg1)); + const ptr1 = passStringToWasm0( + ret, + wasm.__wbindgen_malloc, + wasm.__wbindgen_realloc, + ); + const len1 = WASM_VECTOR_LEN; + getInt32Memory0()[arg0 / 4 + 1] = len1; + getInt32Memory0()[arg0 / 4 + 0] = ptr1; + }, + __wbindgen_throw: function (arg0, arg1) { + throw new Error(getStringFromWasm0(arg0, arg1)); + }, + __wbindgen_memory: function () { + const ret = wasm.memory; + return addHeapObject(ret); + }, + }, +}; + +class WasmBuildLoader { + #options; + #lastLoadPromise; + #instantiated; + + constructor(options) { + this.#options = options; + } + + get instance() { + return this.#instantiated?.instance; + } + + get module() { + return this.#instantiated?.module; + } + + load( + url, + decompress, + ) { + if (this.#instantiated) { + return Promise.resolve(this.#instantiated); + } else if (this.#lastLoadPromise == null) { + this.#lastLoadPromise = (async () => { + try { + this.#instantiated = await this.#instantiate(url, decompress); + return this.#instantiated; + } finally { + this.#lastLoadPromise = undefined; + } + })(); + } + return this.#lastLoadPromise; + } + + async #instantiate(url, decompress) { + const imports = this.#options.imports; + if (this.#options.cache != null && url.protocol !== "file:") { + try { + const result = await this.#options.cache( + url, + decompress ?? ((bytes) => bytes), + ); + if (result instanceof URL) { + url = result; + decompress = undefined; // already decompressed + } else if (result != null) { + return WebAssembly.instantiate(result, imports); + } + } catch { + // ignore if caching ever fails (ex. when on deploy) + } + } + + const isFile = url.protocol === "file:"; + + // make file urls work in Node via dnt + const isNode = globalThis.process?.versions?.node != null; + if (isFile && typeof Deno !== "object") { + throw new Error( + "Loading local files are not supported in this environment", + ); + } + if (isNode && isFile) { + // the deno global will be shimmed by dnt + const wasmCode = await Deno.readFile(url); + return WebAssembly.instantiate( + decompress ? decompress(wasmCode) : wasmCode, + imports, + ); + } + + switch (url.protocol) { + case "file:": + case "https:": + case "http:": { + const wasmResponse = await fetchWithRetries(url); + if (decompress) { + const wasmCode = new Uint8Array(await wasmResponse.arrayBuffer()); + return WebAssembly.instantiate(decompress(wasmCode), imports); + } + if ( + isFile || + wasmResponse.headers.get("content-type")?.toLowerCase() + .startsWith("application/wasm") + ) { + return WebAssembly.instantiateStreaming(wasmResponse, imports); + } else { + return WebAssembly.instantiate( + await wasmResponse.arrayBuffer(), + imports, + ); + } + } + default: + throw new Error(`Unsupported protocol: ${url.protocol}`); + } + } +} +const isNodeOrDeno = typeof Deno === "object" || + (typeof process !== "undefined" && process.versions != null && + process.versions.node != null); + +const loader = new WasmBuildLoader({ + imports, + cache: isNodeOrDeno ? cacheToLocalDir : undefined, +}); + +export async function instantiate(opts) { + return (await instantiateWithInstance(opts)).exports; +} + +export async function instantiateWithInstance(opts) { + const { instance } = await loader.load( + opts?.url ?? new URL("windmill_parser_wasm_bg.wasm", import.meta.url), + opts?.decompress, + ); + wasm = wasm ?? instance.exports; + cachedInt32Memory0 = cachedInt32Memory0 ?? new Int32Array(wasm.memory.buffer); + cachedUint8Memory0 = cachedUint8Memory0 ?? new Uint8Array(wasm.memory.buffer); + return { + instance, + exports: getWasmInstanceExports(), + }; +} + +function getWasmInstanceExports() { + return { + parse_deno, + parse_outputs, + parse_ts_imports, + parse_bash, + parse_powershell, + parse_go, + parse_python, + parse_sql, + parse_mysql, + parse_bigquery, + parse_snowflake, + parse_mssql, + parse_db_resource, + parse_graphql, + parse_php, + parse_rust, + }; +} + +export function isInstantiated() { + return loader.instance != null; +} +export async function cacheToLocalDir(url, decompress) { + const localPath = await getUrlLocalPath(url); + if (localPath == null) { + return undefined; + } + if (!await exists(localPath)) { + const fileBytes = decompress(new Uint8Array(await getUrlBytes(url))); + try { + await Deno.writeFile(localPath, fileBytes); + } catch { + // ignore and return the wasm bytes + return fileBytes; + } + } + return toFileUrl(localPath); +} +async function getUrlLocalPath(url) { + try { + const dataDirPath = await getInitializedLocalDataDirPath(); + const hash = await getUrlHash(url); + return `${dataDirPath}/${hash}.wasm`; + } catch { + return undefined; + } +} +async function getInitializedLocalDataDirPath() { + const dataDir = localDataDir(); + if (dataDir == null) { + throw new Error(`Could not find local data directory.`); + } + const dirPath = `${dataDir}/deno-wasmbuild`; + await ensureDir(dirPath); + return dirPath; +} +async function exists(filePath) { + try { + await Deno.lstat(filePath); + return true; + } catch (error) { + if (error instanceof Deno.errors.NotFound) { + return false; + } + throw error; + } +} +async function ensureDir(dir) { + try { + const fileInfo = await Deno.lstat(dir); + if (!fileInfo.isDirectory) { + throw new Error(`Path was not a directory '${dir}'`); + } + } catch (err) { + if (err instanceof Deno.errors.NotFound) { + // if dir not exists. then create it. + await Deno.mkdir(dir, { recursive: true }); + return; + } + throw err; + } +} +async function getUrlHash(url) { + // Taken from MDN: https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/digest + const hashBuffer = await crypto.subtle.digest( + "SHA-256", + new TextEncoder().encode(url.href), + ); + // convert buffer to byte array + const hashArray = Array.from(new Uint8Array(hashBuffer)); + // convert bytes to hex string + const hashHex = hashArray + .map((b) => b.toString(16).padStart(2, "0")) + .join(""); + return hashHex; +} +async function getUrlBytes(url) { + const response = await fetchWithRetries(url); + return await response.arrayBuffer(); +} +// the below is extracted from deno_std/path +const WHITESPACE_ENCODINGS = { + "\u0009": "%09", + "\u000A": "%0A", + "\u000B": "%0B", + "\u000C": "%0C", + "\u000D": "%0D", + "\u0020": "%20", +}; +function encodeWhitespace(string) { + return string.replaceAll(/[\s]/g, (c) => { + return WHITESPACE_ENCODINGS[c] ?? c; + }); +} +function toFileUrl(path) { + return Deno.build.os === "windows" + ? windowsToFileUrl(path) + : posixToFileUrl(path); +} +function posixToFileUrl(path) { + const url = new URL("file:///"); + url.pathname = encodeWhitespace( + path.replace(/%/g, "%25").replace(/\\/g, "%5C"), + ); + return url; +} +function windowsToFileUrl(path) { + const [, hostname, pathname] = path.match( + /^(?:[/\\]{2}([^/\\]+)(?=[/\\](?:[^/\\]|$)))?(.*)/, + ); + const url = new URL("file:///"); + url.pathname = encodeWhitespace(pathname.replace(/%/g, "%25")); + if (hostname != null && hostname != "localhost") { + url.hostname = hostname; + if (!url.hostname) { + throw new TypeError("Invalid hostname."); + } + } + return url; +} +export async function fetchWithRetries(url, maxRetries = 5) { + let sleepMs = 250; + let iterationCount = 0; + while (true) { + iterationCount++; + try { + const res = await fetch(url); + if (res.ok || iterationCount > maxRetries) { + return res; + } + } catch (err) { + if (iterationCount > maxRetries) { + throw err; + } + } + console.warn(`Failed fetching. Retrying in ${sleepMs}ms...`); + await new Promise((resolve) => setTimeout(resolve, sleepMs)); + sleepMs = Math.min(sleepMs * 2, 10000); + } +} +// MIT License - Copyright (c) justjavac. +// https://github.com/justjavac/deno_dirs/blob/e8c001bbef558f08fd486d444af391729b0b8068/data_local_dir/mod.ts +function localDataDir() { + switch (Deno.build.os) { + case "linux": { + const xdg = Deno.env.get("XDG_DATA_HOME"); + if (xdg) { + return xdg; + } + const home = Deno.env.get("HOME"); + if (home) { + return `${home}/.local/share`; + } + break; + } + case "darwin": { + const home = Deno.env.get("HOME"); + if (home) { + return `${home}/Library/Application Support`; + } + break; + } + case "windows": + return Deno.env.get("LOCALAPPDATA") ?? undefined; + } + return undefined; +} diff --git a/backend/parsers/windmill-parser-wasm/lib/windmill_parser_wasm_bg.wasm b/backend/parsers/windmill-parser-wasm/lib/windmill_parser_wasm_bg.wasm new file mode 100644 index 0000000000000..de163879c8024 Binary files /dev/null and b/backend/parsers/windmill-parser-wasm/lib/windmill_parser_wasm_bg.wasm differ diff --git a/backend/parsers/windmill-parser-wasm/package-lock.json b/backend/parsers/windmill-parser-wasm/package-lock.json new file mode 100644 index 0000000000000..f88d35a75a00d --- /dev/null +++ b/backend/parsers/windmill-parser-wasm/package-lock.json @@ -0,0 +1,6 @@ +{ + "name": "windmill-parser-wasm", + "lockfileVersion": 3, + "requires": true, + "packages": {} +} diff --git a/backend/parsers/windmill-parser-wasm/package.json b/backend/parsers/windmill-parser-wasm/package.json new file mode 100644 index 0000000000000..0967ef424bce6 --- /dev/null +++ b/backend/parsers/windmill-parser-wasm/package.json @@ -0,0 +1 @@ +{} diff --git a/backend/parsers/windmill-parser-wasm/pkg/package.json b/backend/parsers/windmill-parser-wasm/pkg/package.json new file mode 100644 index 0000000000000..e63340cf07c82 --- /dev/null +++ b/backend/parsers/windmill-parser-wasm/pkg/package.json @@ -0,0 +1,17 @@ +{ + "name": "windmill-parser-wasm", + "collaborators": [ + "Ruben Fiszel " + ], + "version": "1.385.0", + "files": [ + "windmill_parser_wasm_bg.wasm", + "windmill_parser_wasm.js", + "windmill_parser_wasm.d.ts" + ], + "module": "windmill_parser_wasm.js", + "types": "windmill_parser_wasm.d.ts", + "sideEffects": [ + "./snippets/*" + ] +} \ No newline at end of file diff --git a/backend/parsers/windmill-parser-wasm/pkg/windmill_parser_wasm.d.ts b/backend/parsers/windmill-parser-wasm/pkg/windmill_parser_wasm.d.ts new file mode 100644 index 0000000000000..439090ee9a9b0 --- /dev/null +++ b/backend/parsers/windmill-parser-wasm/pkg/windmill_parser_wasm.d.ts @@ -0,0 +1,130 @@ +/* tslint:disable */ +/* eslint-disable */ +/** +* @param {string} code +* @returns {string} +*/ +export function parse_deno(code: string): string; +/** +* @param {string} code +* @returns {string} +*/ +export function parse_outputs(code: string): string; +/** +* @param {string} code +* @returns {string} +*/ +export function parse_ts_imports(code: string): string; +/** +* @param {string} code +* @returns {string} +*/ +export function parse_bash(code: string): string; +/** +* @param {string} code +* @returns {string} +*/ +export function parse_powershell(code: string): string; +/** +* @param {string} code +* @returns {string} +*/ +export function parse_go(code: string): string; +/** +* @param {string} code +* @returns {string} +*/ +export function parse_python(code: string): string; +/** +* @param {string} code +* @returns {string} +*/ +export function parse_sql(code: string): string; +/** +* @param {string} code +* @returns {string} +*/ +export function parse_mysql(code: string): string; +/** +* @param {string} code +* @returns {string} +*/ +export function parse_bigquery(code: string): string; +/** +* @param {string} code +* @returns {string} +*/ +export function parse_snowflake(code: string): string; +/** +* @param {string} code +* @returns {string} +*/ +export function parse_mssql(code: string): string; +/** +* @param {string} code +* @returns {string | undefined} +*/ +export function parse_db_resource(code: string): string | undefined; +/** +* @param {string} code +* @returns {string} +*/ +export function parse_graphql(code: string): string; +/** +* @param {string} code +* @returns {string} +*/ +export function parse_php(code: string): string; +/** +* @param {string} code +* @returns {string} +*/ +export function parse_rust(code: string): string; + +export type InitInput = RequestInfo | URL | Response | BufferSource | WebAssembly.Module; + +export interface InitOutput { + readonly memory: WebAssembly.Memory; + readonly parse_deno: (a: number, b: number, c: number) => void; + readonly parse_outputs: (a: number, b: number, c: number) => void; + readonly parse_ts_imports: (a: number, b: number, c: number) => void; + readonly parse_bash: (a: number, b: number, c: number) => void; + readonly parse_powershell: (a: number, b: number, c: number) => void; + readonly parse_go: (a: number, b: number, c: number) => void; + readonly parse_python: (a: number, b: number, c: number) => void; + readonly parse_sql: (a: number, b: number, c: number) => void; + readonly parse_mysql: (a: number, b: number, c: number) => void; + readonly parse_bigquery: (a: number, b: number, c: number) => void; + readonly parse_snowflake: (a: number, b: number, c: number) => void; + readonly parse_mssql: (a: number, b: number, c: number) => void; + readonly parse_db_resource: (a: number, b: number, c: number) => void; + readonly parse_graphql: (a: number, b: number, c: number) => void; + readonly parse_php: (a: number, b: number, c: number) => void; + readonly parse_rust: (a: number, b: number, c: number) => void; + readonly __wbindgen_malloc: (a: number, b: number) => number; + readonly __wbindgen_realloc: (a: number, b: number, c: number, d: number) => number; + readonly __wbindgen_add_to_stack_pointer: (a: number) => number; + readonly __wbindgen_free: (a: number, b: number, c: number) => void; + readonly __wbindgen_exn_store: (a: number) => void; +} + +export type SyncInitInput = BufferSource | WebAssembly.Module; +/** +* Instantiates the given `module`, which can either be bytes or +* a precompiled `WebAssembly.Module`. +* +* @param {{ module: SyncInitInput }} module - Passing `SyncInitInput` directly is deprecated. +* +* @returns {InitOutput} +*/ +export function initSync(module: { module: SyncInitInput } | SyncInitInput): InitOutput; + +/** +* If `module_or_path` is {RequestInfo} or {URL}, makes a request and +* for everything else, calls `WebAssembly.instantiate` directly. +* +* @param {{ module_or_path: InitInput | Promise }} module_or_path - Passing `InitInput` directly is deprecated. +* +* @returns {Promise} +*/ +export default function __wbg_init (module_or_path?: { module_or_path: InitInput | Promise } | InitInput | Promise): Promise; diff --git a/backend/parsers/windmill-parser-wasm/pkg/windmill_parser_wasm.js b/backend/parsers/windmill-parser-wasm/pkg/windmill_parser_wasm.js new file mode 100644 index 0000000000000..ae0865a76c2f6 --- /dev/null +++ b/backend/parsers/windmill-parser-wasm/pkg/windmill_parser_wasm.js @@ -0,0 +1,813 @@ +let wasm; + +const heap = new Array(128).fill(undefined); + +heap.push(undefined, null, true, false); + +function getObject(idx) { return heap[idx]; } + +let heap_next = heap.length; + +function dropObject(idx) { + if (idx < 132) return; + heap[idx] = heap_next; + heap_next = idx; +} + +function takeObject(idx) { + const ret = getObject(idx); + dropObject(idx); + return ret; +} + +let WASM_VECTOR_LEN = 0; + +let cachedUint8ArrayMemory0 = null; + +function getUint8ArrayMemory0() { + if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) { + cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer); + } + return cachedUint8ArrayMemory0; +} + +const cachedTextEncoder = (typeof TextEncoder !== 'undefined' ? new TextEncoder('utf-8') : { encode: () => { throw Error('TextEncoder not available') } } ); + +const encodeString = (typeof cachedTextEncoder.encodeInto === 'function' + ? function (arg, view) { + return cachedTextEncoder.encodeInto(arg, view); +} + : function (arg, view) { + const buf = cachedTextEncoder.encode(arg); + view.set(buf); + return { + read: arg.length, + written: buf.length + }; +}); + +function passStringToWasm0(arg, malloc, realloc) { + + if (realloc === undefined) { + const buf = cachedTextEncoder.encode(arg); + const ptr = malloc(buf.length, 1) >>> 0; + getUint8ArrayMemory0().subarray(ptr, ptr + buf.length).set(buf); + WASM_VECTOR_LEN = buf.length; + return ptr; + } + + let len = arg.length; + let ptr = malloc(len, 1) >>> 0; + + const mem = getUint8ArrayMemory0(); + + let offset = 0; + + for (; offset < len; offset++) { + const code = arg.charCodeAt(offset); + if (code > 0x7F) break; + mem[ptr + offset] = code; + } + + if (offset !== len) { + if (offset !== 0) { + arg = arg.slice(offset); + } + ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0; + const view = getUint8ArrayMemory0().subarray(ptr + offset, ptr + len); + const ret = encodeString(arg, view); + + offset += ret.written; + ptr = realloc(ptr, len, offset, 1) >>> 0; + } + + WASM_VECTOR_LEN = offset; + return ptr; +} + +function isLikeNone(x) { + return x === undefined || x === null; +} + +let cachedDataViewMemory0 = null; + +function getDataViewMemory0() { + if (cachedDataViewMemory0 === null || cachedDataViewMemory0.buffer.detached === true || (cachedDataViewMemory0.buffer.detached === undefined && cachedDataViewMemory0.buffer !== wasm.memory.buffer)) { + cachedDataViewMemory0 = new DataView(wasm.memory.buffer); + } + return cachedDataViewMemory0; +} + +function addHeapObject(obj) { + if (heap_next === heap.length) heap.push(heap.length + 1); + const idx = heap_next; + heap_next = heap[idx]; + + heap[idx] = obj; + return idx; +} + +const cachedTextDecoder = (typeof TextDecoder !== 'undefined' ? new TextDecoder('utf-8', { ignoreBOM: true, fatal: true }) : { decode: () => { throw Error('TextDecoder not available') } } ); + +if (typeof TextDecoder !== 'undefined') { cachedTextDecoder.decode(); }; + +function getStringFromWasm0(ptr, len) { + ptr = ptr >>> 0; + return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len)); +} + +function debugString(val) { + // primitive types + const type = typeof val; + if (type == 'number' || type == 'boolean' || val == null) { + return `${val}`; + } + if (type == 'string') { + return `"${val}"`; + } + if (type == 'symbol') { + const description = val.description; + if (description == null) { + return 'Symbol'; + } else { + return `Symbol(${description})`; + } + } + if (type == 'function') { + const name = val.name; + if (typeof name == 'string' && name.length > 0) { + return `Function(${name})`; + } else { + return 'Function'; + } + } + // objects + if (Array.isArray(val)) { + const length = val.length; + let debug = '['; + if (length > 0) { + debug += debugString(val[0]); + } + for(let i = 1; i < length; i++) { + debug += ', ' + debugString(val[i]); + } + debug += ']'; + return debug; + } + // Test for built-in + const builtInMatches = /\[object ([^\]]+)\]/.exec(toString.call(val)); + let className; + if (builtInMatches.length > 1) { + className = builtInMatches[1]; + } else { + // Failed to match the standard '[object ClassName]' + return toString.call(val); + } + if (className == 'Object') { + // we're a user defined class or Object + // JSON.stringify avoids problems with cycles, and is generally much + // easier than looping through ownProperties of `val`. + try { + return 'Object(' + JSON.stringify(val) + ')'; + } catch (_) { + return 'Object'; + } + } + // errors + if (val instanceof Error) { + return `${val.name}: ${val.message}\n${val.stack}`; + } + // TODO we could test for more things here, like `Set`s and `Map`s. + return className; +} +/** +* @param {string} code +* @returns {string} +*/ +export function parse_deno(code) { + let deferred2_0; + let deferred2_1; + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + const ptr0 = passStringToWasm0(code, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len0 = WASM_VECTOR_LEN; + wasm.parse_deno(retptr, ptr0, len0); + var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true); + var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true); + deferred2_0 = r0; + deferred2_1 = r1; + return getStringFromWasm0(r0, r1); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + wasm.__wbindgen_free(deferred2_0, deferred2_1, 1); + } +} + +/** +* @param {string} code +* @returns {string} +*/ +export function parse_outputs(code) { + let deferred2_0; + let deferred2_1; + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + const ptr0 = passStringToWasm0(code, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len0 = WASM_VECTOR_LEN; + wasm.parse_outputs(retptr, ptr0, len0); + var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true); + var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true); + deferred2_0 = r0; + deferred2_1 = r1; + return getStringFromWasm0(r0, r1); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + wasm.__wbindgen_free(deferred2_0, deferred2_1, 1); + } +} + +/** +* @param {string} code +* @returns {string} +*/ +export function parse_ts_imports(code) { + let deferred2_0; + let deferred2_1; + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + const ptr0 = passStringToWasm0(code, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len0 = WASM_VECTOR_LEN; + wasm.parse_ts_imports(retptr, ptr0, len0); + var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true); + var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true); + deferred2_0 = r0; + deferred2_1 = r1; + return getStringFromWasm0(r0, r1); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + wasm.__wbindgen_free(deferred2_0, deferred2_1, 1); + } +} + +/** +* @param {string} code +* @returns {string} +*/ +export function parse_bash(code) { + let deferred2_0; + let deferred2_1; + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + const ptr0 = passStringToWasm0(code, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len0 = WASM_VECTOR_LEN; + wasm.parse_bash(retptr, ptr0, len0); + var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true); + var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true); + deferred2_0 = r0; + deferred2_1 = r1; + return getStringFromWasm0(r0, r1); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + wasm.__wbindgen_free(deferred2_0, deferred2_1, 1); + } +} + +/** +* @param {string} code +* @returns {string} +*/ +export function parse_powershell(code) { + let deferred2_0; + let deferred2_1; + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + const ptr0 = passStringToWasm0(code, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len0 = WASM_VECTOR_LEN; + wasm.parse_powershell(retptr, ptr0, len0); + var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true); + var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true); + deferred2_0 = r0; + deferred2_1 = r1; + return getStringFromWasm0(r0, r1); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + wasm.__wbindgen_free(deferred2_0, deferred2_1, 1); + } +} + +/** +* @param {string} code +* @returns {string} +*/ +export function parse_go(code) { + let deferred2_0; + let deferred2_1; + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + const ptr0 = passStringToWasm0(code, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len0 = WASM_VECTOR_LEN; + wasm.parse_go(retptr, ptr0, len0); + var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true); + var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true); + deferred2_0 = r0; + deferred2_1 = r1; + return getStringFromWasm0(r0, r1); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + wasm.__wbindgen_free(deferred2_0, deferred2_1, 1); + } +} + +/** +* @param {string} code +* @returns {string} +*/ +export function parse_python(code) { + let deferred2_0; + let deferred2_1; + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + const ptr0 = passStringToWasm0(code, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len0 = WASM_VECTOR_LEN; + wasm.parse_python(retptr, ptr0, len0); + var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true); + var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true); + deferred2_0 = r0; + deferred2_1 = r1; + return getStringFromWasm0(r0, r1); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + wasm.__wbindgen_free(deferred2_0, deferred2_1, 1); + } +} + +/** +* @param {string} code +* @returns {string} +*/ +export function parse_sql(code) { + let deferred2_0; + let deferred2_1; + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + const ptr0 = passStringToWasm0(code, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len0 = WASM_VECTOR_LEN; + wasm.parse_sql(retptr, ptr0, len0); + var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true); + var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true); + deferred2_0 = r0; + deferred2_1 = r1; + return getStringFromWasm0(r0, r1); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + wasm.__wbindgen_free(deferred2_0, deferred2_1, 1); + } +} + +/** +* @param {string} code +* @returns {string} +*/ +export function parse_mysql(code) { + let deferred2_0; + let deferred2_1; + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + const ptr0 = passStringToWasm0(code, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len0 = WASM_VECTOR_LEN; + wasm.parse_mysql(retptr, ptr0, len0); + var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true); + var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true); + deferred2_0 = r0; + deferred2_1 = r1; + return getStringFromWasm0(r0, r1); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + wasm.__wbindgen_free(deferred2_0, deferred2_1, 1); + } +} + +/** +* @param {string} code +* @returns {string} +*/ +export function parse_bigquery(code) { + let deferred2_0; + let deferred2_1; + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + const ptr0 = passStringToWasm0(code, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len0 = WASM_VECTOR_LEN; + wasm.parse_bigquery(retptr, ptr0, len0); + var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true); + var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true); + deferred2_0 = r0; + deferred2_1 = r1; + return getStringFromWasm0(r0, r1); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + wasm.__wbindgen_free(deferred2_0, deferred2_1, 1); + } +} + +/** +* @param {string} code +* @returns {string} +*/ +export function parse_snowflake(code) { + let deferred2_0; + let deferred2_1; + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + const ptr0 = passStringToWasm0(code, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len0 = WASM_VECTOR_LEN; + wasm.parse_snowflake(retptr, ptr0, len0); + var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true); + var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true); + deferred2_0 = r0; + deferred2_1 = r1; + return getStringFromWasm0(r0, r1); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + wasm.__wbindgen_free(deferred2_0, deferred2_1, 1); + } +} + +/** +* @param {string} code +* @returns {string} +*/ +export function parse_mssql(code) { + let deferred2_0; + let deferred2_1; + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + const ptr0 = passStringToWasm0(code, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len0 = WASM_VECTOR_LEN; + wasm.parse_mssql(retptr, ptr0, len0); + var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true); + var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true); + deferred2_0 = r0; + deferred2_1 = r1; + return getStringFromWasm0(r0, r1); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + wasm.__wbindgen_free(deferred2_0, deferred2_1, 1); + } +} + +/** +* @param {string} code +* @returns {string | undefined} +*/ +export function parse_db_resource(code) { + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + const ptr0 = passStringToWasm0(code, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len0 = WASM_VECTOR_LEN; + wasm.parse_db_resource(retptr, ptr0, len0); + var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true); + var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true); + let v2; + if (r0 !== 0) { + v2 = getStringFromWasm0(r0, r1).slice(); + wasm.__wbindgen_free(r0, r1 * 1, 1); + } + return v2; + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + } +} + +/** +* @param {string} code +* @returns {string} +*/ +export function parse_graphql(code) { + let deferred2_0; + let deferred2_1; + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + const ptr0 = passStringToWasm0(code, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len0 = WASM_VECTOR_LEN; + wasm.parse_graphql(retptr, ptr0, len0); + var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true); + var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true); + deferred2_0 = r0; + deferred2_1 = r1; + return getStringFromWasm0(r0, r1); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + wasm.__wbindgen_free(deferred2_0, deferred2_1, 1); + } +} + +/** +* @param {string} code +* @returns {string} +*/ +export function parse_php(code) { + let deferred2_0; + let deferred2_1; + try { + const retptr = wasm.__wbindgen_add_to_stack_pointer(-16); + const ptr0 = passStringToWasm0(code, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len0 = WASM_VECTOR_LEN; + wasm.parse_php(retptr, ptr0, len0); + var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true); + var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true); + deferred2_0 = r0; + deferred2_1 = r1; + return getStringFromWasm0(r0, r1); + } finally { + wasm.__wbindgen_add_to_stack_pointer(16); + wasm.__wbindgen_free(deferred2_0, deferred2_1, 1); + } +} + +function handleError(f, args) { + try { + return f.apply(this, args); + } catch (e) { + wasm.__wbindgen_exn_store(addHeapObject(e)); + } +} + +async function __wbg_load(module, imports) { + if (typeof Response === 'function' && module instanceof Response) { + if (typeof WebAssembly.instantiateStreaming === 'function') { + try { + return await WebAssembly.instantiateStreaming(module, imports); + + } catch (e) { + if (module.headers.get('Content-Type') != 'application/wasm') { + console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n", e); + + } else { + throw e; + } + } + } + + const bytes = await module.arrayBuffer(); + return await WebAssembly.instantiate(bytes, imports); + + } else { + const instance = await WebAssembly.instantiate(module, imports); + + if (instance instanceof WebAssembly.Instance) { + return { instance, module }; + + } else { + return instance; + } + } +} + +function __wbg_get_imports() { + const imports = {}; + imports.wbg = {}; + imports.wbg.__wbg_eval_204ec87eadeaef4a = function(arg0, arg1) { + const ret = eval(getStringFromWasm0(arg0, arg1)); + return addHeapObject(ret); + }; + imports.wbg.__wbindgen_object_drop_ref = function(arg0) { + takeObject(arg0); + }; + imports.wbg.__wbindgen_string_get = function(arg0, arg1) { + const obj = getObject(arg1); + const ret = typeof(obj) === 'string' ? obj : undefined; + var ptr1 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + var len1 = WASM_VECTOR_LEN; + getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true); + getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true); + }; + imports.wbg.__wbindgen_boolean_get = function(arg0) { + const v = getObject(arg0); + const ret = typeof(v) === 'boolean' ? (v ? 1 : 0) : 2; + return ret; + }; + imports.wbg.__wbindgen_is_bigint = function(arg0) { + const ret = typeof(getObject(arg0)) === 'bigint'; + return ret; + }; + imports.wbg.__wbindgen_number_get = function(arg0, arg1) { + const obj = getObject(arg1); + const ret = typeof(obj) === 'number' ? obj : undefined; + getDataViewMemory0().setFloat64(arg0 + 8 * 1, isLikeNone(ret) ? 0 : ret, true); + getDataViewMemory0().setInt32(arg0 + 4 * 0, !isLikeNone(ret), true); + }; + imports.wbg.__wbindgen_is_object = function(arg0) { + const val = getObject(arg0); + const ret = typeof(val) === 'object' && val !== null; + return ret; + }; + imports.wbg.__wbindgen_in = function(arg0, arg1) { + const ret = getObject(arg0) in getObject(arg1); + return ret; + }; + imports.wbg.__wbindgen_bigint_from_i64 = function(arg0) { + const ret = arg0; + return addHeapObject(ret); + }; + imports.wbg.__wbindgen_jsval_eq = function(arg0, arg1) { + const ret = getObject(arg0) === getObject(arg1); + return ret; + }; + imports.wbg.__wbindgen_bigint_from_u64 = function(arg0) { + const ret = BigInt.asUintN(64, arg0); + return addHeapObject(ret); + }; + imports.wbg.__wbindgen_error_new = function(arg0, arg1) { + const ret = new Error(getStringFromWasm0(arg0, arg1)); + return addHeapObject(ret); + }; + imports.wbg.__wbindgen_jsval_loose_eq = function(arg0, arg1) { + const ret = getObject(arg0) == getObject(arg1); + return ret; + }; + imports.wbg.__wbg_get_3baa728f9d58d3f6 = function(arg0, arg1) { + const ret = getObject(arg0)[arg1 >>> 0]; + return addHeapObject(ret); + }; + imports.wbg.__wbg_length_ae22078168b726f5 = function(arg0) { + const ret = getObject(arg0).length; + return ret; + }; + imports.wbg.__wbindgen_is_function = function(arg0) { + const ret = typeof(getObject(arg0)) === 'function'; + return ret; + }; + imports.wbg.__wbg_next_de3e9db4440638b2 = function(arg0) { + const ret = getObject(arg0).next; + return addHeapObject(ret); + }; + imports.wbg.__wbg_next_f9cb570345655b9a = function() { return handleError(function (arg0) { + const ret = getObject(arg0).next(); + return addHeapObject(ret); + }, arguments) }; + imports.wbg.__wbg_done_bfda7aa8f252b39f = function(arg0) { + const ret = getObject(arg0).done; + return ret; + }; + imports.wbg.__wbg_value_6d39332ab4788d86 = function(arg0) { + const ret = getObject(arg0).value; + return addHeapObject(ret); + }; + imports.wbg.__wbg_iterator_888179a48810a9fe = function() { + const ret = Symbol.iterator; + return addHeapObject(ret); + }; + imports.wbg.__wbg_get_224d16597dbbfd96 = function() { return handleError(function (arg0, arg1) { + const ret = Reflect.get(getObject(arg0), getObject(arg1)); + return addHeapObject(ret); + }, arguments) }; + imports.wbg.__wbg_call_1084a111329e68ce = function() { return handleError(function (arg0, arg1) { + const ret = getObject(arg0).call(getObject(arg1)); + return addHeapObject(ret); + }, arguments) }; + imports.wbg.__wbg_isArray_8364a5371e9737d8 = function(arg0) { + const ret = Array.isArray(getObject(arg0)); + return ret; + }; + imports.wbg.__wbg_instanceof_ArrayBuffer_61dfc3198373c902 = function(arg0) { + let result; + try { + result = getObject(arg0) instanceof ArrayBuffer; + } catch (_) { + result = false; + } + const ret = result; + return ret; + }; + imports.wbg.__wbg_instanceof_Map_763ce0e95960d55e = function(arg0) { + let result; + try { + result = getObject(arg0) instanceof Map; + } catch (_) { + result = false; + } + const ret = result; + return ret; + }; + imports.wbg.__wbg_isSafeInteger_7f1ed56200d90674 = function(arg0) { + const ret = Number.isSafeInteger(getObject(arg0)); + return ret; + }; + imports.wbg.__wbg_entries_7a0e06255456ebcd = function(arg0) { + const ret = Object.entries(getObject(arg0)); + return addHeapObject(ret); + }; + imports.wbg.__wbg_buffer_b7b08af79b0b0974 = function(arg0) { + const ret = getObject(arg0).buffer; + return addHeapObject(ret); + }; + imports.wbg.__wbg_new_ea1883e1e5e86686 = function(arg0) { + const ret = new Uint8Array(getObject(arg0)); + return addHeapObject(ret); + }; + imports.wbg.__wbg_set_d1e79e2388520f18 = function(arg0, arg1, arg2) { + getObject(arg0).set(getObject(arg1), arg2 >>> 0); + }; + imports.wbg.__wbg_length_8339fcf5d8ecd12e = function(arg0) { + const ret = getObject(arg0).length; + return ret; + }; + imports.wbg.__wbg_instanceof_Uint8Array_247a91427532499e = function(arg0) { + let result; + try { + result = getObject(arg0) instanceof Uint8Array; + } catch (_) { + result = false; + } + const ret = result; + return ret; + }; + imports.wbg.__wbindgen_bigint_get_as_i64 = function(arg0, arg1) { + const v = getObject(arg1); + const ret = typeof(v) === 'bigint' ? v : undefined; + getDataViewMemory0().setBigInt64(arg0 + 8 * 1, isLikeNone(ret) ? BigInt(0) : ret, true); + getDataViewMemory0().setInt32(arg0 + 4 * 0, !isLikeNone(ret), true); + }; + imports.wbg.__wbindgen_debug_string = function(arg0, arg1) { + const ret = debugString(getObject(arg1)); + const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc); + const len1 = WASM_VECTOR_LEN; + getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true); + getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true); + }; + imports.wbg.__wbindgen_throw = function(arg0, arg1) { + throw new Error(getStringFromWasm0(arg0, arg1)); + }; + imports.wbg.__wbindgen_memory = function() { + const ret = wasm.memory; + return addHeapObject(ret); + }; + + return imports; +} + +function __wbg_init_memory(imports, memory) { + +} + +function __wbg_finalize_init(instance, module) { + wasm = instance.exports; + __wbg_init.__wbindgen_wasm_module = module; + cachedDataViewMemory0 = null; + cachedUint8ArrayMemory0 = null; + + + + return wasm; +} + +function initSync(module) { + if (wasm !== undefined) return wasm; + + + if (typeof module !== 'undefined' && Object.getPrototypeOf(module) === Object.prototype) + ({module} = module) + else + console.warn('using deprecated parameters for `initSync()`; pass a single object instead') + + const imports = __wbg_get_imports(); + + __wbg_init_memory(imports); + + if (!(module instanceof WebAssembly.Module)) { + module = new WebAssembly.Module(module); + } + + const instance = new WebAssembly.Instance(module, imports); + + return __wbg_finalize_init(instance, module); +} + +async function __wbg_init(module_or_path) { + if (wasm !== undefined) return wasm; + + + if (typeof module_or_path !== 'undefined' && Object.getPrototypeOf(module_or_path) === Object.prototype) + ({module_or_path} = module_or_path) + else + console.warn('using deprecated parameters for the initialization function; pass a single object instead') + + if (typeof module_or_path === 'undefined') { + module_or_path = new URL('windmill_parser_wasm_bg.wasm', import.meta.url); + } + const imports = __wbg_get_imports(); + + if (typeof module_or_path === 'string' || (typeof Request === 'function' && module_or_path instanceof Request) || (typeof URL === 'function' && module_or_path instanceof URL)) { + module_or_path = fetch(module_or_path); + } + + __wbg_init_memory(imports); + + const { instance, module } = await __wbg_load(await module_or_path, imports); + + return __wbg_finalize_init(instance, module); +} + +export { initSync }; +export default __wbg_init; diff --git a/backend/parsers/windmill-parser-wasm/pkg/windmill_parser_wasm_bg.wasm b/backend/parsers/windmill-parser-wasm/pkg/windmill_parser_wasm_bg.wasm new file mode 100644 index 0000000000000..501033c5651f3 Binary files /dev/null and b/backend/parsers/windmill-parser-wasm/pkg/windmill_parser_wasm_bg.wasm differ diff --git a/backend/parsers/windmill-parser-wasm/pkg/windmill_parser_wasm_bg.wasm.d.ts b/backend/parsers/windmill-parser-wasm/pkg/windmill_parser_wasm_bg.wasm.d.ts new file mode 100644 index 0000000000000..5e6938f8739a1 --- /dev/null +++ b/backend/parsers/windmill-parser-wasm/pkg/windmill_parser_wasm_bg.wasm.d.ts @@ -0,0 +1,24 @@ +/* tslint:disable */ +/* eslint-disable */ +export const memory: WebAssembly.Memory; +export function parse_deno(a: number, b: number, c: number): void; +export function parse_outputs(a: number, b: number, c: number): void; +export function parse_ts_imports(a: number, b: number, c: number): void; +export function parse_bash(a: number, b: number, c: number): void; +export function parse_powershell(a: number, b: number, c: number): void; +export function parse_go(a: number, b: number, c: number): void; +export function parse_python(a: number, b: number, c: number): void; +export function parse_sql(a: number, b: number, c: number): void; +export function parse_mysql(a: number, b: number, c: number): void; +export function parse_bigquery(a: number, b: number, c: number): void; +export function parse_snowflake(a: number, b: number, c: number): void; +export function parse_mssql(a: number, b: number, c: number): void; +export function parse_db_resource(a: number, b: number, c: number): void; +export function parse_graphql(a: number, b: number, c: number): void; +export function parse_php(a: number, b: number, c: number): void; +export function parse_rust(a: number, b: number, c: number): void; +export function __wbindgen_malloc(a: number, b: number): number; +export function __wbindgen_realloc(a: number, b: number, c: number, d: number): number; +export function __wbindgen_add_to_stack_pointer(a: number): number; +export function __wbindgen_free(a: number, b: number, c: number): void; +export function __wbindgen_exn_store(a: number): void; diff --git a/backend/parsers/windmill-parser-wasm/publish-pkgs.sh b/backend/parsers/windmill-parser-wasm/publish-pkgs.sh new file mode 100755 index 0000000000000..c2f2c0d7ad960 --- /dev/null +++ b/backend/parsers/windmill-parser-wasm/publish-pkgs.sh @@ -0,0 +1,26 @@ +#!/bin/bash +set -eou pipefail +cd "$(dirname "${BASH_SOURCE[0]}")" + +args=${1:-} + +pushd "pkg-ts" && npm publish ${args} +popd + +pushd "pkg-regex" && npm publish ${args} +popd + +pushd "pkg-py" && npm publish ${args} +popd + +pushd "pkg-go" && npm publish ${args} +popd + +pushd "pkg-php" && npm publish ${args} +popd + +pushd "pkg-rust" && npm publish ${args} +popd + +pushd "pkg-yaml" && npm publish ${args} +popd diff --git a/backend/parsers/windmill-parser-wasm/src/lib.rs b/backend/parsers/windmill-parser-wasm/src/lib.rs new file mode 100644 index 0000000000000..a5dd03ad918b4 --- /dev/null +++ b/backend/parsers/windmill-parser-wasm/src/lib.rs @@ -0,0 +1,137 @@ +#[cfg(feature = "ts-parser")] +use serde_json::json; +#[allow(unused_imports)] +use wasm_bindgen::prelude::*; +use windmill_parser::MainArgSignature; +#[cfg(feature = "ts-parser")] +use windmill_parser_ts::{parse_expr_for_ids, parse_expr_for_imports}; + +#[allow(dead_code)] +fn wrap_sig(r: anyhow::Result) -> String { + if let Ok(r) = r { + return serde_json::to_string(&r).unwrap(); + } else { + return "{\"type\": \"Invalid\"}".to_string(); + } +} + +#[cfg(feature = "ts-parser")] +#[wasm_bindgen] +pub fn parse_deno(code: &str, main_override: Option) -> String { + wrap_sig(windmill_parser_ts::parse_deno_signature( + code, + false, + main_override, + )) +} + +#[cfg(feature = "ts-parser")] +#[wasm_bindgen] +pub fn parse_outputs(code: &str) -> String { + let parsed = parse_expr_for_ids(code); + let r = if let Ok(parsed) = parsed { + json!({ "outputs": parsed }) + } else { + json!({"error": parsed.err().unwrap().to_string()}) + }; + return serde_json::to_string(&r).unwrap(); +} + +#[cfg(feature = "ts-parser")] +#[wasm_bindgen] +pub fn parse_ts_imports(code: &str) -> String { + let parsed = parse_expr_for_imports(code); + let r = if let Ok(parsed) = parsed { + json!({ "imports": parsed }) + } else { + json!({"error": parsed.err().unwrap().to_string()}) + }; + return serde_json::to_string(&r).unwrap(); +} + +#[cfg(feature = "bash-parser")] +#[wasm_bindgen] +pub fn parse_bash(code: &str) -> String { + wrap_sig(windmill_parser_bash::parse_bash_sig(code)) +} + +#[cfg(feature = "bash-parser")] +#[wasm_bindgen] +pub fn parse_powershell(code: &str) -> String { + wrap_sig(windmill_parser_bash::parse_powershell_sig(code)) +} + +#[cfg(feature = "go-parser")] +#[wasm_bindgen] +pub fn parse_go(code: &str) -> String { + wrap_sig(windmill_parser_go::parse_go_sig(code)) +} + +#[cfg(feature = "py-parser")] +#[wasm_bindgen] +pub fn parse_python(code: &str, main_override: Option) -> String { + wrap_sig(windmill_parser_py::parse_python_signature( + code, + main_override, + )) +} + +#[cfg(feature = "sql-parser")] +#[wasm_bindgen] +pub fn parse_sql(code: &str) -> String { + wrap_sig(windmill_parser_sql::parse_pgsql_sig(code)) +} + +#[cfg(feature = "sql-parser")] +#[wasm_bindgen] +pub fn parse_mysql(code: &str) -> String { + wrap_sig(windmill_parser_sql::parse_mysql_sig(code)) +} + +#[cfg(feature = "sql-parser")] +#[wasm_bindgen] +pub fn parse_bigquery(code: &str) -> String { + wrap_sig(windmill_parser_sql::parse_bigquery_sig(code)) +} + +#[cfg(feature = "sql-parser")] +#[wasm_bindgen] +pub fn parse_snowflake(code: &str) -> String { + wrap_sig(windmill_parser_sql::parse_snowflake_sig(code)) +} + +#[cfg(feature = "sql-parser")] +#[wasm_bindgen] +pub fn parse_mssql(code: &str) -> String { + wrap_sig(windmill_parser_sql::parse_mssql_sig(code)) +} + +#[cfg(feature = "sql-parser")] +#[wasm_bindgen] +pub fn parse_db_resource(code: &str) -> Option { + windmill_parser_sql::parse_db_resource(code) +} + +#[cfg(feature = "graphql-parser")] +#[wasm_bindgen] +pub fn parse_graphql(code: &str) -> String { + wrap_sig(windmill_parser_graphql::parse_graphql_sig(code)) +} + +#[cfg(feature = "php-parser")] +#[wasm_bindgen] +pub fn parse_php(code: &str) -> String { + wrap_sig(windmill_parser_php::parse_php_signature(code, None)) +} + +#[cfg(feature = "rust-parser")] +#[wasm_bindgen] +pub fn parse_rust(code: &str) -> String { + wrap_sig(windmill_parser_rust::parse_rust_signature(code)) +} + +#[cfg(feature = "ansible-parser")] +#[wasm_bindgen] +pub fn parse_ansible(code: &str) -> String { + wrap_sig(windmill_parser_yaml::parse_ansible_sig(code)) +} diff --git a/backend/parsers/windmill-parser-wasm/tests/wasm.rs b/backend/parsers/windmill-parser-wasm/tests/wasm.rs new file mode 100644 index 0000000000000..1c201ecd4eedf --- /dev/null +++ b/backend/parsers/windmill-parser-wasm/tests/wasm.rs @@ -0,0 +1,446 @@ +use serde_json::json; +use wasm_bindgen_test::wasm_bindgen_test; +use windmill_parser::{Arg, MainArgSignature, ObjectProperty, Typ}; +use windmill_parser_bash::parse_powershell_sig; +use windmill_parser_ts::{parse_deno_signature, parse_expr_for_ids, parse_expr_for_imports}; + +#[wasm_bindgen_test] +fn test_parse_deno_sig() -> anyhow::Result<()> { + let code = " +export function main(test1?: string, test2: string = \"burkina\", + test3: wmill.Resource<'postgres'>, b64: Base64, ls: Base64[], + email: Email, literal: \"test\", literal_union: \"test\" | \"test2\", + opt_type?: string | null, opt_type_union: string | null, opt_type_union_union2: string | undefined, + min_object: {a: string, b: number}, + literals_with_undefined: \"foo\" | \"bar\" | undefined, + dyn_select: DynSelect_foo) { + console.log(42) +} +"; + assert_eq!( + parse_deno_signature(code, false, None)?, + MainArgSignature { + star_args: false, + star_kwargs: false, + args: vec![ + Arg { + otyp: None, + name: "test1".to_string(), + typ: Typ::Str(None), + default: None, + has_default: true, + oidx: None + }, + Arg { + otyp: None, + name: "test2".to_string(), + typ: Typ::Str(None), + default: Some(json!("burkina")), + has_default: true, + oidx: None + }, + Arg { + otyp: None, + name: "test3".to_string(), + typ: Typ::Resource("postgres".to_string()), + default: None, + has_default: false, + oidx: None + }, + Arg { + otyp: None, + name: "b64".to_string(), + typ: Typ::Bytes, + default: None, + has_default: false, + oidx: None + }, + Arg { + otyp: None, + name: "ls".to_string(), + typ: Typ::List(Box::new(Typ::Bytes)), + default: None, + has_default: false, + oidx: None + }, + Arg { + otyp: None, + name: "email".to_string(), + typ: Typ::Email, + default: None, + has_default: false, + oidx: None + }, + Arg { + otyp: None, + name: "literal".to_string(), + typ: Typ::Str(Some(vec!["test".to_string()])), + default: None, + has_default: false, + oidx: None + }, + Arg { + otyp: None, + name: "literal_union".to_string(), + typ: Typ::Str(Some(vec!["test".to_string(), "test2".to_string()])), + default: None, + has_default: false, + oidx: None + }, + Arg { + otyp: None, + name: "opt_type".to_string(), + typ: Typ::Str(None), + default: None, + has_default: true, + oidx: None + }, + Arg { + otyp: None, + name: "opt_type_union".to_string(), + typ: Typ::Str(None), + default: None, + has_default: true, + oidx: None + }, + Arg { + otyp: None, + name: "opt_type_union_union2".to_string(), + typ: Typ::Str(None), + default: None, + has_default: true, + oidx: None + }, + Arg { + otyp: None, + name: "min_object".to_string(), + typ: Typ::Object(vec![ + ObjectProperty { key: "a".to_string(), typ: Box::new(Typ::Str(None)) }, + ObjectProperty { key: "b".to_string(), typ: Box::new(Typ::Float) } + ]), + default: None, + has_default: false, + oidx: None + }, + Arg { + otyp: None, + name: "literals_with_undefined".to_string(), + typ: Typ::Str(Some(vec!["foo".to_string(), "bar".to_string()])), + default: None, + has_default: true, + oidx: None + }, + Arg { + otyp: None, + name: "dyn_select".to_string(), + typ: Typ::DynSelect("foo".to_string()), + default: None, + has_default: false, + oidx: None + } + ], + no_main_func: Some(false), + has_preprocessor: Some(false) + } + ); + + Ok(()) +} +#[wasm_bindgen_test] +fn test_parse_deno_sig_implicit_types() -> anyhow::Result<()> { + let code = " +export function main(test2 = \"burkina\", + bool = true, + float = 4.2, + int = 42, + ls = [\"test\"], + min_object = {a: \"test\", b: 42}) { + console.log(42) +} +"; + assert_eq!( + parse_deno_signature(code, false, None)?, + MainArgSignature { + star_args: false, + star_kwargs: false, + args: vec![ + Arg { + otyp: None, + name: "test2".to_string(), + typ: Typ::Str(None), + default: Some(json!("burkina")), + has_default: true, + oidx: None + }, + Arg { + otyp: None, + name: "bool".to_string(), + typ: Typ::Bool, + default: Some(json!(true)), + has_default: true, + oidx: None + }, + Arg { + otyp: None, + name: "float".to_string(), + typ: Typ::Float, + default: Some(json!(4.2)), + has_default: true, + oidx: None + }, + Arg { + otyp: None, + name: "int".to_string(), + typ: Typ::Int, + default: Some(json!(42)), + has_default: true, + oidx: None + }, + Arg { + otyp: None, + name: "ls".to_string(), + typ: Typ::List(Box::new(Typ::Str(None))), + default: Some(json!(["test"])), + has_default: true, + oidx: None + }, + Arg { + otyp: None, + name: "min_object".to_string(), + typ: Typ::Object(vec![ + ObjectProperty { key: "a".to_string(), typ: Box::new(Typ::Str(None)) }, + ObjectProperty { key: "b".to_string(), typ: Box::new(Typ::Int) } + ]), + default: Some(json!({"a": "test", "b": 42})), + has_default: true, + oidx: None + } + ], + no_main_func: Some(false), + has_preprocessor: Some(false) + } + ); + + Ok(()) +} + +#[wasm_bindgen_test] +fn test_parse_deno_types() -> anyhow::Result<()> { + let code = " +type FooBar = { + a: string, + b: number, +} +export function main(foo: FooBar, {a, b}: FooBar, {c, d}: FooBar = {a: \"foo\", b: 42}) { + +} +"; + assert_eq!( + parse_deno_signature(code, false, None)?, + MainArgSignature { + star_args: false, + star_kwargs: false, + args: vec![ + Arg { + name: "foo".to_string(), + otyp: None, + typ: Typ::Resource("foo_bar".to_string()), + default: None, + has_default: false, + oidx: None + }, + Arg { + name: "anon1".to_string(), + otyp: None, + typ: Typ::Resource("foo_bar".to_string()), + default: None, + has_default: false, + oidx: None + }, + Arg { + name: "anon2".to_string(), + otyp: None, + typ: Typ::Resource("foo_bar".to_string()), + default: Some(json!({"a": "foo", "b": 42})), + has_default: true, + oidx: None + } + ], + no_main_func: Some(false), + has_preprocessor: Some(false) + } + ); + + Ok(()) +} + +#[wasm_bindgen_test] +fn test_parse_enum_list() -> anyhow::Result<()> { + let code = " +export function main(foo: (\"foo\" | \"bar\")[]) { + +} +"; + assert_eq!( + parse_deno_signature(code, false, None)?, + MainArgSignature { + star_args: false, + star_kwargs: false, + args: vec![Arg { + name: "foo".to_string(), + otyp: None, + typ: Typ::List(Box::new(Typ::Str(Some(vec![ + "foo".to_string(), + "bar".to_string() + ])))), + default: None, + has_default: false, + oidx: None + }], + no_main_func: Some(false), + has_preprocessor: Some(false) + } + ); + + Ok(()) +} + +#[wasm_bindgen_test] +fn test_parse_extract_ident() -> anyhow::Result<()> { + let code = " + let foo = 3; + bar + baroof.foob.ar + foobar[barfoo.x] +"; + assert_eq!( + parse_expr_for_ids(code)?, + vec![ + ("baroof".to_string(), "foob".to_string()), + ("barfoo".to_string(), "x".to_string()) + ] + ); + + Ok(()) +} + +#[wasm_bindgen_test] +fn test_parse_imports() -> anyhow::Result<()> { + let code = " + import * as foo from '@foo/bar'; + import { bar } from \"./bar\"; + import { bar } from \"bar/foo/d\"; + import { bar as baroof } from \"bar\"; +"; + let mut l = parse_expr_for_imports(code)?; + l.sort(); + assert_eq!( + l, + vec![ + "./bar".to_string(), + "@foo/bar".to_string(), + "bar".to_string(), + "bar/foo/d".to_string() + ] + ); + + Ok(()) +} + +#[wasm_bindgen_test] +fn test_parse_imports_dts() -> anyhow::Result<()> { + let code = " +export type foo = number +"; + let mut l = parse_expr_for_imports(code)?; + l.sort(); + assert_eq!(l, vec![] as Vec); + + Ok(()) +} + +#[wasm_bindgen_test] +fn test_parse_powershell_sig() -> anyhow::Result<()> { + let code = " +param($test_none, [string]$test_string [int]$test_int, [decimal]$test_decimal, [double]$test_double, [single]$test_single, [datetime]$test_datetime_lower, [DateTime]$test_datetime_upper) + +Write-Output 'Testing...' +"; + assert_eq!( + parse_powershell_sig(code)?, + MainArgSignature { + star_args: false, + star_kwargs: false, + args: vec![ + Arg { + otyp: None, + name: "test_none".to_string(), + typ: Typ::Str(None), + default: None, + has_default: false, + oidx: None + }, + Arg { + otyp: None, + name: "test_string".to_string(), + typ: Typ::Str(None), + default: None, + has_default: false, + oidx: None + }, + Arg { + otyp: None, + name: "test_int".to_string(), + typ: Typ::Int, + default: None, + has_default: false, + oidx: None + }, + Arg { + otyp: None, + name: "test_decimal".to_string(), + typ: Typ::Float, + default: None, + has_default: false, + oidx: None + }, + Arg { + otyp: None, + name: "test_double".to_string(), + typ: Typ::Float, + default: None, + has_default: false, + oidx: None + }, + Arg { + otyp: None, + name: "test_single".to_string(), + typ: Typ::Float, + default: None, + has_default: false, + oidx: None + }, + Arg { + otyp: None, + name: "test_datetime_lower".to_string(), + typ: Typ::Datetime, + default: None, + has_default: false, + oidx: None + }, + Arg { + otyp: None, + name: "test_datetime_upper".to_string(), + typ: Typ::Datetime, + default: None, + has_default: false, + oidx: None + } + ], + no_main_func: None, + has_preprocessor: None + } + ); + + Ok(()) +} diff --git a/backend/parsers/windmill-parser-yaml/Cargo.toml b/backend/parsers/windmill-parser-yaml/Cargo.toml new file mode 100644 index 0000000000000..9bcfbea7a7d45 --- /dev/null +++ b/backend/parsers/windmill-parser-yaml/Cargo.toml @@ -0,0 +1,15 @@ +[package] +name = "windmill-parser-yaml" +version.workspace = true +authors.workspace = true +edition.workspace = true + +[lib] +name = "windmill_parser_yaml" +path = "./src/lib.rs" + +[dependencies] +yaml-rust.workspace = true +windmill-parser.workspace = true +anyhow.workspace = true +serde_json.workspace = true diff --git a/backend/parsers/windmill-parser-yaml/src/lib.rs b/backend/parsers/windmill-parser-yaml/src/lib.rs new file mode 100644 index 0000000000000..151d6eb562c01 --- /dev/null +++ b/backend/parsers/windmill-parser-yaml/src/lib.rs @@ -0,0 +1,482 @@ +use anyhow::anyhow; +use serde_json::json; +use windmill_parser::{Arg, MainArgSignature, ObjectProperty, Typ}; +use yaml_rust::{Yaml, YamlEmitter, YamlLoader}; + +pub fn parse_ansible_sig(inner_content: &str) -> anyhow::Result { + let docs = YamlLoader::load_from_str(inner_content) + .map_err(|e| anyhow!("Failed to parse yaml: {}", e))?; + + if docs.len() < 2 { + return Ok(MainArgSignature { + star_args: false, + star_kwargs: false, + args: vec![], + no_main_func: None, + has_preprocessor: None, + }); + } + + let mut args = vec![]; + if let Yaml::Hash(doc) = &docs[0] { + for (key, value) in doc { + match key { + Yaml::String(key) if key == "extra_vars" => { + if let Yaml::Hash(v) = &value { + for (key, arg) in v { + if let Yaml::String(arg_name) = key { + // if not then it is a static resource or var, so skip + // it will be fetched by the worker + if let ArgTyp::Typ(typ) = parse_ansible_arg_typ(arg) { + let default = get_default_for_typ(&arg); + args.push(Arg { + name: arg_name.to_string(), + otyp: None, + typ, + has_default: default.is_some(), + default, + oidx: None, + }) + } + } + } + } + } + Yaml::String(key) if key == "inventory" => { + for inv in parse_inventories(value)? { + if inv.pinned_resource.is_some() { + continue; + } + args.push(Arg { + name: inv.name, + otyp: None, + typ: Typ::Resource(inv.resource_type.unwrap_or("Unknown".to_string())), + has_default: inv.default.is_some(), + default: inv.default.map(|v| json!(format!("$res:{}", v))), + oidx: None, + }) + } + } + _ => (), + } + } + } + Ok(MainArgSignature { + star_args: false, + star_kwargs: false, + args, + no_main_func: None, + has_preprocessor: None, + }) +} + +fn get_default_for_typ(arg: &Yaml) -> Option { + if let Yaml::Hash(arg) = arg { + if let Some(def) = arg.get(&Yaml::String("default".to_string())) { + if let Some(Yaml::String(typ)) = arg.get(&Yaml::String("type".to_string())) { + if let Yaml::String(path) = def { + if typ.as_str() == "windmill_resource" { + return Some(serde_json::Value::String(format!("$res:{}", path))); + } + } + } + return Some(yaml_to_json(def)); + } + } + None +} + +enum ArgTyp { + Typ(Typ), + StaticVar(String), + StaticResource(String), +} + +fn parse_ansible_arg_typ(arg: &Yaml) -> ArgTyp { + if let Yaml::Hash(a) = arg { + if let Some(Yaml::String(typ)) = a.get(&Yaml::String("type".to_string())) { + if typ.as_str() == "windmill_variable" { + if let Some(Yaml::String(variable_path)) = + a.get(&Yaml::String("variable".to_string())) + { + return ArgTyp::StaticVar(variable_path.to_string()); + } + } + if typ.as_str() == "windmill_resource" { + if let Some(Yaml::String(resource_path)) = + a.get(&Yaml::String("resource".to_string())) + { + return ArgTyp::StaticResource(resource_path.to_string()); + } + } + } + } + ArgTyp::Typ(parse_ansible_typ(arg)) +} + +fn parse_ansible_typ(arg: &Yaml) -> Typ { + if let Yaml::Hash(arg) = arg { + if let Some(Yaml::String(typ)) = arg.get(&Yaml::String("type".to_string())) { + match typ.as_ref() { + "boolean" => Typ::Bool, + "integer" => Typ::Int, + "number" => Typ::Float, + "string" => { + if let Some(Yaml::String(fmt)) = arg.get(&Yaml::String("format".to_string())) { + match fmt.as_ref() { + "date-time" | "datetime" => Typ::Datetime, + "email" => Typ::Email, + _ => Typ::Str(None), + } + } else { + Typ::Str(None) + } + } + "object" => { + if let Some(Yaml::Hash(props)) = + arg.get(&Yaml::String("properties".to_string())) + { + let mut prop_vec = vec![]; + for (key, value) in props { + if let Yaml::String(key) = key { + prop_vec.push(ObjectProperty { + key: key.clone(), + typ: Box::new(parse_ansible_typ(value)), + }) + } + } + Typ::Object(prop_vec) + } else { + Typ::Object(vec![]) + } + } + "array" => { + if let Some(items) = arg.get(&Yaml::String("items".to_string())) { + Typ::List(Box::new(parse_ansible_typ(items))) + } else { + Typ::List(Box::new(Typ::Unknown)) + } + } + "windmill_resource" => { + if let Some(Yaml::String(res_name)) = + arg.get(&Yaml::String("resource_type".to_string())) + { + Typ::Resource(res_name.clone()) + } else { + Typ::Resource("".to_string()) + } + } + _ => Typ::Unknown, + } + } else { + Typ::Unknown + } + } else { + Typ::Unknown + } +} + +#[derive(Debug, Clone)] +pub struct AnsiblePlaybookOptions { + // There are a lot more options + // TODO: Add the options as customers require them + // Add it here and then on the executors cmd_options + pub verbosity: Option, + pub forks: Option, + pub timeout: Option, + pub flush_cache: Option<()>, + pub force_handlers: Option<()>, +} + +#[derive(Debug, Clone)] +pub struct FileResource { + pub resource_path: String, + pub target_path: String, +} + +#[derive(Debug, Clone)] +pub struct AnsibleInventory { + pub default: Option, + pub name: String, + resource_type: Option, + pub pinned_resource: Option, +} +#[derive(Debug, Clone)] +pub struct AnsibleRequirements { + pub python_reqs: Vec, + pub collections: Option, + pub file_resources: Vec, + pub inventories: Vec, + pub vars: Vec<(String, String)>, + pub resources: Vec<(String, String)>, + pub options: AnsiblePlaybookOptions, +} + +fn parse_inventories(inventory_yaml: &Yaml) -> anyhow::Result> { + if let Yaml::Array(arr) = inventory_yaml { + let mut ret = vec![]; + for (i, inv) in arr.iter().enumerate() { + if let Yaml::Hash(inv) = inv { + let resource_type = inv + .get(&Yaml::String("resource_type".to_string())) + .and_then(|v| v.as_str()) + .map(|s| s.to_string()); + + let windmill_path = inv + .get(&Yaml::String("default".to_string())) + .and_then(|v| v.as_str()) + .map(|s| s.to_string()); + + let name = if i == 0 { + "inventory.ini".to_string() + } else { + format!("inventory-{}.ini", i) + }; + + let name = inv + .get(&Yaml::String("name".to_string())) + .and_then(|v| v.as_str()) + .unwrap_or(name.as_str()) + .to_string(); + + let pin = inv + .get(&Yaml::String("resource".to_string())) + .and_then(|v| v.as_str()) + .map(|s| s.to_string()); + + ret.push(AnsibleInventory { + default: windmill_path, + name, + resource_type, + pinned_resource: pin, + }); + } + } + return Ok(ret); + } + return Err(anyhow!("Invalid inventory definition")); +} + +pub fn parse_ansible_reqs( + inner_content: &str, +) -> anyhow::Result<(String, Option, String)> { + let mut logs = String::new(); + let docs = YamlLoader::load_from_str(inner_content) + .map_err(|e| anyhow!("Failed to parse yaml: {}", e))?; + + if docs.len() < 2 { + return Ok((logs, None, inner_content.to_string())); + } + + let opts = AnsiblePlaybookOptions { + verbosity: None, + forks: None, + timeout: None, + flush_cache: None, + force_handlers: None, + }; + let mut ret = AnsibleRequirements { + python_reqs: vec![], + collections: None, + file_resources: vec![], + inventories: vec![], + vars: vec![], + resources: vec![], + options: opts, + }; + + if let Yaml::Hash(doc) = &docs[0] { + for (key, value) in doc { + match key { + Yaml::String(key) if key == "dependencies" => { + if let Yaml::Hash(deps) = value { + if let Some(galaxy_requirements) = + deps.get(&Yaml::String("galaxy".to_string())) + { + let mut out_str = String::new(); + let mut emitter = YamlEmitter::new(&mut out_str); + emitter.dump(galaxy_requirements)?; + ret.collections = Some(out_str); + } + if let Some(Yaml::Array(py_reqs)) = + deps.get(&Yaml::String("python".to_string())) + { + ret.python_reqs = py_reqs + .iter() + .map(|d| d.as_str().map(|s| s.to_string())) + .filter_map(|x| x) + .collect(); + } + } + } + Yaml::String(key) if key == "file_resources" => { + if let Yaml::Array(file_resources) = value { + let resources: anyhow::Result> = + file_resources.iter().map(parse_file_resource).collect(); + ret.file_resources.append(&mut resources?); + } + } + Yaml::String(key) if key == "extra_vars" => { + if let Yaml::Hash(v) = &value { + for (key, arg) in v { + if let Yaml::String(arg_name) = key { + match parse_ansible_arg_typ(arg) { + ArgTyp::StaticVar(p) => { + ret.vars + .push((arg_name.to_string(), format!("$var:{}", p))); + } + ArgTyp::StaticResource(p) => { + ret.resources + .push((arg_name.to_string(), format!("$res:{}", p))); + } + ArgTyp::Typ(_) => (), + } + } + } + } + } + Yaml::String(key) if key == "inventory" => { + ret.inventories = parse_inventories(value)?; + } + Yaml::String(key) if key == "options" => { + if let Yaml::Array(opts) = &value { + ret.options = parse_ansible_options(opts); + } + } + Yaml::String(key) => logs.push_str(&format!("\nUnknown field `{}`. Ignoring", key)), + _ => (), + } + } + } + let mut out_str = String::new(); + let mut emitter = YamlEmitter::new(&mut out_str); + + for i in 1..docs.len() { + emitter.dump(&docs[i])?; + } + Ok((logs, Some(ret), out_str)) +} + +fn parse_ansible_options(opts: &Vec) -> AnsiblePlaybookOptions { + let mut ret = AnsiblePlaybookOptions { + verbosity: None, + forks: None, + timeout: None, + flush_cache: None, + force_handlers: None, + }; + for opt in opts { + if let Yaml::String(o) = opt { + match o.as_str() { + "flush_cache" => { + ret.flush_cache = Some(()); + } + "force_handlers" => { + ret.force_handlers = Some(()); + } + s if count_consecutive_vs(s) > 0 => { + ret.verbosity = Some("v".repeat(count_consecutive_vs(s).min(6))); + } + _ => (), + } + } + if let Yaml::Hash(m) = opt { + if let Some((Yaml::String(name), value)) = m.iter().last() { + match name.as_str() { + "forks" => { + if let Yaml::Integer(count) = value { + ret.forks = Some(*count); + } + } + "timeout" => { + if let Yaml::Integer(timeout) = value { + ret.timeout = Some(*timeout); + } + } + "verbosity" => { + if let Yaml::String(verbosity) = value { + let c = count_consecutive_vs(verbosity); + if c > 0 && c <= 6 { + ret.verbosity = Some("v".repeat(c.min(6))); + } + + } + } + _ => () + + } + } + + + } + } + + ret +} + +fn count_consecutive_vs(s: &str) -> usize { + let mut max_count = 0; + let mut current_count = 0; + + for c in s.chars() { + if c == 'v' { + current_count += 1; + if current_count == 6 { + return 6; // Stop early if we reach 6 + } + } else { + current_count = 0; // Reset count if the character is not 'v' + } + max_count = max_count.max(current_count); + } + + max_count +} + +fn parse_file_resource(yaml: &Yaml) -> anyhow::Result { + if let Yaml::Hash(f) = yaml { + if let Some(Yaml::String(resource_path)) = f.get(&Yaml::String("resource".to_string())) { + let target_path = f + .get(&Yaml::String("target".to_string())) + .and_then(|x| x.as_str()) + .map(|x| x.to_string()) + .ok_or(anyhow!( + "No `target` provided for file resource {}. Please input a target relative path for the ansible playbook to see this file.", + resource_path + ))?; + return Ok(FileResource { resource_path: resource_path.clone(), target_path }); + } + return Err(anyhow!( + "File resource should have a `resource` field, linking to a text file resource" + )); + } + return Err(anyhow!("Invalid file resource: Should be a dictionary.")); +} + +fn yaml_to_json(yaml: &Yaml) -> serde_json::Value { + match yaml { + Yaml::Array(arr) => { + let json_array: Vec = arr.into_iter().map(yaml_to_json).collect(); + serde_json::Value::Array(json_array) + } + Yaml::Hash(hash) => { + let json_object = hash + .into_iter() + .map(|(k, v)| { + let key = match k { + Yaml::String(s) => s.clone(), + _ => k.as_str().unwrap_or("").to_string(), + }; + (key, yaml_to_json(v)) + }) + .collect(); + serde_json::Value::Object(json_object) + } + Yaml::String(s) => serde_json::Value::String(s.to_string()), + Yaml::Integer(i) => serde_json::Value::Number(i.clone().into()), + Yaml::Real(r) => serde_json::Value::Number(r.parse().unwrap_or(0.into())), + Yaml::Boolean(b) => serde_json::Value::Bool(*b), + Yaml::Null => serde_json::Value::Null, + _ => serde_json::Value::Null, + } +} diff --git a/backend/parsers/windmill-parser/Cargo.toml b/backend/parsers/windmill-parser/Cargo.toml new file mode 100644 index 0000000000000..7dc464a4b399b --- /dev/null +++ b/backend/parsers/windmill-parser/Cargo.toml @@ -0,0 +1,14 @@ +[package] +name = "windmill-parser" +version.workspace = true +edition.workspace = true +authors.workspace = true + +[lib] +name = "windmill_parser" +path = "./src/lib.rs" + +[dependencies] +serde = { version = "1.0", features = ["derive"] } +serde_json.workspace = true +convert_case.workspace = true diff --git a/backend/parsers/windmill-parser/src/lib.rs b/backend/parsers/windmill-parser/src/lib.rs new file mode 100644 index 0000000000000..6f793d0cc7c89 --- /dev/null +++ b/backend/parsers/windmill-parser/src/lib.rs @@ -0,0 +1,167 @@ +/* + * Author: Ruben Fiszel + * Copyright: Windmill Labs, Inc 2022 + * This file and its contents are licensed under the AGPLv3 License. + * Please see the included NOTICE for copyright information and + * LICENSE-AGPL for a copy of the license. + */ + +use convert_case::{Boundary, Case, Casing}; +use serde::Serialize; +use serde_json::Value; + +#[derive(Serialize, Debug, PartialEq)] +pub struct MainArgSignature { + pub star_args: bool, + pub star_kwargs: bool, + pub args: Vec, + pub no_main_func: Option, + pub has_preprocessor: Option, +} + +#[derive(Serialize, Clone, Debug, PartialEq)] +#[serde(rename_all(serialize = "lowercase"))] +pub struct ObjectProperty { + pub key: String, + pub typ: Box, +} + +#[derive(Serialize, Clone, Debug, PartialEq)] +#[serde(rename_all(serialize = "lowercase"))] +pub struct OneOfVariant { + pub label: String, + pub properties: Vec, +} + +#[derive(Serialize, Clone, Debug, PartialEq)] +#[serde(rename_all(serialize = "lowercase"))] +pub enum Typ { + Str(Option>), + Int, + Float, + Bool, + List(Box), + Bytes, + Datetime, + Resource(String), + Email, + Sql, + DynSelect(String), + Object(Vec), + OneOf(Vec), + Unknown, +} + +#[derive(Serialize, Clone, Debug, PartialEq)] +pub struct Arg { + pub name: String, + pub otyp: Option, + pub typ: Typ, + pub default: Option, + pub has_default: bool, + pub oidx: Option, +} + +pub fn json_to_typ(js: &Value) -> Typ { + match js { + Value::String(_) => Typ::Str(None), + Value::Number(n) if n.is_i64() => Typ::Int, + Value::Number(_) => Typ::Float, + Value::Bool(_) => Typ::Bool, + Value::Object(o) => Typ::Object( + o.iter() + .map(|(k, v)| ObjectProperty { key: k.to_string(), typ: Box::new(json_to_typ(v)) }) + .collect(), + ), + Value::Array(a) => Typ::List(Box::new(a.first().map(json_to_typ).unwrap_or(Typ::Unknown))), + _ => Typ::Unknown, + } +} + +pub fn to_snake_case(s: &str) -> String { + s.with_boundaries(&Boundary::defaults()) + .without_boundaries(&Boundary::letter_digit()) + .to_case(Case::Snake) +} + +#[cfg(test)] +mod test { + use super::*; + + #[test] + fn test_snake_case() { + assert_eq!("s3", to_snake_case("S3")); + assert_eq!("s3", to_snake_case("s3")); + assert_eq!("s_3", to_snake_case("S_3")); + assert_eq!("type_name_here", to_snake_case("typeNameHere")); + } + + #[test] + fn test_empty_string() { + assert_eq!(to_snake_case(""), ""); + } + + #[test] + fn test_single_char_lowercase() { + assert_eq!(to_snake_case("a"), "a"); + } + + #[test] + fn test_single_char_uppercase() { + assert_eq!(to_snake_case("A"), "a"); + } + + #[test] + fn test_all_uppercase() { + assert_eq!(to_snake_case("TEST"), "test"); + } + + #[test] + fn test_all_lowercase() { + assert_eq!(to_snake_case("test"), "test"); + } + + #[test] + fn test_mixed_case() { + assert_eq!(to_snake_case("testCase"), "test_case"); + } + + #[test] + fn test_mixed_case_with_numbers() { + assert_eq!(to_snake_case("testCase1"), "test_case1"); + assert_eq!(to_snake_case("Test123Case"), "test123_case"); + } + + #[test] + fn test_numbers_with_hyphen() { + assert_eq!(to_snake_case("test-3"), "test_3"); + } + + #[test] + fn test_string_with_spaces() { + assert_eq!(to_snake_case("This is a Test"), "this_is_a_test"); + } + + #[test] + fn test_snake_case_input() { + assert_eq!(to_snake_case("already_snake_case"), "already_snake_case"); + } + + #[test] + fn test_kebab_case_input() { + assert_eq!(to_snake_case("already-kebab-case"), "already_kebab_case"); + } + + #[test] + fn test_mixed_delimiters() { + assert_eq!( + to_snake_case("test-Case_with Spaces"), + "test_case_with_spaces" + ); + } + + #[test] + fn test_leading_and_trailing_spaces() { + assert_eq!(to_snake_case(" test case "), "test_case"); + } +} diff --git a/backend/parsers/windmill-sql-datatype-parser-wasm/Cargo.toml b/backend/parsers/windmill-sql-datatype-parser-wasm/Cargo.toml new file mode 100644 index 0000000000000..2d0ee556ae442 --- /dev/null +++ b/backend/parsers/windmill-sql-datatype-parser-wasm/Cargo.toml @@ -0,0 +1,19 @@ +[package] +name = "windmill-sql-datatype-parser-wasm" +version.workspace = true +edition.workspace = true +authors.workspace = true + + +[lib] +crate-type = ["cdylib"] +name = "windmill_sql_datatype_parser_wasm" +path = "./src/lib.rs" + +[dev-dependencies] +wasm-bindgen-test.workspace = true + +[dependencies] +windmill-parser.workspace = true +windmill-parser-sql.workspace = true +wasm-bindgen.workspace = true \ No newline at end of file diff --git a/backend/parsers/windmill-sql-datatype-parser-wasm/build.sh b/backend/parsers/windmill-sql-datatype-parser-wasm/build.sh new file mode 100644 index 0000000000000..0ac5a6fde0ca9 --- /dev/null +++ b/backend/parsers/windmill-sql-datatype-parser-wasm/build.sh @@ -0,0 +1,4 @@ +#!/bin/bash +set -eou pipefail + +deno task wasmbuild --out ../../../cli/wasm/ diff --git a/backend/parsers/windmill-sql-datatype-parser-wasm/package-lock.json b/backend/parsers/windmill-sql-datatype-parser-wasm/package-lock.json new file mode 100644 index 0000000000000..f88d35a75a00d --- /dev/null +++ b/backend/parsers/windmill-sql-datatype-parser-wasm/package-lock.json @@ -0,0 +1,6 @@ +{ + "name": "windmill-parser-wasm", + "lockfileVersion": 3, + "requires": true, + "packages": {} +} diff --git a/backend/parsers/windmill-sql-datatype-parser-wasm/package.json b/backend/parsers/windmill-sql-datatype-parser-wasm/package.json new file mode 100644 index 0000000000000..fa9dffe133053 --- /dev/null +++ b/backend/parsers/windmill-sql-datatype-parser-wasm/package.json @@ -0,0 +1,4 @@ +{ + "name": "windmill-sql-datatype-parser-wasm", + "version": "0.1.0" +} diff --git a/backend/parsers/windmill-sql-datatype-parser-wasm/src/lib.rs b/backend/parsers/windmill-sql-datatype-parser-wasm/src/lib.rs new file mode 100644 index 0000000000000..30103beafd884 --- /dev/null +++ b/backend/parsers/windmill-sql-datatype-parser-wasm/src/lib.rs @@ -0,0 +1,40 @@ +use wasm_bindgen::prelude::*; +use windmill_parser_sql::Typ; + +fn to_str(typ: Typ) -> String { + match typ { + Typ::Str(_) => "str".to_string(), + Typ::Int => "int".to_string(), + Typ::Float => "float".to_string(), + Typ::Bool => "bool".to_string(), + Typ::List(t) => format!("list-{}", to_str(*t)), + Typ::Bytes => "bytes".to_string(), + Typ::Datetime => "datetime".to_string(), + _ => "unknown".to_string(), + } +} + +#[wasm_bindgen] +pub fn parse_sql(typ: &str) -> String { + to_str(windmill_parser_sql::parse_pg_typ(typ)) +} + +#[wasm_bindgen] +pub fn parse_mysql(typ: &str) -> String { + to_str(windmill_parser_sql::parse_mysql_typ(typ)) +} + +#[wasm_bindgen] +pub fn parse_bigquery(typ: &str) -> String { + to_str(windmill_parser_sql::parse_bigquery_typ(typ)) +} + +#[wasm_bindgen] +pub fn parse_snowflake(typ: &str) -> String { + to_str(windmill_parser_sql::parse_snowflake_typ(typ)) +} + +#[wasm_bindgen] +pub fn parse_mssql(typ: &str) -> String { + to_str(windmill_parser_sql::parse_mssql_typ(typ)) +} diff --git a/backend/plot.py b/backend/plot.py new file mode 100644 index 0000000000000..2b02984a62f67 --- /dev/null +++ b/backend/plot.py @@ -0,0 +1,89 @@ +import json +import matplotlib.pyplot as plt + +# Function to load JSON data from a file +def load_json_data(filepath): + with open(filepath, 'r') as file: + data = json.load(file) + return data + +# Function to plot two arrays of subarrays with tuples (step_name, duration) +def plot_two_arrays_of_subarrays(arrays1, arrays2): + # Function to calculate sum of durations for each step + def calculate_sums(arrays): + steps = [step for step, _ in arrays[0]['timings']] # Extract steps from the first iteration + sums = {step: 0.0 for step in steps} # Initialize sums dictionary with step names + + # Sum up the durations for each step across all subarrays + for subarray in arrays: + for step_name, duration in subarray['timings']: + if step_name not in sums: + sums[step_name] = 0 + sums[step_name] += duration + + for step_name, duration in sums.items(): + sums[step_name] = duration / 1000000000 + + # Convert the sums dictionary to two lists (for plotting) + step_names = list(sums.keys()) + durations = list(sums.values()) + return step_names, durations + + # Calculate sums for both arrays of subarrays + step_names1, sums1 = calculate_sums(arrays1) + step_names2, sums2 = calculate_sums(arrays2) + + # Create two subplots, one on top of the other + fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(10, 12)) + + # First plot (top) for the first array of subarrays + ax1.bar(step_names1, sums1, color='b') + ax1.set_title('Total Duration per Step - Main Loop') + ax1.set_xlabel('Step Name') + ax1.set_ylabel('Total Duration (s)') + ax1.grid(True, axis='y') + ax1.tick_params(axis='x', rotation=45) + + # Second plot (bottom) for the second array of subarrays + ax2.bar(step_names2, sums2, color='r') + ax2.set_title('Total Duration per Step - Result Processor') + ax2.set_xlabel('Step Name') + ax2.set_ylabel('Total Duration (s)') + ax2.grid(True, axis='y') + ax2.tick_params(axis='x', rotation=45) + + # Adjust layout so the plots don't overlap + plt.tight_layout() + + # Display the plot + plt.show() + +# Load arrays from the JSON files +main = load_json_data('/tmp/windmill/profiling_main.json') +result_processor = load_json_data('/tmp/windmill/profiling_result_processor.json') + +arrays1 = main['timings'] +arrays2 = result_processor['timings'] + +total_duration1 = main['total_duration']/1000 +total_duration2 = result_processor['total_duration']/1000 + +print(f"Total duration for main: {total_duration1}s") +print(f"Total duration for result processor: {total_duration2}s") + +iterations_total = sum(main['iter_durations']) / 1000000000 +iterations_total2 = sum(result_processor['iter_durations']) / 1000000000 + +print(f"Number of iterations: {len(main['iter_durations'])}") +print(f"Total iterations for main: {iterations_total}s") +print(f"Total iterations for result processor: {iterations_total2}s") + +# Calculate RPS +rps1 = len(main['iter_durations']) / total_duration1 +rps2 = len(result_processor['iter_durations']) / total_duration2 + +print(f"RPS for main: {rps1}") +print(f"RPS for result processor: {rps2}") + +# Plot the data +plot_two_arrays_of_subarrays(arrays1, arrays2) \ No newline at end of file diff --git a/backend/res.json b/backend/res.json new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/backend/rustfmt.toml b/backend/rustfmt.toml index c3bdd32db28b3..4aa3caaffab38 100644 --- a/backend/rustfmt.toml +++ b/backend/rustfmt.toml @@ -1,7 +1,5 @@ -imports_granularity = "Crate" max_width = 100 use_small_heuristics = "Default" -indent_style = "Block" -fn_single_line = false -force_multiline_blocks = true -format_strings = true +match_arm_leading_pipes="Preserve" +struct_lit_width=100 +struct_variant_width=100 diff --git a/backend/sqlx-data.json b/backend/sqlx-data.json deleted file mode 100644 index 6497d7a312b7a..0000000000000 --- a/backend/sqlx-data.json +++ /dev/null @@ -1,2972 +0,0 @@ -{ - "db": "PostgreSQL", - "0355b53b1d45955ca56b2829372ce9c656d7f0ad7b8d0709161047f0d8cdc4f4": { - "query": "DELETE FROM queue WHERE workspace_id = $1 AND id = $2 RETURNING 1", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "?column?", - "type_info": "Int4" - } - ], - "parameters": { - "Left": [ - "Text", - "Uuid" - ] - }, - "nullable": [ - null - ] - } - }, - "04a15674cf66f2822085e65ca33ee42b8e7f3f9d63ffac0585a12368d0322252": { - "query": "SELECT group_ FROM usr_to_group where usr = $1 AND workspace_id = $2", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "group_", - "type_info": "Varchar" - } - ], - "parameters": { - "Left": [ - "Text", - "Text" - ] - }, - "nullable": [ - false - ] - } - }, - "09246e9ff5b2beb61ab51a5f73d980f7638904d5a18a415e52d5e1c94dffd0aa": { - "query": "SELECT SUM(duration) FROM completed_job WHERE created_by = $1 AND created_at > NOW() - INTERVAL '1200 seconds' AND workspace_id = $2", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "sum", - "type_info": "Int8" - } - ], - "parameters": { - "Left": [ - "Text", - "Text" - ] - }, - "nullable": [ - null - ] - } - }, - "097a576938eac385ddc2f16a00ddc69c3ca54f5a66923291730980eeeea1f8c1": { - "query": "DELETE FROM variable WHERE path = $1 AND workspace_id = $2", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Text", - "Text" - ] - }, - "nullable": [] - } - }, - "0a7212dd507ed8f7a311724185e39ecc1809abb208a681ad711614c27baadd83": { - "query": "SELECT flow_status FROM queue WHERE id = $1 AND workspace_id = $2", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "flow_status", - "type_info": "Jsonb" - } - ], - "parameters": { - "Left": [ - "Uuid", - "Text" - ] - }, - "nullable": [ - true - ] - } - }, - "0a76ed47629cac693ba7f169a1229b62bd900bc007a63fbae3fa7374ba66df65": { - "query": "INSERT INTO workspace_invite\n (workspace_id, email, is_admin)\n VALUES ($1, $2, $3)", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Varchar", - "Varchar", - "Bool" - ] - }, - "nullable": [] - } - }, - "0ae9160591ae00117d20a616cfe07e38f0c32953c7e881e916c389255190b72d": { - "query": "INSERT INTO usr\n (workspace_id, email, username, is_admin)\n VALUES ($1, $2, $3, $4)", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Varchar", - "Varchar", - "Varchar", - "Bool" - ] - }, - "nullable": [] - } - }, - "103e321fbaa847831682b5cba2fd94f12c508ddf372f9facd18e30d00afd1ea3": { - "query": "SELECT label, concat(substring(token for 10)) as token_prefix, expiration, created_at, last_used_at FROM token WHERE email = $1", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "label", - "type_info": "Varchar" - }, - { - "ordinal": 1, - "name": "token_prefix", - "type_info": "Text" - }, - { - "ordinal": 2, - "name": "expiration", - "type_info": "Timestamptz" - }, - { - "ordinal": 3, - "name": "created_at", - "type_info": "Timestamptz" - }, - { - "ordinal": 4, - "name": "last_used_at", - "type_info": "Timestamptz" - } - ], - "parameters": { - "Left": [ - "Text" - ] - }, - "nullable": [ - true, - null, - true, - false, - false - ] - } - }, - "11eb4dd4a2c9b0b759294dde5e8b505c5a4391aa0d8cb629c665711ee0fc04a0": { - "query": "SELECT substr(logs, $1) as logs FROM queue WHERE workspace_id = $2 AND id = $3", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "logs", - "type_info": "Text" - } - ], - "parameters": { - "Left": [ - "Int4", - "Text", - "Uuid" - ] - }, - "nullable": [ - null - ] - } - }, - "122090a0f89e5248a0a0f199ebd24582fdb302883aebd2da187ac0084e767ea3": { - "query": "SELECT set_config('session.pgroups', $1, true)", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "set_config", - "type_info": "Text" - } - ], - "parameters": { - "Left": [ - "Text" - ] - }, - "nullable": [ - null - ] - } - }, - "1289e7278d2a289bfaa53f00e0b6dceb195df0fb43a8ac03bc8b35939fc941dd": { - "query": "SELECT * FROM workspace LIMIT $1 OFFSET $2", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "id", - "type_info": "Varchar" - }, - { - "ordinal": 1, - "name": "name", - "type_info": "Varchar" - }, - { - "ordinal": 2, - "name": "owner", - "type_info": "Varchar" - }, - { - "ordinal": 3, - "name": "domain", - "type_info": "Varchar" - }, - { - "ordinal": 4, - "name": "deleted", - "type_info": "Bool" - } - ], - "parameters": { - "Left": [ - "Int8", - "Int8" - ] - }, - "nullable": [ - false, - false, - false, - true, - false - ] - } - }, - "15de975d9be141c9ed9647935a508492aabbbddbf986d5c5c0f0c415293c432d": { - "query": "INSERT INTO variable\n (workspace_id, path, value, is_secret, description)\n VALUES ($1, 'g/all/pretty_secret', $2, true, 'This item is secret'), \n ($3, 'g/all/not_secret', $4, false, 'This item is not secret')", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Varchar", - "Varchar", - "Varchar", - "Varchar" - ] - }, - "nullable": [] - } - }, - "1730f39fd1793d45fbb41b21389c61296a3ff7489ae12f52a19f9543173ac597": { - "query": "SELECT * FROM workspace_settings WHERE workspace_id = $1", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "workspace_id", - "type_info": "Varchar" - }, - { - "ordinal": 1, - "name": "slack_team_id", - "type_info": "Varchar" - }, - { - "ordinal": 2, - "name": "slack_name", - "type_info": "Varchar" - }, - { - "ordinal": 3, - "name": "slack_command_script", - "type_info": "Varchar" - } - ], - "parameters": { - "Left": [ - "Text" - ] - }, - "nullable": [ - false, - true, - true, - true - ] - } - }, - "1ad8677694aca94ee0e6da287d7cc028dcf673583a0e3e4fedd0e5d6766c5860": { - "query": "DELETE FROM usr WHERE email = $1", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Text" - ] - }, - "nullable": [] - } - }, - "1b31847d6187d6969deac5aa7b2feb169ef963449ac2d3ea06e1ed785f6d42e7": { - "query": "SELECT * from workspace_invite WHERE email = $1", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "workspace_id", - "type_info": "Varchar" - }, - { - "ordinal": 1, - "name": "email", - "type_info": "Varchar" - }, - { - "ordinal": 2, - "name": "is_admin", - "type_info": "Bool" - } - ], - "parameters": { - "Left": [ - "Text" - ] - }, - "nullable": [ - false, - false, - false - ] - } - }, - "1bf2ca894246bd716875635b2d0c294a1ce2ed21916097ea165df240f7421a1e": { - "query": "UPDATE queue SET logs = $1 WHERE id = $2", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Text", - "Uuid" - ] - }, - "nullable": [] - } - }, - "21cd7cbab7799baf5c381427d9b373c0bb144715eddfe54e3b01f6049d7966a2": { - "query": "SELECT workspace.id, workspace.name, usr.username\n FROM workspace, usr WHERE usr.workspace_id = workspace.id AND usr.email = $1 AND deleted = false", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "id", - "type_info": "Varchar" - }, - { - "ordinal": 1, - "name": "name", - "type_info": "Varchar" - }, - { - "ordinal": 2, - "name": "username", - "type_info": "Varchar" - } - ], - "parameters": { - "Left": [ - "Text" - ] - }, - "nullable": [ - false, - false, - false - ] - } - }, - "230d58732a08164268ca10d248a93cced646632a76864b693ed2325d85b36c45": { - "query": "SELECT canceled FROM queue WHERE id = $1", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "canceled", - "type_info": "Bool" - } - ], - "parameters": { - "Left": [ - "Uuid" - ] - }, - "nullable": [ - false - ] - } - }, - "255aafff962738317f3227ae4eb871830d89b4c12c73d8dbabe6836da124e54d": { - "query": "select path from script where hash = $1 AND (workspace_id = $2 OR workspace_id = 'starter')", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "path", - "type_info": "Varchar" - } - ], - "parameters": { - "Left": [ - "Int8", - "Text" - ] - }, - "nullable": [ - false - ] - } - }, - "28c042adef65c3055edc324fbbd2f267285d3566cbec58404983323d410ace27": { - "query": "SELECT super_admin FROM password WHERE email = $1", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "super_admin", - "type_info": "Bool" - } - ], - "parameters": { - "Left": [ - "Text" - ] - }, - "nullable": [ - false - ] - } - }, - "28c1afcce0446817543fc47dde29b1137b2550bac4a2b6e81c72c74a84bb84fb": { - "query": "UPDATE workspace_settings SET slack_command_script = $1 WHERE workspace_id = $2", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Varchar", - "Text" - ] - }, - "nullable": [] - } - }, - "2a4be8334db7d39f3d954193a8b0169cc4a4a07e081d2fa61d8764879d6a8ff5": { - "query": "UPDATE script SET archived = true WHERE hash = $1 AND workspace_id = $2", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Int8", - "Text" - ] - }, - "nullable": [] - } - }, - "2bf44d998d7acd17ec6d98f81395f8bdac49f58880fbbb9350bf0142cd2efdc7": { - "query": "DELETE FROM workspace_invite WHERE\n workspace_id = $1 AND email = $2 AND is_admin = $3", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Text", - "Text", - "Bool" - ] - }, - "nullable": [] - } - }, - "37d3ee8009055e869941e548a6d5a352053a5d7782f662c34b94706488abccb6": { - "query": "UPDATE queue SET running = false WHERE last_ping < $1 RETURNING id", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "id", - "type_info": "Uuid" - } - ], - "parameters": { - "Left": [ - "Timestamptz" - ] - }, - "nullable": [ - false - ] - } - }, - "3d363466d79075df3f74f946eff43ca89faefca3bcdf2c533425ca3868b0369a": { - "query": "SELECT * FROM usr where username = $1 AND workspace_id = $2", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "workspace_id", - "type_info": "Varchar" - }, - { - "ordinal": 1, - "name": "username", - "type_info": "Varchar" - }, - { - "ordinal": 2, - "name": "email", - "type_info": "Varchar" - }, - { - "ordinal": 3, - "name": "is_admin", - "type_info": "Bool" - }, - { - "ordinal": 4, - "name": "created_at", - "type_info": "Timestamptz" - }, - { - "ordinal": 5, - "name": "operator", - "type_info": "Bool" - }, - { - "ordinal": 6, - "name": "disabled", - "type_info": "Bool" - }, - { - "ordinal": 7, - "name": "role", - "type_info": "Varchar" - } - ], - "parameters": { - "Left": [ - "Text", - "Text" - ] - }, - "nullable": [ - false, - false, - false, - false, - false, - false, - false, - true - ] - } - }, - "453501fbd61efd26647baf9b6ef702ce0bc2e920914e9f08fe5f2a5f4ab03f02": { - "query": "SELECT substr(logs, $1) as logs FROM completed_job WHERE workspace_id = $2 AND id = $3", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "logs", - "type_info": "Text" - } - ], - "parameters": { - "Left": [ - "Int4", - "Text", - "Uuid" - ] - }, - "nullable": [ - null - ] - } - }, - "486f181a9ced2bdc7c8d93da22c9d3e229ef106174bff2c472dbe82622f382b6": { - "query": "UPDATE queue SET logs = concat(logs, $1::text) WHERE id = $2", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Text", - "Uuid" - ] - }, - "nullable": [] - } - }, - "4ad5fa2f08236507aad911a95697e84fc0c3a274ba0e928da28c4d146cf8f1a8": { - "query": "SELECT is_admin FROM usr where username = $1 AND workspace_id = $2", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "is_admin", - "type_info": "Bool" - } - ], - "parameters": { - "Left": [ - "Text", - "Text" - ] - }, - "nullable": [ - false - ] - } - }, - "4e0c8cd36dfa71d0d7b79cba4289177770ccfbccc83f82477229a74e9c95bb2e": { - "query": "UPDATE worker_ping SET ping_at = $1, jobs_executed = $2 WHERE worker = $3", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Timestamptz", - "Int4", - "Text" - ] - }, - "nullable": [] - } - }, - "4e8ff055a80cc2e6b7fd6653c0c8e9a0e4b223a4bdeab0cf43dc79ce10f635b9": { - "query": "INSERT INTO workspace\n (id, name, owner, domain)\n VALUES ($1, $2, $3, $4)", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Varchar", - "Varchar", - "Varchar", - "Varchar" - ] - }, - "nullable": [] - } - }, - "4eb6b80c410e00e8a72eced6c25cdd3ed941e7a46a0619173f272eec7f28a3c1": { - "query": "UPDATE schedule SET schedule = $1, script_path = $2, is_flow = $3, args = $4 WHERE path = $5 AND workspace_id = $6 RETURNING *", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "workspace_id", - "type_info": "Varchar" - }, - { - "ordinal": 1, - "name": "path", - "type_info": "Varchar" - }, - { - "ordinal": 2, - "name": "edited_by", - "type_info": "Varchar" - }, - { - "ordinal": 3, - "name": "edited_at", - "type_info": "Timestamptz" - }, - { - "ordinal": 4, - "name": "schedule", - "type_info": "Varchar" - }, - { - "ordinal": 5, - "name": "offset_", - "type_info": "Int4" - }, - { - "ordinal": 6, - "name": "enabled", - "type_info": "Bool" - }, - { - "ordinal": 7, - "name": "script_path", - "type_info": "Varchar" - }, - { - "ordinal": 8, - "name": "args", - "type_info": "Jsonb" - }, - { - "ordinal": 9, - "name": "extra_perms", - "type_info": "Jsonb" - }, - { - "ordinal": 10, - "name": "is_flow", - "type_info": "Bool" - } - ], - "parameters": { - "Left": [ - "Varchar", - "Varchar", - "Bool", - "Jsonb", - "Text", - "Text" - ] - }, - "nullable": [ - false, - false, - false, - false, - false, - false, - false, - false, - true, - false, - false - ] - } - }, - "5061c0d054bf4f028e7fe51a8f9389024c6ae4492755cadac0f7167e5300bda0": { - "query": "INSERT INTO resource_type\n (workspace_id, name, schema, description)\n VALUES ($1, $2, $3, $4)", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Varchar", - "Varchar", - "Jsonb", - "Text" - ] - }, - "nullable": [] - } - }, - "50d1d62e1a0044168ec485c7f69bfb88ad4ecf200b33cd99f92da969628fb9f4": { - "query": "SELECT key FROM workspace_key WHERE workspace_id = $1 AND kind = 'cloud'", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "key", - "type_info": "Varchar" - } - ], - "parameters": { - "Left": [ - "Text" - ] - }, - "nullable": [ - false - ] - } - }, - "514c5feb8a29a2a6b577553d8577a46bcbb196c62d046a0568c573ce96ff3c43": { - "query": "DELETE FROM usr_to_group WHERE group_ = $1 AND workspace_id = $2", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Text", - "Text" - ] - }, - "nullable": [] - } - }, - "5445083864b2b092b012e894bff7630a1d7b9deb8d33e9f909061f351f96844e": { - "query": "SELECT * FROM workspace_settings WHERE slack_team_id = $1", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "workspace_id", - "type_info": "Varchar" - }, - { - "ordinal": 1, - "name": "slack_team_id", - "type_info": "Varchar" - }, - { - "ordinal": 2, - "name": "slack_name", - "type_info": "Varchar" - }, - { - "ordinal": 3, - "name": "slack_command_script", - "type_info": "Varchar" - } - ], - "parameters": { - "Left": [ - "Text" - ] - }, - "nullable": [ - false, - true, - true, - true - ] - } - }, - "54756c6c39888feb2206b056df1c84c3bb44adc490309954359845c06b6e607c": { - "query": "INSERT INTO token\n (token, email, label, expiration, super_admin)\n VALUES ($1, $2, $3, $4, $5)", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Varchar", - "Varchar", - "Varchar", - "Timestamptz", - "Bool" - ] - }, - "nullable": [] - } - }, - "58efbf34ba014b4853ef20ae400929b57c1d9de4262189274badf100d29e0649": { - "query": "SELECT * from resource_type WHERE name = $1 AND (workspace_id = $2 OR workspace_id = 'starter')", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "workspace_id", - "type_info": "Varchar" - }, - { - "ordinal": 1, - "name": "name", - "type_info": "Varchar" - }, - { - "ordinal": 2, - "name": "schema", - "type_info": "Jsonb" - }, - { - "ordinal": 3, - "name": "description", - "type_info": "Text" - } - ], - "parameters": { - "Left": [ - "Text", - "Text" - ] - }, - "nullable": [ - false, - false, - true, - true - ] - } - }, - "5b9b58612ca0f703a5d154a76fab82ac2329aef965fa937bfab2810b6e1336a4": { - "query": "DELETE FROM group_ WHERE name = $1 AND workspace_id = $2", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Text", - "Text" - ] - }, - "nullable": [] - } - }, - "5da22b7f44b631740697e49d5766c31668233fe2453d51e8d9d4c45974492616": { - "query": "INSERT INTO variable\n (workspace_id, path, value, is_secret, description)\n VALUES ($1, $2, $3, true, $4) ON CONFLICT (workspace_id, path) DO UPDATE SET value = $3", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Varchar", - "Varchar", - "Varchar", - "Varchar" - ] - }, - "nullable": [] - } - }, - "6199e8be5cb13db71108e555ea20f0b76dc38476670f9fc0667b057d2766d42e": { - "query": "SELECT set_config('session.groups', $1, true)", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "set_config", - "type_info": "Text" - } - ], - "parameters": { - "Left": [ - "Text" - ] - }, - "nullable": [ - null - ] - } - }, - "62432110a09e68593ac52b3174c8bfa8736d5c7c1d8c7d6bed68f0dd9e06db7b": { - "query": "SELECT EXISTS(SELECT 1 FROM usr WHERE username = $1 AND workspace_id = $2)", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "exists", - "type_info": "Bool" - } - ], - "parameters": { - "Left": [ - "Text", - "Text" - ] - }, - "nullable": [ - null - ] - } - }, - "63c4b9320681fac84ea92c25c0f6da5c9ac154dfccf575cea8145692246205c4": { - "query": "SELECT name from resource_type WHERE (workspace_id = $1 OR workspace_id = 'starter') ORDER BY name", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "name", - "type_info": "Varchar" - } - ], - "parameters": { - "Left": [ - "Text" - ] - }, - "nullable": [ - false - ] - } - }, - "63f330e98051ae9d0cf5617a553f769cc98b05fdc8643839b504023b26f38aab": { - "query": "UPDATE flow SET archived = true WHERE path = $1 AND workspace_id = $2", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Text", - "Text" - ] - }, - "nullable": [] - } - }, - "64d2318064711c2cfbaf7c5c2b02d92cc98ac8e33eb560b829c462c3159115eb": { - "query": "INSERT INTO workspace_key\n (workspace_id, kind, key)\n VALUES ($1, 'cloud', $2)", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Varchar", - "Varchar" - ] - }, - "nullable": [] - } - }, - "6c63bbcb45d3f51eccaea52ec862700e1f1c2426d823abd951e1eea4fd9b85aa": { - "query": "UPDATE script SET lock_error_logs = $1 WHERE hash = $2 AND workspace_id = $3", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Text", - "Int8", - "Text" - ] - }, - "nullable": [] - } - }, - "6c7186de56bcd9983a64de0c01a733e818ebc30af2377158c8a92ec66c06464c": { - "query": "UPDATE password SET super_admin = $1 WHERE email = $2", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Bool", - "Text" - ] - }, - "nullable": [] - } - }, - "6c90d5ea2a09b47b81fdab465062c25f8768b220e53bf469550a3a3697ab756a": { - "query": "SELECT set_config('session.user', $1, true)", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "set_config", - "type_info": "Text" - } - ], - "parameters": { - "Left": [ - "Text" - ] - }, - "nullable": [ - null - ] - } - }, - "6eacfedfc1ab2431c318996d2ff480a65d55fc43d8fa95aa4e2e8430722dc82d": { - "query": "SELECT email FROM usr WHERE username = $1", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "email", - "type_info": "Varchar" - } - ], - "parameters": { - "Left": [ - "Text" - ] - }, - "nullable": [ - false - ] - } - }, - "6f1ff39324639d0dced3731df5732a9d4ae3dbed660ca088de6471bd3b448a12": { - "query": "UPDATE flow SET path = $1, summary = $2, description = $3, value = $4, edited_by = $5, edited_at = $6, schema = $7 WHERE path = $8 AND workspace_id = $9 RETURNING path", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "path", - "type_info": "Varchar" - } - ], - "parameters": { - "Left": [ - "Varchar", - "Text", - "Text", - "Jsonb", - "Varchar", - "Timestamptz", - "Json", - "Text", - "Text" - ] - }, - "nullable": [ - false - ] - } - }, - "6fc2cfae9df83eb24ea33e4c9567740100f4dd2285afc3ef474fc70041b0567b": { - "query": "SELECT * FROM worker_ping ORDER BY ping_at desc LIMIT $1 OFFSET $2", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "worker", - "type_info": "Varchar" - }, - { - "ordinal": 1, - "name": "worker_instance", - "type_info": "Varchar" - }, - { - "ordinal": 2, - "name": "ping_at", - "type_info": "Timestamptz" - }, - { - "ordinal": 3, - "name": "started_at", - "type_info": "Timestamptz" - }, - { - "ordinal": 4, - "name": "ip", - "type_info": "Varchar" - }, - { - "ordinal": 5, - "name": "jobs_executed", - "type_info": "Int4" - } - ], - "parameters": { - "Left": [ - "Int8", - "Int8" - ] - }, - "nullable": [ - false, - false, - false, - false, - false, - false - ] - } - }, - "701f215eb14ba67a79afea15d7effc0dd394ba6c4a72c95d4560c5a377015d4e": { - "query": "UPDATE workspace SET deleted = true WHERE id = $1", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Text" - ] - }, - "nullable": [] - } - }, - "70e6ca3b5ad81f70376d31c75ba5f2b5dd94dd2f7f4cacd5a64029ccc3315d6c": { - "query": "SELECT EXISTS(SELECT 1 FROM usr WHERE workspace_id = $1 AND username = $2)", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "exists", - "type_info": "Bool" - } - ], - "parameters": { - "Left": [ - "Text", - "Text" - ] - }, - "nullable": [ - null - ] - } - }, - "765c18d77412cbb4474f4074d583b9b44681f3b9f58754662ac07a3a3470a3c5": { - "query": "DELETE FROM workspace_invite WHERE workspace_id = $1 AND email = $2 RETURNING is_admin", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "is_admin", - "type_info": "Bool" - } - ], - "parameters": { - "Left": [ - "Text", - "Text" - ] - }, - "nullable": [ - false - ] - } - }, - "765d7a0562fec2a76355856df1b69a4536af25f0b5589b5d3828a75713d0331d": { - "query": "UPDATE queue SET canceled = true, canceled_by = $1, canceled_reason = $2 WHERE id = $3 AND schedule_path IS NULL AND workspace_id = $4RETURNING id", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "id", - "type_info": "Uuid" - } - ], - "parameters": { - "Left": [ - "Varchar", - "Text", - "Uuid", - "Text" - ] - }, - "nullable": [ - false - ] - } - }, - "76941665bf3591c15eda9d3b3d6e0f15a2aff9b7baf2c9c71e9a542e4c0bf8dd": { - "query": "INSERT INTO token\n (workspace_id, token, owner, label, expiration, super_admin)\n VALUES ($1, $2, $3, $4, $5, $6)", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Varchar", - "Varchar", - "Varchar", - "Varchar", - "Timestamptz", - "Bool" - ] - }, - "nullable": [] - } - }, - "7b1239ad6460e8f5fb41bfe12f662a779528784ec8cf3f6dcce5545ab90bf234": { - "query": "SELECT * FROM resource_type WHERE workspace_id = $1", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "workspace_id", - "type_info": "Varchar" - }, - { - "ordinal": 1, - "name": "name", - "type_info": "Varchar" - }, - { - "ordinal": 2, - "name": "schema", - "type_info": "Jsonb" - }, - { - "ordinal": 3, - "name": "description", - "type_info": "Text" - } - ], - "parameters": { - "Left": [ - "Text" - ] - }, - "nullable": [ - false, - false, - true, - true - ] - } - }, - "7eeac533a0d63f4e3af9d3e3123b0a73f44543e618e29e4c6a6d573852339933": { - "query": "SELECT name FROM group_ WHERE workspace_id = $1 ORDER BY name desc", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "name", - "type_info": "Varchar" - } - ], - "parameters": { - "Left": [ - "Text" - ] - }, - "nullable": [ - false - ] - } - }, - "808ff76fdb74482d5d3201417c8a2470e2867cb08b9a46d244653eb366d8ee5e": { - "query": "INSERT INTO group_ (workspace_id, name, summary, extra_perms) VALUES ($1, $2, $3, $4)", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Varchar", - "Varchar", - "Text", - "Jsonb" - ] - }, - "nullable": [] - } - }, - "8114333781add802159cd2c26d57cea40e27143606c71bf4d87dc14bb7040cd6": { - "query": "UPDATE workspace SET name = $1, owner = $2, domain = $3 WHERE id = $4", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Varchar", - "Varchar", - "Varchar", - "Text" - ] - }, - "nullable": [] - } - }, - "826c6a36020f402169cab2ebe097e9f38f416f6f080a2fe8a9b83e97c4e15150": { - "query": "UPDATE script SET archived = true WHERE path = $1 AND workspace_id = $2 RETURNING hash", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "hash", - "type_info": "Int8" - } - ], - "parameters": { - "Left": [ - "Text", - "Text" - ] - }, - "nullable": [ - false - ] - } - }, - "82f3c4cd1c1f6aea86d66f675442587684391bc32be9ab55ae20aab549b7bba5": { - "query": "UPDATE group_ SET summary = $1 WHERE name = $2 AND workspace_id = $3", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Text", - "Text", - "Text" - ] - }, - "nullable": [] - } - }, - "858906ef1a5da30956823b56d28389146af50bfe206355abf921e7258d75510a": { - "query": "INSERT INTO flow (workspace_id, path, summary, description, value, edited_by, edited_at, schema) VALUES ($1, $2, $3, $4, $5, $6, $7, $8::text::json)", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Varchar", - "Varchar", - "Text", - "Text", - "Jsonb", - "Varchar", - "Timestamptz", - "Text" - ] - }, - "nullable": [] - } - }, - "87f08f146fc899d317728f21468a1474ed7c58aa5da19bef642efe66fabe5118": { - "query": "SELECT * from usr WHERE workspace_id = $1", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "workspace_id", - "type_info": "Varchar" - }, - { - "ordinal": 1, - "name": "username", - "type_info": "Varchar" - }, - { - "ordinal": 2, - "name": "email", - "type_info": "Varchar" - }, - { - "ordinal": 3, - "name": "is_admin", - "type_info": "Bool" - }, - { - "ordinal": 4, - "name": "created_at", - "type_info": "Timestamptz" - }, - { - "ordinal": 5, - "name": "operator", - "type_info": "Bool" - }, - { - "ordinal": 6, - "name": "disabled", - "type_info": "Bool" - }, - { - "ordinal": 7, - "name": "role", - "type_info": "Varchar" - } - ], - "parameters": { - "Left": [ - "Text" - ] - }, - "nullable": [ - false, - false, - false, - false, - false, - false, - false, - true - ] - } - }, - "88b7589a6416da8be4b26af3bf30fcfcd6aeae7bc5a37e9a735cabbe2691c570": { - "query": "SELECT login_type::TEXT FROM password WHERE email = $1", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "login_type", - "type_info": "Text" - } - ], - "parameters": { - "Left": [ - "Text" - ] - }, - "nullable": [ - null - ] - } - }, - "894336809c161cdbb42ea235eb88498db6b1715386f78f57568f01c9954f05af": { - "query": "SELECT 1 FROM script WHERE hash = $1 AND workspace_id = $2", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "?column?", - "type_info": "Int4" - } - ], - "parameters": { - "Left": [ - "Int8", - "Text" - ] - }, - "nullable": [ - null - ] - } - }, - "8a80333c2fbf7b50fed305882de6e4ffda985d5c648cd617add6c9e6a9c03f34": { - "query": "INSERT INTO resource\n (workspace_id, path, value, description, resource_type)\n VALUES ($1, $2, $3, $4, $5)", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Varchar", - "Varchar", - "Jsonb", - "Text", - "Varchar" - ] - }, - "nullable": [] - } - }, - "8ad6a17eecce77f61236e0585ba89b99a32e07ad37b97662007db35acb59d139": { - "query": "SELECT * from resource_type WHERE (workspace_id = $1 OR workspace_id = 'starter') ORDER BY name", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "workspace_id", - "type_info": "Varchar" - }, - { - "ordinal": 1, - "name": "name", - "type_info": "Varchar" - }, - { - "ordinal": 2, - "name": "schema", - "type_info": "Jsonb" - }, - { - "ordinal": 3, - "name": "description", - "type_info": "Text" - } - ], - "parameters": { - "Left": [ - "Text" - ] - }, - "nullable": [ - false, - false, - true, - true - ] - } - }, - "8caa01546506f42740b7973a3a45e40093a06714b8524570c5143b77af4a8e19": { - "query": "SELECT * FROM schedule WHERE workspace_id = $1 ORDER BY edited_at desc LIMIT $2 OFFSET $3", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "workspace_id", - "type_info": "Varchar" - }, - { - "ordinal": 1, - "name": "path", - "type_info": "Varchar" - }, - { - "ordinal": 2, - "name": "edited_by", - "type_info": "Varchar" - }, - { - "ordinal": 3, - "name": "edited_at", - "type_info": "Timestamptz" - }, - { - "ordinal": 4, - "name": "schedule", - "type_info": "Varchar" - }, - { - "ordinal": 5, - "name": "offset_", - "type_info": "Int4" - }, - { - "ordinal": 6, - "name": "enabled", - "type_info": "Bool" - }, - { - "ordinal": 7, - "name": "script_path", - "type_info": "Varchar" - }, - { - "ordinal": 8, - "name": "args", - "type_info": "Jsonb" - }, - { - "ordinal": 9, - "name": "extra_perms", - "type_info": "Jsonb" - }, - { - "ordinal": 10, - "name": "is_flow", - "type_info": "Bool" - } - ], - "parameters": { - "Left": [ - "Text", - "Int8", - "Int8" - ] - }, - "nullable": [ - false, - false, - false, - false, - false, - false, - false, - false, - true, - false, - false - ] - } - }, - "8d631abe38ae964edb357217463a2c1617d4b3b18a7ed0724ad1c65b95980a2c": { - "query": "SELECT value FROM flow WHERE path = $1 AND (workspace_id = $2 OR workspace_id = 'starter')", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "value", - "type_info": "Jsonb" - } - ], - "parameters": { - "Left": [ - "Text", - "Text" - ] - }, - "nullable": [ - false - ] - } - }, - "8dbab3cc7d25a38301c54756a26827a0957c4edb5e68b788c19d3e60b5f038ea": { - "query": "SELECT COUNT(id) FROM queue WHERE created_by = $1 AND workspace_id = $2", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "count", - "type_info": "Int8" - } - ], - "parameters": { - "Left": [ - "Text", - "Text" - ] - }, - "nullable": [ - null - ] - } - }, - "8ede6fb740b145b3a8320adb789500870c7a8ec807a7b156b9ff7a15791b78f8": { - "query": "DELETE FROM usr WHERE workspace_id = $1 AND username = $2", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Text", - "Text" - ] - }, - "nullable": [] - } - }, - "902961f15b8c7603dddf2933b5fc7cdd6e5af3545835763ccb29cdf3ac273ef0": { - "query": "UPDATE password SET password_hash = $1 WHERE email = $2", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Varchar", - "Text" - ] - }, - "nullable": [] - } - }, - "904457944cbfdcefa1934059bbfea015a411c739124cf06367975cfd9cd0dd0d": { - "query": "SELECT * from resource WHERE path = $1 AND (workspace_id = $2 OR workspace_id = 'starter')", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "workspace_id", - "type_info": "Varchar" - }, - { - "ordinal": 1, - "name": "path", - "type_info": "Varchar" - }, - { - "ordinal": 2, - "name": "value", - "type_info": "Jsonb" - }, - { - "ordinal": 3, - "name": "description", - "type_info": "Text" - }, - { - "ordinal": 4, - "name": "resource_type", - "type_info": "Varchar" - }, - { - "ordinal": 5, - "name": "extra_perms", - "type_info": "Jsonb" - } - ], - "parameters": { - "Left": [ - "Text", - "Text" - ] - }, - "nullable": [ - false, - false, - true, - true, - false, - false - ] - } - }, - "90719f6230467b08e5f2cc89271bcf5e4a6cec39e9d9b42ef3b90f09b3135b83": { - "query": "SELECT email, login_type::TEXT, super_admin, verified, name, company FROM password WHERE email = $1", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "email", - "type_info": "Varchar" - }, - { - "ordinal": 1, - "name": "login_type", - "type_info": "Text" - }, - { - "ordinal": 2, - "name": "super_admin", - "type_info": "Bool" - }, - { - "ordinal": 3, - "name": "verified", - "type_info": "Bool" - }, - { - "ordinal": 4, - "name": "name", - "type_info": "Varchar" - }, - { - "ordinal": 5, - "name": "company", - "type_info": "Varchar" - } - ], - "parameters": { - "Left": [ - "Text" - ] - }, - "nullable": [ - false, - null, - false, - false, - true, - true - ] - } - }, - "9490a4388f43e45e32911f1129e623f2d73ce2da7a948fe134bea1c87cdbefd1": { - "query": "SELECT value from resource WHERE path = $1 AND (workspace_id = $2 OR workspace_id = 'starter')", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "value", - "type_info": "Jsonb" - } - ], - "parameters": { - "Left": [ - "Text", - "Text" - ] - }, - "nullable": [ - true - ] - } - }, - "9a581f49d34d62550e58e6210b4bd24b7db499cc5e0350c0ce7024b3d59b13ab": { - "query": "INSERT INTO workspace_settings\n (workspace_id, slack_team_id, slack_name)\n VALUES ($1, $2, $3) ON CONFLICT (workspace_id) DO UPDATE SET slack_team_id = $2, slack_name = $3", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Varchar", - "Varchar", - "Varchar" - ] - }, - "nullable": [] - } - }, - "a151ceeddfd4a2825d4528542d3adc5c0a6947573558a2fd62429ba5da369617": { - "query": "INSERT INTO queue\n (workspace_id, id, parent_job, created_by, permissioned_as, scheduled_for, \n script_hash, script_path, raw_code, args, job_kind, schedule_path, raw_flow, flow_status, is_flow_step)\n VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15) RETURNING id", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "id", - "type_info": "Uuid" - } - ], - "parameters": { - "Left": [ - "Varchar", - "Uuid", - "Uuid", - "Varchar", - "Varchar", - "Timestamptz", - "Int8", - "Varchar", - "Text", - "Jsonb", - { - "Custom": { - "name": "job_kind", - "kind": { - "Enum": [ - "script", - "preview", - "flow", - "dependencies", - "flowpreview" - ] - } - } - }, - "Varchar", - "Jsonb", - "Jsonb", - "Bool" - ] - }, - "nullable": [ - false - ] - } - }, - "a1d46b44718a63d6ce5a9054d493dadbffb205500dc8fb55e9816bcdb613e0d5": { - "query": "DELETE FROM queue WHERE schedule_path = $1", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Text" - ] - }, - "nullable": [] - } - }, - "a34066d4a1578a13b2e322e6936ae80a0239a79148f3edce65f51a93910a1a4b": { - "query": "SELECT email FROM usr where username = $1 AND workspace_id = $2", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "email", - "type_info": "Varchar" - } - ], - "parameters": { - "Left": [ - "Text", - "Text" - ] - }, - "nullable": [ - false - ] - } - }, - "a8507084c0f45f4c08c0b317d69db26f97295bb2d410e3e5b8da2cd420536145": { - "query": "INSERT INTO completed_job as cj\n (workspace_id, id, parent_job, created_by, created_at, duration, success, script_hash, script_path, args, result, logs, \n raw_code, canceled, canceled_by, canceled_reason, job_kind, schedule_path, permissioned_as, flow_status, raw_flow, is_flow_step)\n VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, $18, $19, $20, $21, $22) ON CONFLICT (id) DO UPDATE SET success = $7, result = $11, logs = concat(cj.logs, $12) RETURNING id", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "id", - "type_info": "Uuid" - } - ], - "parameters": { - "Left": [ - "Varchar", - "Uuid", - "Uuid", - "Varchar", - "Timestamptz", - "Int4", - "Bool", - "Int8", - "Varchar", - "Jsonb", - "Jsonb", - "Text", - "Text", - "Bool", - "Varchar", - "Text", - { - "Custom": { - "name": "job_kind", - "kind": { - "Enum": [ - "script", - "preview", - "flow", - "dependencies", - "flowpreview" - ] - } - } - }, - "Varchar", - "Varchar", - "Jsonb", - "Jsonb", - "Bool" - ] - }, - "nullable": [ - false - ] - } - }, - "a98b2d68f023f46ab91167d3147416df672c2aed2ba5ab70e98a9da5fa47255a": { - "query": "INSERT INTO workspace_settings\n (workspace_id)\n VALUES ($1)", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Varchar" - ] - }, - "nullable": [] - } - }, - "aa2800113a8a8805f47cdc1dd0f29d94c546fe531e7edd3e91da4978af5442fb": { - "query": "SELECT * FROM schedule WHERE path = $1 AND workspace_id = $2", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "workspace_id", - "type_info": "Varchar" - }, - { - "ordinal": 1, - "name": "path", - "type_info": "Varchar" - }, - { - "ordinal": 2, - "name": "edited_by", - "type_info": "Varchar" - }, - { - "ordinal": 3, - "name": "edited_at", - "type_info": "Timestamptz" - }, - { - "ordinal": 4, - "name": "schedule", - "type_info": "Varchar" - }, - { - "ordinal": 5, - "name": "offset_", - "type_info": "Int4" - }, - { - "ordinal": 6, - "name": "enabled", - "type_info": "Bool" - }, - { - "ordinal": 7, - "name": "script_path", - "type_info": "Varchar" - }, - { - "ordinal": 8, - "name": "args", - "type_info": "Jsonb" - }, - { - "ordinal": 9, - "name": "extra_perms", - "type_info": "Jsonb" - }, - { - "ordinal": 10, - "name": "is_flow", - "type_info": "Bool" - } - ], - "parameters": { - "Left": [ - "Text", - "Text" - ] - }, - "nullable": [ - false, - false, - false, - false, - false, - false, - false, - false, - true, - false, - false - ] - } - }, - "abc9f034e62ac224894173356aa69e09f3647a45d176e253e4fc8f7206f6a18d": { - "query": "SELECT * FROM group_ WHERE workspace_id = $1 ORDER BY name desc LIMIT $2 OFFSET $3", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "workspace_id", - "type_info": "Varchar" - }, - { - "ordinal": 1, - "name": "name", - "type_info": "Varchar" - }, - { - "ordinal": 2, - "name": "summary", - "type_info": "Text" - }, - { - "ordinal": 3, - "name": "extra_perms", - "type_info": "Jsonb" - } - ], - "parameters": { - "Left": [ - "Text", - "Int8", - "Int8" - ] - }, - "nullable": [ - false, - false, - true, - false - ] - } - }, - "add01e9e31d64e88b84c9505fe3de553031e581b1bb173413a9a3e3eb0817b43": { - "query": "INSERT INTO usr_to_group (workspace_id, usr, group_) VALUES ($1, $2, $3)", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Varchar", - "Varchar", - "Varchar" - ] - }, - "nullable": [] - } - }, - "afe9ea97d6e4c45453e21dc3d218fe8927f9faa58921666ceb7014e1f695d900": { - "query": "INSERT INTO variable\n (workspace_id, path, value, is_secret, description)\n VALUES ($1, $2, $3, $4, $5)", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Varchar", - "Varchar", - "Varchar", - "Bool", - "Varchar" - ] - }, - "nullable": [] - } - }, - "b20977e70ebac7ccbaec5a2a1e940301dd331a5f9a4be67a27cfbff8619ac8f0": { - "query": "INSERT INTO usr\n (workspace_id, email, username, is_admin)\n VALUES ($1, $2, $3, true)", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Varchar", - "Varchar", - "Varchar" - ] - }, - "nullable": [] - } - }, - "b24c1a2587812d2fd40063328ce393377826b170a7970ba02f4057454058321b": { - "query": "UPDATE usr SET is_admin = $1 WHERE username = $2 AND workspace_id = $3", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Bool", - "Text", - "Text" - ] - }, - "nullable": [] - } - }, - "b3b80de52d0931a2fdb5d38b7603a2d69cc25ab1cda413228c363a5ffd777113": { - "query": "SELECT * from workspace_invite WHERE workspace_id = $1", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "workspace_id", - "type_info": "Varchar" - }, - { - "ordinal": 1, - "name": "email", - "type_info": "Varchar" - }, - { - "ordinal": 2, - "name": "is_admin", - "type_info": "Bool" - } - ], - "parameters": { - "Left": [ - "Text" - ] - }, - "nullable": [ - false, - false, - false - ] - } - }, - "b7dd791cd69748ef51b7520f505c0c8bb1b4014a273476eddfecf1ab658a18b4": { - "query": "select hash from script where path = $1 AND (workspace_id = $2 OR workspace_id = 'starter') AND\n created_at = (SELECT max(created_at) FROM script WHERE path = $1 AND (workspace_id = $2 OR workspace_id = 'starter')) AND\n deleted = false", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "hash", - "type_info": "Int8" - } - ], - "parameters": { - "Left": [ - "Text", - "Text" - ] - }, - "nullable": [ - false - ] - } - }, - "b87f19d248b7c5dbb57e9c6c3e4dd8a5bbb70815c06ee8e5bc8d57324eea1617": { - "query": "SELECT (flow_status->'step')::integer FROM queue WHERE id = $1", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "int4", - "type_info": "Int4" - } - ], - "parameters": { - "Left": [ - "Uuid" - ] - }, - "nullable": [ - null - ] - } - }, - "bf1d8e043338867e1da1ed236ff6c85a566d5fd58d4b0d5c3a10454513811ba3": { - "query": "UPDATE workspace_settings\n SET slack_team_id = null, slack_name = null WHERE workspace_id = $1", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Text" - ] - }, - "nullable": [] - } - }, - "bf2aeb9a1e649106d2a084c1d628690a44573c1869a206474811215714ba97c2": { - "query": "DELETE FROM resource WHERE path = $1 AND workspace_id = $2", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Text", - "Text" - ] - }, - "nullable": [] - } - }, - "c213427a32e8903fff649a3e7aa8392d2215665ed04f5a8f2178861e9dba298a": { - "query": "UPDATE schedule SET enabled = $1 WHERE path = $2 AND workspace_id = $3 RETURNING *", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "workspace_id", - "type_info": "Varchar" - }, - { - "ordinal": 1, - "name": "path", - "type_info": "Varchar" - }, - { - "ordinal": 2, - "name": "edited_by", - "type_info": "Varchar" - }, - { - "ordinal": 3, - "name": "edited_at", - "type_info": "Timestamptz" - }, - { - "ordinal": 4, - "name": "schedule", - "type_info": "Varchar" - }, - { - "ordinal": 5, - "name": "offset_", - "type_info": "Int4" - }, - { - "ordinal": 6, - "name": "enabled", - "type_info": "Bool" - }, - { - "ordinal": 7, - "name": "script_path", - "type_info": "Varchar" - }, - { - "ordinal": 8, - "name": "args", - "type_info": "Jsonb" - }, - { - "ordinal": 9, - "name": "extra_perms", - "type_info": "Jsonb" - }, - { - "ordinal": 10, - "name": "is_flow", - "type_info": "Bool" - } - ], - "parameters": { - "Left": [ - "Bool", - "Text", - "Text" - ] - }, - "nullable": [ - false, - false, - false, - false, - false, - false, - false, - false, - true, - false, - false - ] - } - }, - "c2d6cb56c1dea4498e2aab9ea9301dbbaa127602a38f57f5add4108fdc209b1a": { - "query": "SELECT usr.username \n FROM usr_to_group LEFT JOIN usr ON usr_to_group.usr = usr.username \n WHERE group_ = $1 AND usr.workspace_id = $2 AND usr_to_group.workspace_id = $2", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "username", - "type_info": "Varchar" - } - ], - "parameters": { - "Left": [ - "Text", - "Text" - ] - }, - "nullable": [ - false - ] - } - }, - "c59dd666b9a316c027e8c319b80ccbab3a220d93b64357981bd4a03324dad1d0": { - "query": "SELECT is_secret from variable WHERE path = $1 AND workspace_id = $2", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "is_secret", - "type_info": "Bool" - } - ], - "parameters": { - "Left": [ - "Text", - "Text" - ] - }, - "nullable": [ - false - ] - } - }, - "c68d39492686d0fd275acf4eca3844c37d0f58647a100d24afcf090b4b13f85d": { - "query": "SELECT username from usr WHERE workspace_id = $1", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "username", - "type_info": "Varchar" - } - ], - "parameters": { - "Left": [ - "Text" - ] - }, - "nullable": [ - false - ] - } - }, - "cb12aee5f8e04cb196d4b8fad81699fcbb1ae7b0c84090d5705b14eac76074ff": { - "query": "INSERT INTO group_\n VALUES ($1, 'all', 'The group that always contains all users of this workspace')", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Varchar" - ] - }, - "nullable": [] - } - }, - "d2dcf69b20488d610599c309862722f805049e479035be6a416d05d73528a8e1": { - "query": "INSERT INTO group_\n (workspace_id, name, summary)\n VALUES ($1, $2, $3) ON CONFLICT DO NOTHING", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Varchar", - "Varchar", - "Text" - ] - }, - "nullable": [] - } - }, - "d4eb7aea60894b65498144b9bf522beba612f36368d62fe4e94b5b9e26349d32": { - "query": "SELECT EXISTS(SELECT 1 FROM workspace WHERE id = 'demo')", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "exists", - "type_info": "Bool" - } - ], - "parameters": { - "Left": [] - }, - "nullable": [ - null - ] - } - }, - "d5d97005eebcb2760216dbd10872acdb42868fd5f7a27f71836e7a6ff1c69856": { - "query": "DELETE FROM resource_type WHERE name = $1 AND workspace_id = $2", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Text", - "Text" - ] - }, - "nullable": [] - } - }, - "d697b7311430e7bd5375ec5494179f4071e3bfe123d9600249cfa80c1103edd8": { - "query": "UPDATE script SET lock = $1 WHERE hash = $2 AND workspace_id = $3", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Text", - "Int8", - "Text" - ] - }, - "nullable": [] - } - }, - "d9c8f6ec7bd10e533876526255c15e376ccb4f898b9c0ab8840b2930bda24fdc": { - "query": "SELECT * FROM group_ WHERE name = $1 AND workspace_id = $2", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "workspace_id", - "type_info": "Varchar" - }, - { - "ordinal": 1, - "name": "name", - "type_info": "Varchar" - }, - { - "ordinal": 2, - "name": "summary", - "type_info": "Text" - }, - { - "ordinal": 3, - "name": "extra_perms", - "type_info": "Jsonb" - } - ], - "parameters": { - "Left": [ - "Text", - "Text" - ] - }, - "nullable": [ - false, - false, - true, - false - ] - } - }, - "dd60eb23701e97460e307b6152404e939e5bbf22d425cadd876f629134c4a683": { - "query": "INSERT INTO workspace_invite\n (workspace_id, email, is_admin)\n VALUES ('demo', $1, false)", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Varchar" - ] - }, - "nullable": [] - } - }, - "dd7940ec390357b268d616e1880516ecc08d506db2109efcce840f096d7a594e": { - "query": "SELECT EXISTS(SELECT 1 FROM workspace WHERE id = $1)", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "exists", - "type_info": "Bool" - } - ], - "parameters": { - "Left": [ - "Text" - ] - }, - "nullable": [ - null - ] - } - }, - "df8f9b2e601b0157759e9507308ea7df562a7a42516be0fcb465b8e34de0f438": { - "query": "SELECT EXISTS(SELECT 1 FROM workspace WHERE workspace.id = $1)", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "exists", - "type_info": "Bool" - } - ], - "parameters": { - "Left": [ - "Text" - ] - }, - "nullable": [ - null - ] - } - }, - "e3eeda2e19bfbfd5aadd71c40774f7e93c8479a777fdb2828607b1db36361726": { - "query": "INSERT INTO usr_to_group\n VALUES ($1, 'all', $2)", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Varchar", - "Varchar" - ] - }, - "nullable": [] - } - }, - "e5231634fbb37d45e5cf3e5dfb39cb829d224caad1c3ca1712d0fc4c495aa4fc": { - "query": "SELECT hash FROM script WHERE parent_hashes[1] = $1 AND workspace_id = $2", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "hash", - "type_info": "Int8" - } - ], - "parameters": { - "Left": [ - "Int8", - "Text" - ] - }, - "nullable": [ - false - ] - } - }, - "e541e2d255e39cc3372769e3ccbd610441871e9f2af6249a8599a2a720913baa": { - "query": "INSERT INTO schedule (workspace_id, path, schedule, offset_, edited_by, script_path, is_flow, args) VALUES ($1, $2, $3, $4, $5, $6, $7, $8) RETURNING *", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "workspace_id", - "type_info": "Varchar" - }, - { - "ordinal": 1, - "name": "path", - "type_info": "Varchar" - }, - { - "ordinal": 2, - "name": "edited_by", - "type_info": "Varchar" - }, - { - "ordinal": 3, - "name": "edited_at", - "type_info": "Timestamptz" - }, - { - "ordinal": 4, - "name": "schedule", - "type_info": "Varchar" - }, - { - "ordinal": 5, - "name": "offset_", - "type_info": "Int4" - }, - { - "ordinal": 6, - "name": "enabled", - "type_info": "Bool" - }, - { - "ordinal": 7, - "name": "script_path", - "type_info": "Varchar" - }, - { - "ordinal": 8, - "name": "args", - "type_info": "Jsonb" - }, - { - "ordinal": 9, - "name": "extra_perms", - "type_info": "Jsonb" - }, - { - "ordinal": 10, - "name": "is_flow", - "type_info": "Bool" - } - ], - "parameters": { - "Left": [ - "Varchar", - "Varchar", - "Varchar", - "Int4", - "Varchar", - "Varchar", - "Bool", - "Jsonb" - ] - }, - "nullable": [ - false, - false, - false, - false, - false, - false, - false, - false, - true, - false, - false - ] - } - }, - "e94abd39ec51b7e0c48c190d47ed766fd4f401187c3b60b3e599426c95232f7f": { - "query": "UPDATE queue SET last_ping = $1 WHERE id = $2", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Timestamptz", - "Uuid" - ] - }, - "nullable": [] - } - }, - "ea8ebb8d972fe99c960b5a69f794ee2b57bfb1914bf370c5b10313e45fa9b65f": { - "query": "INSERT INTO resource\n (workspace_id, path, value, description, resource_type)\n VALUES ($1, $2, $3, $4, $5) ON CONFLICT (workspace_id, path) DO UPDATE SET value = $3", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Varchar", - "Varchar", - "Jsonb", - "Text", - "Varchar" - ] - }, - "nullable": [] - } - }, - "ef8b14d0feb4bda6a1f9834712ab47bd21e07f0a743f74a8d1f84cb3d54bfdae": { - "query": "SELECT * from usr LIMIT $1 OFFSET $2", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "workspace_id", - "type_info": "Varchar" - }, - { - "ordinal": 1, - "name": "username", - "type_info": "Varchar" - }, - { - "ordinal": 2, - "name": "email", - "type_info": "Varchar" - }, - { - "ordinal": 3, - "name": "is_admin", - "type_info": "Bool" - }, - { - "ordinal": 4, - "name": "created_at", - "type_info": "Timestamptz" - }, - { - "ordinal": 5, - "name": "operator", - "type_info": "Bool" - }, - { - "ordinal": 6, - "name": "disabled", - "type_info": "Bool" - }, - { - "ordinal": 7, - "name": "role", - "type_info": "Varchar" - } - ], - "parameters": { - "Left": [ - "Int8", - "Int8" - ] - }, - "nullable": [ - false, - false, - false, - false, - false, - false, - false, - true - ] - } - }, - "f056b5f3e66a764748925f1bfd3180923fde8c7fdf69088d0e4a5555cc049545": { - "query": "SELECT result FROM completed_job WHERE id = $1 AND workspace_id = $2", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "result", - "type_info": "Jsonb" - } - ], - "parameters": { - "Left": [ - "Uuid", - "Text" - ] - }, - "nullable": [ - true - ] - } - }, - "f12e710a0c2b2e13b98fd522028b6af8be74a9126a8207aa2974b47fd36e1845": { - "query": "INSERT INTO script (workspace_id, hash, path, parent_hashes, summary, description, content, created_by, schema, is_template, extra_perms, lock) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9::text::json, $10, $11, $12)", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Varchar", - "Int8", - "Varchar", - "Int8Array", - "Text", - "Text", - "Text", - "Varchar", - "Text", - "Bool", - "Jsonb", - "Text" - ] - }, - "nullable": [] - } - }, - "f325a1262084bd3468e12dc8bcc289a96536f172b679af54dd0fbc82d4d7c987": { - "query": "DELETE FROM usr_to_group WHERE usr = $1 AND group_ = $2 AND workspace_id = $3", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Text", - "Text", - "Text" - ] - }, - "nullable": [] - } - }, - "f7906298e4204ad55ec84021bb2461f369386493519637279f1188227230c580": { - "query": "SELECT lock, lock_error_logs FROM script WHERE hash = $1 AND (workspace_id = $2 OR workspace_id = 'starter')", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "lock", - "type_info": "Text" - }, - { - "ordinal": 1, - "name": "lock_error_logs", - "type_info": "Text" - } - ], - "parameters": { - "Left": [ - "Int8", - "Text" - ] - }, - "nullable": [ - true, - true - ] - } - }, - "f7f2598ac824e9b5719b96b1d1873ad728f7f786c7f447df6cac3e65d5a53bf1": { - "query": "SELECT workspace.* FROM workspace, usr WHERE usr.workspace_id = workspace.id AND usr.email = $1 AND deleted = false", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "id", - "type_info": "Varchar" - }, - { - "ordinal": 1, - "name": "name", - "type_info": "Varchar" - }, - { - "ordinal": 2, - "name": "owner", - "type_info": "Varchar" - }, - { - "ordinal": 3, - "name": "domain", - "type_info": "Varchar" - }, - { - "ordinal": 4, - "name": "deleted", - "type_info": "Bool" - } - ], - "parameters": { - "Left": [ - "Text" - ] - }, - "nullable": [ - false, - false, - false, - true, - false - ] - } - }, - "f98046a2ee4ac10d9e507c033391dfb0c704dcd513d8b1e5564def4e85f9e80b": { - "query": "INSERT INTO worker_ping (worker_instance, worker, ip) VALUES ($1, $2, $3)", - "describe": { - "columns": [], - "parameters": { - "Left": [ - "Varchar", - "Varchar", - "Varchar" - ] - }, - "nullable": [] - } - }, - "fa258894bd90ea6586669e5810c5c6bcb42d5e1e68fab27fb185d06962b6454a": { - "query": "SELECT * FROM resource WHERE workspace_id = $1", - "describe": { - "columns": [ - { - "ordinal": 0, - "name": "workspace_id", - "type_info": "Varchar" - }, - { - "ordinal": 1, - "name": "path", - "type_info": "Varchar" - }, - { - "ordinal": 2, - "name": "value", - "type_info": "Jsonb" - }, - { - "ordinal": 3, - "name": "description", - "type_info": "Text" - }, - { - "ordinal": 4, - "name": "resource_type", - "type_info": "Varchar" - }, - { - "ordinal": 5, - "name": "extra_perms", - "type_info": "Jsonb" - } - ], - "parameters": { - "Left": [ - "Text" - ] - }, - "nullable": [ - false, - false, - true, - true, - false, - false - ] - } - } -} \ No newline at end of file diff --git a/backend/src/audit.rs b/backend/src/audit.rs deleted file mode 100644 index a291cac3f6430..0000000000000 --- a/backend/src/audit.rs +++ /dev/null @@ -1,159 +0,0 @@ -/* - * Author & Copyright: Ruben Fiszel 2021 - * This file and its contents are licensed under the AGPLv3 License. - * Please see the included NOTICE for copyright information and - * LICENSE-AGPL for a copy of the license. - */ - -use sql_builder::prelude::*; - -use std::collections::HashMap; - -use crate::{ - db::UserDB, - error::{Error, JsonResult, Result}, - users::Authed, - utils::Pagination, -}; -use axum::{ - extract::{Extension, Path, Query}, - routing::get, - Json, Router, -}; - -use serde::{Deserialize, Serialize}; -use sql_builder::SqlBuilder; -use sqlx::{FromRow, Postgres, Transaction}; - -pub fn workspaced_service() -> Router { - Router::new() - .route("/list", get(list_audit)) - .route("/get/:id", get(get_audit)) -} - -#[derive(sqlx::Type, Serialize, Deserialize, Debug)] -#[sqlx(type_name = "ACTION_KIND", rename_all = "lowercase")] -pub enum ActionKind { - Create, - Update, - Delete, - Execute, -} - -#[derive(FromRow, Serialize, Deserialize)] -pub struct AuditLog { - pub workspace_id: String, - pub id: i32, - pub timestamp: chrono::DateTime, - pub username: String, - pub operation: String, - pub action_kind: ActionKind, - pub resource: Option, - pub parameters: Option, -} - -pub async fn audit_log<'c>( - db: &mut Transaction<'c, Postgres>, - username: &str, - operation: &str, - action_kind: ActionKind, - w_id: &str, - resource: Option<&str>, - parameters: Option>, -) -> Result<()> { - let p_json: serde_json::Value = serde_json::to_value(¶meters).unwrap(); - - tracing::info!( - username = username, - kind = "audit", - operation = operation, - workspace = w_id, - action_kind = ?action_kind, - resource = resource, - parameters = %p_json - ); - sqlx::query( - "INSERT INTO audit - (workspace_id, username, operation, action_kind, resource, parameters) - VALUES ($1, $2, $3, $4, $5, $6)", - ) - .bind(w_id) - .bind(username) - .bind(operation) - .bind(action_kind) - .bind(resource) - .bind(p_json) - .execute(db) - .await?; - Ok(()) -} - -#[derive(Deserialize)] -pub struct ListAuditLogQuery { - pub username: Option, - pub operation: Option, - pub action_kind: Option, - pub resource: Option, - pub before: Option>, - pub after: Option>, -} - -async fn list_audit( - authed: Authed, - Extension(user_db): Extension, - Path(w_id): Path, - Query(pagination): Query, - Query(lq): Query, -) -> JsonResult> { - let (per_page, offset) = crate::utils::paginate(pagination); - - let mut sqlb = SqlBuilder::select_from("audit") - .field("*") - .order_by("id", true) - .and_where_eq("workspace_id", "?".bind(&w_id)) - .offset(offset) - .limit(per_page) - .clone(); - - if let Some(u) = &lq.username { - sqlb.and_where_eq("username", "?".bind(u)); - } - if let Some(o) = &lq.operation { - sqlb.and_where_eq("operation", "?".bind(o)); - } - if let Some(ak) = &lq.action_kind { - sqlb.and_where_eq("action_kind", "?".bind(ak)); - } - if let Some(r) = &lq.resource { - sqlb.and_where_eq("resource", "?".bind(r)); - } - if let Some(b) = &lq.before { - sqlb.and_where_le("timestamp", format!("to_timestamp({})", b.timestamp())); - } - if let Some(a) = &lq.after { - sqlb.and_where_gt("timestamp", format!("to_timestamp({})", a.timestamp())); - } - - let sql = sqlb.sql().map_err(|e| Error::InternalErr(e.to_string()))?; - let mut tx = user_db.begin(&authed).await?; - let rows = sqlx::query_as::<_, AuditLog>(&sql) - .fetch_all(&mut tx) - .await?; - tx.commit().await?; - Ok(Json(rows)) -} - -async fn get_audit( - authed: Authed, - Extension(user_db): Extension, - Path(id): Path, -) -> JsonResult { - let mut tx = user_db.begin(&authed).await?; - let audit_o = sqlx::query_as::<_, AuditLog>("SELECT * FROM audit WHERE id = $1") - .bind(id) - .fetch_optional(&mut tx) - .await?; - tx.commit().await?; - let audit = crate::utils::not_found_if_none(audit_o, "AuditLog", &id.to_string())?; - Ok(Json(audit)) -} diff --git a/backend/src/client.rs b/backend/src/client.rs deleted file mode 100644 index 4206900fd81ae..0000000000000 --- a/backend/src/client.rs +++ /dev/null @@ -1,44 +0,0 @@ -use crate::{error::Error, variables::ListableVariable}; - -pub async fn get_variable( - workspace: &str, - path: &str, - token: &str, - base_url: &str, -) -> Result { - let client = reqwest::Client::new(); - let res = client - .get(format!("{base_url}/api/w/{workspace}/variables/get/{path}")) - .bearer_auth(token) - .send() - .await?; - if res.status().is_success() { - let value = res - .json::() - .await? - .value - .unwrap_or_else(|| "".to_string()); - Ok(value) - } else { - Err(Error::NotFound(format!("Variable not found at {path}")))? - } -} - -pub async fn get_resource( - workspace: &str, - path: &str, - token: &str, - base_url: &str, -) -> Result, anyhow::Error> { - let client = reqwest::Client::new(); - let result = client - .get(format!( - "{base_url}/api/w/{workspace}/resources/get_value/{path}" - )) - .bearer_auth(token) - .send() - .await? - .json::>() - .await?; - Ok(result) -} diff --git a/backend/src/db.rs b/backend/src/db.rs deleted file mode 100644 index 07d05f5ab9840..0000000000000 --- a/backend/src/db.rs +++ /dev/null @@ -1,93 +0,0 @@ -/* - * Author & Copyright: Ruben Fiszel 2021 - * This file and its contents are licensed under the AGPLv3 License. - * Please see the included NOTICE for copyright information and - * LICENSE-AGPL for a copy of the license. - */ - -use crate::{error::Error, users::Authed}; -use sqlx::{postgres::PgPoolOptions, Pool, Postgres, Transaction}; -use std::time::Duration; - -pub type DB = Pool; - -pub async fn connect(database_url: &str) -> Result { - PgPoolOptions::new() - .max_connections(100) - .max_lifetime(Duration::from_secs(30 * 60)) // 30 mins - .connect(database_url) - .await - .map_err(|err| Error::ConnectingToDatabase(err.to_string())) -} - -pub async fn migrate(db: &DB) -> Result<(), Error> { - match sqlx::migrate!("./migrations").run(db).await { - Ok(_) => Ok(()), - Err(err) => Err(err), - }?; - - Ok(()) -} - -pub async fn setup_app_user(db: &DB, password: &str) -> Result<(), Error> { - let mut tx = db.begin().await?; - - sqlx::query(&format!("ALTER USER app WITH PASSWORD '{}'", password)) - .execute(&mut tx) - .await?; - sqlx::query(&format!("ALTER USER admin WITH PASSWORD '{}'", password)) - .execute(&mut tx) - .await?; - tx.commit().await?; - - Ok(()) -} -#[derive(Clone)] -pub struct UserDB { - db: DB, -} - -impl UserDB { - pub fn new(db: DB) -> Self { - Self { db } - } - - pub async fn begin( - self, - authed: &Authed, - ) -> Result, sqlx::Error> { - let mut tx = self.db.begin().await?; - let user = if authed.is_admin { "admin" } else { "app" }; - - sqlx::query(&format!("SET LOCAL SESSION AUTHORIZATION {}", user)) - .execute(&mut tx) - .await?; - - sqlx::query!( - "SELECT set_config('session.user', $1, true)", - authed.username - ) - .fetch_optional(&mut tx) - .await?; - - sqlx::query!( - "SELECT set_config('session.groups', $1, true)", - &authed.groups.join(",") - ) - .fetch_optional(&mut tx) - .await?; - - sqlx::query!( - "SELECT set_config('session.pgroups', $1, true)", - &authed - .groups - .iter() - .map(|x| format!("g/{}", x)) - .collect::>() - .join(",") - ) - .fetch_optional(&mut tx) - .await?; - Ok(tx) - } -} diff --git a/backend/src/ee.rs b/backend/src/ee.rs new file mode 100644 index 0000000000000..ef944b984bb62 --- /dev/null +++ b/backend/src/ee.rs @@ -0,0 +1,16 @@ +use anyhow::anyhow; +#[cfg(feature = "enterprise")] +use windmill_common::error::{Error, Result}; + +pub async fn set_license_key(_license_key: String) -> anyhow::Result<()> { + // Implementation is not open source + Err(anyhow!("License cannot be set in Windmill CE")) +} + +#[cfg(feature = "enterprise")] +pub async fn verify_license_key() -> Result<()> { + // Implementation is not open source + Err(Error::InternalErr( + "License always invalid in Windmill CE".to_string(), + )) +} diff --git a/backend/src/email.rs b/backend/src/email.rs deleted file mode 100644 index b0d7d9c526ecc..0000000000000 --- a/backend/src/email.rs +++ /dev/null @@ -1,31 +0,0 @@ -use lettre::{ - transport::smtp::authentication::Credentials, AsyncSmtpTransport, AsyncTransport, Message, - Tokio1Executor, -}; - -use crate::error::{Error, Result}; - -pub struct EmailSender { - pub from: String, - pub server: String, - pub password: String, -} - -impl EmailSender { - pub async fn send_email(&self, email: Message) -> Result<()> { - let creds = Credentials::new(self.from.to_string(), self.password.to_string()); - - // Open a remote connection to gmail - let mailer: AsyncSmtpTransport = - AsyncSmtpTransport::::relay(&self.server) - .unwrap() - .credentials(creds) - .build(); - - mailer - .send(email) - .await - .map_err(|x| Error::InternalErr(format!("Impossible to send email {x}")))?; - Ok(()) - } -} diff --git a/backend/src/error.rs b/backend/src/error.rs deleted file mode 100644 index 85ff21157379d..0000000000000 --- a/backend/src/error.rs +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Author & Copyright: Ruben Fiszel 2021 - * This file and its contents are licensed under the AGPLv3 License. - * Please see the included NOTICE for copyright information and - * LICENSE-AGPL for a copy of the license. - */ - -use axum::{ - body::{self, BoxBody}, - response::IntoResponse, - Json, -}; -use hyper::{Response, StatusCode}; -use sqlx::migrate::MigrateError; -use thiserror::Error; -use tokio::io; - -pub type Result = std::result::Result; -pub type JsonResult = std::result::Result, Error>; - -#[derive(Debug, Error)] -pub enum Error { - #[error("Uuid Error {0}")] - UuidErr(#[from] uuid::Error), - #[error("Bad config: {0}")] - BadConfig(String), - #[error("Connecting to database: {0}")] - ConnectingToDatabase(String), - #[error("Not found: {0}")] - NotFound(String), - #[error("Not authorized: {0}")] - NotAuthorized(String), - #[error("{0}")] - ExecutionErr(String), - #[error("IO error: {0}")] - IoErr(#[from] io::Error), - #[error("Sql error: {0}")] - SqlErr(#[from] sqlx::Error), - #[error("Bad request: {0}")] - BadRequest(String), - #[error("Internal: {0}")] - InternalErr(String), - #[error("Hexadecimal decoding error: {0}")] - HexErr(#[from] hex::FromHexError), - #[error("Migrating database: {0}")] - DatabaseMigration(#[from] MigrateError), - #[error("{0}")] - Anyhow(#[from] anyhow::Error), -} - -pub fn to_anyhow(e: T) -> anyhow::Error { - From::from(e) -} - -impl IntoResponse for Error { - fn into_response(self) -> Response { - let e = &self; - let body = body::boxed(body::Full::from(e.to_string())); - let status = match self { - Self::NotFound(_) => StatusCode::NOT_FOUND, - Self::NotAuthorized(_) => StatusCode::UNAUTHORIZED, - Self::SqlErr(_) | Self::BadRequest(_) => StatusCode::BAD_REQUEST, - _ => StatusCode::INTERNAL_SERVER_ERROR, - }; - Response::builder().status(status).body(body).unwrap() - } -} diff --git a/backend/src/flow.rs b/backend/src/flow.rs deleted file mode 100644 index 90f0eea71935c..0000000000000 --- a/backend/src/flow.rs +++ /dev/null @@ -1,326 +0,0 @@ -/* - * Author & Copyright: Ruben Fiszel 2021 - * This file and its contents are licensed under the AGPLv3 License. - * Please see the included NOTICE for copyright information and - * LICENSE-AGPL for a copy of the license. - */ - -use std::collections::HashMap; - -use sql_builder::prelude::*; - -use axum::{ - extract::{Extension, Path, Query}, - routing::{get, post}, - Json, Router, -}; -use serde::{Deserialize, Serialize}; -use sql_builder::SqlBuilder; -use sqlx::FromRow; - -use crate::{ - audit::{audit_log, ActionKind}, - db::UserDB, - error::{Error, JsonResult, Result}, - scripts::Schema, - users::Authed, - utils::{Pagination, StripPath}, -}; - -pub fn workspaced_service() -> Router { - Router::new() - .route("/list", get(list_flows)) - .route("/create", post(create_flow)) - .route("/update/*path", post(update_flow)) - .route("/archive/*path", post(archive_flow_by_path)) - .route("/get/*path", get(get_flow_by_path)) -} - -#[derive(FromRow, Serialize)] -pub struct Flow { - pub workspace_id: String, - pub path: String, - pub summary: String, - pub description: String, - pub value: serde_json::Value, - pub edited_by: String, - pub edited_at: chrono::DateTime, - pub archived: bool, - pub schema: Option, - pub extra_perms: serde_json::Value, -} - -#[derive(FromRow, Deserialize)] -pub struct NewFlow { - pub path: String, - pub summary: String, - pub description: String, - pub value: serde_json::Value, - pub schema: Option, -} - -#[derive(Deserialize, Serialize)] -pub struct FlowValue { - pub modules: Vec, - pub failure_module: Option, -} - -#[derive(Deserialize, Serialize)] -pub struct FlowModule { - pub input_transform: HashMap, - pub value: FlowModuleValue, -} - -#[derive(Deserialize, Serialize)] -#[serde( - tag = "type", - rename_all(serialize = "lowercase", deserialize = "lowercase") -)] -pub enum InputTransform { - Static { value: serde_json::Value }, - Javascript { expr: String }, - Resource { path: String }, -} - -#[derive(Serialize, Deserialize, Debug)] -#[serde( - tag = "type", - rename_all(serialize = "lowercase", deserialize = "lowercase") -)] -pub enum FlowModuleValue { - Script { path: String }, - Flow { path: String }, -} - -#[derive(Deserialize)] -pub struct ListFlowQuery { - pub path_start: Option, - pub path_exact: Option, - pub edited_by: Option, - pub show_archived: Option, - pub order_by: Option, - pub order_desc: Option, -} - -async fn list_flows( - authed: Authed, - Extension(user_db): Extension, - Path(w_id): Path, - Query(pagination): Query, - Query(lq): Query, -) -> JsonResult> { - let (per_page, offset) = crate::utils::paginate(pagination); - - let mut sqlb = SqlBuilder::select_from("flow as o") - .fields(&[ - "workspace_id", - "path", - "summary", - "description", - "'{}'::jsonb as value", - "edited_by", - "edited_at", - "archived", - "schema", - "extra_perms", - ]) - .order_by("edited_at", lq.order_desc.unwrap_or(true)) - .and_where("workspace_id = ? OR workspace_id = 'starter'".bind(&w_id)) - .offset(offset) - .limit(per_page) - .clone(); - - if !lq.show_archived.unwrap_or(false) { - sqlb.and_where_eq("archived", false); - } - if let Some(ps) = &lq.path_start { - sqlb.and_where_like_left("path", "?".bind(ps)); - } - if let Some(p) = &lq.path_exact { - sqlb.and_where_eq("path", "?".bind(p)); - } - if let Some(cb) = &lq.edited_by { - sqlb.and_where_eq("edited_by", "?".bind(cb)); - } - - let sql = sqlb.sql().map_err(|e| Error::InternalErr(e.to_string()))?; - let mut tx = user_db.begin(&authed).await?; - let rows = sqlx::query_as::<_, Flow>(&sql).fetch_all(&mut tx).await?; - tx.commit().await?; - Ok(Json(rows)) -} - -async fn create_flow( - authed: Authed, - Extension(user_db): Extension, - Path(w_id): Path, - Json(nf): Json, -) -> Result { - // cron::Schedule::from_str(&ns.schedule).map_err(|e| error::Error::BadRequest(e.to_string()))?; - let mut tx = user_db.begin(&authed).await?; - - sqlx::query!( - "INSERT INTO flow (workspace_id, path, summary, description, value, edited_by, edited_at, schema) VALUES ($1, $2, $3, $4, $5, $6, $7, $8::text::json)", - w_id, - nf.path, - nf.summary, - nf.description, - nf.value, - &authed.username, - &chrono::Utc::now(), - nf.schema.and_then(|x| serde_json::to_string(&x.0).ok()), - ) - .execute(&mut tx) - .await?; - - audit_log( - &mut tx, - &authed.username, - "flows.create", - ActionKind::Create, - &w_id, - Some(&nf.path.to_string()), - Some( - [Some(("flow", nf.path.as_str()))] - .into_iter() - .flatten() - .collect(), - ), - ) - .await?; - - tx.commit().await?; - Ok(nf.path.to_string()) -} - -async fn update_flow( - authed: Authed, - Extension(user_db): Extension, - Path((w_id, flow_path)): Path<(String, StripPath)>, - Json(nf): Json, -) -> Result { - let mut tx = user_db.begin(&authed).await?; - - let flow_path = flow_path.to_path(); - let schema = nf.schema.map(|x| x.0); - let flow = sqlx::query_scalar!( - "UPDATE flow SET path = $1, summary = $2, description = $3, value = $4, edited_by = $5, edited_at = $6, schema = $7 WHERE path = $8 AND workspace_id = $9 RETURNING path", - nf.path, - nf.summary, - nf.description, - nf.value, - &authed.username, - &chrono::Utc::now(), - schema, - flow_path, - w_id, - ) - .fetch_optional(&mut tx) - .await?; - crate::utils::not_found_if_none(flow, "Flow", flow_path)?; - - audit_log( - &mut tx, - &authed.username, - "flows.update", - ActionKind::Create, - &w_id, - Some(&nf.path.to_string()), - Some( - [Some(("flow", nf.path.as_str()))] - .into_iter() - .flatten() - .collect(), - ), - ) - .await?; - - tx.commit().await?; - Ok(nf.path.to_string()) -} - -async fn get_flow_by_path( - authed: Authed, - Extension(user_db): Extension, - Path((w_id, path)): Path<(String, StripPath)>, -) -> JsonResult { - let path = path.to_path(); - let mut tx = user_db.begin(&authed).await?; - - let flow_o = sqlx::query_as::<_, Flow>( - "SELECT * FROM flow WHERE path = $1 AND (workspace_id = $2 OR workspace_id = 'starter')", - ) - .bind(path) - .bind(w_id) - .fetch_optional(&mut tx) - .await?; - tx.commit().await?; - - let flow = crate::utils::not_found_if_none(flow_o, "Flow", path)?; - Ok(Json(flow)) -} - -async fn archive_flow_by_path( - authed: Authed, - Extension(user_db): Extension, - Path((w_id, path)): Path<(String, StripPath)>, -) -> Result { - let path = path.to_path(); - let mut tx = user_db.begin(&authed).await?; - - sqlx::query!( - "UPDATE flow SET archived = true WHERE path = $1 AND workspace_id = $2", - path, - &w_id - ) - .execute(&mut tx) - .await?; - - audit_log( - &mut tx, - &authed.username, - "flows.archive", - ActionKind::Delete, - &w_id, - Some(path), - Some([("workspace", w_id.as_str())].into()), - ) - .await?; - tx.commit().await?; - - Ok(format!("Flow {path} archived")) -} - -#[cfg(test)] -mod tests { - - // Note this useful idiom: importing names from outer (for mod tests) scope. - use super::*; - - #[test] - fn test_serialize() -> anyhow::Result<()> { - let mut hm = HashMap::new(); - hm.insert( - "test".to_owned(), - InputTransform::Static { - value: serde_json::json!("test2"), - }, - ); - let fv = FlowValue { - modules: vec![FlowModule { - input_transform: hm, - value: FlowModuleValue::Script { - path: "test".to_string(), - }, - }], - failure_module: Some(FlowModule { - input_transform: HashMap::new(), - value: FlowModuleValue::Flow { - path: "test".to_string(), - }, - }), - }; - println!("{}", serde_json::json!(fv).to_string()); - Ok(()) - } -} diff --git a/backend/src/granular_acls.rs b/backend/src/granular_acls.rs deleted file mode 100644 index 0b2b03b585d5e..0000000000000 --- a/backend/src/granular_acls.rs +++ /dev/null @@ -1,116 +0,0 @@ -/* - * Author & Copyright: Ruben Fiszel 2021 - * This file and its contents are licensed under the AGPLv3 License. - * Please see the included NOTICE for copyright information and - * LICENSE-AGPL for a copy of the license. - */ - -use crate::{ - db::UserDB, - error::{Error, JsonResult, Result}, - users::Authed, - utils::StripPath, -}; -use axum::{ - extract::{Extension, Path}, - routing::{get, post}, - Json, Router, -}; - -use serde::{Deserialize, Serialize}; - -pub fn workspaced_service() -> Router { - Router::new() - .route("/get/*path", get(get_granular_acls)) - .route("/add/*path", post(add_granular_acl)) - .route("/remove/*path", post(remove_granular_acl)) -} - -#[derive(Serialize, Deserialize)] -pub struct GranularAcl { - pub owner: String, - pub write: Option, -} - -async fn add_granular_acl( - authed: Authed, - Extension(user_db): Extension, - Path((w_id, path)): Path<(String, StripPath)>, - Json(GranularAcl { owner, write }): Json, -) -> Result { - let path = path.to_path(); - let (kind, path) = path - .split_once('/') - .ok_or_else(|| Error::BadRequest("Invalid path or kind".to_string()))?; - let mut tx = user_db.begin(&authed).await?; - - let identifier = if kind == "group_" { "name" } else { "path" }; - let obj_o = sqlx::query_scalar::<_, serde_json::Value>(&format!( - "UPDATE {kind} SET extra_perms = jsonb_set(extra_perms, '{{\"{owner}\"}}', to_jsonb($1), true) WHERE {identifier} = $2 AND workspace_id = $3 RETURNING extra_perms" - )) - .bind(write.unwrap_or(false)) - .bind(path) - .bind(&w_id) - .fetch_optional(&mut tx) - .await?; - - let _ = crate::utils::not_found_if_none(obj_o, &kind, &path)?; - tx.commit().await?; - - Ok("Successfully modified granular acl".to_string()) -} - -async fn remove_granular_acl( - authed: Authed, - Extension(user_db): Extension, - Path((w_id, path)): Path<(String, StripPath)>, - Json(GranularAcl { owner, write: _ }): Json, -) -> Result { - let path = path.to_path(); - let (kind, path) = path - .split_once('/') - .ok_or_else(|| Error::BadRequest("Invalid path or kind".to_string()))?; - let mut tx = user_db.begin(&authed).await?; - - let identifier = if kind == "group_" { "name" } else { "path" }; - let obj_o = sqlx::query_scalar::<_, serde_json::Value>(&format!( - "UPDATE {kind} SET extra_perms = extra_perms - $1 WHERE {identifier} = $2 AND workspace_id = $3 RETURNING extra_perms" - )) - .bind(owner) - .bind(path) - .bind(w_id) - .fetch_optional(&mut tx) - .await?; - - let _ = crate::utils::not_found_if_none(obj_o, &kind, &path)?; - tx.commit().await?; - - Ok("Successfully removed granular acl".to_string()) -} - -async fn get_granular_acls( - authed: Authed, - Extension(user_db): Extension, - Path((w_id, path)): Path<(String, StripPath)>, -) -> JsonResult { - let path = path.to_path(); - let (kind, path) = path - .split_once('/') - .ok_or_else(|| Error::BadRequest("Invalid path or kind".to_string()))?; - - let mut tx = user_db.begin(&authed).await?; - - let identifier = if kind == "group_" { "name" } else { "path" }; - let obj_o = sqlx::query_scalar::<_, serde_json::Value>(&format!( - "SELECT extra_perms from {kind} WHERE {identifier} = $1 AND workspace_id = $2" - )) - .bind(path) - .bind(w_id) - .fetch_optional(&mut tx) - .await?; - - let obj = crate::utils::not_found_if_none(obj_o, &kind, &path)?; - tx.commit().await?; - - Ok(Json(obj)) -} diff --git a/backend/src/groups.rs b/backend/src/groups.rs deleted file mode 100644 index 2c63d904ae0d2..0000000000000 --- a/backend/src/groups.rs +++ /dev/null @@ -1,330 +0,0 @@ -/* - * Author & Copyright: Ruben Fiszel 2021 - * This file and its contents are licensed under the AGPLv3 License. - * Please see the included NOTICE for copyright information and - * LICENSE-AGPL for a copy of the license. - */ - -use crate::{ - audit::{audit_log, ActionKind}, - db::{UserDB, DB}, - error::{Error, JsonResult, Result}, - users::{owner_to_token_owner, Authed}, - utils::Pagination, -}; -use axum::{ - extract::{Extension, Path, Query}, - routing::{delete, get, post}, - Json, Router, -}; - -use serde::{Deserialize, Serialize}; -use sqlx::{FromRow, Postgres, Transaction}; - -pub fn workspaced_service() -> Router { - Router::new() - .route("/list", get(list_groups)) - .route("/listnames", get(list_group_names)) - .route("/create", post(create_group)) - .route("/get/:name", get(get_group)) - .route("/update/:name", post(update_group)) - .route("/delete/:name", delete(delete_group)) - .route("/adduser/:name", post(add_user)) - .route("/removeuser/:name", post(remove_user)) -} - -#[derive(FromRow, Serialize, Deserialize)] -pub struct Group { - pub workspace_id: String, - pub name: String, - pub summary: Option, - pub extra_perms: serde_json::Value, -} - -#[derive(Deserialize)] -pub struct NewGroup { - pub name: String, - pub summary: Option, -} - -#[derive(Serialize)] -pub struct GroupInfo { - pub workspace_id: String, - pub name: String, - pub summary: Option, - pub members: Vec, - pub extra_perms: serde_json::Value, -} - -#[derive(Deserialize)] -pub struct EditGroup { - pub summary: Option, -} - -#[derive(Deserialize)] -pub struct Username { - pub username: String, -} - -async fn list_groups( - Extension(db): Extension, - Path(w_id): Path, - Query(pagination): Query, -) -> JsonResult> { - let (per_page, offset) = crate::utils::paginate(pagination); - - let rows = sqlx::query_as!( - Group, - "SELECT * FROM group_ WHERE workspace_id = $1 ORDER BY name desc LIMIT $2 OFFSET $3", - w_id, - per_page as i64, - offset as i64 - ) - .fetch_all(&db) - .await?; - - Ok(Json(rows)) -} - -async fn list_group_names( - Extension(db): Extension, - Path(w_id): Path, -) -> JsonResult> { - let rows = sqlx::query_scalar!( - "SELECT name FROM group_ WHERE workspace_id = $1 ORDER BY name desc", - w_id - ) - .fetch_all(&db) - .await?; - - Ok(Json(rows)) -} - -async fn create_group( - authed: Authed, - Extension(user_db): Extension, - Path(w_id): Path, - Json(ng): Json, -) -> Result { - let mut tx = user_db.begin(&authed).await?; - - sqlx::query_as!( - Group, - "INSERT INTO group_ (workspace_id, name, summary, extra_perms) VALUES ($1, $2, $3, $4)", - w_id, - ng.name, - ng.summary, - serde_json::json!({owner_to_token_owner(&authed.username, false): true}) - ) - .execute(&mut tx) - .await?; - - audit_log( - &mut tx, - &authed.username, - "group.create", - ActionKind::Create, - &w_id, - Some(&ng.name.to_string()), - None, - ) - .await?; - - tx.commit().await?; - Ok(format!("Created group {}", ng.name)) -} - -pub async fn get_group_opt<'c>( - db: &mut Transaction<'c, Postgres>, - w_id: &str, - name: &str, -) -> Result> { - let group_opt = sqlx::query_as!( - Group, - "SELECT * FROM group_ WHERE name = $1 AND workspace_id = $2", - name, - w_id - ) - .fetch_optional(db) - .await?; - Ok(group_opt) -} - -async fn get_group( - authed: Authed, - Extension(user_db): Extension, - Path((w_id, name)): Path<(String, String)>, -) -> JsonResult { - let mut tx = user_db.begin(&authed).await?; - - let group = crate::utils::not_found_if_none( - get_group_opt(&mut tx, &w_id, &name).await?, - "Group", - &name, - )?; - - let members = sqlx::query_scalar!( - "SELECT usr.username - FROM usr_to_group LEFT JOIN usr ON usr_to_group.usr = usr.username - WHERE group_ = $1 AND usr.workspace_id = $2 AND usr_to_group.workspace_id = $2", - name, - w_id - ) - .fetch_all(&mut tx) - .await?; - - tx.commit().await?; - Ok(Json(GroupInfo { - workspace_id: group.workspace_id, - name: group.name, - summary: group.summary, - members, - extra_perms: group.extra_perms, - })) -} - -async fn delete_group( - authed: Authed, - Extension(user_db): Extension, - Path((w_id, name)): Path<(String, String)>, -) -> Result { - let mut tx = user_db.begin(&authed).await?; - - crate::utils::not_found_if_none(get_group_opt(&mut tx, &w_id, &name).await?, "Group", &name)?; - - sqlx::query!( - "DELETE FROM usr_to_group WHERE group_ = $1 AND workspace_id = $2", - name, - w_id - ) - .execute(&mut tx) - .await?; - sqlx::query!( - "DELETE FROM group_ WHERE name = $1 AND workspace_id = $2", - name, - w_id - ) - .execute(&mut tx) - .await?; - audit_log( - &mut tx, - &authed.username, - "group.delete", - ActionKind::Delete, - &w_id, - Some(&name.to_string()), - None, - ) - .await?; - tx.commit().await?; - Ok(format!("delete group at name {}", name)) -} - -async fn update_group( - authed: Authed, - Extension(user_db): Extension, - Path((w_id, name)): Path<(String, String)>, - Json(eg): Json, -) -> Result { - let mut tx = user_db.begin(&authed).await?; - - crate::utils::not_found_if_none(get_group_opt(&mut tx, &w_id, &name).await?, "Group", &name)?; - - sqlx::query_as!( - Group, - "UPDATE group_ SET summary = $1 WHERE name = $2 AND workspace_id = $3", - eg.summary, - &name, - &w_id - ) - .execute(&mut tx) - .await?; - - audit_log( - &mut tx, - &authed.username, - "group.edit", - ActionKind::Update, - &w_id, - Some(&name.to_string()), - None, - ) - .await?; - tx.commit().await?; - Ok(format!("Edited group {}", name)) -} - -async fn add_user( - authed: Authed, - Extension(user_db): Extension, - Path((w_id, name)): Path<(String, String)>, - Json(Username { - username: user_username, - }): Json, -) -> Result { - let mut tx = user_db.begin(&authed).await?; - - crate::utils::not_found_if_none(get_group_opt(&mut tx, &w_id, &name).await?, "Group", &name)?; - - sqlx::query_as!( - Group, - "INSERT INTO usr_to_group (workspace_id, usr, group_) VALUES ($1, $2, $3)", - &w_id, - user_username, - name, - ) - .execute(&mut tx) - .await?; - - audit_log( - &mut tx, - &authed.username, - "group.adduser", - ActionKind::Update, - &w_id, - Some(&name.to_string()), - Some([("user", user_username.as_str())].into()), - ) - .await?; - tx.commit().await?; - Ok(format!("Added {} to group {}", user_username, name)) -} - -async fn remove_user( - authed: Authed, - Extension(user_db): Extension, - Path((w_id, name)): Path<(String, String)>, - Json(Username { - username: user_username, - }): Json, -) -> Result { - let mut tx = user_db.begin(&authed).await?; - - crate::utils::not_found_if_none(get_group_opt(&mut tx, &w_id, &name).await?, "Group", &name)?; - if &name == "all" { - return Err(Error::BadRequest(format!("Cannot delete users from all"))); - } - sqlx::query_as!( - Group, - "DELETE FROM usr_to_group WHERE usr = $1 AND group_ = $2 AND workspace_id = $3", - user_username, - name, - &w_id, - ) - .execute(&mut tx) - .await?; - - audit_log( - &mut tx, - &authed.username, - "group.removeuser", - ActionKind::Update, - &w_id, - Some(&name.to_string()), - Some([("user", user_username.as_str())].into()), - ) - .await?; - - tx.commit().await?; - Ok(format!("Removed {} to group {}", user_username, name)) -} diff --git a/backend/src/jobs.rs b/backend/src/jobs.rs deleted file mode 100644 index 492e84054cce9..0000000000000 --- a/backend/src/jobs.rs +++ /dev/null @@ -1,1525 +0,0 @@ -/* - * Author & Copyright: Ruben Fiszel 2021 - * This file and its contents are licensed under the AGPLv3 License. - * Please see the included NOTICE for copyright information and - * LICENSE-AGPL for a copy of the license. - */ - -use chrono::Duration; - -use sql_builder::prelude::*; -use sqlx::{query_scalar, Postgres, Transaction}; -use std::collections::HashMap; - -use crate::js_eval::eval_timeout; -use crate::users::create_token_for_owner; -use crate::{ - audit::{audit_log, ActionKind}, - db::{UserDB, DB}, - error, - error::Error, - flow::{FlowModuleValue, FlowValue, InputTransform}, - schedule::get_schedule_opt, - scripts::ScriptHash, - users::{owner_to_token_owner, Authed}, - utils::{require_admin, Pagination, StripPath}, -}; -use axum::{ - extract::{Extension, Path, Query}, - routing::{get, post}, - Json, Router, -}; -use hyper::StatusCode; -use serde::{Deserialize, Serialize}; -use serde_json::{json, Map, Value}; -use sql_builder::SqlBuilder; - -use ulid::Ulid; -use uuid::Uuid; - -const MAX_NB_OF_JOBS_IN_Q_PER_USER: i64 = 10; -const MAX_DURATION_LAST_1200: i64 = 400; - -pub fn workspaced_service() -> Router { - Router::new() - .route("/run/f/*script_path", post(run_flow_by_path)) - .route("/run/p/*script_path", post(run_job_by_path)) - .route("/run/h/:hash", post(run_job_by_hash)) - .route("/run/preview", post(run_preview_job)) - .route("/run/preview_flow", post(run_preview_flow_job)) - .route("/list", get(list_jobs)) - .route("/queue/list", get(list_queue_jobs)) - .route("/queue/cancel/:id", post(cancel_job)) - .route("/completed/list", get(list_completed_jobs)) - .route("/completed/get/:id", get(get_completed_job)) - .route("/completed/get_result/:id", get(get_completed_job_result)) - .route("/completed/delete/:id", post(delete_completed_job)) - .route("/get/:id", get(get_job)) - .route("/getupdate/:id", get(get_job_update)) -} - -#[derive(Debug, sqlx::FromRow, Serialize, Clone)] -pub struct QueuedJob { - pub workspace_id: String, - pub id: Uuid, - pub parent_job: Option, - pub created_by: String, - pub created_at: chrono::DateTime, - pub started_at: Option>, - pub scheduled_for: chrono::DateTime, - pub running: bool, - pub script_hash: Option, - pub script_path: Option, - pub args: Option, - pub logs: Option, - pub raw_code: Option, - pub canceled: bool, - pub canceled_by: Option, - pub canceled_reason: Option, - pub last_ping: Option>, - pub job_kind: JobKind, - pub schedule_path: Option, - pub permissioned_as: String, - pub flow_status: Option, - pub raw_flow: Option, - pub is_flow_step: bool, -} - -#[derive(Debug, sqlx::FromRow, Serialize)] -struct CompletedJob { - workspace_id: String, - id: Uuid, - parent_job: Option, - created_by: String, - created_at: chrono::DateTime, - duration: i32, - success: bool, - script_hash: Option, - script_path: Option, - args: Option, - result: Option, - logs: Option, - deleted: bool, - raw_code: Option, - canceled: bool, - canceled_by: Option, - canceled_reason: Option, - job_kind: JobKind, - schedule_path: Option, - permissioned_as: String, - flow_status: Option, - raw_flow: Option, - is_flow_step: bool, -} - -#[derive(Deserialize, Clone, Copy)] -pub struct RunJobQuery { - scheduled_for: Option>, - scheduled_in_secs: Option, - parent_job: Option, -} - -impl RunJobQuery { - fn get_scheduled_for(self) -> Option> { - self.scheduled_for.or_else(|| { - self.scheduled_in_secs - .map(|s| chrono::Utc::now() + Duration::seconds(s)) - }) - } -} - -pub async fn run_flow_by_path( - authed: Authed, - Extension(user_db): Extension, - Path((w_id, flow_path)): Path<(String, StripPath)>, - axum::Json(args): axum::Json>>, - Query(run_query): Query, -) -> error::Result<(StatusCode, String)> { - let flow_path = flow_path.to_path(); - let tx = user_db.begin(&authed).await?; - let (uuid, tx) = push( - tx, - &w_id, - JobPayload::Flow(flow_path.to_string()), - args, - &authed.username, - owner_to_token_owner(&authed.username, false), - run_query.get_scheduled_for(), - None, - run_query.parent_job, - false, - ) - .await?; - tx.commit().await?; - Ok((StatusCode::CREATED, uuid.to_string())) -} - -pub async fn run_job_by_path( - authed: Authed, - Extension(user_db): Extension, - Path((w_id, script_path)): Path<(String, StripPath)>, - axum::Json(args): axum::Json>>, - Query(run_query): Query, -) -> error::Result<(StatusCode, String)> { - let script_path = script_path.to_path(); - let mut tx = user_db.begin(&authed).await?; - let script_hash = get_latest_hash_for_path(&mut tx, &w_id, script_path).await?; - let (uuid, tx) = push( - tx, - &w_id, - JobPayload::ScriptHash { - hash: script_hash, - path: script_path.to_owned(), - }, - args, - &authed.username, - owner_to_token_owner(&authed.username, false), - run_query.get_scheduled_for(), - None, - run_query.parent_job, - false, - ) - .await?; - tx.commit().await?; - Ok((StatusCode::CREATED, uuid.to_string())) -} - -pub async fn get_latest_hash_for_path<'c>( - db: &mut Transaction<'c, Postgres>, - w_id: &str, - script_path: &str, -) -> error::Result { - let script_hash_o = sqlx::query_scalar!( - "select hash from script where path = $1 AND (workspace_id = $2 OR workspace_id = 'starter') AND - created_at = (SELECT max(created_at) FROM script WHERE path = $1 AND (workspace_id = $2 OR workspace_id = 'starter')) AND - deleted = false", - script_path, - w_id - ) - .fetch_optional(db) - .await?; - - let script_hash = crate::utils::not_found_if_none(script_hash_o, "ScriptHash", script_path)?; - - Ok(ScriptHash(script_hash)) -} - -pub async fn run_job_by_hash( - authed: Authed, - Extension(user_db): Extension, - Path((w_id, script_hash)): Path<(String, ScriptHash)>, - axum::Json(args): axum::Json>>, - Query(run_query): Query, -) -> error::Result<(StatusCode, String)> { - let hash = script_hash.0; - let mut tx = user_db.begin(&authed).await?; - let path = get_path_for_hash(&mut tx, &w_id, hash).await?; - let (uuid, tx) = push( - tx, - &w_id, - JobPayload::ScriptHash { - hash: ScriptHash(hash), - path, - }, - args, - &authed.username, - owner_to_token_owner(&authed.username, false), - run_query.get_scheduled_for(), - None, - run_query.parent_job, - false, - ) - .await?; - tx.commit().await?; - Ok((StatusCode::CREATED, uuid.to_string())) -} - -pub async fn get_path_for_hash<'c>( - db: &mut Transaction<'c, Postgres>, - w_id: &str, - hash: i64, -) -> error::Result { - let path = sqlx::query_scalar!( - "select path from script where hash = $1 AND (workspace_id = $2 OR workspace_id = 'starter')", - hash, - w_id - ) - .fetch_one(db) - .await?; - Ok(path) -} - -async fn run_preview_job( - authed: Authed, - Extension(user_db): Extension, - Path(w_id): Path, - Json(preview): Json, - Query(sch_query): Query, -) -> error::Result<(StatusCode, String)> { - let tx = user_db.begin(&authed).await?; - let (uuid, tx) = push( - tx, - &w_id, - JobPayload::Code(RawCode { - content: preview.content, - path: preview.path, - }), - preview.args, - &authed.username, - owner_to_token_owner(&authed.username, false), - sch_query.get_scheduled_for(), - None, - None, - false, - ) - .await?; - tx.commit().await?; - Ok((StatusCode::CREATED, uuid.to_string())) -} - -async fn run_preview_flow_job( - authed: Authed, - Extension(user_db): Extension, - Path(w_id): Path, - Json(raw_flow): Json, - Query(sch_query): Query, -) -> error::Result<(StatusCode, String)> { - let tx = user_db.begin(&authed).await?; - let (uuid, tx) = push( - tx, - &w_id, - JobPayload::RawFlow { - value: raw_flow.value, - path: raw_flow.path, - }, - raw_flow.args, - &authed.username, - owner_to_token_owner(&authed.username, false), - sch_query.get_scheduled_for(), - None, - None, - false, - ) - .await?; - tx.commit().await?; - Ok((StatusCode::CREATED, uuid.to_string())) -} -#[derive(Deserialize)] -pub struct ListQueueQuery { - pub script_path_start: Option, - pub script_path_exact: Option, - pub script_hash: Option, - pub created_by: Option, - pub created_before: Option>, - pub created_after: Option>, - pub running: Option, - pub parent_job: Option, - pub order_desc: Option, - pub job_kinds: Option, -} - -fn list_queue_jobs_query(w_id: &str, lq: &ListQueueQuery, fields: &[&str]) -> SqlBuilder { - let mut sqlb = SqlBuilder::select_from("queue") - .fields(fields) - .order_by("created_at", lq.order_desc.unwrap_or(true)) - .limit(1000) - .and_where_eq("workspace_id", "?".bind(&w_id)) - .clone(); - - if let Some(ps) = &lq.script_path_start { - sqlb.and_where_like_left("script_path", "?".bind(ps)); - } - if let Some(p) = &lq.script_path_exact { - sqlb.and_where_eq("script_path", "?".bind(p)); - } - if let Some(h) = &lq.script_hash { - sqlb.and_where_eq("script_hash", "?".bind(h)); - } - if let Some(cb) = &lq.created_by { - sqlb.and_where_eq("created_by", "?".bind(cb)); - } - if let Some(r) = &lq.running { - sqlb.and_where_eq("running", &r); - } - if let Some(pj) = &lq.parent_job { - sqlb.and_where_eq("parent_job", "?".bind(pj)); - } - if let Some(dt) = &lq.created_before { - sqlb.and_where_lt("created_at", format!("to_timestamp({})", dt.timestamp())); - } - if let Some(dt) = &lq.created_after { - sqlb.and_where_gt("created_at", format!("to_timestamp({})", dt.timestamp())); - } - if let Some(jk) = &lq.job_kinds { - sqlb.and_where_in( - "job_kind", - &jk.split(',').into_iter().map(quote).collect::>(), - ); - } - - sqlb -} - -async fn list_queue_jobs( - Extension(db): Extension, - Path(w_id): Path, - Query(lq): Query, -) -> error::JsonResult> { - let sql = list_queue_jobs_query(&w_id, &lq, &["*"]).sql()?; - let jobs = sqlx::query_as::<_, QueuedJob>(&sql).fetch_all(&db).await?; - Ok(Json(jobs)) -} - -async fn list_jobs( - authed: Authed, - Extension(user_db): Extension, - Path(w_id): Path, - Query(pagination): Query, - Query(lq): Query, -) -> error::JsonResult> { - let (per_page, offset) = crate::utils::paginate(pagination); - let lqc = lq.clone(); - let sqlq = list_queue_jobs_query( - &w_id, - &ListQueueQuery { - script_path_start: lq.script_path_start, - script_path_exact: lq.script_path_exact, - script_hash: lq.script_hash, - created_by: lq.created_by, - created_before: lq.created_before, - created_after: lq.created_after, - running: None, - parent_job: lq.parent_job, - order_desc: Some(true), - job_kinds: lq.job_kinds, - }, - &[ - "'QueuedJob' as typ", - "id", - "workspace_id", - "parent_job", - "created_by", - "created_at", - "started_at", - "scheduled_for", - "running", - "script_hash", - "script_path", - "args", - "null as duration", - "null as success", - "false as deleted", - "canceled", - "canceled_by", - "job_kind", - "schedule_path", - "permissioned_as", - "flow_status", - "is_flow_step", - ], - ); - let sqlc = list_completed_jobs_query( - &w_id, - per_page + offset, - 0, - &ListCompletedQuery { - order_desc: Some(true), - ..lqc - }, - &[ - "'CompletedJob' as typ", - "id", - "workspace_id", - "parent_job", - "created_by", - "created_at", - "null as started_at", - "null as scheduled_for", - "null as running", - "script_hash", - "script_path", - "args", - "duration", - "success", - "deleted", - "canceled", - "canceled_by", - "job_kind", - "schedule_path", - "permissioned_as", - "flow_status", - "is_flow_step", - ], - ); - let sql = format!( - "{} UNION ALL {} ORDER BY created_at DESC LIMIT {} OFFSET {};", - &sqlq.subquery()?, - &sqlc.subquery()?, - per_page, - offset - ); - let mut tx = user_db.begin(&authed).await?; - let jobs: Vec = sqlx::query_as(&sql).fetch_all(&mut tx).await?; - tx.commit().await?; - Ok(Json(jobs.into_iter().map(From::from).collect())) -} -#[derive(Deserialize, Clone)] -pub struct ListCompletedQuery { - pub script_path_start: Option, - pub script_path_exact: Option, - pub script_hash: Option, - pub created_by: Option, - pub created_before: Option>, - pub created_after: Option>, - pub success: Option, - pub parent_job: Option, - pub order_desc: Option, - pub job_kinds: Option, -} -fn list_completed_jobs_query( - w_id: &str, - per_page: usize, - offset: usize, - lq: &ListCompletedQuery, - fields: &[&str], -) -> SqlBuilder { - let mut sqlb = SqlBuilder::select_from("completed_job") - .fields(fields) - .order_by("created_at", lq.order_desc.unwrap_or(true)) - .and_where_eq("workspace_id", "?".bind(&w_id)) - .offset(offset) - .limit(per_page) - .clone(); - - if let Some(ps) = &lq.script_path_start { - sqlb.and_where_like_left("script_path", "?".bind(ps)); - } - if let Some(p) = &lq.script_path_exact { - sqlb.and_where_eq("script_path", "?".bind(p)); - } - if let Some(h) = &lq.script_hash { - sqlb.and_where_eq("script_hash", "?".bind(h)); - } - if let Some(cb) = &lq.created_by { - sqlb.and_where_eq("created_by", "?".bind(cb)); - } - if let Some(r) = &lq.success { - sqlb.and_where_eq("success", r); - } - if let Some(pj) = &lq.parent_job { - sqlb.and_where_eq("parent_job", "?".bind(pj)); - } - if let Some(dt) = &lq.created_before { - sqlb.and_where_lt("created_at", format!("to_timestamp({})", dt.timestamp())); - } - if let Some(dt) = &lq.created_after { - sqlb.and_where_gt("created_at", format!("to_timestamp({})", dt.timestamp())); - } - if let Some(jk) = &lq.job_kinds { - sqlb.and_where_in( - "job_kind", - &jk.split(',').into_iter().map(quote).collect::>(), - ); - } - - sqlb -} - -async fn list_completed_jobs( - Extension(db): Extension, - Path(w_id): Path, - Query(pagination): Query, - Query(lq): Query, -) -> error::JsonResult> { - let (per_page, offset) = crate::utils::paginate(pagination); - - let sql = list_completed_jobs_query( - &w_id, - per_page, - offset, - &lq, - &[ - "id", - "workspace_id", - "parent_job", - "created_by", - "created_at", - "duration", - "success", - "script_hash", - "script_path", - "args", - "result", - "null as logs", - "deleted", - "canceled", - "canceled_by", - "canceled_reason", - "job_kind", - "schedule_path", - "permissioned_as", - "null as raw_code", - "null as flow_status", - "null as raw_flow", - "is_flow_step", - ], - ) - .sql()?; - let jobs = sqlx::query_as::<_, CompletedJob>(&sql) - .fetch_all(&db) - .await?; - Ok(Json(jobs)) -} - -async fn get_completed_job( - Extension(db): Extension, - Path((w_id, id)): Path<(String, Uuid)>, -) -> error::JsonResult { - let job_o = sqlx::query_as::<_, CompletedJob>( - "SELECT * FROM completed_job WHERE id = $1 AND workspace_id = $2", - ) - .bind(id) - .bind(w_id) - .fetch_optional(&db) - .await?; - - let job = crate::utils::not_found_if_none(job_o, "Completed Job", id.to_string())?; - Ok(Json(job)) -} - -async fn get_completed_job_result( - Extension(db): Extension, - Path((w_id, id)): Path<(String, Uuid)>, -) -> error::JsonResult> { - let result_o = sqlx::query_scalar!( - "SELECT result FROM completed_job WHERE id = $1 AND workspace_id = $2", - id, - w_id, - ) - .fetch_optional(&db) - .await?; - - let result = crate::utils::not_found_if_none(result_o, "Completed Job", id.to_string())?; - Ok(Json(result)) -} - -async fn cancel_job( - authed: Authed, - Extension(user_db): Extension, - Path((w_id, id)): Path<(String, Uuid)>, - Json(CancelJob { reason }): Json, -) -> error::Result { - let mut tx = user_db.begin(&authed).await?; - - let job_option = sqlx::query_scalar!( - "UPDATE queue SET canceled = true, canceled_by = $1, canceled_reason = $2 \ - WHERE id = $3 AND schedule_path IS NULL AND workspace_id = $4\ - RETURNING id", - &authed.username, - reason, - id, - w_id - ) - .fetch_optional(&mut tx) - .await?; - - if let Some(id) = job_option { - audit_log( - &mut tx, - &authed.username, - "jobs.delete", - ActionKind::Delete, - &w_id, - Some(&id.to_string()), - None, - ) - .await?; - Ok(id.to_string()) - } else { - let (job_o, tx) = get_job_from_id(tx, &w_id, id).await?; - tx.commit().await?; - let err = match job_o { - Some(Job::CompletedJob(_)) => error::Error::BadRequest(format!( - "queued job id {} exists but is already completed and cannot be canceled", - id - )), - Some(Job::QueuedJob(job)) if job.schedule_path.is_some() => { - error::Error::BadRequest(format!( - "queued job id {} exists but has been created by a scheduler - and can only be only canceled by disabling the parent scheduler", - id - )) - } - _ => error::Error::NotFound(format!("queued job id {} does not exist", id)), - }; - Err(err) - } -} - -async fn delete_completed_job( - authed: Authed, - Extension(user_db): Extension, - Path((w_id, id)): Path<(String, Uuid)>, -) -> error::JsonResult { - let mut tx = user_db.begin(&authed).await?; - - require_admin(authed.is_admin, &authed.username)?; - let job_o = sqlx::query_as::<_, CompletedJob>( - "UPDATE completed_job SET logs = '', deleted = true WHERE id = $1 AND workspace_id = $2 RETURNING *", - ) - .bind(id) - .bind(&w_id) - .fetch_optional(&mut tx) - .await?; - - let job = crate::utils::not_found_if_none(job_o, "Completed Job", id.to_string())?; - - audit_log( - &mut tx, - &authed.username, - "jobs.delete", - ActionKind::Delete, - &w_id, - Some(&id.to_string()), - None, - ) - .await?; - - tx.commit().await?; - Ok(Json(job)) -} - -#[derive(Deserialize)] -pub struct JobUpdateQuery { - pub running: bool, - pub log_offset: i32, -} - -#[derive(Serialize)] -pub struct JobUpdate { - pub running: Option, - pub completed: Option, - pub new_logs: Option, -} - -async fn get_job_update( - authed: Authed, - Extension(user_db): Extension, - Path((w_id, id)): Path<(String, Uuid)>, - Query(JobUpdateQuery { - running, - log_offset, - }): Query, -) -> error::JsonResult { - let mut tx = user_db.begin(&authed).await?; - - let logs = query_scalar!( - "SELECT substr(logs, $1) as logs FROM queue WHERE workspace_id = $2 AND id = $3", - log_offset, - &w_id, - &id - ) - .fetch_optional(&mut tx) - .await?; - - if let Some(logs) = logs { - tx.commit().await?; - Ok(Json(JobUpdate { - running: if !running { Some(true) } else { None }, - completed: None, - new_logs: logs, - })) - } else { - let logs = query_scalar!( - "SELECT substr(logs, $1) as logs FROM completed_job WHERE workspace_id = $2 AND id = $3", - log_offset, - &w_id, - &id - ) - .fetch_optional(&mut tx) - .await?; - let logs = crate::utils::not_found_if_none(logs, "Job", id.to_string())?; - tx.commit().await?; - Ok(Json(JobUpdate { - running: Some(false), - completed: Some(true), - new_logs: logs, - })) - } -} - -async fn get_job( - authed: Authed, - Extension(user_db): Extension, - Path((w_id, id)): Path<(String, Uuid)>, -) -> error::JsonResult { - let tx = user_db.begin(&authed).await?; - let (job_o, tx) = get_job_from_id(tx, &w_id, id).await?; - let job = crate::utils::not_found_if_none(job_o, "Completed Job", id.to_string())?; - tx.commit().await?; - Ok(Json(job)) -} - -async fn get_job_from_id<'c>( - mut tx: Transaction<'c, Postgres>, - w_id: &str, - id: Uuid, -) -> error::Result<(Option, Transaction<'c, Postgres>)> { - let cjob_option = sqlx::query_as::<_, CompletedJob>( - "SELECT * FROM completed_job WHERE id = $1 AND workspace_id = $2", - ) - .bind(id) - .bind(w_id) - .fetch_optional(&mut tx) - .await?; - let job_option = match cjob_option { - Some(job) => Some(Job::CompletedJob(job)), - None => get_queued_job(id, w_id, &mut tx).await?.map(Job::QueuedJob), - }; - Ok((job_option, tx)) -} - -async fn get_queued_job<'c>( - id: Uuid, - w_id: &str, - tx: &mut Transaction<'c, Postgres>, -) -> error::Result> { - let r = sqlx::query_as::<_, QueuedJob>( - "SELECT * - FROM queue WHERE id = $1 AND workspace_id = $2", - ) - .bind(id) - .bind(w_id) - .fetch_optional(tx) - .await?; - Ok(r) -} - -#[derive(Serialize)] -#[serde(tag = "type")] -enum Job { - QueuedJob(QueuedJob), - CompletedJob(CompletedJob), -} - -#[derive(sqlx::Type, Serialize, Deserialize, Debug, PartialEq, Clone)] -#[sqlx(type_name = "JOB_KIND", rename_all = "lowercase")] -#[serde(rename_all(serialize = "lowercase"))] -pub enum JobKind { - Script, - Preview, - Dependencies, - Flow, - FlowPreview, -} - -#[derive(Serialize, Deserialize, Debug)] -pub struct FlowStatus { - pub step: i32, - pub modules: Vec, - pub failure_module: FlowStatusModule, -} - -#[derive(Serialize, Deserialize, Debug)] -#[serde(tag = "type")] -pub enum FlowStatusModule { - WaitingForPriorSteps, - WaitingForEvent { event: String }, - WaitingForExecutor { job: Uuid }, - InProgress { job: Uuid }, - Success { job: Uuid }, - Failure { job: Uuid }, -} - -#[derive(sqlx::FromRow)] -struct UnifiedJob { - workspace_id: String, - typ: String, - id: Uuid, - parent_job: Option, - created_by: String, - created_at: chrono::DateTime, - started_at: Option>, - scheduled_for: Option>, - running: Option, - script_hash: Option, - script_path: Option, - args: Option, - duration: Option, - success: Option, - deleted: bool, - canceled: bool, - canceled_by: Option, - job_kind: JobKind, - schedule_path: Option, - permissioned_as: String, - flow_status: Option, - is_flow_step: bool, -} - -impl From for Job { - fn from(uj: UnifiedJob) -> Self { - match uj.typ.as_ref() { - "CompletedJob" => Job::CompletedJob(CompletedJob { - workspace_id: uj.workspace_id, - id: uj.id, - parent_job: uj.parent_job, - created_by: uj.created_by, - created_at: uj.created_at, - duration: uj.duration.unwrap(), - success: uj.success.unwrap(), - script_hash: uj.script_hash, - script_path: uj.script_path, - args: uj.args, - result: None, - logs: None, - deleted: uj.deleted, - canceled: uj.canceled, - canceled_by: uj.canceled_by, - raw_code: None, - canceled_reason: None, - job_kind: uj.job_kind, - schedule_path: uj.schedule_path, - permissioned_as: uj.permissioned_as, - flow_status: uj.flow_status, - raw_flow: None, - is_flow_step: uj.is_flow_step, - }), - "QueuedJob" => Job::QueuedJob(QueuedJob { - workspace_id: uj.workspace_id, - id: uj.id, - parent_job: uj.parent_job, - created_by: uj.created_by, - created_at: uj.created_at, - started_at: uj.started_at, - script_hash: uj.script_hash, - script_path: uj.script_path, - args: uj.args, - running: uj.running.unwrap(), - scheduled_for: uj.scheduled_for.unwrap(), - logs: None, - raw_code: None, - canceled: uj.canceled, - canceled_by: uj.canceled_by, - canceled_reason: None, - last_ping: None, - job_kind: uj.job_kind, - schedule_path: uj.schedule_path, - permissioned_as: uj.permissioned_as, - flow_status: uj.flow_status, - raw_flow: None, - is_flow_step: uj.is_flow_step, - }), - t => panic!("job type {} not valid", t), - } - } -} -#[derive(Deserialize)] -struct CancelJob { - reason: Option, -} - -pub struct RawCode { - content: String, - path: Option, -} - -#[derive(Deserialize)] -struct Preview { - content: String, - path: Option, - args: Option>, -} - -#[derive(Deserialize)] -struct PreviewFlow { - value: FlowValue, - path: Option, - args: Option>, -} - -pub enum JobPayload { - ScriptHash { - hash: ScriptHash, - path: String, - }, - Code(RawCode), - Dependencies { - hash: ScriptHash, - dependencies: Vec, - }, - Flow(String), - RawFlow { - value: FlowValue, - path: Option, - }, -} - -pub async fn push<'c>( - mut tx: Transaction<'c, Postgres>, - workspace_id: &str, - job_payload: JobPayload, - args: Option>, - user: &str, - permissioned_as: String, - scheduled_for_o: Option>, - schedule_path: Option, - parent_job: Option, - is_flow_step: bool, -) -> Result<(Uuid, Transaction<'c, Postgres>), Error> { - let scheduled_for = scheduled_for_o.unwrap_or_else(chrono::Utc::now); - let args_json = args.map(serde_json::Value::Object); - let job_id: Uuid = Ulid::new().into(); - - let rate_limiting_queue = sqlx::query_scalar!( - "SELECT COUNT(id) FROM queue WHERE created_by = $1 AND workspace_id = $2", - user, - workspace_id - ) - .fetch_one(&mut tx) - .await?; - - if let Some(nb_jobs) = rate_limiting_queue { - if nb_jobs > MAX_NB_OF_JOBS_IN_Q_PER_USER { - return Err(error::Error::ExecutionErr(format!( - "You have exceeded the number of authorized elements of queue at any given time: {}", MAX_NB_OF_JOBS_IN_Q_PER_USER))); - } - } - - let rate_limiting_duration = sqlx::query_scalar!( - "SELECT SUM(duration) FROM completed_job WHERE created_by = $1 AND created_at > NOW() - INTERVAL '1200 seconds' AND workspace_id = $2", - user, - workspace_id - ) - .fetch_one(&mut tx) - .await?; - - if let Some(sum_duration) = rate_limiting_duration { - if sum_duration > MAX_DURATION_LAST_1200 { - return Err(error::Error::ExecutionErr(format!( - "You have exceeded the scripts cumulative duration limit over the last 20m which is: {}", MAX_DURATION_LAST_1200))); - } - } - - let (script_hash, script_path, raw_code, job_kind, raw_flow) = match job_payload { - JobPayload::ScriptHash { hash, path } => { - (Some(hash.0), Some(path), None, JobKind::Script, None) - } - JobPayload::Code(RawCode { content, path }) => { - (None, path, Some(content), JobKind::Preview, None) - } - JobPayload::Dependencies { hash, dependencies } => ( - Some(hash.0), - None, - Some(dependencies.join("\n")), - JobKind::Dependencies, - None, - ), - JobPayload::RawFlow { value, path } => { - (None, path, None, JobKind::FlowPreview, Some(value)) - } - JobPayload::Flow(flow) => { - let value_json = sqlx::query_scalar!("SELECT value FROM flow WHERE path = $1 AND (workspace_id = $2 OR workspace_id = 'starter')", - flow, workspace_id) - .fetch_optional(&mut tx) - .await? - .ok_or_else(|| Error::InternalErr(format!("not found flow at path {:?}", flow)))?; - let value = serde_json::from_value::(value_json).map_err(|err| { - Error::InternalErr(format!( - "could not convert json to flow for {flow}: {err:?}" - )) - })?; - (None, Some(flow), None, JobKind::Flow, Some(value)) - } - }; - - let flow_status = raw_flow.as_ref().map(|f| FlowStatus { - step: 0, - modules: (0..f.modules.len()) - .map(|_| FlowStatusModule::WaitingForPriorSteps) - .collect(), - failure_module: FlowStatusModule::WaitingForPriorSteps, - }); - let uuid = sqlx::query_scalar!( - "INSERT INTO queue - (workspace_id, id, parent_job, created_by, permissioned_as, scheduled_for, - script_hash, script_path, raw_code, args, job_kind, schedule_path, raw_flow, flow_status, is_flow_step) - VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15) RETURNING id", - workspace_id, - job_id, - parent_job, - user, - permissioned_as, - scheduled_for, - script_hash, - script_path.clone(), - raw_code, - args_json, - job_kind: JobKind, - schedule_path, - raw_flow.map(|f| serde_json::json!(f)), - flow_status.map(|f| serde_json::json!(f)), - is_flow_step - ) - .fetch_one(&mut tx) - .await?; - let uuid_string = job_id.to_string(); - let uuid_str = uuid_string.as_str(); - let mut hm = HashMap::from([("uuid", uuid_str), ("permissioned_as", &permissioned_as)]); - { - let s: String; - let audit_o = match job_kind { - JobKind::Preview => { - s = format!("preview {:?}", script_path); - Some(("jobs.run.preview", Some(s))) - } - JobKind::Script => { - s = ScriptHash(script_hash.unwrap()).to_string(); - hm.insert("hash", s.as_str()); - Some(("jobs.run.script", script_path)) - } - JobKind::Flow => Some(("jobs.run.flow", script_path)), - JobKind::FlowPreview => Some(("jobs.run.flow_preview", script_path)), - _ => None, - }; - - if let Some((operation_name, resource)) = audit_o { - audit_log( - &mut tx, - &user, - operation_name, - ActionKind::Execute, - workspace_id, - resource.as_ref().map(|x| x.as_str()), - Some(hm), - ) - .await?; - } - } - Ok((uuid, tx)) -} - -pub async fn add_completed_job_error( - db: &DB, - queued_job: &QueuedJob, - logs: String, - e: E, -) -> Result<(Uuid, Map), Error> { - let mut output_map = serde_json::Map::new(); - output_map.insert( - "error".to_string(), - serde_json::Value::String(e.to_string()), - ); - let a = add_completed_job( - db, - &queued_job, - false, - Some(output_map.clone()), - format!("{}\n{}", logs, e.to_string()), - ) - .await?; - Ok((a, output_map)) -} - -pub async fn add_completed_job( - db: &DB, - queued_job: &QueuedJob, - success: bool, - result: Option>, - logs: String, -) -> Result { - let result_json = result.map(serde_json::Value::Object); - let duration = (chrono::Utc::now() - queued_job.started_at.unwrap_or(queued_job.created_at)) - .num_seconds() as i32; - let _ = sqlx::query!( - "INSERT INTO completed_job as cj - (workspace_id, id, parent_job, created_by, created_at, duration, success, script_hash, script_path, \ - args, result, logs, - raw_code, canceled, canceled_by, canceled_reason, job_kind, schedule_path, permissioned_as, flow_status, raw_flow, \ - is_flow_step) - VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, $18, $19, $20, $21, $22) \ - ON CONFLICT (id) DO UPDATE SET success = $7, result = $11, logs = concat(cj.logs, $12) \ - RETURNING id", - queued_job.workspace_id, - queued_job.id, - queued_job.parent_job, - queued_job.created_by, - queued_job.created_at, - duration, - success, - queued_job.script_hash.map(|x| x.0), - queued_job.script_path, - queued_job.args, - result_json, - logs, - queued_job.raw_code, - queued_job.canceled, - queued_job.canceled_by, - queued_job.canceled_reason, - queued_job.job_kind: JobKind, - queued_job.schedule_path, - queued_job.permissioned_as, - queued_job.flow_status, - queued_job.raw_flow, - queued_job.is_flow_step - ) - .fetch_one(db) - .await?; - tracing::debug!("Added completed job {}", queued_job.id); - Ok(queued_job.id) -} - -pub async fn get_step_of_flow_status(db: &DB, id: Uuid) -> error::Result { - let r = sqlx::query_scalar!( - "SELECT (flow_status->'step')::integer FROM queue WHERE id = $1", - id - ) - .fetch_one(db) - .await? - .ok_or_else(|| Error::InternalErr(format!("not found step")))?; - Ok(r) -} -pub async fn update_flow_status_in_progress( - db: &DB, - w_id: &str, - flow: Uuid, - job_in_progress: Uuid, -) -> error::Result<()> { - let step = get_step_of_flow_status(db, flow).await?; - sqlx::query(&format!( - "UPDATE queue - SET flow_status = jsonb_set(flow_status, '{{modules, {}}}', $1) - WHERE id = $2 AND workspace_id = $3", - step - )) - .bind(serde_json::json!(FlowStatusModule::InProgress { - job: job_in_progress - })) - .bind(flow) - .bind(w_id) - .execute(db) - .await?; - Ok(()) -} - -pub async fn update_flow_status_after_job_completion( - db: &DB, - job: &QueuedJob, - success: bool, - result: Option>, -) -> error::Result<()> { - tracing::info!("HANDLE FLOW: {job:?} {success} {result:?}"); - - let mut tx = db.begin().await?; - - let w_id = &job.workspace_id; - - let flow = job - .parent_job - .ok_or_else(|| Error::InternalErr(format!("expected parent job")))?; - - let old_status_json = sqlx::query_scalar!( - "SELECT flow_status FROM queue WHERE id = $1 AND workspace_id = $2", - flow, - w_id - ) - .fetch_one(&mut tx) - .await? - .ok_or_else(|| Error::InternalErr(format!("requiring a previous status")))?; - - let old_status = serde_json::from_value::(old_status_json) - .ok() - .ok_or_else(|| { - Error::InternalErr(format!("requiring status to be parsabled as FlowStatus")) - })?; - - let last_step = (old_status.step + 1) as usize == old_status.modules.len(); - let new_status = if success { - FlowStatusModule::Success { job: job.id } - } else { - FlowStatusModule::Failure { job: job.id } - }; - - sqlx::query(&format!( - "UPDATE queue - SET - flow_status = jsonb_set(jsonb_set(flow_status, '{{modules, {}}}', $1), '{{\"step\"}}', $2) - WHERE id = $3", - old_status.step, - )) - .bind(serde_json::json!(new_status)) - .bind(serde_json::json!(old_status.step + 1)) - .bind(flow) - .execute(&mut tx) - .await?; - - tracing::info!("UPDATE: {:?}", new_status); - - let flow_job = get_queued_job(flow, w_id, &mut tx) - .await? - .ok_or_else(|| Error::InternalErr(format!("requiring flow to be in the queue")))?; - tx.commit().await?; - - let done = if !success || last_step { - add_completed_job( - db, - &flow_job, - success, - result, - "Flow job completed".to_string(), - ) - .await?; - true - } else { - if let Err(err) = handle_flow(&flow_job, db, result).await { - let _ = add_completed_job_error( - db, - &flow_job, - "Unexpected error during flow chaining:\n".to_string(), - err, - ) - .await; - true - } else { - false - } - }; - - if done { - postprocess_queued_job(flow_job.schedule_path, &w_id, flow, db).await?; - } - - Ok(()) -} - -pub async fn postprocess_queued_job( - schedule_path: Option, - w_id: &str, - job_id: Uuid, - db: &DB, -) -> crate::error::Result<()> { - let _ = delete_job(db, w_id, job_id).await?; - schedule_again_if_scheduled(schedule_path, &w_id, db).await?; - Ok(()) -} - -pub async fn schedule_again_if_scheduled( - schedule_path: Option, - w_id: &str, - db: &DB, -) -> crate::error::Result<()> { - if let Some(schedule_path) = schedule_path { - let mut tx = db.begin().await?; - let schedule = get_schedule_opt(&mut tx, &w_id, &schedule_path) - .await? - .unwrap(); - if schedule.enabled { - tx = crate::schedule::push_scheduled_job(tx, schedule).await?; - } - tx.commit().await?; - } - Ok(()) -} - -pub async fn handle_flow( - job: &QueuedJob, - db: &sqlx::Pool, - last_result: Option>, -) -> anyhow::Result<()> { - let value = job - .raw_flow - .as_ref() - .ok_or_else(|| Error::InternalErr(format!("requiring a raw flow value")))? - .to_owned(); - let flow = serde_json::from_value::(value.to_owned())?; - push_next_flow_job(job, flow, db, last_result).await?; - Ok(()) -} - -async fn transform_input( - flow_args: &Option, - last_result: Option>, - input_transform: &HashMap, - workspace: &str, - token: &str, - steps: Vec, -) -> anyhow::Result>> { - let mut mapped = serde_json::Map::new(); - - for (key, val) in input_transform.into_iter() { - match val { - InputTransform::Static { value } => { - mapped.insert(key.to_string(), value.to_owned()); - () - } - _ => (), - }; - } - - for (key, val) in input_transform.into_iter() { - match val { - InputTransform::Static { value: _ } => (), - InputTransform::Javascript { expr } => { - let previous_result = - serde_json::Value::Object(last_result.clone().unwrap_or_else(|| Map::new())); - let flow_input = flow_args.clone().unwrap_or_else(|| json!({})); - let v = eval_timeout( - expr.to_string(), - vec![ - ("params".to_string(), serde_json::json!(mapped)), - ("previous_result".to_string(), previous_result), - ("flow_input".to_string(), flow_input), - ], - workspace, - token, - steps.clone(), - ) - .await - .map_err(|e| { - Error::ExecutionErr(format!( - "Error during isolated evaluation of expression `{expr}`:\n{e}" - )) - })?; - mapped.insert(key.to_string(), v); - () - } - _ => Err(error::Error::BadRequest(format!( - "impossible to handle unknown input transform" - )))?, - } - } - - Ok(Some(mapped)) -} - -async fn push_next_flow_job( - job: &QueuedJob, - flow: FlowValue, - db: &sqlx::Pool, - last_result: Option>, -) -> anyhow::Result<()> { - let flow_status_json = job - .flow_status - .as_ref() - .ok_or_else(|| Error::InternalErr(format!("not found status for flow job {:?}", job.id)))?; - let status = serde_json::from_value::(flow_status_json.to_owned())?; - let i = status.step as usize; - - if flow.modules.len() > i { - let module = &flow.modules[i]; - let mut tx = db.begin().await?; - let job_payload = match &module.value { - FlowModuleValue::Script { path: script_path } => { - let script_hash = - get_latest_hash_for_path(&mut tx, &job.workspace_id, script_path).await?; - JobPayload::ScriptHash { - hash: script_hash, - path: script_path.to_owned(), - } - } - a @ _ => { - tracing::info!("Unrecognized module values {:?}", a); - Err(Error::BadRequest(format!( - "Unrecognized module values {:?}", - a - )))? - } - }; - - let token = create_token_for_owner( - &db, - &job.workspace_id, - &job.permissioned_as, - crate::users::NewToken { - label: Some("transform-input".to_string()), - expiration: Some(chrono::Utc::now() + chrono::Duration::seconds(10)), - }, - &job.created_by, - ) - .await?; - - let args = transform_input( - &job.args, - last_result, - &module.input_transform, - &job.workspace_id, - &token, - status - .modules - .into_iter() - .map(|x| match x { - FlowStatusModule::Success { job } => job.to_string(), - _ => "invalid step status".to_string(), - }) - .collect(), - ) - .await?; //job.args - let (uuid, mut tx) = push( - tx, - &job.workspace_id, - job_payload, - args, - &job.created_by, - job.permissioned_as.to_owned(), - None, - None, - Some(job.id), - true, - ) - .await?; - - sqlx::query(&format!( - "UPDATE queue - SET - flow_status = jsonb_set(flow_status, '{{modules, {}}}', $1) - WHERE id = $2", - i - )) - .bind(serde_json::json!(FlowStatusModule::WaitingForExecutor { - job: uuid - })) - .bind(job.parent_job) - .execute(&mut tx) - .await?; - tx.commit().await?; - } - Ok(()) -} - -pub async fn pull(db: &DB) -> Result, crate::Error> { - let now = chrono::Utc::now(); - - let job: Option = sqlx::query_as::<_, QueuedJob>( - "UPDATE queue - SET running = true, started_at = $1 - WHERE id IN ( - SELECT id - FROM queue - WHERE running = false AND scheduled_for <= $2 - ORDER BY scheduled_for - FOR UPDATE SKIP LOCKED - LIMIT 1 - ) - RETURNING *", - ) - .bind(now) - .bind(now) - .fetch_optional(db) - .await?; - - Ok(job) -} - -pub async fn delete_job(db: &DB, w_id: &str, job_id: Uuid) -> Result<(), crate::Error> { - let job_removed = sqlx::query_scalar!( - "DELETE FROM queue WHERE workspace_id = $1 AND id = $2 RETURNING 1", - w_id, - job_id - ) - .fetch_one(db) - .await? - .unwrap_or(0) - == 1; - tracing::debug!("Job {job_id} deletion was achieved with success: {job_removed}"); - Ok(()) -} diff --git a/backend/src/js_eval.rs b/backend/src/js_eval.rs deleted file mode 100644 index aa2e20393548d..0000000000000 --- a/backend/src/js_eval.rs +++ /dev/null @@ -1,300 +0,0 @@ -/* - * Author & Copyright: Ruben Fiszel 2021 - * This file and its contents are licensed under the AGPLv3 License. - * Please see the included NOTICE for copyright information and - * LICENSE-AGPL for a copy of the license. - */ - -use std::cell::RefCell; -use std::rc::Rc; - -use deno_core::serde_v8; -use deno_core::v8; -use deno_core::v8::IsolateHandle; -use deno_core::JsRuntime; -use deno_core::OpState; -use deno_core::RuntimeOptions; -use deno_core::Snapshot; -use deno_core::ZeroCopyBuf; -use itertools::Itertools; -use regex::Regex; -use serde_json::Value; -use tokio::sync::oneshot; -use tokio::time::timeout; - -use crate::client; -use crate::error::Error; - -pub async fn eval_timeout( - expr: String, - env: Vec<(String, serde_json::Value)>, - workspace: &str, - token: &str, - steps: Vec, -) -> anyhow::Result { - let expr2 = expr.clone(); - let (sender, mut receiver) = oneshot::channel::(); - let (workspace, token) = (workspace.to_string().clone(), token.to_string().clone()); - timeout( - std::time::Duration::from_millis(2000), - tokio::task::spawn_blocking(move || { - let buffer = include_bytes!("../v8.snap"); - - // Use our snapshot to provision our new runtime - let options = RuntimeOptions { - startup_snapshot: Some(Snapshot::Static(buffer)), - ..Default::default() - }; - let mut js_runtime = JsRuntime::new(options); - js_runtime.register_op("variable", deno_core::op_async(op_variable)); - js_runtime.register_op("resource", deno_core::op_async(op_resource)); - if !steps.is_empty() { - js_runtime.register_op("result", deno_core::op_async(op_get_result)); - } - js_runtime.sync_ops_cache(); - - sender - .send(js_runtime.v8_isolate().thread_safe_handle()) - .map_err(|_| Error::ExecutionErr("impossible to send v8 isolate".to_string()))?; - - let runtime = tokio::runtime::Builder::new_current_thread() - .enable_all() - .build()?; - - let re = Regex::new(r"import (.*)\n").unwrap(); - let expr = re.replace_all(&expr, "").to_string(); - // pretty frail but this it to make the expr more user friendly and not require the user to write await - let expr = ["variable", "step"] - .into_iter() - .fold(expr, replace_with_await); - - let r = - runtime.block_on(eval(&mut js_runtime, &expr, env, &workspace, &token, steps))?; - - Ok(r) as anyhow::Result - }), - ) - .await - .map_err(|_| { - if let Ok(isolate) = receiver.try_recv() { - isolate.terminate_execution(); - }; - Error::ExecutionErr(format!( - "The expression of evaluation `{expr2}` took too long to execute (>2000ms)" - )) - })?? -} - -fn replace_with_await(expr: String, fn_name: &str) -> String { - let sep = format!("{}(", fn_name); - let mut split = expr.split(&sep); - let mut s = split.next().unwrap_or_else(|| "").to_string(); - for x in split { - s.push_str(&format!("(await {}({}", fn_name, add_closing_bracket(x))) - } - s -} - -fn add_closing_bracket(s: &str) -> String { - let mut s = s.to_string(); - let mut level = 1; - let mut idx = 0; - for c in s.chars() { - match c { - '(' => level += 1, - ')' => level -= 1, - _ => (), - }; - if level == 0 { - break; - } - idx += 1; - } - s.insert_str(idx, ")"); - s -} - -const SPLIT_PAT: &str = ";\n"; -async fn eval( - context: &mut JsRuntime, - expr: &str, - env: Vec<(String, serde_json::Value)>, - workspace: &str, - token: &str, - steps: Vec, -) -> anyhow::Result { - let expr = expr.trim(); - let expr = format!( - "{}\nreturn {};", - expr.split(SPLIT_PAT) - .take(expr.split(SPLIT_PAT).count() - 1) - .join("\n"), - expr.split(SPLIT_PAT).last().unwrap_or_else(|| "") - ); - let steps_code = if !steps.is_empty() { - format!( - r#" -let steps = [{}]; -async function step(n) {{ - if (n == 0) {{ - return flow_input; - }} - if (n == -1) {{ - return previous_result; - }} - let token = "{token}"; - if (n < 0) {{ - let steps_length = steps.length; - n = n % steps.length + steps.length; - }} - let id = steps[n]; - return await Deno.core.opAsync("result", [workspace, id, token, base_url]); -}}"#, - steps.into_iter().map(|x| format!("\"{x}\"")).join(",") - ) - } else { - "".to_string() - }; - - let code = format!( - r#" -let workspace = "{workspace}"; -let base_url = "{}"; -async function variable(path) {{ - let token = "{token}"; - return await Deno.core.opAsync("variable", [workspace, path, token, base_url]); -}} -async function resource(path) {{ - let token = "{token}"; - return await Deno.core.opAsync("resource", [workspace, path, token, base_url]); -}} -{} -{steps_code} -(async () => {{ - {expr} -}})() - "#, - std::env::var("BASE_INTERNAL_URL") - .unwrap_or_else(|_| "http://missing-base-url".to_string()), - env.into_iter() - .map(|(a, b)| format!( - "let {a} = {};\n", - serde_json::to_string(&b) - .unwrap_or_else(|_| "\"error serializing value\"".to_string()) - )) - .join(""), - ); - let global = context.execute_script("", &code)?; - let global = context.resolve_value(global).await?; - - let scope = &mut context.handle_scope(); - let local = v8::Local::new(scope, global); - // Deserialize a `v8` object into a Rust type using `serde_v8`, - // in this case deserialize to a JSON `Value`. - Ok(serde_v8::from_v8::(scope, local)?) -} - -// #[warn(dead_code)] -// async fn op_test( -// _state: Rc>, -// path: String, -// _buf: Option, -// ) -> Result { -// tokio::time::sleep(std::time::Duration::from_secs(1)).await; -// Ok(path) -// } - -async fn op_variable( - _state: Rc>, - args: Vec, - _buf: Option, -) -> Result { - let workspace = &args[0]; - let path = &args[1]; - let token = &args[2]; - let base_url = &args[3]; - client::get_variable(workspace, path, token, &base_url).await -} - -async fn op_get_result( - _state: Rc>, - args: Vec, - _buf: Option, -) -> Result, anyhow::Error> { - let workspace = &args[0]; - let id = &args[1]; - let token = &args[2]; - let base_url = &args[3]; - let client = reqwest::Client::new(); - let result = client - .get(format!( - "{base_url}/api/w/{workspace}/jobs/completed/get_result/{id}" - )) - .bearer_auth(token) - .send() - .await? - .json::>() - .await?; - Ok(result) -} - -async fn op_resource( - _state: Rc>, - args: Vec, - _buf: Option, -) -> Result, anyhow::Error> { - let workspace = &args[0]; - let path = &args[1]; - let token = &args[2]; - let base_url = &args[3]; - client::get_resource(workspace, path, token, &base_url).await -} - -#[cfg(test)] -mod tests { - - use serde_json::json; - - // Note this useful idiom: importing names from outer (for mod tests) scope. - use super::*; - - #[tokio::test] - async fn test_eval() -> anyhow::Result<()> { - let env = vec![ - ("params".to_string(), json!({"test": 2})), - ("value".to_string(), json!({"test": 2})), - ]; - let code = "value.test + params.test"; - - let mut runtime = JsRuntime::new(RuntimeOptions::default()); - let res = eval(&mut runtime, code, env, "workspace", "token", vec![]).await?; - assert_eq!(res, json!(4)); - Ok(()) - } - - #[tokio::test] - async fn test_eval_multiline() -> anyhow::Result<()> { - let env = vec![]; - let code = "let x = 5; -`my ${x} -multiline template`"; - - let mut runtime = JsRuntime::new(RuntimeOptions::default()); - let res = eval(&mut runtime, code, env, "workspace", "token", vec![]).await?; - assert_eq!(res, json!("my 5\nmultiline template")); - Ok(()) - } - - #[tokio::test] - async fn test_eval_timeout() -> anyhow::Result<()> { - let env = vec![ - ("params".to_string(), json!({"test": 2})), - ("value".to_string(), json!({"test": 2})), - ]; - let code = r#"variable("test")"#; - - let res = eval_timeout(code.to_string(), env, "workspace", "token", vec![]).await?; - assert_eq!(res, json!("test")); - Ok(()) - } -} diff --git a/backend/src/lib.rs b/backend/src/lib.rs deleted file mode 100644 index 7fb1f16fc7e27..0000000000000 --- a/backend/src/lib.rs +++ /dev/null @@ -1,342 +0,0 @@ -/* - * Author & Copyright: Ruben Fiszel 2021 - * This file and its contents are licensed under the AGPLv3 License. - * Please see the included NOTICE for copyright information and - * LICENSE-AGPL for a copy of the license. - */ - -use ::oauth2::basic::BasicClient; -use argon2::Argon2; -use axum::{extract::extractor_middleware, handler::Handler, routing::get, Extension, Router}; -use db::DB; -use git_version::git_version; -use hyper::Response; -use slack_http_verifier::SlackVerifier; -use std::{collections::HashMap, net::SocketAddr, sync::Arc}; -use tokio::sync::Mutex; -use tower::ServiceBuilder; -use tower_cookies::CookieManagerLayer; -use tower_http::trace::{MakeSpan, OnResponse, TraceLayer}; -use tracing::{field, Span}; -use tracing_subscriber::{filter::filter_fn, prelude::*, EnvFilter}; -extern crate magic_crypt; - -extern crate dotenv; - -mod audit; -mod client; -mod db; -mod email; -mod error; -mod flow; -mod granular_acls; -mod groups; -mod jobs; -mod js_eval; -mod oauth2; -mod parser; -mod resources; -mod schedule; -mod scripts; -mod static_assets; -mod users; -mod utils; -mod variables; -mod worker; -mod worker_ping; -mod workspaces; - -use error::Error; - -pub use crate::email::EmailSender; -use crate::{db::UserDB, utils::rd_string}; - -const GIT_VERSION: &str = git_version!(args = ["--tag", "--always"], fallback = "unknown-version"); -pub const DEFAULT_NUM_WORKERS: usize = 3; -pub const DEFAULT_TIMEOUT: i32 = 300; -pub const DEFAULT_SLEEP_QUEUE: u64 = 50; - -#[derive(Clone)] -struct MyOnResponse {} - -impl OnResponse for MyOnResponse { - fn on_response( - self, - response: &Response, - latency: std::time::Duration, - _span: &tracing::Span, - ) { - tracing::info!( - latency = %latency.as_millis(), - status = ?response.status(), - "finished processed request") - } -} - -#[derive(Clone)] -struct MyMakeSpan {} - -impl MakeSpan for MyMakeSpan { - fn make_span(&mut self, request: &hyper::Request) -> Span { - tracing::info_span!( - "request", - method = %request.method(), - uri = %request.uri(), - version = ?request.version(), - username = field::Empty, - ) - } -} - -pub async fn initialize_tracing() -> anyhow::Result<()> { - //let log_level = if std::env::var("RUST_LOG").map(|x| &x == "debug") - let ts_base = tracing_subscriber::registry() - .with( - EnvFilter::from_default_env() - //.add_directive("windmill".parse()?) - .add_directive("runtime=trace".parse()?) - .add_directive("tokio=trace".parse()?), - ) - .with( - tracing_subscriber::fmt::layer() - .json() - .flatten_event(true) - .with_span_list(false) - .with_current_span(true) - .with_filter(filter_fn(|meta| meta.target().starts_with("windmill"))), - ); - - if std::env::var("TOKIO_CONSOLE") - .map(|x| x == "true") - .unwrap_or(false) - { - let console_layer = console_subscriber::spawn(); - ts_base.with(console_layer).init(); - } else { - ts_base.init(); - } - Ok(()) -} - -pub async fn migrate_db(db: &DB) -> anyhow::Result<()> { - let app_password = std::env::var("APP_USER_PASSWORD").unwrap_or_else(|_| "changeme".to_owned()); - - db::migrate(db).await?; - db::setup_app_user(db, &app_password).await?; - Ok(()) -} - -pub async fn connect_db() -> anyhow::Result { - let database_url = std::env::var("DATABASE_URL") - .map_err(|_| Error::BadConfig("DATABASE_URL env var is missing".to_string()))?; - Ok(db::connect(&database_url).await?) -} - -type BasicClientsMap = HashMap; - -pub fn build_oauth_clients(base_url: &str) -> BasicClientsMap { - [( - "github".to_string(), - oauth2::build_gh_client( - &std::env::var("GITHUB_OAUTH_CLIENT_ID").unwrap_or_else(|_| "".to_string()), - &std::env::var("GITHUB_OAUTH_CLIENT_SECRET").unwrap_or_else(|_| "".to_string()), - base_url, - ), - )] - .into() -} - -#[derive(Clone)] -struct BaseUrl(String); - -pub async fn run_server( - db: DB, - addr: SocketAddr, - base_url: &str, - es: EmailSender, - mut rx: tokio::sync::broadcast::Receiver<()>, -) -> anyhow::Result<()> { - let user_db = UserDB::new(db.clone()); - - let auth_cache = Arc::new(users::AuthCache::new(db.clone())); - let argon2 = Arc::new(Argon2::default()); - let email_sender = Arc::new(es); - let basic_clients = Arc::new(build_oauth_clients(base_url)); - let slack_verifier = Arc::new( - std::env::var("SLACK_SIGNING_SECRET") - .ok() - .map(|x| SlackVerifier::new(x).unwrap()), - ); - - let middleware_stack = ServiceBuilder::new() - .layer( - TraceLayer::new_for_http() - .on_response(MyOnResponse {}) - .make_span_with(MyMakeSpan {}) - .on_request(()), - ) - .layer(Extension(db.clone())) - .layer(Extension(user_db)) - .layer(Extension(auth_cache.clone())) - .layer(Extension(basic_clients)) - .layer(Extension(BaseUrl(base_url.to_string()))) - .layer(CookieManagerLayer::new()); - // build our application with a route - let app = Router::new() - .nest( - "/api", - Router::new() - .nest( - "/w/:workspace_id", - Router::new() - .nest("/scripts", scripts::workspaced_service()) - .nest("/jobs", jobs::workspaced_service()) - .nest( - "/users", - users::workspaced_service() - .layer(Extension(argon2.clone())) - .layer(Extension(email_sender)), - ) - .nest("/variables", variables::workspaced_service()) - .nest("/oauth", oauth2::workspaced_service()) - .nest("/resources", resources::workspaced_service()) - .nest("/schedules", schedule::workspaced_service()) - .nest("/groups", groups::workspaced_service()) - .nest("/audit", audit::workspaced_service()) - .nest("/acls", granular_acls::workspaced_service()) - .nest("/workspaces", workspaces::workspaced_service()) - .nest("/flows", flow::workspaced_service()), - ) - .nest("/workspaces", workspaces::global_service()) - .nest( - "/users", - users::global_service().layer(Extension(argon2.clone())), - ) - .nest("/workers", worker_ping::global_service()) - .nest("/scripts", scripts::global_service()) - .nest("/schedules", schedule::global_service()) - .route_layer(extractor_middleware::()) - .route_layer(extractor_middleware::()) - .nest( - "/auth", - users::make_unauthed_service().layer(Extension(argon2)), - ) - .nest( - "/oauth", - oauth2::global_service().layer(Extension(slack_verifier)), - ) - .route("/version", get(git_v)) - .route("/openapi.yaml", get(openapi)), - ) - .fallback(static_assets::static_handler.into_service()) - .layer(middleware_stack); - - let instance_name = rd_string(5); - - tracing::info!(addr = %addr.to_string(), instance = %instance_name, "server started listening"); - let server = axum::Server::bind(&addr) - .serve(app.into_make_service()) - .with_graceful_shutdown(async { - rx.recv().await.ok(); - println!("Graceful shutdown of server"); - }); - - tokio::spawn(async move { auth_cache.monitor().await }); - - server.await?; - Ok(()) -} - -pub fn monitor_db(db: &DB, timeout: i32, tx: tokio::sync::broadcast::Sender<()>) { - let db1 = db.clone(); - let db2 = db.clone(); - - let rx1 = tx.subscribe(); - let rx2 = tx.subscribe(); - - tokio::spawn(async move { worker::restart_zombie_jobs_periodically(&db1, timeout, rx1).await }); - tokio::spawn(async move { users::delete_expired_items_perdiodically(&db2, rx2).await }); -} - -pub async fn run_workers( - db: DB, - addr: SocketAddr, - timeout: i32, - num_workers: i32, - sleep_queue: u64, - base_url: String, - tx: tokio::sync::broadcast::Sender<()>, -) -> anyhow::Result<()> { - let instance_name = rd_string(5); - - let mutex = Arc::new(Mutex::new(0)); - - let sources: external_ip::Sources = external_ip::get_http_sources(); - let consensus = external_ip::ConsensusBuilder::new() - .add_sources(sources) - .build(); - - let ip = consensus - .get_consensus() - .await - .map(|x| x.to_string()) - .unwrap_or_else(|| "Unretrievable ip".to_string()); - - let mut handles = Vec::new(); - for i in 1..(num_workers + 1) { - let db1 = db.clone(); - let instance_name = instance_name.clone(); - let worker_name = format!("dt-worker-{}-{}", &instance_name, rd_string(5)); - let m1 = mutex.clone(); - let ip = ip.clone(); - let tx = tx.clone(); - let base_url = base_url.clone(); - handles.push(tokio::spawn(async move { - tracing::info!(addr = %addr.to_string(), worker = %worker_name, "starting worker"); - worker::run_worker( - &db1, - timeout, - &instance_name, - worker_name, - i as u64, - num_workers as u64, - m1, - &ip, - sleep_queue, - &base_url, - tx, - ) - .await - })); - } - futures::future::try_join_all(handles).await?; - Ok(()) -} - -async fn git_v() -> &'static str { - GIT_VERSION -} - -async fn openapi() -> &'static str { - include_str!("../openapi.yaml") -} - -pub async fn shutdown_signal(tx: tokio::sync::broadcast::Sender<()>) -> anyhow::Result<()> { - use std::io; - use tokio::signal::unix::SignalKind; - - async fn terminate() -> io::Result<()> { - tokio::signal::unix::signal(SignalKind::terminate())? - .recv() - .await; - Ok(()) - } - - tokio::select! { - _ = terminate() => {}, - _ = tokio::signal::ctrl_c() => {}, - } - println!("signal received, starting graceful shutdown"); - let _ = tx.send(()); - Ok(()) -} diff --git a/backend/src/main.rs b/backend/src/main.rs index 52fa2727d6fc5..aa6993cf92d57 100644 --- a/backend/src/main.rs +++ b/backend/src/main.rs @@ -1,95 +1,946 @@ /* - * Author & Copyright: Ruben Fiszel 2021 + * Author: Ruben Fiszel + * Copyright: Windmill Labs, Inc 2022 * This file and its contents are licensed under the AGPLv3 License. * Please see the included NOTICE for copyright information and * LICENSE-AGPL for a copy of the license. */ -use std::net::SocketAddr; +use anyhow::Context; +use git_version::git_version; +use monitor::{ + reload_timeout_wait_result_setting, send_current_log_file_to_object_store, + send_logs_to_object_store, +}; +use rand::Rng; +use sqlx::{postgres::PgListener, Pool, Postgres}; +use std::{ + collections::HashMap, + net::{IpAddr, Ipv4Addr, SocketAddr}, + time::Duration, +}; +use tokio::{ + fs::{create_dir_all, DirBuilder, File}, + io::AsyncReadExt, +}; +use uuid::Uuid; +use windmill_api::HTTP_CLIENT; -use dotenv::dotenv; +#[cfg(feature = "enterprise")] +use windmill_common::ee::schedule_key_renewal; -#[tokio::main] -async fn main() -> anyhow::Result<()> { - dotenv().ok(); +use windmill_common::{ + global_settings::{ + BASE_URL_SETTING, BUNFIG_INSTALL_SCOPES_SETTING, CRITICAL_ERROR_CHANNELS_SETTING, + CUSTOM_TAGS_SETTING, DEFAULT_TAGS_PER_WORKSPACE_SETTING, DEFAULT_TAGS_WORKSPACES_SETTING, + ENV_SETTINGS, EXPOSE_DEBUG_METRICS_SETTING, EXPOSE_METRICS_SETTING, + EXTRA_PIP_INDEX_URL_SETTING, HUB_BASE_URL_SETTING, JOB_DEFAULT_TIMEOUT_SECS_SETTING, + JWT_SECRET_SETTING, KEEP_JOB_DIR_SETTING, LICENSE_KEY_SETTING, NPM_CONFIG_REGISTRY_SETTING, + OAUTH_SETTING, PIP_INDEX_URL_SETTING, REQUEST_SIZE_LIMIT_SETTING, + REQUIRE_PREEXISTING_USER_FOR_OAUTH_SETTING, RETENTION_PERIOD_SECS_SETTING, + SAML_METADATA_SETTING, SCIM_TOKEN_SETTING, SMTP_SETTING, TIMEOUT_WAIT_RESULT_SETTING, + }, + scripts::ScriptLang, + stats_ee::schedule_stats, + utils::{hostname, rd_string, Mode}, + worker::{reload_custom_tags_setting, HUB_CACHE_DIR, TMP_DIR, WORKER_GROUP}, + DB, METRICS_ENABLED, +}; - windmill::initialize_tracing().await?; +#[cfg(all(not(target_env = "msvc"), feature = "jemalloc"))] +use monitor::monitor_mem; - let db = windmill::connect_db().await?; +#[cfg(all(not(target_env = "msvc"), feature = "jemalloc"))] +use tikv_jemallocator::Jemalloc; - let num_workers = std::env::var("NUM_WORKERS") - .ok() - .and_then(|x| x.parse::().ok()) - .unwrap_or(windmill::DEFAULT_NUM_WORKERS as i32); +#[cfg(all(not(target_env = "msvc"), feature = "jemalloc"))] +#[global_allocator] +static GLOBAL: Jemalloc = Jemalloc; + +#[cfg(feature = "enterprise")] +use windmill_common::METRICS_ADDR; + +#[cfg(feature = "parquet")] +use windmill_common::global_settings::OBJECT_STORE_CACHE_CONFIG_SETTING; + +use windmill_worker::{ + get_hub_script_content_and_requirements, BUN_BUNDLE_CACHE_DIR, BUN_CACHE_DIR, + BUN_DEPSTAR_CACHE_DIR, DENO_CACHE_DIR, DENO_CACHE_DIR_DEPS, DENO_CACHE_DIR_NPM, + GO_BIN_CACHE_DIR, GO_CACHE_DIR, LOCK_CACHE_DIR, PIP_CACHE_DIR, POWERSHELL_CACHE_DIR, + RUST_CACHE_DIR, TAR_PIP_CACHE_DIR, TMP_LOGS_DIR, +}; + +use crate::monitor::{ + initial_load, load_keep_job_dir, load_metrics_debug_enabled, load_require_preexisting_user, + load_tag_per_workspace_enabled, load_tag_per_workspace_workspaces, monitor_db, monitor_pool, + reload_base_url_setting, reload_bunfig_install_scopes_setting, + reload_critical_error_channels_setting, reload_extra_pip_index_url_setting, + reload_hub_base_url_setting, reload_job_default_timeout_setting, reload_jwt_secret_setting, + reload_license_key, reload_npm_config_registry_setting, reload_pip_index_url_setting, + reload_retention_period_setting, reload_scim_token_setting, reload_smtp_config, + reload_worker_config, +}; + +#[cfg(feature = "parquet")] +use crate::monitor::reload_s3_cache_setting; + +const GIT_VERSION: &str = git_version!(args = ["--tag", "--always"], fallback = "unknown-version"); +const DEFAULT_NUM_WORKERS: usize = 1; +const DEFAULT_PORT: u16 = 8000; +const DEFAULT_SERVER_BIND_ADDR: Ipv4Addr = Ipv4Addr::new(0, 0, 0, 0); + +mod ee; +mod monitor; + +#[cfg(feature = "pg_embed")] +mod pg_embed; + +#[inline(always)] +fn create_and_run_current_thread_inner(future: F) -> R +where + F: std::future::Future + 'static, + R: Send + 'static, +{ + let rt = tokio::runtime::Builder::new_multi_thread() + .enable_all() + .worker_threads(32) + .build() + .unwrap(); + + // Since this is the main future, we want to box it in debug mode because it tends to be fairly + // large and the compiler won't optimize repeated copies. We also make this runtime factory + // function #[inline(always)] to avoid holding the unboxed, unused future on the stack. + #[cfg(debug_assertions)] + // SAFETY: this this is guaranteed to be running on a current-thread executor + let future = Box::pin(future); + + rt.block_on(future) +} + +pub fn main() -> anyhow::Result<()> { + deno_core::JsRuntime::init_platform(None); + create_and_run_current_thread_inner(windmill_main()) +} + +async fn cache_hub_scripts(file_path: Option) -> anyhow::Result<()> { + let file_path = file_path.unwrap_or("./hubPaths.json".to_string()); + let mut file = File::open(&file_path) + .await + .with_context(|| format!("Could not open {}, make sure it exists", &file_path))?; + let mut contents = String::new(); + file.read_to_string(&mut contents).await?; + let paths = serde_json::from_str::>(&contents).with_context(|| { + format!( + "Could not parse {}, make sure it is a valid JSON object with string keys and values", + &file_path + ) + })?; + + create_dir_all(HUB_CACHE_DIR).await?; + + for path in paths.values() { + tracing::info!("Caching hub script at {path}"); + let res = get_hub_script_content_and_requirements(Some(path.to_string()), None).await?; + if res + .language + .as_ref() + .is_some_and(|x| x == &ScriptLang::Deno) + { + let job_dir = format!("{}/cache_init/{}", TMP_DIR, Uuid::new_v4()); + create_dir_all(&job_dir).await?; + let _ = windmill_worker::generate_deno_lock( + &Uuid::nil(), + &res.content, + &mut 0, + &mut None, + &job_dir, + None, + "global", + "global", + "", + &mut None, + ) + .await?; + tokio::fs::remove_dir_all(job_dir).await?; + } else if res.language.as_ref().is_some_and(|x| x == &ScriptLang::Bun) { + let job_id = Uuid::new_v4(); + let job_dir = format!("{}/cache_init/{}", TMP_DIR, job_id); + create_dir_all(&job_dir).await?; + if let Some(lockfile) = res.lockfile { + let _ = windmill_worker::prepare_job_dir(&lockfile, &job_dir).await?; + + let _ = windmill_worker::install_bun_lockfile( + &mut 0, + &mut None, + &job_id, + "admins", + None, + &job_dir, + "cache_init", + windmill_worker::get_common_bun_proc_envs(None).await, + false, + &mut None, + ) + .await?; + } else { + tracing::warn!("No lockfile found for bun script {path}, skipping..."); + } + tokio::fs::remove_dir_all(job_dir).await?; + } + } + Ok(()) +} + +async fn windmill_main() -> anyhow::Result<()> { + dotenv::dotenv().ok(); + + if std::env::var("RUST_LOG").is_err() { + std::env::set_var("RUST_LOG", "info") + } + + let hostname = hostname(); + + #[cfg(not(feature = "flamegraph"))] + let _guard = windmill_common::tracing_init::initialize_tracing(&hostname); + + #[cfg(all(not(target_env = "msvc"), feature = "jemalloc"))] + tracing::info!("jemalloc enabled"); + + #[cfg(feature = "flamegraph")] + let _guard = windmill_common::tracing_init::setup_flamegraph(); + + let cli_arg = std::env::args().nth(1).unwrap_or_default(); - let (server_mode, monitor_mode, migrate_db) = (true, true, true); + match cli_arg.as_str() { + "cache" => { + #[cfg(feature = "embedding")] + { + tracing::info!("Caching embedding model..."); + windmill_api::embeddings::ModelInstance::load_model_files().await?; + tracing::info!("Cached embedding model"); + } + #[cfg(not(feature = "embedding"))] + { + tracing::warn!("Embeddings are not enabled, ignoring..."); + } + + cache_hub_scripts(std::env::args().nth(2)).await?; - if migrate_db { - windmill::migrate_db(&db).await?; + return Ok(()); + } + "-v" | "--version" | "version" => { + println!("Windmill {}", GIT_VERSION); + return Ok(()); + } + _ => {} } - let (tx, rx) = tokio::sync::broadcast::channel::<()>(3); - let shutdown_signal = windmill::shutdown_signal(tx.clone()); + let mut enable_standalone_indexer: bool = false; - if server_mode || monitor_mode || num_workers > 0 { - let addr = SocketAddr::from(([0, 0, 0, 0], 8000)); + let mode = std::env::var("MODE") + .map(|x| x.to_lowercase()) + .map(|x| { + if &x == "server" { + tracing::info!("Binary is in 'server' mode"); + Mode::Server + } else if &x == "worker" { + tracing::info!("Binary is in 'worker' mode"); + Mode::Worker + } else if &x == "agent" { + tracing::info!("Binary is in 'agent' mode"); + if std::env::var("BASE_INTERNAL_URL").is_err() { + panic!("BASE_INTERNAL_URL is required in agent mode") + } + if std::env::var("JOB_TOKEN").is_err() { + tracing::warn!("JOB_TOKEN is not passed, hence workers will still need to create permissions for each job and the DATABASE_URL needs to be of a role that can INSERT into the job_perms table") + } - let timeout = std::env::var("TIMEOUT") + #[cfg(not(feature = "enterprise"))] + { + panic!("Agent mode is only available in the EE, ignoring..."); + } + #[cfg(feature = "enterprise")] + Mode::Agent + } else if &x == "indexer" { + tracing::info!("Binary is in 'indexer' mode"); + #[cfg(not(feature = "tantivy"))] + { + panic!("Indexer mode requires the tantivy feature flag"); + } + #[cfg(feature = "tantivy")] + Mode::Indexer + } else if &x == "standalone+search"{ + enable_standalone_indexer = true; + tracing::info!("Binary is in 'standalone' mode with search enabled"); + Mode::Standalone + } + else { + if &x != "standalone" { + tracing::error!("mode not recognized, defaulting to standalone: {x}"); + } else { + tracing::info!("Binary is in 'standalone' mode"); + } + Mode::Standalone + } + }) + .unwrap_or_else(|_| { + tracing::info!("Mode not specified, defaulting to standalone"); + Mode::Standalone + }); + + let num_workers = if mode == Mode::Server || mode == Mode::Indexer { + 0 + } else { + std::env::var("NUM_WORKERS") .ok() .and_then(|x| x.parse::().ok()) - .unwrap_or(windmill::DEFAULT_TIMEOUT); + .unwrap_or(DEFAULT_NUM_WORKERS as i32) + }; + + if num_workers > 1 { + tracing::warn!( + "We STRONGLY recommend using at most 1 worker per container, use at your own risks" + ); + } + + let server_mode = !std::env::var("DISABLE_SERVER") + .ok() + .and_then(|x| x.parse::().ok()) + .unwrap_or(false) + && (mode == Mode::Server || mode == Mode::Standalone); + + let indexer_mode = mode == Mode::Indexer; + + let server_bind_address: IpAddr = if server_mode || indexer_mode { + std::env::var("SERVER_BIND_ADDR") + .ok() + .and_then(|x| x.parse().ok()) + .unwrap_or(IpAddr::from(DEFAULT_SERVER_BIND_ADDR)) + } else { + IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1)) + }; + + let rsmq_config = std::env::var("REDIS_URL").ok().map(|x| { + let url = x.parse::().unwrap(); + let mut config = rsmq_async::RsmqOptions { ..Default::default() }; + + config.host = url.host_str().expect("redis host required").to_owned(); + config.password = url.password().map(|s| s.to_owned()); + config.db = url + .path_segments() + .and_then(|mut segments| segments.next()) + .and_then(|segment| segment.parse().ok()) + .unwrap_or(0); + config.ns = url + .query_pairs() + .find(|s| s.0 == "rsmq_namespace") + .map(|s| s.1) + .unwrap_or(std::borrow::Cow::Borrowed("rsmq")) + .into_owned(); + config.port = url.port().unwrap_or(6379).to_string(); + config + }); + + #[cfg(feature = "pg_embed")] + let _pg = { + let (db_url, pg) = pg_embed::start().await.expect("pg embed"); + tracing::info!("Use embedded pg: {db_url}"); + std::env::set_var("DATABASE_URL", db_url); + pg + }; + + tracing::info!("Connecting to database..."); + let db = windmill_common::connect_db(server_mode, indexer_mode).await?; + tracing::info!("Database connected"); + + let num_version = sqlx::query_scalar!("SELECT version()").fetch_one(&db).await; + + tracing::info!( + "PostgreSQL version: {} (windmill require PG >= 14)", + num_version + .ok() + .flatten() + .unwrap_or_else(|| "UNKNOWN".to_string()) + ); + + let rsmq = if let Some(config) = rsmq_config { + tracing::info!("Redis config set: {:?}", config); + Some(rsmq_async::MultiplexedRsmq::new(config).await.unwrap()) + } else { + None + }; + + let is_agent = mode == Mode::Agent; + + if !is_agent { + // migration code to avoid break + windmill_api::migrate_db(&db).await?; + } + + let (killpill_tx, mut killpill_rx) = tokio::sync::broadcast::channel::<()>(2); + let mut monitor_killpill_rx = killpill_tx.subscribe(); + let server_killpill_rx = killpill_tx.subscribe(); + let (killpill_phase2_tx, _killpill_phase2_rx) = tokio::sync::broadcast::channel::<()>(2); + + let shutdown_signal = + windmill_common::shutdown_signal(killpill_tx.clone(), killpill_tx.subscribe()); + + #[cfg(feature = "enterprise")] + tracing::info!( + " +############################## +Windmill Enterprise Edition {GIT_VERSION} +##############################" + ); + + #[cfg(not(feature = "enterprise"))] + tracing::info!( + " +############################## +Windmill Community Edition {GIT_VERSION} +##############################" + ); + + display_config(&ENV_SETTINGS); + + let worker_mode = num_workers > 0; + + if server_mode || worker_mode || indexer_mode { + let port_var = std::env::var("PORT").ok().and_then(|x| x.parse().ok()); + + let port = if server_mode || indexer_mode { + port_var.unwrap_or(DEFAULT_PORT as u16) + } else { + port_var.unwrap_or(0) + }; + + let default_base_internal_url = format!("http://localhost:{}", port.to_string()); + // since it's only on server mode, the port is statically defined + let base_internal_url: String = if let Ok(base_url) = std::env::var("BASE_INTERNAL_URL") { + if !is_agent { + tracing::warn!("BASE_INTERNAL_URL is now unecessary and ignored unless the mode is 'agent', you can remove it."); + default_base_internal_url.clone() + } else { + base_url + } + } else { + default_base_internal_url.clone() + }; + + initial_load(&db, killpill_tx.clone(), worker_mode, server_mode, is_agent).await; + + monitor_db(&db, &base_internal_url, rsmq.clone(), server_mode, true).await; + + monitor_pool(&db).await; + + send_logs_to_object_store(&db, &hostname, &mode); + + #[cfg(all(not(target_env = "msvc"), feature = "jemalloc"))] + if !worker_mode { + monitor_mem().await; + } + + let addr = SocketAddr::from((server_bind_address, port)); + + let rsmq2 = rsmq.clone(); + let (base_internal_tx, base_internal_rx) = tokio::sync::oneshot::channel::(); + + DirBuilder::new() + .recursive(true) + .create("/tmp/windmill") + .await + .expect("could not create initial server dir"); + + #[cfg(feature = "tantivy")] + let should_index_jobs = + mode == Mode::Indexer || (enable_standalone_indexer && mode == Mode::Standalone); + + #[cfg(feature = "tantivy")] + let (index_reader, index_writer) = if should_index_jobs { + let (r, w) = windmill_indexer::indexer_ee::init_index().await?; + (Some(r), Some(w)) + } else { + (None, None) + }; + + #[cfg(feature = "tantivy")] + let indexer_f = { + let indexer_rx = killpill_rx.resubscribe(); + let index_writer2 = index_writer.clone(); + async { + if let Some(index_writer) = index_writer2 { + windmill_indexer::indexer_ee::run_indexer(db.clone(), index_writer, indexer_rx) + .await; + } + Ok(()) + } + }; + + #[cfg(not(feature = "tantivy"))] + let (index_reader, index_writer) = (None, None); + + #[cfg(not(feature = "tantivy"))] + let indexer_f = async { Ok(()) as anyhow::Result<()> }; let server_f = async { - if server_mode { - windmill::run_server( + if !is_agent { + windmill_api::run_server( db.clone(), + rsmq2, + index_reader, + index_writer, addr, - &std::env::var("BASE_URL").unwrap_or("http://localhost".to_string()), - windmill::EmailSender { - from: "bot@windmill.dev".to_string(), - server: "smtp.gmail.com".to_string(), - password: std::env::var("SMTP_PASSWORD").unwrap_or("NOPASS".to_string()), - }, - rx, + server_killpill_rx, + base_internal_tx, + server_mode, + base_internal_url.clone(), ) .await?; + } else { + base_internal_tx + .send(base_internal_url.clone()) + .map_err(|e| { + anyhow::anyhow!("Could not send base_internal_url to agent: {e:#}") + })?; } Ok(()) as anyhow::Result<()> }; - let base_url = std::env::var("BASE_INTERNAL_URL") - .unwrap_or_else(|_| "http://missing-base-url".to_string()); - let workers_f = async { - if num_workers > 0 { - let sleep_queue = std::env::var("SLEEP_QUEUE") - .ok() - .and_then(|x| x.parse::().ok()) - .unwrap_or(windmill::DEFAULT_SLEEP_QUEUE); + let mut rx = killpill_rx.resubscribe(); - windmill::run_workers( - db.clone(), - addr, - timeout, - num_workers, - sleep_queue, - base_url, - tx.clone(), - ) - .await?; + if !killpill_rx.try_recv().is_ok() { + let base_internal_url = base_internal_rx.await?; + if worker_mode { + run_workers( + db.clone(), + rx, + killpill_tx.clone(), + num_workers, + base_internal_url.clone(), + rsmq.clone(), + mode.clone() == Mode::Agent, + hostname.clone(), + ) + .await?; + tracing::info!("All workers exited."); + killpill_tx.send(())?; + } else { + rx.recv().await?; + } } + tracing::info!("Starting phase 2 of shutdown"); + killpill_phase2_tx.send(())?; Ok(()) as anyhow::Result<()> }; let monitor_f = async { - if monitor_mode { - windmill::monitor_db(&db, timeout, tx.clone()); + let db = db.clone(); + let tx = killpill_tx.clone(); + let rsmq = rsmq.clone(); + + let base_internal_url = base_internal_url.to_string(); + let h = tokio::spawn(async move { + let mut listener = retry_listen_pg(&db).await; + + loop { + tokio::select! { + biased; + _ = monitor_killpill_rx.recv() => { + tracing::info!("received killpill for monitor job"); + break; + }, + _ = tokio::time::sleep(Duration::from_secs(30)) => { + monitor_db( + &db, + &base_internal_url, + rsmq.clone(), + server_mode, + false + ) + .await; + }, + notification = listener.recv() => { + match notification { + Ok(n) => { + tracing::info!("Received new pg notification: {n:?}"); + match n.channel() { + "notify_config_change" => { + match n.payload() { + "server" if server_mode => { + tracing::error!("Server config change detected but server config is obsolete: {}", n.payload()); + }, + a@ _ if worker_mode && a == format!("worker__{}", *WORKER_GROUP) => { + tracing::info!("Worker config change detected: {}", n.payload()); + reload_worker_config(&db, tx.clone(), true).await; + }, + _ => { + tracing::debug!("config changed but did not target this server/worker"); + } + } + }, + "notify_global_setting_change" => { + tracing::info!("Global setting change detected: {}", n.payload()); + match n.payload() { + BASE_URL_SETTING => { + if let Err(e) = reload_base_url_setting(&db).await { + tracing::error!(error = %e, "Could not reload base url setting"); + } + }, + OAUTH_SETTING => { + if let Err(e) = reload_base_url_setting(&db).await { + tracing::error!(error = %e, "Could not reload oauth setting"); + } + }, + CUSTOM_TAGS_SETTING => { + if let Err(e) = reload_custom_tags_setting(&db).await { + tracing::error!(error = %e, "Could not reload custom tags setting"); + } + }, + LICENSE_KEY_SETTING => { + if let Err(e) = reload_license_key(&db).await { + tracing::error!(error = %e, "Could not reload license key setting"); + } + }, + DEFAULT_TAGS_PER_WORKSPACE_SETTING => { + if let Err(e) = load_tag_per_workspace_enabled(&db).await { + tracing::error!("Error loading default tag per workspace: {e:#}"); + } + }, + DEFAULT_TAGS_WORKSPACES_SETTING => { + if let Err(e) = load_tag_per_workspace_workspaces(&db).await { + tracing::error!("Error loading default tag per workspace workspaces: {e:#}"); + } + } + SMTP_SETTING => { + reload_smtp_config(&db).await; + }, + TIMEOUT_WAIT_RESULT_SETTING => { + reload_timeout_wait_result_setting(&db).await + }, + RETENTION_PERIOD_SECS_SETTING => { + reload_retention_period_setting(&db).await + }, + JOB_DEFAULT_TIMEOUT_SECS_SETTING => { + reload_job_default_timeout_setting(&db).await + }, + #[cfg(feature = "parquet")] + OBJECT_STORE_CACHE_CONFIG_SETTING if !is_agent => { + reload_s3_cache_setting(&db).await + }, + SCIM_TOKEN_SETTING => { + reload_scim_token_setting(&db).await + }, + EXTRA_PIP_INDEX_URL_SETTING => { + reload_extra_pip_index_url_setting(&db).await + }, + PIP_INDEX_URL_SETTING => { + reload_pip_index_url_setting(&db).await + }, + NPM_CONFIG_REGISTRY_SETTING => { + reload_npm_config_registry_setting(&db).await + }, + BUNFIG_INSTALL_SCOPES_SETTING => { + reload_bunfig_install_scopes_setting(&db).await + }, + KEEP_JOB_DIR_SETTING => { + load_keep_job_dir(&db).await; + }, + REQUIRE_PREEXISTING_USER_FOR_OAUTH_SETTING => { + load_require_preexisting_user(&db).await; + }, + EXPOSE_METRICS_SETTING => { + tracing::info!("Metrics setting changed, restarting"); + // we wait a bit randomly to avoid having all servers and workers shutdown at same time + let rd_delay = rand::thread_rng().gen_range(0..40); + tokio::time::sleep(Duration::from_secs(rd_delay)).await; + if let Err(e) = tx.send(()) { + tracing::error!(error = %e, "Could not send killpill to server"); + } + }, + EXPOSE_DEBUG_METRICS_SETTING => { + if let Err(e) = load_metrics_debug_enabled(&db).await { + tracing::error!(error = %e, "Could not reload debug metrics setting"); + } + }, + REQUEST_SIZE_LIMIT_SETTING => { + if server_mode { + tracing::info!("Request limit size change detected, killing server expecting to be restarted"); + // we wait a bit randomly to avoid having all servers shutdown at same time + let rd_delay = rand::thread_rng().gen_range(0..4); + tokio::time::sleep(Duration::from_secs(rd_delay)).await; + if let Err(e) = tx.send(()) { + tracing::error!(error = %e, "Could not send killpill to server"); + } + } + }, + SAML_METADATA_SETTING => { + tracing::info!("SAML metadata change detected, killing server expecting to be restarted"); + if let Err(e) = tx.send(()) { + tracing::error!(error = %e, "Could not send killpill to server"); + } + }, + HUB_BASE_URL_SETTING => { + if let Err(e) = reload_hub_base_url_setting(&db, server_mode).await { + tracing::error!(error = %e, "Could not reload hub base url setting"); + } + }, + CRITICAL_ERROR_CHANNELS_SETTING => { + if let Err(e) = reload_critical_error_channels_setting(&db).await { + tracing::error!(error = %e, "Could not reload critical error emails setting"); + } + }, + JWT_SECRET_SETTING => { + if let Err(e) = reload_jwt_secret_setting(&db).await { + tracing::error!(error = %e, "Could not reload jwt secret setting"); + } + }, + a @_ => { + tracing::info!("Unrecognized Global Setting Change Payload: {:?}", a); + } + } + }, + _ => { + tracing::warn!("Unknown notification received"); + continue; + } + } + }, + Err(e) => { + tracing::error!(error = %e, "Could not receive notification, attempting to reconnect listener"); + tokio::select! { + biased; + _ = monitor_killpill_rx.recv() => { + tracing::info!("received killpill for monitor job"); + break; + }, + new_listener = retry_listen_pg(&db) => { + listener = new_listener; + continue; + } + } + } + }; + } + } + } + }); + + if let Err(e) = h.await { + tracing::error!("Error waiting for monitor handle: {e:#}") + } + tracing::info!("Monitor exited"); + Ok(()) as anyhow::Result<()> + }; + + let metrics_f = async { + if METRICS_ENABLED.load(std::sync::atomic::Ordering::Relaxed) { + #[cfg(not(feature = "enterprise"))] + tracing::error!("Metrics are only available in the EE, ignoring..."); + + #[cfg(feature = "enterprise")] + windmill_common::serve_metrics(*METRICS_ADDR, _killpill_phase2_rx, num_workers > 0) + .await; } Ok(()) as anyhow::Result<()> }; - futures::try_join!(shutdown_signal, server_f, workers_f, monitor_f)?; + let instance_name = rd_string(8); + if mode == Mode::Server || mode == Mode::Standalone { + schedule_stats(instance_name, &db, &HTTP_CLIENT).await; + } + + #[cfg(feature = "enterprise")] + if mode == Mode::Server || mode == Mode::Standalone { + schedule_key_renewal(&HTTP_CLIENT, &db).await; + } + + futures::try_join!( + shutdown_signal, + workers_f, + monitor_f, + server_f, + metrics_f, + indexer_f + )?; + } else { + tracing::info!("Nothing to do, exiting."); + } + send_current_log_file_to_object_store(&db, &hostname, &mode).await; + + tracing::info!("Exiting connection pool"); + tokio::select! { + _ = db.close() => { + tracing::info!("Database connection pool closed"); + }, + _ = tokio::time::sleep(Duration::from_secs(15)) => { + tracing::warn!("Could not close database connection pool in time (15s). Exiting anyway."); + } + } + Ok(()) +} + +async fn listen_pg(db: &DB) -> Option { + let mut listener = match PgListener::connect_with(&db).await { + Ok(l) => l, + Err(e) => { + tracing::error!(error = %e, "Could not connect to database"); + return None; + } + }; + + if let Err(e) = listener + .listen_all(vec!["notify_config_change", "notify_global_setting_change"]) + .await + { + tracing::error!(error = %e, "Could not listen to database"); + return None; + } + + return Some(listener); +} + +async fn retry_listen_pg(db: &DB) -> PgListener { + let mut listener = listen_pg(db).await; + loop { + if listener.is_none() { + tracing::info!("Retrying listening to pg listen in 5 seconds"); + tokio::time::sleep(Duration::from_secs(5)).await; + listener = listen_pg(db).await; + } else { + tracing::info!("Successfully connected to pg listen"); + return listener.unwrap(); + } + } +} + +fn display_config(envs: &[&str]) { + tracing::info!( + "config: {}", + envs.iter() + .filter(|env| std::env::var(env).is_ok()) + .map(|env| { + format!( + "{}: {}", + env, + std::env::var(env).unwrap_or_else(|_| "not set".to_string()) + ) + }) + .collect::>() + .join(", ") + ) +} + +pub async fn run_workers( + db: Pool, + mut rx: tokio::sync::broadcast::Receiver<()>, + tx: tokio::sync::broadcast::Sender<()>, + num_workers: i32, + base_internal_url: String, + rsmq: Option, + agent_mode: bool, + hostname: String, +) -> anyhow::Result<()> { + let mut killpill_rxs = vec![]; + for _ in 0..num_workers { + killpill_rxs.push(rx.resubscribe()); + } + + if rx.try_recv().is_ok() { + tracing::info!("Received killpill, exiting"); + return Ok(()); + } + let instance_name = hostname + .clone() + .replace(" ", "") + .split("-") + .last() + .unwrap() + .to_ascii_lowercase() + .to_string(); + + // #[cfg(tokio_unstable)] + // let monitor = tokio_metrics::TaskMonitor::new(); + + let ip = windmill_common::external_ip::get_ip() + .await + .unwrap_or_else(|e| { + tracing::warn!(error = e.to_string(), "failed to get external IP"); + "unretrievable IP".to_string() + }); + + let mut handles = Vec::with_capacity(num_workers as usize); + + for x in [ + LOCK_CACHE_DIR, + TMP_LOGS_DIR, + PIP_CACHE_DIR, + TAR_PIP_CACHE_DIR, + DENO_CACHE_DIR, + DENO_CACHE_DIR_DEPS, + DENO_CACHE_DIR_NPM, + BUN_CACHE_DIR, + BUN_DEPSTAR_CACHE_DIR, + BUN_BUNDLE_CACHE_DIR, + GO_CACHE_DIR, + GO_BIN_CACHE_DIR, + RUST_CACHE_DIR, + HUB_CACHE_DIR, + POWERSHELL_CACHE_DIR, + ] { + DirBuilder::new() + .recursive(true) + .create(x) + .await + .expect("could not create initial worker dir"); + } + + tracing::info!( + "Starting {num_workers} workers and SLEEP_QUEUE={}ms", + *windmill_worker::SLEEP_QUEUE + ); + for i in 1..(num_workers + 1) { + let db1 = db.clone(); + let instance_name = instance_name.clone(); + let worker_name = format!("wk-{}-{}-{}", *WORKER_GROUP, &instance_name, rd_string(5)); + let ip = ip.clone(); + let rx = killpill_rxs.pop().unwrap(); + let tx = tx.clone(); + let base_internal_url = base_internal_url.clone(); + let rsmq2 = rsmq.clone(); + let hostname = hostname.clone(); + + handles.push(tokio::spawn(async move { + if num_workers > 1 { + tracing::info!(worker = %worker_name, "starting worker {i}"); + } + + let f = windmill_worker::run_worker( + &db1, + &hostname, + worker_name, + i as u64, + num_workers as u32, + &ip, + rx, + tx, + &base_internal_url, + rsmq2, + agent_mode, + ); + + // #[cfg(tokio_unstable)] + // { + // monitor.monitor(f, "worker").await + // } + + // #[cfg(not(tokio_unstable))] + // { + f.await + // } + })); } + futures::future::try_join_all(handles).await?; Ok(()) } diff --git a/backend/src/monitor.rs b/backend/src/monitor.rs new file mode 100644 index 0000000000000..92f69a0d6445c --- /dev/null +++ b/backend/src/monitor.rs @@ -0,0 +1,1592 @@ +use std::{ + collections::HashMap, + fmt::Display, + ops::Mul, + str::FromStr, + sync::{ + atomic::{AtomicU16, Ordering}, + Arc, + }, + time::Duration, +}; + +use chrono::{NaiveDateTime, Utc}; +use rsmq_async::MultiplexedRsmq; +use serde::de::DeserializeOwned; +use sqlx::{Pool, Postgres}; +use tokio::{ + join, + sync::{mpsc, RwLock}, +}; + +#[cfg(feature = "embedding")] +use windmill_api::embeddings::update_embeddings_db; +use windmill_api::{ + jobs::TIMEOUT_WAIT_RESULT, + oauth2_ee::{build_oauth_clients, OAuthClient}, + DEFAULT_BODY_LIMIT, IS_SECURE, OAUTH_CLIENTS, REQUEST_SIZE_LIMIT, SAML_METADATA, SCIM_TOKEN, +}; +#[cfg(feature = "enterprise")] +use windmill_common::ee::worker_groups_alerts; +use windmill_common::{ + auth::JWT_SECRET, + ee::CriticalErrorChannel, + error, + flow_status::FlowStatusModule, + global_settings::{ + BASE_URL_SETTING, BUNFIG_INSTALL_SCOPES_SETTING, CRITICAL_ERROR_CHANNELS_SETTING, + DEFAULT_TAGS_PER_WORKSPACE_SETTING, DEFAULT_TAGS_WORKSPACES_SETTING, + EXPOSE_DEBUG_METRICS_SETTING, EXPOSE_METRICS_SETTING, EXTRA_PIP_INDEX_URL_SETTING, + HUB_BASE_URL_SETTING, JOB_DEFAULT_TIMEOUT_SECS_SETTING, JWT_SECRET_SETTING, + KEEP_JOB_DIR_SETTING, LICENSE_KEY_SETTING, NPM_CONFIG_REGISTRY_SETTING, OAUTH_SETTING, + PIP_INDEX_URL_SETTING, REQUEST_SIZE_LIMIT_SETTING, + REQUIRE_PREEXISTING_USER_FOR_OAUTH_SETTING, RETENTION_PERIOD_SECS_SETTING, + SAML_METADATA_SETTING, SCIM_TOKEN_SETTING, TIMEOUT_WAIT_RESULT_SETTING, + }, + jobs::QueuedJob, + oauth2::REQUIRE_PREEXISTING_USER_FOR_OAUTH, + server::load_smtp_config, + tracing_init::JSON_FMT, + users::truncate_token, + utils::{now_from_db, rd_string, report_critical_error, Mode}, + worker::{ + load_worker_config, make_pull_query, make_suspended_pull_query, reload_custom_tags_setting, + DEFAULT_TAGS_PER_WORKSPACE, DEFAULT_TAGS_WORKSPACES, SMTP_CONFIG, WORKER_CONFIG, + WORKER_GROUP, + }, + BASE_URL, CRITICAL_ERROR_CHANNELS, DB, DEFAULT_HUB_BASE_URL, HUB_BASE_URL, JOB_RETENTION_SECS, + METRICS_DEBUG_ENABLED, METRICS_ENABLED, +}; +use windmill_queue::cancel_job; +use windmill_worker::{ + create_token_for_owner, handle_job_error, AuthedClient, SameWorkerPayload, SameWorkerSender, + SendResult, BUNFIG_INSTALL_SCOPES, JOB_DEFAULT_TIMEOUT, KEEP_JOB_DIR, NPM_CONFIG_REGISTRY, + PIP_EXTRA_INDEX_URL, PIP_INDEX_URL, SCRIPT_TOKEN_EXPIRY, +}; + +#[cfg(feature = "parquet")] +use windmill_common::s3_helpers::{ + build_object_store_from_settings, build_s3_client_from_settings, S3Settings, + OBJECT_STORE_CACHE_SETTINGS, +}; + +#[cfg(feature = "parquet")] +use windmill_common::global_settings::OBJECT_STORE_CACHE_CONFIG_SETTING; + +#[cfg(feature = "enterprise")] +use crate::ee::verify_license_key; + +#[cfg(feature = "enterprise")] +use windmill_common::ee::LICENSE_KEY_VALID; + +use crate::ee::set_license_key; + +lazy_static::lazy_static! { + static ref ZOMBIE_JOB_TIMEOUT: String = std::env::var("ZOMBIE_JOB_TIMEOUT") + .ok() + .and_then(|x| x.parse::().ok()) + .unwrap_or_else(|| "30".to_string()); + + static ref FLOW_ZOMBIE_TRANSITION_TIMEOUT: String = std::env::var("FLOW_ZOMBIE_TRANSITION_TIMEOUT") + .ok() + .and_then(|x| x.parse::().ok()) + .unwrap_or_else(|| "30".to_string()); + + + pub static ref RESTART_ZOMBIE_JOBS: bool = std::env::var("RESTART_ZOMBIE_JOBS") + .ok() + .and_then(|x| x.parse::().ok()) + .unwrap_or(true); + + static ref QUEUE_ZOMBIE_RESTART_COUNT: prometheus::IntCounter = prometheus::register_int_counter!( + "queue_zombie_restart_count", + "Total number of jobs restarted due to ping timeout." + ) + .unwrap(); + static ref QUEUE_ZOMBIE_DELETE_COUNT: prometheus::IntCounter = prometheus::register_int_counter!( + "queue_zombie_delete_count", + "Total number of jobs deleted due to their ping timing out in an unrecoverable state." + ) + .unwrap(); + + static ref QUEUE_COUNT: prometheus::IntGaugeVec = prometheus::register_int_gauge_vec!( + "queue_count", + "Number of jobs in the queue", + &["tag"] + ).unwrap(); +} + +pub async fn initial_load( + db: &Pool, + tx: tokio::sync::broadcast::Sender<()>, + worker_mode: bool, + server_mode: bool, + _is_agent: bool, +) { + if let Err(e) = load_metrics_enabled(db).await { + tracing::error!("Error loading expose metrics: {e:#}"); + } + + if let Err(e) = load_metrics_debug_enabled(db).await { + tracing::error!("Error loading expose debug metrics: {e:#}"); + } + + if let Err(e) = load_tag_per_workspace_enabled(db).await { + tracing::error!("Error loading default tag per workpsace: {e:#}"); + } + + if let Err(e) = load_tag_per_workspace_workspaces(db).await { + tracing::error!("Error loading default tag per workpsace workspaces: {e:#}"); + } + + if server_mode { + load_require_preexisting_user(db).await; + } + + if worker_mode { + load_keep_job_dir(db).await; + reload_worker_config(&db, tx, false).await; + } + + if let Err(e) = reload_custom_tags_setting(db).await { + tracing::error!("Error reloading custom tags: {:?}", e) + } + + if let Err(e) = reload_base_url_setting(db).await { + tracing::error!("Error reloading base url: {:?}", e) + } + + if let Err(e) = reload_hub_base_url_setting(db, server_mode).await { + tracing::error!("Error reloading hub base url: {:?}", e) + } + + if let Err(e) = reload_critical_error_channels_setting(&db).await { + tracing::error!("Could not reload critical error emails setting: {:?}", e); + } + + if let Err(e) = reload_jwt_secret_setting(&db).await { + tracing::error!("Could not reload jwt secret setting: {:?}", e); + } + + #[cfg(feature = "parquet")] + if !_is_agent { + reload_s3_cache_setting(&db).await; + } + + reload_smtp_config(&db).await; + + if server_mode { + reload_retention_period_setting(&db).await; + reload_request_size(&db).await; + reload_saml_metadata_setting(&db).await; + reload_scim_token_setting(&db).await; + } + + #[cfg(feature = "enterprise")] + if let Err(e) = reload_license_key(&db).await { + tracing::error!("Error reloading license key: {:?}", e) + } + + if worker_mode { + reload_extra_pip_index_url_setting(&db).await; + reload_pip_index_url_setting(&db).await; + reload_npm_config_registry_setting(&db).await; + reload_bunfig_install_scopes_setting(&db).await; + } +} + +pub async fn load_metrics_enabled(db: &DB) -> error::Result<()> { + let metrics_enabled = load_value_from_global_settings(db, EXPOSE_METRICS_SETTING).await; + match metrics_enabled { + Ok(Some(serde_json::Value::Bool(t))) => METRICS_ENABLED.store(t, Ordering::Relaxed), + _ => (), + }; + Ok(()) +} + +pub async fn load_tag_per_workspace_enabled(db: &DB) -> error::Result<()> { + let metrics_enabled = + load_value_from_global_settings(db, DEFAULT_TAGS_PER_WORKSPACE_SETTING).await; + + match metrics_enabled { + Ok(Some(serde_json::Value::Bool(t))) => { + DEFAULT_TAGS_PER_WORKSPACE.store(t, Ordering::Relaxed) + } + _ => (), + }; + Ok(()) +} + +pub async fn load_tag_per_workspace_workspaces(db: &DB) -> error::Result<()> { + let workspaces = load_value_from_global_settings(db, DEFAULT_TAGS_WORKSPACES_SETTING).await; + + match workspaces { + Ok(Some(serde_json::Value::Array(t))) => { + let workspaces = t + .iter() + .filter_map(|x| x.as_str()) + .map(|x| x.to_string()) + .collect::>(); + let mut w = DEFAULT_TAGS_WORKSPACES.write().await; + *w = Some(workspaces); + } + Ok(None) => { + let mut w = DEFAULT_TAGS_WORKSPACES.write().await; + *w = None; + } + _ => (), + }; + Ok(()) +} + +pub async fn load_metrics_debug_enabled(db: &DB) -> error::Result<()> { + let metrics_enabled = load_value_from_global_settings(db, EXPOSE_DEBUG_METRICS_SETTING).await; + match metrics_enabled { + Ok(Some(serde_json::Value::Bool(t))) => { + METRICS_DEBUG_ENABLED.store(t, Ordering::Relaxed); + //_RJEM_MALLOC_CONF=prof:true,prof_active:false,lg_prof_interval:30,lg_prof_sample:21,prof_prefix:/tmp/jeprof + #[cfg(all(not(target_env = "msvc"), feature = "jemalloc"))] + if std::env::var("_RJEM_MALLOC_CONF").is_ok() { + if let Err(e) = set_prof_active(t) { + tracing::error!("Error setting jemalloc prof_active: {e:?}"); + } + } + } + _ => (), + }; + Ok(()) +} + +#[cfg(all(not(target_env = "msvc"), feature = "jemalloc"))] +#[derive(Debug, Clone)] +pub struct MallctlError { + pub code: i32, +} + +#[cfg(all(not(target_env = "msvc"), feature = "jemalloc"))] +fn set_prof_active(new_value: bool) -> Result<(), MallctlError> { + let option_name = std::ffi::CString::new("prof.active").unwrap(); + + tracing::info!("Setting jemalloc prof_active to {}", new_value); + let result = unsafe { + tikv_jemalloc_sys::mallctl( + option_name.as_ptr(), // const char *name + std::ptr::null_mut(), // void *oldp + std::ptr::null_mut(), // size_t *oldlenp + &new_value as *const _ as *mut _, // void *newp + std::mem::size_of_val(&new_value), // size_t newlen + ) + }; + + if result != 0 { + return Err(MallctlError { code: result }); + } + + Ok(()) +} + +#[cfg(all(not(target_env = "msvc"), feature = "jemalloc"))] +pub fn bytes_to_mb(bytes: u64) -> f64 { + const BYTES_PER_MB: f64 = 1_048_576.0; + bytes as f64 / BYTES_PER_MB +} + +#[cfg(all(not(target_env = "msvc"), feature = "jemalloc"))] +pub async fn monitor_mem() { + use std::time::Duration; + use tikv_jemalloc_ctl::{epoch, stats}; + + tokio::spawn(async move { + // Obtain a MIB for the `epoch`, `stats.allocated`, and + // `atats.resident` keys: + let e = match epoch::mib() { + Ok(mib) => mib, + Err(e) => { + tracing::error!("Error getting jemalloc epoch mib: {:?}", e); + return; + } + }; + let allocated = match stats::allocated::mib() { + Ok(mib) => mib, + Err(e) => { + tracing::error!("Error getting jemalloc allocated mib: {:?}", e); + return; + } + }; + let resident = match stats::resident::mib() { + Ok(mib) => mib, + Err(e) => { + tracing::error!("Error getting jemalloc resident mib: {:?}", e); + return; + } + }; + + loop { + // Many statistics are cached and only updated + // when the epoch is advanced: + match e.advance() { + Ok(_) => { + // Read statistics using MIB key: + let allocated = allocated.read().unwrap_or_default(); + let resident = resident.read().unwrap_or_default(); + tracing::info!( + "{} mb allocated/{} mb resident", + bytes_to_mb(allocated as u64), + bytes_to_mb(resident as u64) + ); + } + Err(e) => { + tracing::error!("Error advancing jemalloc epoch: {:?}", e); + } + } + tokio::time::sleep(Duration::from_secs(30)).await; + } + }); +} + +async fn sleep_until_next_minute_start_plus_one_s() { + let now = Utc::now(); + let next_minute = now + Duration::from_secs(60 - now.timestamp() as u64 % 60 + 1); + tokio::time::sleep(tokio::time::Duration::from_secs( + next_minute.timestamp() as u64 - now.timestamp() as u64, + )) + .await; +} + +use windmill_common::tracing_init::TMP_WINDMILL_LOGS_SERVICE; +async fn find_two_highest_files(hostname: &str) -> (Option, Option) { + let log_dir = format!("{}/{}/", TMP_WINDMILL_LOGS_SERVICE, hostname); + let rd_dir = tokio::fs::read_dir(log_dir).await; + if let Ok(mut log_files) = rd_dir { + let mut highest_file: Option = None; + let mut second_highest_file: Option = None; + while let Ok(Some(file)) = log_files.next_entry().await { + let file_name = file + .file_name() + .to_str() + .map(|x| x.to_string()) + .unwrap_or_default(); + if file_name > highest_file.clone().unwrap_or_default() { + second_highest_file = highest_file; + highest_file = Some(file_name); + } + } + (highest_file, second_highest_file) + } else { + tracing::error!( + "Error reading log files: {TMP_WINDMILL_LOGS_SERVICE}, {:#?}", + rd_dir.unwrap_err() + ); + (None, None) + } +} + +fn get_worker_group(mode: &Mode) -> Option { + let worker_group = WORKER_GROUP.clone(); + if worker_group.is_empty() || mode == &Mode::Server || mode == &Mode::Indexer { + None + } else { + Some(worker_group) + } +} + +pub fn send_logs_to_object_store(db: &DB, hostname: &str, mode: &Mode) { + let db = db.clone(); + let hostname = hostname.to_string(); + let mode = mode.clone(); + let worker_group = get_worker_group(&mode); + tokio::spawn(async move { + let mut interval = tokio::time::interval(Duration::from_secs(10)); + interval.set_missed_tick_behavior(tokio::time::MissedTickBehavior::Skip); + sleep_until_next_minute_start_plus_one_s().await; + loop { + interval.tick().await; + let (_, snd_highest_file) = find_two_highest_files(&hostname).await; + send_log_file_to_object_store( + &hostname, + &mode, + &worker_group, + &db, + snd_highest_file, + false, + ) + .await; + } + }); +} + +pub async fn send_current_log_file_to_object_store(db: &DB, hostname: &str, mode: &Mode) { + tracing::info!("Sending current log file to object store"); + let (highest_file, _) = find_two_highest_files(hostname).await; + let worker_group = get_worker_group(&mode); + send_log_file_to_object_store(hostname, mode, &worker_group, db, highest_file, true).await; +} + +fn get_now_and_str() -> (NaiveDateTime, String) { + let ts = Utc::now().naive_utc(); + ( + ts, + ts.format(windmill_common::tracing_init::LOG_TIMESTAMP_FMT) + .to_string(), + ) +} + +async fn send_log_file_to_object_store( + hostname: &str, + mode: &Mode, + worker_group: &Option, + db: &Pool, + snd_highest_file: Option, + use_now: bool, +) { + if let Some(highest_file) = snd_highest_file { + //parse datetime frome file xxxx.yyyy-MM-dd-HH-mm + let (ts, ts_str) = if use_now { + get_now_and_str() + } else { + highest_file + .split(".") + .last() + .and_then(|x| { + NaiveDateTime::parse_from_str( + x, + windmill_common::tracing_init::LOG_TIMESTAMP_FMT, + ) + .ok() + .map(|y| (y, x.to_string())) + }) + .unwrap_or_else(get_now_and_str) + }; + + let exists = sqlx::query_scalar!( + "SELECT EXISTS(SELECT 1 FROM log_file WHERE hostname = $1 AND log_ts = $2)", + hostname, + ts + ) + .fetch_one(db) + .await; + + match exists { + Ok(Some(true)) => { + return; + } + Err(e) => { + tracing::error!("Error checking if log file exists: {:?}", e); + return; + } + _ => (), + } + + #[cfg(feature = "parquet")] + let s3_client = OBJECT_STORE_CACHE_SETTINGS.read().await.clone(); + #[cfg(feature = "parquet")] + if let Some(s3_client) = s3_client { + let path = std::path::Path::new(TMP_WINDMILL_LOGS_SERVICE) + .join(hostname) + .join(&highest_file); + + //read file as byte stream + let bytes = tokio::fs::read(&path).await; + if let Err(e) = bytes { + tracing::error!("Error reading log file: {:?}", e); + return; + } + let path = object_store::path::Path::from_url_path(format!( + "{}{hostname}/{highest_file}", + windmill_common::tracing_init::LOGS_SERVICE + )); + if let Err(e) = path { + tracing::error!("Error creating log file path: {:?}", e); + return; + } + if let Err(e) = s3_client.put(&path.unwrap(), bytes.unwrap().into()).await { + tracing::error!("Error sending logs to object store: {:?}", e); + } + } + + let (ok_lines, err_lines) = read_log_counters(ts_str); + + if let Err(e) = sqlx::query!("INSERT INTO log_file (hostname, mode, worker_group, log_ts, file_path, ok_lines, err_lines, json_fmt) VALUES ($1, $2::text::LOG_MODE, $3, $4, $5, $6, $7, $8)", + hostname, mode.to_string(), worker_group.clone(), ts, highest_file, ok_lines as i64, err_lines as i64, *JSON_FMT) + .execute(db) + .await { + tracing::error!("Error inserting log file: {:?}", e); + } + } +} + +fn read_log_counters(ts_str: String) -> (usize, usize) { + let counters = windmill_common::tracing_init::LOG_COUNTING_BY_MIN.read(); + let mut ok_lines = 0; + let mut err_lines = 0; + if let Ok(ref c) = counters { + let counter = c.get(&ts_str); + if let Some(counter) = counter { + ok_lines = counter.non_error_count; + err_lines = counter.error_count; + } else { + // println!("no counter found for {ts_str}"); + } + } else { + println!("Error reading log counters 2"); + } + (ok_lines, err_lines) +} + +pub async fn load_keep_job_dir(db: &DB) { + let value = load_value_from_global_settings(db, KEEP_JOB_DIR_SETTING).await; + match value { + Ok(Some(serde_json::Value::Bool(t))) => KEEP_JOB_DIR.store(t, Ordering::Relaxed), + Err(e) => { + tracing::error!("Error loading keep job dir metrics: {e:#}"); + } + _ => (), + }; +} + +pub async fn load_require_preexisting_user(db: &DB) { + let value = + load_value_from_global_settings(db, REQUIRE_PREEXISTING_USER_FOR_OAUTH_SETTING).await; + match value { + Ok(Some(serde_json::Value::Bool(t))) => { + REQUIRE_PREEXISTING_USER_FOR_OAUTH.store(t, Ordering::Relaxed) + } + Err(e) => { + tracing::error!("Error loading keep job dir metrics: {e:#}"); + } + _ => (), + }; +} + +pub async fn delete_expired_items(db: &DB) -> () { + let tokens_deleted_r: std::result::Result, _> = sqlx::query_scalar( + "DELETE FROM token WHERE expiration <= now() + RETURNING concat(substring(token for 10), '*****')", + ) + .fetch_all(db) + .await; + + match tokens_deleted_r { + Ok(tokens) => { + if tokens.len() > 0 { + tracing::info!("deleted {} tokens: {:?}", tokens.len(), tokens) + } + } + Err(e) => tracing::error!("Error deleting token: {}", e.to_string()), + } + + let pip_resolution_r = sqlx::query_scalar!( + "DELETE FROM pip_resolution_cache WHERE expiration <= now() RETURNING hash", + ) + .fetch_all(db) + .await; + + match pip_resolution_r { + Ok(res) => { + if res.len() > 0 { + tracing::info!("deleted {} pip_resolution: {:?}", res.len(), res) + } + } + Err(e) => tracing::error!("Error deleting pip_resolution: {}", e.to_string()), + } + + let deleted_cache = sqlx::query_scalar!( + "DELETE FROM resource WHERE resource_type = 'cache' AND to_timestamp((value->>'expire')::int) < now() RETURNING path", + ) + .fetch_all(db) + .await; + + match deleted_cache { + Ok(res) => { + if res.len() > 0 { + tracing::info!("deleted {} cache resource: {:?}", res.len(), res) + } + } + Err(e) => tracing::error!("Error deleting cache resource {}", e.to_string()), + } + + let deleted_expired_variables = sqlx::query_scalar!( + "DELETE FROM variable WHERE expires_at IS NOT NULL AND expires_at < now() RETURNING path", + ) + .fetch_all(db) + .await; + + match deleted_expired_variables { + Ok(res) => { + if res.len() > 0 { + tracing::info!("deleted {} expired variables {:?}", res.len(), res) + } + } + Err(e) => tracing::error!("Error deleting cache resource {}", e.to_string()), + } + + let job_retention_secs = *JOB_RETENTION_SECS.read().await; + if job_retention_secs > 0 { + match db.begin().await { + Ok(mut tx) => { + let deleted_jobs = sqlx::query_scalar!( + "DELETE FROM completed_job WHERE created_at <= now() - ($1::bigint::text || ' s')::interval AND started_at + ((duration_ms/1000 + $1::bigint) || ' s')::interval <= now() RETURNING id", + job_retention_secs + ) + .fetch_all(&mut *tx) + .await; + + match deleted_jobs { + Ok(deleted_jobs) => { + if deleted_jobs.len() > 0 { + tracing::info!( + "deleted {} jobs completed JOB_RETENTION_SECS {} ago: {:?}", + deleted_jobs.len(), + job_retention_secs, + deleted_jobs, + ); + if let Err(e) = sqlx::query!( + "DELETE FROM job_stats WHERE job_id = ANY($1)", + &deleted_jobs + ) + .execute(&mut *tx) + .await + { + tracing::error!("Error deleting job stats: {:?}", e); + } + if let Err(e) = sqlx::query!( + "DELETE FROM job_logs WHERE job_id = ANY($1)", + &deleted_jobs + ) + .execute(&mut *tx) + .await + { + tracing::error!("Error deleting job stats: {:?}", e); + } + if let Err(e) = sqlx::query!( + "DELETE FROM concurrency_key WHERE ended_at <= now() - ($1::bigint::text || ' s')::interval ", + job_retention_secs + ) + .execute(&mut *tx) + .await + { + tracing::error!("Error deleting custom concurrency key: {:?}", e); + } + if let Err(e) = sqlx::query!( + "DELETE FROM log_file WHERE log_ts <= now() - ($1::bigint::text || ' s')::interval ", + job_retention_secs + ) + .execute(&mut *tx) + .await + { + tracing::error!("Error deleting log file: {:?}", e); + } + } + } + Err(e) => { + tracing::error!("Error deleting expired jobs: {:?}", e) + } + } + + match tx.commit().await { + Ok(_) => (), + Err(err) => tracing::error!("Error deleting expired jobs: {:?}", err), + } + } + Err(err) => { + tracing::error!("Error deleting expired jobs: {:?}", err) + } + } + } +} + +pub async fn reload_scim_token_setting(db: &DB) { + reload_option_setting_with_tracing(db, SCIM_TOKEN_SETTING, "SCIM_TOKEN", SCIM_TOKEN.clone()) + .await; +} + +pub async fn reload_timeout_wait_result_setting(db: &DB) { + reload_option_setting_with_tracing( + db, + TIMEOUT_WAIT_RESULT_SETTING, + "TIMEOUT_WAIT_RESULT", + TIMEOUT_WAIT_RESULT.clone(), + ) + .await; +} +pub async fn reload_saml_metadata_setting(db: &DB) { + reload_option_setting_with_tracing( + db, + SAML_METADATA_SETTING, + "SAML_METADATA", + SAML_METADATA.clone(), + ) + .await; +} + +pub async fn reload_extra_pip_index_url_setting(db: &DB) { + reload_option_setting_with_tracing( + db, + EXTRA_PIP_INDEX_URL_SETTING, + "PIP_EXTRA_INDEX_URL", + PIP_EXTRA_INDEX_URL.clone(), + ) + .await; +} + +pub async fn reload_pip_index_url_setting(db: &DB) { + reload_option_setting_with_tracing( + db, + PIP_INDEX_URL_SETTING, + "PIP_INDEX_URL", + PIP_INDEX_URL.clone(), + ) + .await; +} + +pub async fn reload_npm_config_registry_setting(db: &DB) { + reload_option_setting_with_tracing( + db, + NPM_CONFIG_REGISTRY_SETTING, + "NPM_CONFIG_REGISTRY", + NPM_CONFIG_REGISTRY.clone(), + ) + .await; +} + +pub async fn reload_bunfig_install_scopes_setting(db: &DB) { + reload_option_setting_with_tracing( + db, + BUNFIG_INSTALL_SCOPES_SETTING, + "BUNFIG_INSTALL_SCOPES", + BUNFIG_INSTALL_SCOPES.clone(), + ) + .await; +} + +pub async fn reload_retention_period_setting(db: &DB) { + if let Err(e) = reload_setting( + db, + RETENTION_PERIOD_SECS_SETTING, + "JOB_RETENTION_SECS", + 60 * 60 * 24 * 30, + JOB_RETENTION_SECS.clone(), + |x| x, + ) + .await + { + tracing::error!("Error reloading retention period: {:?}", e) + } +} + +#[cfg(feature = "parquet")] +pub async fn reload_s3_cache_setting(db: &DB) { + use windmill_common::{ + ee::{get_license_plan, LicensePlan}, + s3_helpers::ObjectSettings, + }; + + let s3_config = load_value_from_global_settings(db, OBJECT_STORE_CACHE_CONFIG_SETTING).await; + if let Err(e) = s3_config { + tracing::error!("Error reloading s3 cache config: {:?}", e) + } else { + if let Some(v) = s3_config.unwrap() { + if matches!(get_license_plan().await, LicensePlan::Pro) { + tracing::error!("S3 cache is not available for pro plan"); + return; + } + let mut s3_cache_settings = OBJECT_STORE_CACHE_SETTINGS.write().await; + let setting = serde_json::from_value::(v); + if let Err(e) = setting { + tracing::error!("Error parsing s3 cache config: {:?}", e) + } else { + let s3_client = build_object_store_from_settings(setting.unwrap()).await; + if let Err(e) = s3_client { + tracing::error!("Error building s3 client from settings: {:?}", e) + } else { + *s3_cache_settings = Some(s3_client.unwrap()); + } + } + } else { + let mut s3_cache_settings = OBJECT_STORE_CACHE_SETTINGS.write().await; + if std::env::var("S3_CACHE_BUCKET").is_ok() { + if matches!(get_license_plan().await, LicensePlan::Pro) { + tracing::error!("S3 cache is not available for pro plan"); + return; + } + *s3_cache_settings = build_s3_client_from_settings(S3Settings { + bucket: None, + region: None, + access_key: None, + secret_key: None, + endpoint: None, + store_logs: None, + path_style: None, + allow_http: None, + port: None, + }) + .await + .ok(); + } else { + *s3_cache_settings = None; + } + } + } +} + +pub async fn reload_job_default_timeout_setting(db: &DB) { + reload_option_setting_with_tracing( + db, + JOB_DEFAULT_TIMEOUT_SECS_SETTING, + "JOB_DEFAULT_TIMEOUT_SECS", + JOB_DEFAULT_TIMEOUT.clone(), + ) + .await; +} + +pub async fn reload_request_size(db: &DB) { + if let Err(e) = reload_setting( + db, + REQUEST_SIZE_LIMIT_SETTING, + "REQUEST_SIZE_LIMIT", + DEFAULT_BODY_LIMIT, + REQUEST_SIZE_LIMIT.clone(), + |x| x.mul(1024 * 1024), + ) + .await + { + tracing::error!("Error reloading retention period: {:?}", e) + } +} + +pub async fn reload_license_key(db: &DB) -> error::Result<()> { + let q = load_value_from_global_settings(db, LICENSE_KEY_SETTING).await?; + + let mut value = std::env::var("LICENSE_KEY") + .ok() + .and_then(|x| x.parse::().ok()) + .unwrap_or(String::new()); + + if let Some(q) = q { + if let Ok(v) = serde_json::from_value::(q.clone()) { + tracing::info!( + "Loaded setting LICENSE_KEY from db config: {}", + truncate_token(&v) + ); + value = v; + } else { + tracing::error!("Could not parse LICENSE_KEY found: {:#?}", &q); + } + }; + + set_license_key(value).await?; + + Ok(()) +} + +pub async fn reload_option_setting_with_tracing( + db: &DB, + setting_name: &str, + std_env_var: &str, + lock: Arc>>, +) { + if let Err(e) = reload_option_setting(db, setting_name, std_env_var, lock.clone()).await { + tracing::error!("Error reloading setting {}: {:?}", setting_name, e) + } +} + +async fn load_value_from_global_settings( + db: &DB, + setting_name: &str, +) -> error::Result> { + let r = sqlx::query!( + "SELECT value FROM global_settings WHERE name = $1", + setting_name + ) + .fetch_optional(db) + .await? + .map(|x| x.value); + Ok(r) +} +pub async fn reload_option_setting( + db: &DB, + setting_name: &str, + std_env_var: &str, + lock: Arc>>, +) -> error::Result<()> { + let force_value = std::env::var(format!("FORCE_{}", std_env_var)) + .ok() + .and_then(|x| x.parse::().ok()); + + if let Some(force_value) = force_value { + let mut l = lock.write().await; + *l = Some(force_value); + return Ok(()); + } + + let q = load_value_from_global_settings(db, setting_name).await?; + + let mut value = std::env::var(std_env_var) + .ok() + .and_then(|x| x.parse::().ok()); + + if let Some(q) = q { + if let Ok(v) = serde_json::from_value::(q.clone()) { + tracing::info!("Loaded setting {setting_name} from db config: {:#?}", &q); + value = Some(v) + } else { + tracing::error!("Could not parse {setting_name} found: {:#?}", &q); + } + }; + + { + if value.is_none() { + tracing::info!("Loaded {setting_name} setting to None"); + } + let mut l = lock.write().await; + *l = value; + } + + Ok(()) +} + +pub async fn reload_setting( + db: &DB, + setting_name: &str, + std_env_var: &str, + default: T, + lock: Arc>, + transformer: fn(T) -> T, +) -> error::Result<()> { + let q = load_value_from_global_settings(db, setting_name).await?; + + let mut value = std::env::var(std_env_var) + .ok() + .and_then(|x| x.parse::().ok()) + .unwrap_or(default); + + if let Some(q) = q { + if let Ok(v) = serde_json::from_value::(q.clone()) { + tracing::info!("Loaded setting {setting_name} from db config: {:#?}", &q); + value = transformer(v); + } else { + tracing::error!("Could not parse {setting_name} found: {:#?}", &q); + } + }; + + { + let mut l = lock.write().await; + *l = value; + } + + Ok(()) +} + +pub async fn monitor_pool(db: &DB) { + if METRICS_ENABLED.load(Ordering::Relaxed) { + let db = db.clone(); + tokio::spawn(async move { + let active_pool_connections: prometheus::IntGauge = prometheus::register_int_gauge!( + "pool_connections_active", + "Number of active postgresql connections in the pool" + ) + .unwrap(); + + let idle_pool_connections: prometheus::IntGauge = prometheus::register_int_gauge!( + "pool_connections_idle", + "Number of idle postgresql connections in the pool" + ) + .unwrap(); + + let max_pool_connections: prometheus::IntGauge = prometheus::register_int_gauge!( + "pool_connections_max", + "Number of max postgresql connections in the pool" + ) + .unwrap(); + + max_pool_connections.set(db.options().get_max_connections() as i64); + loop { + active_pool_connections.set(db.size() as i64); + idle_pool_connections.set(db.num_idle() as i64); + tokio::time::sleep(Duration::from_secs(30)).await; + } + }); + } +} + +pub async fn monitor_db( + db: &Pool, + base_internal_url: &str, + rsmq: Option, + server_mode: bool, + initial_load: bool, +) { + let zombie_jobs_f = async { + if server_mode && !initial_load { + handle_zombie_jobs(db, base_internal_url, rsmq.clone(), "server").await; + match handle_zombie_flows(db, rsmq.clone()).await { + Err(err) => { + tracing::error!("Error handling zombie flows: {:?}", err); + } + _ => {} + } + } + }; + let expired_items_f = async { + if server_mode && !initial_load { + delete_expired_items(&db).await; + } + }; + + let verify_license_key_f = async { + #[cfg(feature = "enterprise")] + if let Err(e) = verify_license_key().await { + tracing::error!("Error verifying license key: {:?}", e); + let mut l = LICENSE_KEY_VALID.write().await; + *l = false; + } else { + let is_valid = LICENSE_KEY_VALID.read().await.clone(); + if !is_valid { + let mut l = LICENSE_KEY_VALID.write().await; + *l = true; + } + } + }; + + let expose_queue_metrics_f = async { + if !initial_load && server_mode { + expose_queue_metrics(&db).await; + } + }; + + let worker_groups_alerts_f = async { + #[cfg(feature = "enterprise")] + if server_mode && !initial_load { + worker_groups_alerts(&db).await; + } + }; + + join!( + expired_items_f, + zombie_jobs_f, + expose_queue_metrics_f, + verify_license_key_f, + worker_groups_alerts_f + ); +} + +pub async fn expose_queue_metrics(db: &Pool) { + let last_check = sqlx::query_scalar!( + "SELECT created_at FROM metrics WHERE id LIKE 'queue_count_%' ORDER BY created_at DESC LIMIT 1" + ) + .fetch_optional(db) + .await + .unwrap_or(Some(chrono::Utc::now())); + + let metrics_enabled = METRICS_ENABLED.load(std::sync::atomic::Ordering::Relaxed); + let save_metrics = last_check + .map(|last_check| chrono::Utc::now() - last_check > chrono::Duration::seconds(25)) + .unwrap_or(true); + + if metrics_enabled || save_metrics { + let queue_counts = sqlx::query!( + "SELECT tag, count(*) as count FROM queue WHERE + scheduled_for <= now() - ('3 seconds')::interval AND running = false + GROUP BY tag" + ) + .fetch_all(db) + .await + .ok() + .unwrap_or_else(|| vec![]); + + for q in queue_counts { + let count = q.count.unwrap_or(0); + let tag = q.tag; + if metrics_enabled { + let metric = (*QUEUE_COUNT).with_label_values(&[&tag]); + metric.set(count as i64); + } + + // save queue_count and delay metrics per tag + if save_metrics { + sqlx::query!( + "INSERT INTO metrics (id, value) VALUES ($1, $2)", + format!("queue_count_{}", tag), + serde_json::json!(count) + ) + .execute(db) + .await + .ok(); + if count > 0 { + sqlx::query!( + "INSERT INTO metrics (id, value) + VALUES ($1, to_jsonb((SELECT EXTRACT(EPOCH FROM now() - scheduled_for) + FROM queue WHERE tag = $2 AND running = false AND scheduled_for <= now() - ('3 seconds')::interval + ORDER BY priority DESC NULLS LAST, scheduled_for LIMIT 1)))", + format!("queue_delay_{}", tag), + tag + ).execute(db).await.ok(); + } + } + } + } + + // clean queue metrics older than 14 days + sqlx::query!( + "DELETE FROM metrics WHERE id LIKE 'queue_%' AND created_at < NOW() - INTERVAL '14 day'" + ) + .execute(db) + .await + .ok(); +} + +pub async fn reload_smtp_config(db: &Pool) { + let smtp_config = load_smtp_config(&db).await; + if let Err(e) = smtp_config { + tracing::error!("Error reloading smtp config: {:?}", e) + } else { + let mut wc = SMTP_CONFIG.write().await; + tracing::info!("Reloading smtp config..."); + *wc = smtp_config.unwrap() + } +} + +pub async fn reload_worker_config( + db: &DB, + tx: tokio::sync::broadcast::Sender<()>, + kill_if_change: bool, +) { + let config = load_worker_config(&db, tx.clone()).await; + if let Err(e) = config { + tracing::error!("Error reloading worker config: {:?}", e) + } else { + let wc = WORKER_CONFIG.read().await; + let config = config.unwrap(); + if *wc != config || config.dedicated_worker.is_some() { + if kill_if_change { + if config.dedicated_worker.is_some() + || (*wc).dedicated_worker != config.dedicated_worker + { + tracing::info!("Dedicated worker config changed, sending killpill. Expecting to be restarted by supervisor."); + let _ = tx.send(()); + } + + if (*wc).init_bash != config.init_bash { + tracing::info!("Init bash config changed, sending killpill. Expecting to be restarted by supervisor."); + let _ = tx.send(()); + } + + if (*wc).cache_clear != config.cache_clear { + tracing::info!("Cache clear changed, sending killpill. Expecting to be restarted by supervisor."); + let _ = tx.send(()); + tracing::info!("Waiting 5 seconds to allow others workers to start potential jobs that depend on a potential shared cache volume"); + tokio::time::sleep(Duration::from_secs(5)).await; + if let Err(e) = windmill_worker::common::clean_cache().await { + tracing::error!("Error cleaning the cache: {e:#}"); + } + } + } + drop(wc); + + let mut wc = WORKER_CONFIG.write().await; + tracing::info!("Reloading worker config..."); + make_suspended_pull_query(&config).await; + make_pull_query(&config).await; + *wc = config + } + } +} + +pub async fn reload_base_url_setting(db: &DB) -> error::Result<()> { + let q_base_url = load_value_from_global_settings(db, BASE_URL_SETTING).await?; + + let std_base_url = std::env::var("BASE_URL") + .ok() + .unwrap_or_else(|| "http://localhost".to_string()); + let base_url = if let Some(q) = q_base_url { + if let Ok(v) = serde_json::from_value::(q.clone()) { + if v != "" { + v + } else { + std_base_url + } + } else { + tracing::error!( + "Could not parse base_url setting as a string, found: {:#?}", + &q + ); + std_base_url + } + } else { + std_base_url + }; + + let q_oauth = load_value_from_global_settings(db, OAUTH_SETTING).await?; + + let oauths = if let Some(q) = q_oauth { + if let Ok(v) = serde_json::from_value::>>(q.clone()) { + v + } else { + tracing::error!("Could not parse oauth setting as a json, found: {:#?}", &q); + None + } + } else { + None + }; + + let is_secure = base_url.starts_with("https://"); + + { + let mut l = OAUTH_CLIENTS.write().await; + *l = build_oauth_clients(&base_url, oauths) + .map_err(|e| tracing::error!("Error building oauth clients (is the oauth.json mounted and in correct format? Use '{}' as minimal oauth.json): {}", "{}", e)) + .unwrap(); + } + + { + let mut l = BASE_URL.write().await; + *l = base_url + } + + { + let mut l = IS_SECURE.write().await; + *l = is_secure; + } + + Ok(()) +} + +async fn handle_zombie_jobs( + db: &Pool, + base_internal_url: &str, + rsmq: Option, + worker_name: &str, +) { + if *RESTART_ZOMBIE_JOBS { + let restarted = sqlx::query!( + "UPDATE queue SET running = false, started_at = null + WHERE last_ping < now() - ($1 || ' seconds')::interval + AND running = true AND job_kind NOT IN ('flow', 'flowpreview', 'singlescriptflow') AND same_worker = false RETURNING id, workspace_id, last_ping", + *ZOMBIE_JOB_TIMEOUT, + ) + .fetch_all(db) + .await + .ok() + .unwrap_or_else(|| vec![]); + + if METRICS_ENABLED.load(std::sync::atomic::Ordering::Relaxed) { + QUEUE_ZOMBIE_RESTART_COUNT.inc_by(restarted.len() as _); + } + let base_url = BASE_URL.read().await.clone(); + for r in restarted { + let last_ping = if let Some(x) = r.last_ping { + format!("last ping at {x}") + } else { + "no last ping".to_string() + }; + let url = format!("{}/run/{}?workspace={}", base_url, r.id, r.workspace_id,); + let error_message = format!( + "Zombie job {} on {} ({}) detected, restarting it, {}", + r.id, r.workspace_id, url, last_ping + ); + + let _ = sqlx::query!(" + INSERT INTO job_logs (job_id, logs) VALUES ($1,'Restarted job after not receiving job''s ping for too long the ' || now() || '\n\n') + ON CONFLICT (job_id) DO UPDATE SET logs = job_logs.logs || '\nRestarted job after not receiving job''s ping for too long the ' || now() || '\n\n' WHERE job_logs.job_id = $1", r.id) + .execute(db).await; + tracing::error!(error_message); + report_critical_error(error_message, db.clone()).await; + } + } + + let mut timeout_query = + "SELECT * FROM queue WHERE last_ping < now() - ($1 || ' seconds')::interval + AND running = true AND job_kind NOT IN ('flow', 'flowpreview', 'singlescriptflow')" + .to_string(); + if *RESTART_ZOMBIE_JOBS { + timeout_query.push_str(" AND same_worker = true"); + }; + let timeouts = sqlx::query_as::<_, QueuedJob>(&timeout_query) + .bind(ZOMBIE_JOB_TIMEOUT.as_str()) + .fetch_all(db) + .await + .ok() + .unwrap_or_else(|| vec![]); + + if METRICS_ENABLED.load(std::sync::atomic::Ordering::Relaxed) { + QUEUE_ZOMBIE_DELETE_COUNT.inc_by(timeouts.len() as _); + } + + for job in timeouts { + tracing::info!("timedout zombie job {} {}", job.id, job.workspace_id,); + + // since the job is unrecoverable, the same worker queue should never be sent anything + let (same_worker_tx_never_used, _same_worker_rx_never_used) = + mpsc::channel::(1); + let same_worker_tx_never_used = + SameWorkerSender(same_worker_tx_never_used, Arc::new(AtomicU16::new(0))); + let (send_result_never_used, _send_result_rx_never_used) = mpsc::channel::(1); + + let label = if job.permissioned_as != format!("u/{}", job.created_by) + && job.permissioned_as != job.created_by + { + format!("ephemeral-script-end-user-{}", job.created_by) + } else { + "ephemeral-script".to_string() + }; + let token = create_token_for_owner( + &db, + &job.workspace_id, + &job.permissioned_as, + &label, + *SCRIPT_TOKEN_EXPIRY, + &job.email, + &job.id, + ) + .await + .expect("could not create job token"); + + let client = AuthedClient { + base_internal_url: base_internal_url.to_string(), + token, + workspace: job.workspace_id.to_string(), + force_client: None, + }; + + let last_ping = job.last_ping.clone(); + let _ = handle_job_error( + db, + &client, + &job, + 0, + None, + error::Error::ExecutionErr(format!( + "Job timed out after no ping from job since {} (ZOMBIE_JOB_TIMEOUT: {})", + last_ping + .map(|x| x.to_string()) + .unwrap_or_else(|| "no ping".to_string()), + *ZOMBIE_JOB_TIMEOUT + )), + true, + same_worker_tx_never_used, + "", + rsmq.clone(), + worker_name, + send_result_never_used, + #[cfg(feature = "benchmark")] + &mut windmill_common::bench::BenchmarkIter::new(), + ) + .await; + } +} + +async fn handle_zombie_flows( + db: &DB, + rsmq: Option, +) -> error::Result<()> { + let flows = sqlx::query_as::<_, QueuedJob>( + r#" + SELECT * + FROM queue + WHERE running = true AND suspend = 0 AND suspend_until IS null AND scheduled_for <= now() AND (job_kind = 'flow' OR job_kind = 'flowpreview') + AND last_ping IS NOT NULL AND last_ping < NOW() - ($1 || ' seconds')::interval AND canceled = false + "#, + ).bind(FLOW_ZOMBIE_TRANSITION_TIMEOUT.as_str()) + .fetch_all(db) + .await?; + + for flow in flows { + let status = flow.parse_flow_status(); + if !flow.same_worker + && status.is_some_and(|s| { + s.modules + .get(0) + .is_some_and(|x| matches!(x, FlowStatusModule::WaitingForPriorSteps { .. })) + }) + { + let error_message = format!( + "Zombie flow detected: {} in workspace {}. It hasn't started yet, restarting it.", + flow.id, flow.workspace_id + ); + tracing::error!(error_message); + report_critical_error(error_message, db.clone()).await; + // if the flow hasn't started and is a zombie, we can simply restart it + sqlx::query!( + "UPDATE queue SET running = false, started_at = null WHERE id = $1 AND canceled = false", + flow.id + ) + .execute(db) + .await?; + } else { + let id = flow.id.clone(); + let last_ping = flow.last_ping.clone(); + let now = now_from_db(db).await?; + let reason = format!( + "{} was hanging in between 2 steps. Last ping: {last_ping:?} (now: {now})", + if flow.is_flow_step && flow.parent_job.is_some() { + format!("Flow was cancelled because subflow {id}") + } else { + format!("Flow {id} was cancelled because it") + } + ); + report_critical_error(reason.clone(), db.clone()).await; + cancel_zombie_flow_job(db, flow, &rsmq, reason).await?; + } + } + + let flows2 = sqlx::query!( + " + DELETE + FROM parallel_monitor_lock + WHERE last_ping IS NOT NULL AND last_ping < NOW() - ($1 || ' seconds')::interval + RETURNING parent_flow_id, job_id, last_ping + ", + FLOW_ZOMBIE_TRANSITION_TIMEOUT.as_str() + ) + .fetch_all(db) + .await?; + + for flow in flows2 { + let in_queue = sqlx::query_as::<_, QueuedJob>( + "SELECT * FROM queue WHERE id = $1 AND running = true AND canceled = false", + ) + .bind(flow.parent_flow_id) + .fetch_optional(db) + .await?; + if let Some(job) = in_queue { + tracing::error!( + "parallel Zombie flow detected: {} in workspace {}. Last ping was: {:?}.", + job.id, + job.workspace_id, + flow.last_ping + ); + cancel_zombie_flow_job(db, job, &rsmq, + format!("Flow {} cancelled as one of the parallel branch {} was unable to make the last transition ", flow.parent_flow_id, flow.job_id)) + .await?; + } else { + tracing::info!("releasing lock for parallel flow: {}", flow.parent_flow_id); + } + } + Ok(()) +} + +async fn cancel_zombie_flow_job( + db: &Pool, + flow: QueuedJob, + rsmq: &Option, + message: String, +) -> Result<(), error::Error> { + let tx = db.begin().await.unwrap(); + tracing::error!( + "zombie flow detected: {} in workspace {}. Cancelling it.", + flow.id, + flow.workspace_id + ); + let (ntx, _) = cancel_job( + "monitor", + Some(message), + flow.id, + flow.workspace_id.as_str(), + tx, + db, + rsmq.clone(), + true, + false, + ) + .await?; + ntx.commit().await?; + Ok(()) +} + +pub async fn reload_hub_base_url_setting(db: &DB, server_mode: bool) -> error::Result<()> { + let hub_base_url = load_value_from_global_settings(db, HUB_BASE_URL_SETTING).await?; + + let base_url = if let Some(q) = hub_base_url { + if let Ok(v) = serde_json::from_value::(q.clone()) { + if v != "" { + v + } else { + DEFAULT_HUB_BASE_URL.to_string() + } + } else { + tracing::error!( + "Could not parse hub_base_url setting as a string, found: {:#?}", + &q + ); + DEFAULT_HUB_BASE_URL.to_string() + } + } else { + DEFAULT_HUB_BASE_URL.to_string() + }; + + let mut l = HUB_BASE_URL.write().await; + if server_mode { + #[cfg(feature = "embedding")] + if *l != base_url { + let disable_embedding = std::env::var("DISABLE_EMBEDDING") + .ok() + .map(|x| x.parse::().unwrap_or(false)) + .unwrap_or(false); + if !disable_embedding { + let db_clone = db.clone(); + tokio::spawn(async move { + update_embeddings_db(&db_clone).await; + }); + } + } + } + *l = base_url; + + Ok(()) +} + +pub async fn reload_critical_error_channels_setting(db: &DB) -> error::Result<()> { + let critical_error_channels = + load_value_from_global_settings(db, CRITICAL_ERROR_CHANNELS_SETTING).await?; + + let critical_error_channels = if let Some(q) = critical_error_channels { + if let Ok(v) = serde_json::from_value::>(q.clone()) { + v + } else { + tracing::error!( + "Could not parse critical_error_emails setting as an array of channels, found: {:#?}", + &q + ); + vec![] + } + } else { + vec![] + }; + + let mut l = CRITICAL_ERROR_CHANNELS.write().await; + *l = critical_error_channels; + + Ok(()) +} + +async fn generate_and_save_jwt_secret(db: &DB) -> error::Result { + let secret = rd_string(32); + sqlx::query!( + "INSERT INTO global_settings (name, value) VALUES ($1, $2) ON CONFLICT (name) DO UPDATE SET value = $2", + JWT_SECRET_SETTING, + serde_json::to_value(&secret).unwrap() + ).execute(db).await?; + + Ok(secret) +} + +pub async fn reload_jwt_secret_setting(db: &DB) -> error::Result<()> { + let jwt_secret = load_value_from_global_settings(db, JWT_SECRET_SETTING).await?; + + let jwt_secret = if let Some(q) = jwt_secret { + if let Ok(v) = serde_json::from_value::(q.clone()) { + v + } else { + tracing::error!("Could not parse jwt_secret setting, generating new one"); + generate_and_save_jwt_secret(db).await? + } + } else { + tracing::info!("Not jwt secret found, generating one"); + generate_and_save_jwt_secret(db).await? + }; + + let mut l = JWT_SECRET.write().await; + *l = jwt_secret; + + Ok(()) +} diff --git a/backend/src/oauth2.rs b/backend/src/oauth2.rs deleted file mode 100644 index 5c5f6895643a8..0000000000000 --- a/backend/src/oauth2.rs +++ /dev/null @@ -1,712 +0,0 @@ -use std::fmt::Debug; - -use std::sync::Arc; -use std::time::Duration; - -use axum::body::Bytes; -use axum::extract::{Extension, FromRequest, Path, Query, RequestParts}; -use axum::response::Redirect; -use axum::routing::{get, post}; -use axum::{async_trait, Router}; -use futures::TryFutureExt; -use hyper::StatusCode; -use oauth2::basic::{ - BasicClient, BasicErrorResponse, BasicRevocationErrorResponse, BasicTokenIntrospectionResponse, - BasicTokenType, -}; -use oauth2::reqwest::async_http_client; -use oauth2::{helpers, TokenType}; -use oauth2::{AccessToken, Client as OClient, RefreshToken, StandardRevocableToken}; -// Alternatively, this can be `oauth2::curl::http_client` or a custom client. -use oauth2::{ - AuthUrl, AuthorizationCode, ClientId, ClientSecret, CsrfToken, RedirectUrl, Scope, - TokenResponse, TokenUrl, -}; -use reqwest::Client; -use serde::{Deserialize, Serialize}; -use slack_http_verifier::SlackVerifier; -use tower_cookies::{Cookie, Cookies}; - -use crate::audit::{audit_log, ActionKind}; -use crate::db::{UserDB, DB}; -use crate::error::{self, to_anyhow, Error, Result}; -use crate::jobs::{get_latest_hash_for_path, JobPayload}; -use crate::users::{Authed, LoginType}; -use crate::variables::build_crypt; -use crate::workspaces::WorkspaceSettings; -use crate::{jobs, BasicClientsMap}; -use crate::{variables, BaseUrl}; - -pub fn global_service() -> Router { - Router::new() - .route("/login/:client", get(login)) - .route("/login_callback/:client", get(login_callback)) - .route( - "/slack_command", - post(slack_command).route_layer(axum::extract::extractor_middleware::()), - ) -} - -pub fn workspaced_service() -> Router { - Router::new() - .route("/connect/:client", get(connect)) - .route("/disconnect/:client", post(disconnect)) - .route("/connect_callback/:client", get(connect_callback)) -} - -pub fn build_gh_client(client_id: &str, client_secret: &str, base_uri: &str) -> BasicClient { - let auth_url = AuthUrl::new("https://github.com/login/oauth/authorize".to_string()) - .expect("Invalid authorization endpoint URL"); - let token_url = TokenUrl::new("https://github.com/login/oauth/access_token".to_string()) - .expect("Invalid token endpoint URL"); - - // Set up the config for the Github OAuth2 process. - BasicClient::new( - ClientId::new(client_id.to_string()), - Some(ClientSecret::new(client_secret.to_string())), - auth_url, - Some(token_url), - ) - .set_redirect_uri( - RedirectUrl::new(format!("{base_uri}/api/oauth/login_callback/github")).unwrap(), - ) -} - -pub fn build_connect_client(w_id: &str, client_name: &str, base_uri: &str) -> Result { - let (auth_str, token_str) = match client_name { - "gmail" => ("", ""), - "slack" => ( - "https://slack.com/oauth/authorize", - "https://slack.com/api/oauth.access", - ), - _ => Err(Error::BadRequest(format!("unrecognized client!")))?, - }; - - let auth_url = AuthUrl::new(auth_str.to_string()).expect("Invalid authorization endpoint URL"); - let token_url = TokenUrl::new(token_str.to_string()).expect("Invalid token endpoint URL"); - - // Set up the config for the Github OAuth2 process. - Ok(BasicClient::new( - ClientId::new( - std::env::var(&format!("{}_OAUTH_CLIENT_ID", client_name.to_uppercase())) - .ok() - .ok_or(Error::BadRequest(format!( - "client id for {} not in env", - client_name - )))?, - ), - Some(ClientSecret::new( - std::env::var(&format!( - "{}_OAUTH_CLIENT_SECRET", - client_name.to_uppercase() - )) - .ok() - .ok_or(Error::BadRequest(format!( - "client secret for {} not in env", - client_name - )))?, - )), - auth_url, - Some(token_url), - ) - .set_redirect_uri( - RedirectUrl::new(format!( - "{base_uri}/api/w/{w_id}/oauth/connect_callback/{client_name}" - )) - .unwrap(), - )) -} - -type SlackClient = OClient< - BasicErrorResponse, - SlackTokenResponse, - BasicTokenType, - BasicTokenIntrospectionResponse, - StandardRevocableToken, - BasicRevocationErrorResponse, ->; - -#[derive(Clone, Debug, Deserialize, Serialize)] -pub struct SlackTokenResponse { - access_token: AccessToken, - - team_id: String, - - team_name: String, - - #[serde(rename = "scope")] - #[serde(deserialize_with = "helpers::deserialize_space_delimited_vec")] - #[serde(serialize_with = "helpers::serialize_space_delimited_vec")] - #[serde(skip_serializing_if = "Option::is_none")] - #[serde(default)] - scopes: Option>, - bot: SlackBotToken, -} - -#[derive(Clone, Debug, Deserialize, Serialize)] -pub struct SlackBotToken { - bot_access_token: String, -} - -impl TokenResponse for SlackTokenResponse -where - BasicTokenType: TokenType, -{ - /// - /// REQUIRED. The access token issued by the authorization server. - /// - fn access_token(&self) -> &AccessToken { - &self.access_token - } - /// - /// REQUIRED. The type of the token issued as described in - /// [Section 7.1](https://tools.ietf.org/html/rfc6749#section-7.1). - /// Value is case insensitive and deserialized to the generic `TokenType` parameter. - /// But in this particular case as the service is non compliant, it has a default value - /// - fn token_type(&self) -> &BasicTokenType { - &BasicTokenType::Bearer - } - /// - /// RECOMMENDED. The lifetime in seconds of the access token. For example, the value 3600 - /// denotes that the access token will expire in one hour from the time the response was - /// generated. If omitted, the authorization server SHOULD provide the expiration time via - /// other means or document the default value. - /// - fn expires_in(&self) -> Option { - None - } - /// - /// OPTIONAL. The refresh token, which can be used to obtain new access tokens using the same - /// authorization grant as described in - /// [Section 6](https://tools.ietf.org/html/rfc6749#section-6). - /// - fn refresh_token(&self) -> Option<&RefreshToken> { - None - } - /// - /// OPTIONAL, if identical to the scope requested by the client; otherwise, REQUIRED. The - /// scipe of the access token as described by - /// [Section 3.3](https://tools.ietf.org/html/rfc6749#section-3.3). If included in the response, - /// this space-delimited field is parsed into a `Vec` of individual scopes. If omitted from - /// the response, this field is `None`. - /// - fn scopes(&self) -> Option<&Vec> { - self.scopes.as_ref() - } -} - -pub fn build_slack_client(w_id: &str, client_name: &str, base_uri: &str) -> Result { - let (auth_str, token_str) = ( - "https://slack.com/oauth/authorize", - "https://slack.com/api/oauth.access", - ); - - let auth_url = AuthUrl::new(auth_str.to_string()).expect("Invalid authorization endpoint URL"); - let token_url = TokenUrl::new(token_str.to_string()).expect("Invalid token endpoint URL"); - - // Set up the config for the Github OAuth2 process. - Ok(SlackClient::new( - ClientId::new( - std::env::var(&format!("{}_OAUTH_CLIENT_ID", client_name.to_uppercase())) - .ok() - .ok_or(Error::BadRequest(format!( - "client id for {} not in env", - client_name - )))?, - ), - Some(ClientSecret::new( - std::env::var(&format!( - "{}_OAUTH_CLIENT_SECRET", - client_name.to_uppercase() - )) - .ok() - .ok_or(Error::BadRequest(format!( - "client secret for {} not in env", - client_name - )))?, - )), - auth_url, - Some(token_url), - ) - .set_redirect_uri( - RedirectUrl::new(format!( - "{base_uri}/api/w/{w_id}/oauth/connect_callback/{client_name}" - )) - .unwrap(), - )) -} - -async fn connect( - Path((w_id, client_name)): Path<(String, String)>, - Extension(base_url): Extension, - cookies: Cookies, -) -> error::Result { - let client = build_connect_client(&w_id, &client_name, &base_url.0)?; - - let (authorize_url, csrf_state) = client - .authorize_url(CsrfToken::new_random) - .add_scope(Scope::new("bot".to_string())) - .add_scope(Scope::new("commands".to_string())) - .url(); - - let csrf = csrf_state.secret().to_string(); - let mut cookie = Cookie::new("csrf", csrf); - cookie.set_path("/"); - cookies.add(cookie); - Ok(Redirect::to(authorize_url.as_str())) -} - -async fn disconnect( - authed: Authed, - Path((w_id, client_name)): Path<(String, String)>, - Extension(user_db): Extension, -) -> error::Result { - let mut tx = user_db.begin(&authed).await?; - - match client_name.as_str() { - "slack" => { - sqlx::query!( - "UPDATE workspace_settings - SET slack_team_id = null, slack_name = null WHERE workspace_id = $1", - &w_id - ) - .execute(&mut tx) - .await?; - } - _ => Err(error::Error::BadRequest(format!( - "Not recognized client name {client_name}" - )))?, - } - tx.commit().await?; - Ok(format!("{client_name} disconnected")) -} - -async fn login( - Extension(clients): Extension>, - Path(client_name): Path, - cookies: Cookies, -) -> error::Result { - let client = clients - .get(&client_name) - .ok_or(Error::BadRequest(format!("client {} invalid", client_name)))?; - let (authorize_url, csrf_state) = client - .authorize_url(CsrfToken::new_random) - .add_scope(Scope::new("user:email".to_string())) - // .add_scope(Scope::new("read:user".to_string())) - .url(); - - let csrf = csrf_state.secret().to_string(); - let mut cookie = Cookie::new("csrf", csrf); - cookie.set_path("/"); - cookies.add(cookie); - Ok(Redirect::to(authorize_url.as_str())) -} - -#[derive(Deserialize)] -pub struct CallbackQuery { - code: Option, - state: Option, - error: Option, -} - -async fn connect_callback( - authed: Authed, - Path((w_id, client_name)): Path<(String, String)>, - Query(query): Query, - cookies: Cookies, - Extension(user_db): Extension, - Extension(base_url): Extension, -) -> error::Result { - if let Some(error) = query.error { - return Ok(Redirect::to(&format!( - "/connection_added?error={}", - urlencoding::encode(&error).into_owned() - ))); - } - - let code = AuthorizationCode::new(query.code.unwrap()); - let state = CsrfToken::new(query.state.unwrap()); - - let csrf_state = cookies - .get("csrf") - .map(|x| x.value().to_string()) - .unwrap_or("".to_string()); - - if state.secret().to_string() != csrf_state { - return Err(error::Error::BadRequest("csrf did not match".to_string())); - } - - let mut tx = user_db.begin(&authed).await?; - - let mc = build_crypt(&mut tx, &w_id).await?; - - let token_res = match client_name.as_str() { - "slack" => { - let t = build_slack_client(&w_id, &client_name, &base_url.0)? - .exchange_code(code) - .request_async(async_http_client) - .await; - if let Ok(token) = t { - sqlx::query!( - "INSERT INTO workspace_settings - (workspace_id, slack_team_id, slack_name) - VALUES ($1, $2, $3) ON CONFLICT (workspace_id) DO UPDATE SET slack_team_id = $2, slack_name = $3", - &w_id, - token.team_id, - token.team_name - ) - .execute(&mut tx) - .await?; - sqlx::query!( - "INSERT INTO group_ - (workspace_id, name, summary) - VALUES ($1, $2, $3) ON CONFLICT DO NOTHING", - &w_id, - "slack", - "The group that runs the script triggered by the slack /windmill command. - Share scripts to this group to make them executable from slack and add - members to this group to let them manage the slack related owner space." - ) - .execute(&mut tx) - .await?; - Ok(token.bot.bot_access_token.to_owned()) - } else { - Err(t.unwrap_err()) - } - } - _ => { - build_connect_client(&w_id, &client_name, &base_url.0)? - .exchange_code(code) - .request_async(async_http_client) - .map_ok(|t| t.access_token().secret().to_owned()) - .await - } - }; - - if let Ok(token) = token_res { - tracing::info!("{token}"); - let variable_path = &format!("g/all/{}_token", &client_name); - sqlx::query!( - "INSERT INTO variable - (workspace_id, path, value, is_secret, description) - VALUES ($1, $2, $3, true, $4) ON CONFLICT (workspace_id, path) DO UPDATE SET value = $3", - &w_id, - variable_path, - variables::encrypt(&mc, token.to_string()), - format!("OAuth2 token for {client_name}"), - ) - .execute(&mut tx) - .await?; - sqlx::query!( - "INSERT INTO resource - (workspace_id, path, value, description, resource_type) - VALUES ($1, $2, $3, $4, $5) ON CONFLICT (workspace_id, path) DO UPDATE SET value = $3", - &w_id, - variable_path, - serde_json::json!({ "token": format!("$var:{variable_path}") }), - format!("OAuth2 token for {client_name}"), - &client_name - ) - .execute(&mut tx) - .await?; - audit_log( - &mut tx, - &authed.username, - "oauth2.connect", - ActionKind::Create, - &w_id, - Some(&client_name), - None, - ) - .await?; - tx.commit().await?; - Ok(Redirect::to( - format!("/connection_added?client_name={}", &client_name).as_str(), - )) - } else { - let error = token_res.unwrap_err().to_string(); - Ok(Redirect::to(&format!( - "/connection_added?error={}", - urlencoding::encode(&format!("error fetching token: {error}")).into_owned() - ))) - } -} - -#[derive(Deserialize, Debug)] -pub struct SlackCommand { - team_id: String, - user_name: String, - text: String, - response_url: String, -} - -#[derive(Clone, Debug)] -pub struct SlackSig { - sig: String, - ts: String, -} - -#[async_trait] -impl FromRequest for SlackSig -where - B: Send, -{ - type Rejection = (StatusCode, String); - - async fn from_request(req: &mut RequestParts) -> std::result::Result { - let hm = req.headers(); - Ok(Self { - sig: hm - .get("X-Slack-Signature") - .map(|x| x.to_str().unwrap_or("")) - .unwrap_or("") - .to_string(), - ts: hm - .get("X-Slack-Request-Timestamp") - .map(|x| x.to_str().unwrap_or("")) - .unwrap_or("") - .to_string(), - }) - } -} - -async fn slack_command( - SlackSig { sig, ts }: SlackSig, - Extension(slack_verifier): Extension>>, - Extension(db): Extension, - Extension(base_url): Extension, - body: Bytes, -) -> error::Result { - let form: SlackCommand = serde_urlencoded::from_bytes(&body) - .map_err(|_| error::Error::BadRequest("invalid payload".to_string()))?; - - let body = String::from_utf8_lossy(&body); - if slack_verifier - .as_ref() - .as_ref() - .map(|sv| sv.verify(&ts, &body, &sig).ok()) - .flatten() - .is_none() - { - return Err(error::Error::BadRequest("verification failed".to_owned())); - } - - let mut tx = db.begin().await?; - let settings = sqlx::query_as!( - WorkspaceSettings, - "SELECT * FROM workspace_settings WHERE slack_team_id = $1", - form.team_id, - ) - .fetch_optional(&mut tx) - .await?; - - if let Some(settings) = settings { - if let Some(script) = &settings.slack_command_script { - let script_hash = - get_latest_hash_for_path(&mut tx, &settings.workspace_id, script).await?; - let mut map = serde_json::Map::new(); - map.insert("text".to_string(), serde_json::Value::String(form.text)); - map.insert( - "response_url".to_string(), - serde_json::Value::String(form.response_url), - ); - - let (uuid, tx) = jobs::push( - tx, - &settings.workspace_id, - JobPayload::ScriptHash { - hash: script_hash, - path: script.to_owned(), - }, - Some(map), - &form.user_name, - "g/slack".to_string(), - None, - None, - None, - false, - ) - .await?; - tx.commit().await?; - let url = base_url.0; - return Ok(format!("Job launched. See details at {url}/run/{uuid}")); - } - } - - return Ok(format!( - "workspace not properly configured (did you set the script to trigger in the settings?)" - )); -} - -#[derive(Deserialize)] -pub struct UserInfo { - name: Option, - company: Option, -} - -async fn login_callback( - Path(client_name): Path, - Query(query): Query, - cookies: Cookies, - Extension(clients): Extension>, - Extension(db): Extension, -) -> error::Result { - if let Some(error) = query.error { - return Ok(Redirect::to(&format!( - "/user/login?error={}", - urlencoding::encode(&error).into_owned() - ))); - } - - let code = AuthorizationCode::new(query.code.unwrap()); - let state = CsrfToken::new(query.state.unwrap()); - - let csrf_state = cookies - .get("csrf") - .map(|x| x.value().to_string()) - .unwrap_or("".to_string()); - - if state.secret().to_string() != csrf_state { - return Err(error::Error::BadRequest("csrf did not match".to_string())); - } - - let client = clients.get(&client_name).unwrap(); - - // Exchange the code with a token. - let token_res = client - .exchange_code(code) - .request_async(async_http_client) - .await; - - if let Ok(token) = token_res { - let token = token.access_token().secret(); - let http_client = reqwest::ClientBuilder::new() - .user_agent("windmill/beta") - .build() - .map_err(to_anyhow)?; - - let email = get_email(&http_client, &client_name, token).await?; - - let mut tx = db.begin().await?; - - let login: Option<(String, LoginType, bool)> = - sqlx::query_as("SELECT email, login_type, super_admin FROM password WHERE email = $1") - .bind(&email) - .fetch_optional(&mut tx) - .await?; - - if let Some((email, login_type, super_admin)) = login { - let login_type = serde_json::json!(login_type); - if login_type == client_name { - crate::users::create_session_token(&email, super_admin, &mut tx, cookies).await?; - } else { - return Err(error::Error::BadRequest(format!( - "an user with the email associated to this login exists but with a different login type {login_type}") - )); - } - } else { - let user = get_user_info(&http_client, &client_name, &token).await?; - - sqlx::query( - &format!("INSERT INTO password (email, name, company, login_type, verified) VALUES ($1, $2, $3, '{}', true)", &client_name) - ) - .bind(&email) - .bind(&user.name) - .bind(user.company) - .execute(&mut tx) - .await?; - crate::users::create_session_token(&email, false, &mut tx, cookies).await?; - audit_log( - &mut tx, - &email, - "oauth.signup", - ActionKind::Create, - "global", - Some("github"), - None, - ) - .await?; - let demo_exists = - sqlx::query_scalar!("SELECT EXISTS(SELECT 1 FROM workspace WHERE id = 'demo')") - .fetch_one(&mut tx) - .await? - .unwrap_or(false); - if demo_exists { - sqlx::query!( - "INSERT INTO workspace_invite - (workspace_id, email, is_admin) - VALUES ('demo', $1, false)", - &email - ) - .execute(&mut tx) - .await?; - } - } - tx.commit().await?; - Ok(Redirect::to("/user/workspaces")) - } else { - Ok(Redirect::to(&format!( - "/user/login?error={}", - urlencoding::encode("invalid token").into_owned() - ))) - } -} - -#[derive(Deserialize)] -pub struct GHEmailInfo { - email: String, - verified: bool, - primary: bool, -} - -async fn get_email(http_client: &Client, client_name: &str, token: &str) -> error::Result { - let email = match client_name { - "github" => http_client - .get("https://api.github.com/user/emails") - .bearer_auth(token) - .send() - .await - .map_err(to_anyhow)? - .json::>() - .await - .map_err(to_anyhow)? - .iter() - .find(|x| x.primary && x.verified) - .ok_or(error::Error::BadRequest(format!( - "user does not have any primary and verified address" - )))? - .email - .to_string(), - _ => { - return Err(error::Error::BadRequest( - "client name not recognized".to_string(), - )) - } - }; - Ok(email) -} - -async fn get_user_info( - http_client: &Client, - client_name: &str, - token: &str, -) -> error::Result { - let email = match client_name { - "github" => http_client - .get("https://api.github.com/user") - .bearer_auth(token) - .send() - .await - .map_err(to_anyhow)? - .json::() - .await - .map_err(to_anyhow)?, - _ => { - return Err(error::Error::BadRequest( - "client name not recognized".to_string(), - )) - } - }; - Ok(email) -} diff --git a/backend/src/parser.rs b/backend/src/parser.rs deleted file mode 100644 index 3b5ef04a3ede8..0000000000000 --- a/backend/src/parser.rs +++ /dev/null @@ -1,592 +0,0 @@ -/* - * Author & Copyright: Ruben Fiszel 2021 - * This file and its contents are licensed under the AGPLv3 License. - * Please see the included NOTICE for copyright information and - * LICENSE-AGPL for a copy of the license. - */ - -use std::collections::HashMap; - -use itertools::Itertools; -use regex::Regex; -use serde::Serialize; -use serde_json::json; - -use crate::error; - -use rustpython_parser::{ - ast::{ExpressionType, Located, Number, StatementType, StringGroup, Varargs}, - parser, -}; -#[derive(Serialize)] -pub struct MainArgSignature { - pub star_args: bool, - pub star_kwargs: bool, - pub args: Vec, -} - -#[derive(Serialize)] -#[serde(rename_all(serialize = "lowercase"))] -pub enum Typ { - Str, - Int, - Float, - Bool, - Dict, - List, - Bytes, - Datetime, - Unknown, -} - -#[derive(Serialize)] -pub struct Arg { - pub name: String, - pub typ: Typ, - pub default: Option, - pub has_default: bool, -} - -pub fn parse_signature(code: &str) -> error::Result { - let ast = parser::parse_program(code) - .map_err(|e| error::Error::ExecutionErr(format!("Error parsing code: {}", e.to_string())))? - .statements; - let param = ast.into_iter().find_map(|x| match x { - Located { - location: _, - node: - StatementType::FunctionDef { - is_async: _, - name, - args, - body: _, - decorator_list: _, - returns: _, - }, - } if &name == "main" => Some(*args), - _ => None, - }); - if let Some(params) = param { - //println!("{:?}", params); - let def_arg_start = params.args.len() - params.defaults.len(); - Ok(MainArgSignature { - star_args: params.vararg != Varargs::None, - star_kwargs: params.vararg != Varargs::None, - args: params - .args - .into_iter() - .enumerate() - .map(|(i, x)| { - let default = if i >= def_arg_start { - to_value(¶ms.defaults[i - def_arg_start].node) - } else { - None - }; - Arg { - name: x.arg, - typ: x.annotation.map_or(Typ::Unknown, |e| match *e { - Located { - location: _, - node: ExpressionType::Identifier { name }, - } => match name.as_ref() { - "str" => Typ::Str, - "float" => Typ::Float, - "int" => Typ::Int, - "bool" => Typ::Bool, - "dict" => Typ::Dict, - "list" => Typ::List, - "bytes" => Typ::Bytes, - "datetime" => Typ::Datetime, - "datetime.datetime" => Typ::Datetime, - _ => Typ::Unknown, - }, - _ => Typ::Unknown, - }), - has_default: default.is_some(), - default, - } - }) - .collect(), - }) - } else { - Err(error::Error::ExecutionErr( - "main function was not findable".to_string(), - )) - } -} - -const STDIMPORTS: [&str; 301] = [ - "__future__", - "_abc", - "_aix_support", - "_ast", - "_asyncio", - "_bisect", - "_blake2", - "_bootsubprocess", - "_bz2", - "_codecs", - "_codecs_cn", - "_codecs_hk", - "_codecs_iso2022", - "_codecs_jp", - "_codecs_kr", - "_codecs_tw", - "_collections", - "_collections_abc", - "_compat_pickle", - "_compression", - "_contextvars", - "_crypt", - "_csv", - "_ctypes", - "_curses", - "_curses_panel", - "_datetime", - "_dbm", - "_decimal", - "_elementtree", - "_frozen_importlib", - "_frozen_importlib_external", - "_functools", - "_gdbm", - "_hashlib", - "_heapq", - "_imp", - "_io", - "_json", - "_locale", - "_lsprof", - "_lzma", - "_markupbase", - "_md5", - "_msi", - "_multibytecodec", - "_multiprocessing", - "_opcode", - "_operator", - "_osx_support", - "_overlapped", - "_pickle", - "_posixshmem", - "_posixsubprocess", - "_py_abc", - "_pydecimal", - "_pyio", - "_queue", - "_random", - "_sha1", - "_sha256", - "_sha3", - "_sha512", - "_signal", - "_sitebuiltins", - "_socket", - "_sqlite3", - "_sre", - "_ssl", - "_stat", - "_statistics", - "_string", - "_strptime", - "_struct", - "_symtable", - "_thread", - "_threading_local", - "_tkinter", - "_tracemalloc", - "_uuid", - "_warnings", - "_weakref", - "_weakrefset", - "_winapi", - "_zoneinfo", - "abc", - "aifc", - "antigravity", - "argparse", - "array", - "ast", - "asynchat", - "asyncio", - "asyncore", - "atexit", - "audioop", - "base64", - "bdb", - "binascii", - "binhex", - "bisect", - "builtins", - "bz2", - "cProfile", - "calendar", - "cgi", - "cgitb", - "chunk", - "cmath", - "cmd", - "code", - "codecs", - "codeop", - "collections", - "colorsys", - "compileall", - "concurrent", - "configparser", - "contextlib", - "contextvars", - "copy", - "copyreg", - "crypt", - "csv", - "ctypes", - "curses", - "dataclasses", - "datetime", - "dbm", - "decimal", - "difflib", - "dis", - "distutils", - "doctest", - "email", - "encodings", - "ensurepip", - "enum", - "errno", - "faulthandler", - "fcntl", - "filecmp", - "fileinput", - "fnmatch", - "fractions", - "ftplib", - "functools", - "gc", - "genericpath", - "getopt", - "getpass", - "gettext", - "glob", - "graphlib", - "grp", - "gzip", - "hashlib", - "heapq", - "hmac", - "html", - "http", - "idlelib", - "imaplib", - "imghdr", - "imp", - "importlib", - "inspect", - "io", - "ipaddress", - "itertools", - "json", - "keyword", - "lib2to3", - "linecache", - "locale", - "logging", - "lzma", - "mailbox", - "mailcap", - "marshal", - "math", - "mimetypes", - "mmap", - "modulefinder", - "msilib", - "msvcrt", - "multiprocessing", - "netrc", - "nis", - "nntplib", - "nt", - "ntpath", - "nturl2path", - "numbers", - "opcode", - "operator", - "optparse", - "os", - "ossaudiodev", - "pathlib", - "pdb", - "pickle", - "pickletools", - "pipes", - "pkgutil", - "platform", - "plistlib", - "poplib", - "posix", - "posixpath", - "pprint", - "profile", - "pstats", - "pty", - "pwd", - "py_compile", - "pyclbr", - "pydoc", - "pydoc_data", - "pyexpat", - "queue", - "quopri", - "random", - "re", - "readline", - "reprlib", - "resource", - "rlcompleter", - "runpy", - "sched", - "secrets", - "select", - "selectors", - "shelve", - "shlex", - "shutil", - "signal", - "site", - "smtpd", - "smtplib", - "sndhdr", - "socket", - "socketserver", - "spwd", - "sqlite3", - "sre_compile", - "sre_constants", - "sre_parse", - "ssl", - "stat", - "statistics", - "string", - "stringprep", - "struct", - "subprocess", - "sunau", - "symtable", - "sys", - "sysconfig", - "syslog", - "tabnanny", - "tarfile", - "telnetlib", - "tempfile", - "termios", - "textwrap", - "this", - "threading", - "time", - "timeit", - "tkinter", - "token", - "tokenize", - "trace", - "traceback", - "tracemalloc", - "tty", - "turtle", - "turtledemo", - "types", - "typing", - "unicodedata", - "unittest", - "urllib", - "uu", - "uuid", - "venv", - "warnings", - "wave", - "weakref", - "webbrowser", - "winreg", - "winsound", - "wsgiref", - "xdrlib", - "xml", - "xmlrpc", - "zipapp", - "zipfile", - "zipimport", - "", -]; - -fn to_value(et: &ExpressionType) -> Option { - match et { - ExpressionType::String { - value: StringGroup::Constant { value }, - } => Some(json!(value)), - ExpressionType::Number { value } => match value { - Number::Integer { value } => Some(json!(value.to_string().parse::().unwrap())), - Number::Float { value } => Some(json!(value)), - _ => None, - }, - ExpressionType::True => Some(json!(true)), - ExpressionType::False => Some(json!(false)), - - ExpressionType::Dict { elements } => { - let v = elements - .into_iter() - .map(|(k, v)| { - let key = k - .as_ref() - .and_then(|x| to_value(&x.node)) - .and_then(|x| match x { - serde_json::Value::String(s) => Some(s), - _ => None, - }) - .unwrap_or_else(|| "no_key".to_string()); - (key, to_value(&v.node)) - }) - .collect::>(); - Some(json!(v)) - } - ExpressionType::List { elements } => { - let v = elements - .into_iter() - .map(|x| to_value(&x.node)) - .collect::>(); - Some(json!(v)) - } - ExpressionType::None => Some(json!(null)), - - ExpressionType::Call { - function: _, - args: _, - keywords: _, - } => Some(json!("")), - - _ => None, - } -} - -pub fn parse_imports(code: &str) -> error::Result> { - let find_requirements = code - .lines() - .find_position(|x| x.starts_with("#requirements:")); - let re = Regex::new(r"^\#(\S+)$").unwrap(); - if let Some((pos, _)) = find_requirements { - let lines = code - .lines() - .skip(pos + 1) - .map_while(|x| { - re.captures(x) - .map(|x| x.get(1).unwrap().as_str().to_string()) - }) - .collect(); - Ok(lines) - } else { - let ast = parser::parse_program(code) - .map_err(|e| { - error::Error::ExecutionErr(format!("Error parsing code: {}", e.to_string())) - })? - .statements; - let imports = ast - .into_iter() - .filter_map(|x| match x { - Located { location: _, node } => match node { - StatementType::Import { names } => Some( - names - .into_iter() - .map(|x| x.symbol.split('.').next().unwrap_or("").to_string()) - .collect::>(), - ), - StatementType::ImportFrom { - level: _, - module: Some(mod_), - names: _, - } => Some(vec![mod_ - .split('.') - .next() - .unwrap_or("") - .to_string() - .replace("_", "-")]), - _ => None, - }, - }) - .flatten() - .filter(|x| !STDIMPORTS.contains(&x.as_str())) - .unique() - .collect(); - Ok(imports) - } -} - -#[cfg(test)] -mod tests { - - // Note this useful idiom: importing names from outer (for mod tests) scope. - use super::*; - - #[test] - fn test_parse_sig() -> anyhow::Result<()> { - //let code = "print(2 + 3, fd=sys.stderr)"; - let code = " - -import os - -def main(test1: str, name: datetime.datetime = datetime.now(), byte: bytes = bytes(1)): - - print(f\"Hello World and a warm welcome especially to {name}\") - print(\"The env variable at `all/pretty_secret`: \", os.environ.get(\"ALL_PRETTY_SECRET\")) - return {\"len\": len(name), \"splitted\": name.split() } - -"; - println!("{}", serde_json::to_string(&parse_signature(code)?)?); - - Ok(()) - } - - #[test] - fn test_parse_imports() -> anyhow::Result<()> { - //let code = "print(2 + 3, fd=sys.stderr)"; - let code = " - -import os -import wmill -from zanzibar.estonie import talin -import matplotlib.pyplot as plt - -def main(): - pass - -"; - let r = parse_imports(code)?; - println!("{}", serde_json::to_string(&r)?); - assert_eq!(r, vec!["wmill", "zanzibar", "matplotlib"]); - Ok(()) - } - - #[test] - fn test_parse_imports2() -> anyhow::Result<()> { - //let code = "print(2 + 3, fd=sys.stderr)"; - let code = " -#requirements: -#burkina=0.4 -#nigeria -# -#congo - -import os -import wmill -from zanzibar.estonie import talin - -def main(): - pass - -"; - let r = parse_imports(code)?; - println!("{}", serde_json::to_string(&r)?); - assert_eq!(r, vec!["burkina=0.4", "nigeria"]); - - Ok(()) - } -} diff --git a/backend/src/pg_embed.rs b/backend/src/pg_embed.rs new file mode 100644 index 0000000000000..ad5529dc02eda --- /dev/null +++ b/backend/src/pg_embed.rs @@ -0,0 +1,46 @@ +use pg_embed::pg_enums::PgAuthMethod; +use pg_embed::pg_fetch::PgFetchSettings; +use pg_embed::postgres::{PgEmbed, PgSettings}; +use std::path::PathBuf; +use std::time::Duration; + +pub async fn start() -> anyhow::Result<(String, PgEmbed)> { + let pg_settings = PgSettings { + database_dir: PathBuf::from("/tmp/db"), + port: 6543, + user: "postgres".to_string(), + password: "password".to_string(), + auth_method: PgAuthMethod::Plain, + persistent: false, + timeout: Some(Duration::from_secs(15)), + migration_dir: None, + }; + + let fetch_settings = PgFetchSettings { + version: pg_embed::pg_fetch::PostgresVersion("15.3.0"), + + ..Default::default() + }; + + tracing::info!( + "Fetch settings: {:?} {:?}", + fetch_settings.operating_system, + fetch_settings.architecture + ); + + let mut pg = PgEmbed::new(pg_settings, fetch_settings).await?; + + pg.setup().await.expect("pg setup"); + + pg.start_db().await.expect("pg start db"); + + //TODO: re-enable this to make it work + // if !pg.database_exists("windmill").await.expect("db exists") { + // pg.create_database("windmill") + // .await + // .expect("pg create database"); + // } + + let uri = pg.full_db_uri("windmill"); + Ok((uri, pg)) +} diff --git a/backend/src/resources.rs b/backend/src/resources.rs deleted file mode 100644 index 41e3dc4dd0636..0000000000000 --- a/backend/src/resources.rs +++ /dev/null @@ -1,426 +0,0 @@ -/* - * Author & Copyright: Ruben Fiszel 2021 - * This file and its contents are licensed under the AGPLv3 License. - * Please see the included NOTICE for copyright information and - * LICENSE-AGPL for a copy of the license. - */ - -use crate::{ - audit::{audit_log, ActionKind}, - db::{UserDB, DB}, - error::{Error, JsonResult, Result}, - users::Authed, - utils::{require_admin, Pagination, StripPath}, -}; -use axum::{ - extract::{Extension, Path, Query}, - routing::{delete, get, post}, - Json, Router, -}; -use hyper::StatusCode; -use serde::{Deserialize, Serialize}; -use sql_builder::{bind::Bind, SqlBuilder}; -use sqlx::FromRow; - -pub fn workspaced_service() -> Router { - Router::new() - .route("/list", get(list_resources)) - .route("/get/*path", get(get_resource)) - .route("/get_value/*path", get(get_resource_value)) - .route("/update/*path", post(update_resource)) - .route("/delete/*path", delete(delete_resource)) - .route("/create", post(create_resource)) - .route("/type/list", get(list_resource_types)) - .route("/type/listnames", get(list_resource_types_names)) - .route("/type/get/:name", get(get_resource_type)) - .route("/type/update/:name", post(update_resource_type)) - .route("/type/delete/:name", delete(delete_resource_type)) - .route("/type/create", post(create_resource_type)) -} - -#[derive(FromRow, Serialize, Deserialize)] -pub struct ResourceType { - pub workspace_id: String, - pub name: String, - pub schema: Option, - pub description: Option, -} - -#[derive(Deserialize)] -pub struct CreateResourceType { - pub name: String, - pub schema: Option, - pub description: Option, -} - -#[derive(Deserialize)] -pub struct EditResourceType { - pub schema: Option, - pub description: Option, -} - -#[derive(FromRow, Serialize, Deserialize)] -pub struct Resource { - pub workspace_id: String, - pub path: String, - pub value: Option, - pub description: Option, - pub resource_type: String, - pub extra_perms: serde_json::Value, -} - -#[derive(Deserialize)] -pub struct CreateResource { - pub path: String, - pub value: Option, - pub description: Option, - pub resource_type: String, -} -#[derive(Deserialize)] -struct EditResource { - path: Option, - description: Option, - value: Option, -} - -#[derive(Deserialize)] -pub struct ListResourceQuery { - resource_type: Option, -} -async fn list_resources( - authed: Authed, - Query(lq): Query, - Query(pagination): Query, - Extension(user_db): Extension, - Path(w_id): Path, -) -> JsonResult> { - let (per_page, offset) = crate::utils::paginate(pagination); - - let mut sqlb = SqlBuilder::select_from("resource") - .fields(&[ - "workspace_id", - "path", - "null::JSONB as value", - "description", - "resource_type", - "extra_perms", - ]) - .order_by("path", true) - .and_where("workspace_id = ? OR workspace_id = 'starter'".bind(&w_id)) - .offset(offset) - .limit(per_page) - .clone(); - if let Some(rt) = &lq.resource_type { - sqlb.and_where_eq("resource_type", "?".bind(rt)); - } - - let sql = sqlb.sql().map_err(|e| Error::InternalErr(e.to_string()))?; - let mut tx = user_db.begin(&authed).await?; - let rows = sqlx::query_as::<_, Resource>(&sql) - .fetch_all(&mut tx) - .await?; - - tx.commit().await?; - - Ok(Json(rows)) -} - -async fn get_resource( - authed: Authed, - Extension(user_db): Extension, - Path((w_id, path)): Path<(String, StripPath)>, -) -> JsonResult { - let path = path.to_path(); - let mut tx = user_db.begin(&authed).await?; - - let resource_o = sqlx::query_as!( - Resource, - "SELECT * from resource WHERE path = $1 AND (workspace_id = $2 OR workspace_id = 'starter')", - path.to_owned(), - &w_id - ) - .fetch_optional(&mut tx) - .await?; - tx.commit().await?; - - let resource = crate::utils::not_found_if_none(resource_o, "Resource", path)?; - Ok(Json(resource)) -} - -async fn get_resource_value( - authed: Authed, - Extension(user_db): Extension, - Path((w_id, path)): Path<(String, StripPath)>, -) -> JsonResult> { - let path = path.to_path(); - let mut tx = user_db.begin(&authed).await?; - - let value_o = sqlx::query_scalar!( - "SELECT value from resource WHERE path = $1 AND (workspace_id = $2 OR workspace_id = 'starter')", - path.to_owned(), - &w_id - ) - .fetch_optional(&mut tx) - .await?; - tx.commit().await?; - - let value = crate::utils::not_found_if_none(value_o, "Resource", path)?; - Ok(Json(value)) -} - -async fn create_resource( - authed: Authed, - Extension(user_db): Extension, - Path(w_id): Path, - Json(resource): Json, -) -> Result<(StatusCode, String)> { - let mut tx = user_db.begin(&authed).await?; - - sqlx::query!( - "INSERT INTO resource - (workspace_id, path, value, description, resource_type) - VALUES ($1, $2, $3, $4, $5)", - w_id, - resource.path, - resource.value, - resource.description, - resource.resource_type, - ) - .execute(&mut tx) - .await?; - audit_log( - &mut tx, - &authed.username, - "resources.create", - ActionKind::Create, - &w_id, - Some(&resource.path), - None, - ) - .await?; - tx.commit().await?; - - Ok(( - StatusCode::CREATED, - format!("resource {} created", resource.path), - )) -} - -async fn delete_resource( - authed: Authed, - Extension(user_db): Extension, - Path((w_id, path)): Path<(String, StripPath)>, -) -> Result { - let path = path.to_path(); - let mut tx = user_db.begin(&authed).await?; - - sqlx::query!( - "DELETE FROM resource WHERE path = $1 AND workspace_id = $2", - path, - w_id - ) - .execute(&mut tx) - .await?; - audit_log( - &mut tx, - &authed.username, - "resources.delete", - ActionKind::Delete, - &w_id, - Some(path), - None, - ) - .await?; - tx.commit().await?; - - Ok(format!("resource {} deleted", path)) -} - -async fn update_resource( - authed: Authed, - Extension(user_db): Extension, - Path((w_id, path)): Path<(String, StripPath)>, - Json(ns): Json, -) -> Result { - use sql_builder::prelude::*; - - let path = path.to_path(); - - let mut sqlb = SqlBuilder::update_table("resource"); - sqlb.and_where_eq("path", "?".bind(&path)); - sqlb.and_where_eq("workspace_id", "?".bind(&w_id)); - - if let Some(npath) = &ns.path { - sqlb.set_str("path", npath); - } - if let Some(nvalue) = ns.value { - sqlb.set_str("value", nvalue.to_string()); - } - if let Some(ndesc) = ns.description { - sqlb.set_str("description", ndesc); - } - let mut tx = user_db.begin(&authed).await?; - - let sql = sqlb.sql().map_err(|e| Error::InternalErr(e.to_string()))?; - sqlx::query(&sql).execute(&mut tx).await?; - audit_log( - &mut tx, - &authed.username, - "resources.update", - ActionKind::Update, - &w_id, - Some(path), - None, - ) - .await?; - tx.commit().await?; - - Ok(format!("resource {} updated (npath: {:?})", path, ns.path)) -} - -async fn list_resource_types( - Extension(db): Extension, - Path(w_id): Path, -) -> JsonResult> { - let rows = sqlx::query_as!(ResourceType, "SELECT * from resource_type WHERE (workspace_id = $1 OR workspace_id = 'starter') ORDER BY name", &w_id) - .fetch_all(&db) - .await?; - - Ok(Json(rows)) -} - -async fn list_resource_types_names( - Extension(db): Extension, - Path(w_id): Path, -) -> JsonResult> { - let rows = sqlx::query_scalar!("SELECT name from resource_type WHERE (workspace_id = $1 OR workspace_id = 'starter') ORDER BY name", &w_id) - .fetch_all(&db) - .await?; - - Ok(Json(rows)) -} - -async fn get_resource_type( - authed: Authed, - Extension(user_db): Extension, - Path((w_id, name)): Path<(String, String)>, -) -> JsonResult { - let mut tx = user_db.begin(&authed).await?; - - let resource_type_o = sqlx::query_as!( - ResourceType, - "SELECT * from resource_type WHERE name = $1 AND (workspace_id = $2 OR workspace_id = 'starter')", - &name, - &w_id - ) - .fetch_optional(&mut tx) - .await?; - tx.commit().await?; - - let resource_type = crate::utils::not_found_if_none(resource_type_o, "ResourceType", name)?; - Ok(Json(resource_type)) -} - -async fn create_resource_type( - authed: Authed, - Extension(user_db): Extension, - Path(w_id): Path, - Json(resource_type): Json, -) -> Result<(StatusCode, String)> { - let mut tx = user_db.begin(&authed).await?; - - sqlx::query!( - "INSERT INTO resource_type - (workspace_id, name, schema, description) - VALUES ($1, $2, $3, $4)", - w_id, - resource_type.name, - resource_type.schema, - resource_type.description, - ) - .execute(&mut tx) - .await?; - audit_log( - &mut tx, - &authed.username, - "resource_types.create", - ActionKind::Create, - &w_id, - Some(&resource_type.name), - None, - ) - .await?; - tx.commit().await?; - - Ok(( - StatusCode::CREATED, - format!("resource_type {} created", resource_type.name), - )) -} - -async fn delete_resource_type( - authed: Authed, - Extension(user_db): Extension, - Path((w_id, name)): Path<(String, String)>, -) -> Result { - require_admin(authed.is_admin, &authed.username)?; - - let mut tx = user_db.begin(&authed).await?; - - sqlx::query!( - "DELETE FROM resource_type WHERE name = $1 AND workspace_id = $2", - name, - w_id - ) - .execute(&mut tx) - .await?; - audit_log( - &mut tx, - &authed.username, - "resource_types.delete", - ActionKind::Delete, - &w_id, - Some(&name), - None, - ) - .await?; - tx.commit().await?; - - Ok(format!("resource_type {} deleted", name)) -} - -async fn update_resource_type( - authed: Authed, - Extension(user_db): Extension, - Path((w_id, name)): Path<(String, String)>, - Json(ns): Json, -) -> Result { - use sql_builder::prelude::*; - - let mut sqlb = SqlBuilder::update_table("resource_type"); - sqlb.and_where_eq("name", "?".bind(&name)); - sqlb.and_where_eq("workspace_id", "?".bind(&w_id)); - if let Some(nschema) = ns.schema { - sqlb.set_str("schema", nschema); - } - if let Some(ndesc) = ns.description { - sqlb.set_str("description", ndesc); - } - let sql = sqlb.sql().map_err(|e| Error::InternalErr(e.to_string()))?; - let mut tx = user_db.begin(&authed).await?; - - sqlx::query(&sql).execute(&mut tx).await?; - audit_log( - &mut tx, - &authed.username, - "resource_types.update", - ActionKind::Update, - &w_id, - Some(&name), - None, - ) - .await?; - tx.commit().await?; - - Ok(format!("resource_type {} updated", name)) -} diff --git a/backend/src/schedule.rs b/backend/src/schedule.rs deleted file mode 100644 index 588999808cc68..0000000000000 --- a/backend/src/schedule.rs +++ /dev/null @@ -1,360 +0,0 @@ -/* - * Author & Copyright: Ruben Fiszel 2021 - * This file and its contents are licensed under the AGPLv3 License. - * Please see the included NOTICE for copyright information and - * LICENSE-AGPL for a copy of the license. - */ - -use std::str::FromStr; - -use crate::{ - audit::{audit_log, ActionKind}, - db::UserDB, - error::{self, JsonResult, Result}, - jobs::{self, push, JobPayload}, - users::Authed, - utils::{get_owner_from_path, Pagination, StripPath}, -}; -use axum::{ - extract::{Extension, Path, Query}, - routing::{get, post}, - Json, Router, -}; - -use chrono::{DateTime, Duration, FixedOffset}; -use serde::{Deserialize, Serialize}; -use serde_json::{Map, Value}; -use sqlx::{FromRow, Postgres, Transaction}; - -pub fn workspaced_service() -> Router { - Router::new() - .route("/list", get(list_schedule)) - .route("/get/*path", get(get_schedule)) - .route("/create", post(create_schedule)) - .route("/update/*path", post(edit_schedule)) - .route("/setenabled/*path", post(set_enabled)) -} - -pub fn global_service() -> Router { - Router::new().route("/preview", post(preview_schedule)) -} - -#[derive(FromRow, Serialize, Deserialize, Debug)] -pub struct Schedule { - pub workspace_id: String, - pub path: String, - pub edited_by: String, - pub edited_at: DateTime, - pub schedule: String, - pub offset_: i32, - pub enabled: bool, - pub script_path: String, - pub is_flow: bool, - pub args: Option, - pub extra_perms: serde_json::Value, -} - -#[derive(Deserialize)] -pub struct NewSchedule { - pub path: String, - pub schedule: String, - pub offset: i32, - pub script_path: String, - pub is_flow: bool, - pub args: Option, -} - -pub async fn push_scheduled_job<'c>( - mut tx: Transaction<'c, Postgres>, - schedule: Schedule, -) -> Result> { - let sched = cron::Schedule::from_str(&schedule.schedule) - .map_err(|e| error::Error::BadRequest(e.to_string()))?; - - let offset = Duration::minutes(schedule.offset_.into()); - let next = sched - .after(&(chrono::Utc::now() - offset + Duration::seconds(1))) - .next() - .expect("a schedule should have a next event") - + offset; - - let mut args: Option> = None; - - if let Some(args_v) = schedule.args { - if let Value::Object(args_m) = args_v { - args = Some(args_m) - } else { - return Err(error::Error::ExecutionErr( - "args of scripts needs to be dict".to_string(), - )); - } - } - - let payload = if schedule.is_flow { - JobPayload::Flow(schedule.script_path) - } else { - JobPayload::ScriptHash { - hash: jobs::get_latest_hash_for_path( - &mut tx, - &schedule.workspace_id, - &schedule.script_path, - ) - .await?, - path: schedule.script_path, - } - }; - let (_, tx) = push( - tx, - &schedule.workspace_id, - payload, - args, - &schedule_to_user(&schedule.path), - get_owner_from_path(&schedule.path), - Some(next), - Some(schedule.path), - None, - false, - ) - .await?; - Ok(tx) -} - -async fn create_schedule( - authed: Authed, - Extension(user_db): Extension, - Path(w_id): Path, - Json(ns): Json, -) -> Result { - cron::Schedule::from_str(&ns.schedule).map_err(|e| error::Error::BadRequest(e.to_string()))?; - let mut tx = user_db.begin(&authed).await?; - - let schedule = sqlx::query_as!(Schedule, - "INSERT INTO schedule (workspace_id, path, schedule, offset_, edited_by, script_path, is_flow, args) VALUES ($1, $2, $3, $4, $5, $6, $7, $8) RETURNING *", - w_id, - ns.path, - ns.schedule, - ns.offset, - &authed.username, - ns.script_path, - ns.is_flow, - ns.args - ) - .fetch_one(&mut tx) - .await?; - - audit_log( - &mut tx, - &authed.username, - "schedule.create", - ActionKind::Create, - &w_id, - Some(&ns.path.to_string()), - Some( - [ - Some(("schedule", ns.schedule.as_str())), - Some(("script_path", ns.script_path.as_str())), - ] - .into_iter() - .flatten() - .collect(), - ), - ) - .await?; - - let tx = push_scheduled_job(tx, schedule).await?; - tx.commit().await?; - Ok(ns.path.to_string()) -} - -#[derive(Deserialize)] -pub struct EditSchedule { - pub schedule: String, - pub script_path: String, - pub is_flow: bool, - pub args: Option, -} - -async fn clear_schedule<'c>(db: &mut Transaction<'c, Postgres>, path: &str) -> Result<()> { - sqlx::query!("DELETE FROM queue WHERE schedule_path = $1", path) - .execute(db) - .await?; - Ok(()) -} - -async fn edit_schedule( - authed: Authed, - Extension(user_db): Extension, - Path((w_id, path)): Path<(String, StripPath)>, - Json(es): Json, -) -> Result { - let path = path.to_path(); - - cron::Schedule::from_str(&es.schedule).map_err(|e| error::Error::BadRequest(e.to_string()))?; - - let mut tx = user_db.begin(&authed).await?; - - clear_schedule(&mut tx, path).await?; - let schedule = sqlx::query_as!(Schedule, - "UPDATE schedule SET schedule = $1, script_path = $2, is_flow = $3, args = $4 WHERE path = $5 AND workspace_id = $6 RETURNING *", - es.schedule, - es.script_path, - es.is_flow, - es.args, - path, - w_id, - ) - .fetch_one(&mut tx) - .await?; - - if schedule.enabled { - tx = push_scheduled_job(tx, schedule).await?; - } - - audit_log( - &mut tx, - &authed.username, - "schedule.edit", - ActionKind::Update, - &w_id, - Some(&path.to_string()), - Some( - [ - Some(("schedule", es.schedule.as_str())), - Some(("script_path", es.script_path.as_str())), - ] - .into_iter() - .flatten() - .collect(), - ), - ) - .await?; - - tx.commit().await?; - Ok(path.to_string()) -} - -async fn list_schedule( - authed: Authed, - Extension(user_db): Extension, - Path(w_id): Path, - Query(pagination): Query, -) -> JsonResult> { - let (per_page, offset) = crate::utils::paginate(pagination); - let mut tx = user_db.begin(&authed).await?; - - let rows = sqlx::query_as!( - Schedule, - "SELECT * FROM schedule WHERE workspace_id = $1 ORDER BY edited_at desc LIMIT $2 OFFSET $3", - w_id, - per_page as i64, - offset as i64 - ) - .fetch_all(&mut tx) - .await?; - tx.commit().await?; - Ok(Json(rows)) -} - -pub async fn get_schedule_opt<'c>( - db: &mut Transaction<'c, Postgres>, - w_id: &str, - path: &str, -) -> Result> { - let schedule_opt = sqlx::query_as!( - Schedule, - "SELECT * FROM schedule WHERE path = $1 AND workspace_id = $2", - path, - w_id - ) - .fetch_optional(db) - .await?; - Ok(schedule_opt) -} -async fn get_schedule( - authed: Authed, - Extension(user_db): Extension, - Path((w_id, path)): Path<(String, StripPath)>, -) -> JsonResult { - let path = path.to_path(); - let mut tx = user_db.begin(&authed).await?; - - let schedule_o = get_schedule_opt(&mut tx, &w_id, path).await?; - let schedule = crate::utils::not_found_if_none(schedule_o, "Schedule", path)?; - tx.commit().await?; - Ok(Json(schedule)) -} - -#[derive(Deserialize)] -pub struct PreviewPayload { - pub schedule: String, - pub offset: Option, -} - -pub async fn preview_schedule( - Json(PreviewPayload { schedule, offset }): Json, -) -> JsonResult>> { - let schedule = - cron::Schedule::from_str(&schedule).map_err(|e| error::Error::BadRequest(e.to_string()))?; - let upcoming: Vec> = schedule - .upcoming(get_offset(offset)) - .take(10) - .map(|x| x.into()) - .collect(); - Ok(Json(upcoming)) -} - -fn get_offset(offset: Option) -> FixedOffset { - FixedOffset::west(offset.unwrap_or(0) * 60) -} - -#[derive(Deserialize)] -pub struct SetEnabled { - pub enabled: bool, -} - -pub async fn set_enabled( - authed: Authed, - Extension(user_db): Extension, - Path((w_id, path)): Path<(String, StripPath)>, - Json(SetEnabled { enabled }): Json, -) -> Result { - let path = path.to_path(); - let mut tx = user_db.begin(&authed).await?; - - let schedule_o = sqlx::query_as!( - Schedule, - "UPDATE schedule SET enabled = $1 WHERE path = $2 AND workspace_id = $3 RETURNING *", - enabled, - path, - w_id - ) - .fetch_optional(&mut tx) - .await?; - - let schedule = crate::utils::not_found_if_none(schedule_o, "Schedule", path)?; - - clear_schedule(&mut tx, path).await?; - - if enabled { - tx = push_scheduled_job(tx, schedule).await?; - } - audit_log( - &mut tx, - &authed.username, - "schedule.setenabled", - ActionKind::Update, - &w_id, - Some(path), - Some([("enabled", enabled.to_string().as_ref())].into()), - ) - .await?; - tx.commit().await?; - Ok(format!( - "succesfully updated schedule at path {} to status {}", - path, enabled - )) -} - -fn schedule_to_user(path: &str) -> String { - format!("schedule-{}", path.replace('/', "-")) -} diff --git a/backend/src/scripts.rs b/backend/src/scripts.rs deleted file mode 100644 index fb5e34a91541d..0000000000000 --- a/backend/src/scripts.rs +++ /dev/null @@ -1,614 +0,0 @@ -/* - * Author & Copyright: Ruben Fiszel 2021 - * This file and its contents are licensed under the AGPLv3 License. - * Please see the included NOTICE for copyright information and - * LICENSE-AGPL for a copy of the license. - */ - -use serde::Deserializer; -use sql_builder::prelude::*; - -use crate::{ - audit::{audit_log, ActionKind}, - db::{UserDB, DB}, - error::{Error, JsonResult, Result}, - jobs, parser, - users::{owner_to_token_owner, truncate_token, Authed, Tokened}, - utils::{require_admin, Pagination, StripPath}, -}; -use axum::{ - extract::{Extension, Path, Query}, - routing::{get, post}, - Json, Router, -}; -use hyper::StatusCode; -use serde::{de::Error as _, ser::SerializeSeq, Deserialize, Serialize}; -use serde_json::{json, to_string_pretty}; -use sql_builder::SqlBuilder; -use sqlx::{FromRow, Postgres, Transaction}; -use std::{ - collections::hash_map::DefaultHasher, - fmt::Display, - hash::{Hash, Hasher}, -}; - -const MAX_HASH_HISTORY_LENGTH_STORED: usize = 20; - -pub fn global_service() -> Router { - Router::new().route("/tojsonschema", post(parse_code_to_jsonschema)) -} - -pub fn workspaced_service() -> Router { - Router::new() - .route("/list", get(list_scripts)) - .route("/create", post(create_script)) - .route("/archive/p/*path", post(archive_script_by_path)) - .route("/get/p/*path", get(get_script_by_path)) - .route("/archive/h/:hash", post(archive_script_by_hash)) - .route("/delete/h/:hash", post(delete_script_by_hash)) - .route("/get/h/:hash", get(get_script_by_hash)) - .route("/deployment_status/h/:hash", get(get_deployment_status)) -} - -#[derive(sqlx::Type, PartialEq, Debug, Hash, Clone, Copy)] -#[sqlx(transparent)] -pub struct ScriptHash(pub i64); - -#[derive(sqlx::Type, PartialEq)] -#[sqlx(transparent)] -pub struct ScriptHashes(Vec); - -impl Display for ScriptHash { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - write!(f, "{}", to_hex_string(&self.0)) - } -} -impl Serialize for ScriptHash { - fn serialize(&self, serializer: S) -> std::result::Result - where - S: serde::Serializer, - { - serializer.serialize_str(to_hex_string(&self.0).as_str()) - } -} -impl<'de> Deserialize<'de> for ScriptHash { - fn deserialize(deserializer: D) -> std::result::Result - where - D: Deserializer<'de>, - { - let s = String::deserialize(deserializer)?; - let i = to_i64(&s).map_err(|e| D::Error::custom(format!("{}", e)))?; - Ok(ScriptHash(i)) - } -} - -impl Serialize for ScriptHashes { - fn serialize(&self, serializer: S) -> std::result::Result - where - S: serde::Serializer, - { - let mut seq = serializer.serialize_seq(Some(self.0.len()))?; - for element in &self.0 { - seq.serialize_element(&ScriptHash(*element))?; - } - seq.end() - } -} - -#[derive(FromRow, Serialize)] -pub struct Script { - pub workspace_id: String, - pub hash: ScriptHash, - pub path: String, - pub parent_hashes: Option, - pub summary: String, - pub description: String, - pub content: String, - pub created_by: String, - pub created_at: chrono::DateTime, - pub archived: bool, - pub schema: Option, - pub deleted: bool, - pub is_template: bool, - pub extra_perms: serde_json::Value, - pub lock: Option, - pub lock_error_logs: Option, -} - -#[derive(Serialize, Deserialize, sqlx::Type, Debug)] -#[sqlx(transparent)] -#[serde(transparent)] -pub struct Schema(pub serde_json::Value); - -impl Hash for Schema { - fn hash(&self, state: &mut H) { - if let Ok(s) = to_string_pretty(&self.0) { - s.hash(state); - } - } -} - -#[derive(Serialize, Deserialize, Hash)] -pub struct NewScript { - pub path: String, - pub parent_hash: Option, - pub summary: String, - pub description: String, - pub content: String, - pub schema: Option, - pub is_template: Option, - pub lock: Option>, -} - -#[derive(Deserialize)] -pub struct ListScriptQuery { - pub path_start: Option, - pub path_exact: Option, - pub created_by: Option, - pub first_parent_hash: Option, - pub last_parent_hash: Option, - pub parent_hash: Option, - pub show_archived: Option, - pub order_by: Option, - pub order_desc: Option, - pub is_template: Option, -} - -async fn list_scripts( - authed: Authed, - Extension(user_db): Extension, - Path(w_id): Path, - Query(pagination): Query, - Query(lq): Query, -) -> JsonResult> { - let (per_page, offset) = crate::utils::paginate(pagination); - - let mut sqlb = SqlBuilder::select_from("script as o") - .fields(&[ - "workspace_id", - "hash", - "path", - "array_remove(array[parent_hashes[1]], NULL) as parent_hashes", - "summary", - "description", - "'' as content", - "created_by", - "created_at", - "archived", - "schema", - "deleted", - "is_template", - "extra_perms", - "null as lock", - "CASE WHEN lock_error_logs IS NOT NULL THEN 'error' ELSE null END as lock_error_logs", - ]) - .order_by("created_at", lq.order_desc.unwrap_or(true)) - .and_where("workspace_id = ? OR workspace_id = 'starter'".bind(&w_id)) - .offset(offset) - .limit(per_page) - .clone(); - - if lq.show_archived.unwrap_or(false) { - sqlb.and_where_eq( - "created_at", - "(select max(created_at) from script where o.path = path - AND (workspace_id = $1 OR workspace_id = 'starter'))", - ); - } else { - sqlb.and_where_eq("archived", false); - } - if let Some(ps) = &lq.path_start { - sqlb.and_where_like_left("path", "?".bind(ps)); - } - if let Some(p) = &lq.path_exact { - sqlb.and_where_eq("path", "?".bind(p)); - } - if let Some(cb) = &lq.created_by { - sqlb.and_where_eq("created_by", "?".bind(cb)); - } - if let Some(ph) = &lq.first_parent_hash { - sqlb.and_where_eq("parent_hashes[1]", &ph.0); - } - if let Some(ph) = &lq.last_parent_hash { - sqlb.and_where_eq("parent_hashes[array_upper(parent_hashes, 1)]", &ph.0); - } - if let Some(ph) = &lq.parent_hash { - sqlb.and_where_eq("any(parent_hashes)", &ph.0); - } - if let Some(it) = &lq.is_template { - sqlb.and_where_eq("is_template", it); - } - - let sql = sqlb.sql().map_err(|e| Error::InternalErr(e.to_string()))?; - let mut tx = user_db.begin(&authed).await?; - let rows = sqlx::query_as::<_, Script>(&sql).fetch_all(&mut tx).await?; - tx.commit().await?; - Ok(Json(rows)) -} - -fn hash_script(ns: &NewScript) -> i64 { - let mut dh = DefaultHasher::new(); - ns.hash(&mut dh); - dh.finish() as i64 -} -async fn create_script( - authed: Authed, - Tokened { token }: Tokened, - Extension(user_db): Extension, - Path(w_id): Path, - Json(ns): Json, -) -> Result<(StatusCode, String)> { - let hash = ScriptHash(hash_script(&ns)); - let mut tx = user_db.begin(&authed).await?; - - if sqlx::query_scalar!( - "SELECT 1 FROM script WHERE hash = $1 AND workspace_id = $2", - hash.0, - &w_id - ) - .fetch_optional(&mut tx) - .await? - .is_some() - { - return Err(Error::BadRequest( - "A script with same hash (hence same path, description, summary, content) already \ - exists!" - .to_owned(), - )); - }; - - let clashing_script = sqlx::query_as::<_, Script>( - "SELECT * FROM script WHERE path = $1 AND archived = false AND workspace_id = $2", - ) - .bind(&ns.path) - .bind(&w_id) - .fetch_optional(&mut tx) - .await?; - - let parent_hashes_and_perms: Option<(Vec, serde_json::Value)> = - match (&ns.parent_hash, clashing_script) { - (None, None) => Ok(None), - (None, Some(s)) => Err(Error::BadRequest(format!( - "Path conflict for {} with non-archived hash {}", - &ns.path, &s.hash - ))), - (Some(p_hash), o) => { - if sqlx::query_scalar!( - "SELECT 1 FROM script WHERE hash = $1 AND workspace_id = $2", - p_hash.0, - &w_id - ) - .fetch_optional(&mut tx) - .await? - .is_none() - { - return Err(Error::BadRequest( - "The parent hash does not seem to exist".to_owned(), - )); - }; - - let clashing_hash_o = sqlx::query_scalar!( - "SELECT hash FROM script WHERE parent_hashes[1] = $1 AND workspace_id = $2", - p_hash.0, - &w_id - ) - .fetch_optional(&mut tx) - .await?; - - if let Some(clashing_hash) = clashing_hash_o { - return Err(Error::BadRequest(format!( - "A script with hash {} with same parent_hash has been found. However, the \ - lineage must be linear: no 2 scripts can have the same parent", - ScriptHash(clashing_hash) - ))); - }; - - let ps = get_script_by_hash_internal(&mut tx, &w_id, p_hash).await?; - - let ph = { - let v = ps.parent_hashes.map(|x| x.0).unwrap_or_default(); - let mut v: Vec = v - .into_iter() - .take(MAX_HASH_HISTORY_LENGTH_STORED - 1) - .collect(); - v.insert(0, p_hash.0); - v - }; - let r: Result, serde_json::Value)>> = match o { - Some(clashing_script) - if clashing_script.path == ns.path - && clashing_script.hash.0 != p_hash.0 => - { - Err(Error::BadRequest(format!( - "Path conflict for {} with non-archived hash {}", - &ns.path, &clashing_script.hash - ))) - } - Some(_) => Ok(Some((ph, ps.extra_perms))), - None => Ok(Some((ph, ps.extra_perms))), - }; - sqlx::query!( - "UPDATE script SET archived = true WHERE hash = $1 AND workspace_id = $2", - p_hash.0, - &w_id - ) - .execute(&mut tx) - .await?; - r - } - }?; - - let p_hashes = parent_hashes_and_perms.as_ref().map(|v| &v.0[..]); - let extra_perms = parent_hashes_and_perms - .as_ref() - .map(|v| v.1.clone()) - .unwrap_or(json!({})); - - //::text::json is to ensure we use serde_json with preserve order - sqlx::query!( - "INSERT INTO script (workspace_id, hash, path, parent_hashes, summary, description, content, \ - created_by, schema, is_template, extra_perms, lock) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9::text::json, $10, $11, $12)", - &w_id, - &hash.0, - ns.path, - p_hashes, - ns.summary, - ns.description, - &ns.content, - &authed.username, - ns.schema.and_then(|x| serde_json::to_string(&x.0).ok()), - ns.is_template.unwrap_or(false), - extra_perms, - ns.lock.as_ref().map(|x| x.join("\n")) - ) - .execute(&mut tx) - .await?; - - let mut tx = if ns.lock.is_none() { - let dependencies = parser::parse_imports(&ns.content)?; - let (_, tx) = jobs::push( - tx, - &w_id, - jobs::JobPayload::Dependencies { hash, dependencies }, - None, - &authed.username, - owner_to_token_owner(&authed.username, false), - None, - None, - None, - false, - ) - .await?; - tx - } else { - tx - }; - - if p_hashes.is_some() && !p_hashes.unwrap().is_empty() { - audit_log( - &mut tx, - &authed.username, - "scripts.update", - ActionKind::Update, - &w_id, - Some(&ns.path), - Some( - [ - ("hash", hash.to_string().as_str()), - ("token", &truncate_token(&token)), - ] - .into(), - ), - ) - .await?; - } else { - audit_log( - &mut tx, - &authed.username, - "scripts.create", - ActionKind::Create, - &w_id, - Some(&ns.path), - Some( - [ - ("workspace", w_id.as_str()), - ("hash", hash.to_string().as_str()), - ("token", &truncate_token(&token)), - ] - .into(), - ), - ) - .await?; - } - - tx.commit().await?; - - Ok((StatusCode::CREATED, format!("{}", hash))) -} - -async fn get_script_by_path( - authed: Authed, - Extension(user_db): Extension, - Path((w_id, path)): Path<(String, StripPath)>, -) -> JsonResult' + # HTML tags injected before ends + # metaScripts: + # - '' + # - '' + # - '' + # HTML tags injected first child at + # bodyBefore: + # - '
html before webpack scripts
' + # Public path for template manifest scripts (only manifest) + # publicPath: http://somedomain.org/ + +# https://verdaccio.org/docs/configuration#authentication +auth: + htpasswd: + file: /verdaccio/storage/htpasswd + # Maximum amount of users allowed to register, defaults to "+infinity". + # You can set this to -1 to disable registration. + # max_users: 1000 + # Hash algorithm, possible options are: "bcrypt", "md5", "sha1", "crypt". + # algorithm: bcrypt # by default is crypt, but is recommended use bcrypt for new installations + # Rounds number for "bcrypt", will be ignored for other algorithms. + # rounds: 10 + +# https://verdaccio.org/docs/configuration#uplinks +# a list of other known repositories we can talk to +uplinks: + npmjs: + url: https://registry.npmjs.org/ + +# Learn how to protect your packages +# https://verdaccio.org/docs/protect-your-dependencies/ +# https://verdaccio.org/docs/configuration#packages +packages: + '@*/*': + # scoped packages + access: $all + publish: $authenticated + unpublish: $authenticated + proxy: npmjs + + '**': + # allow all users (including non-authenticated users) to read and + # publish all packages + # + # you can specify usernames/groupnames (depending on your auth plugin) + # and three keywords: "$all", "$anonymous", "$authenticated" + access: $all + + # allow all known users to publish/publish packages + # (anyone can register by default, remember?) + publish: $authenticated + unpublish: $authenticated + + # if package is not available locally, proxy requests to 'npmjs' registry + proxy: npmjs + +# To improve your security configuration and avoid dependency confusion +# consider removing the proxy property for private packages +# https://verdaccio.org/docs/best#remove-proxy-to-increase-security-at-private-packages + +# https://verdaccio.org/docs/configuration#server +# You can specify HTTP/1.1 server keep alive timeout in seconds for incoming connections. +# A value of 0 makes the http server behave similarly to Node.js versions prior to 8.0.0, which did not have a keep-alive timeout. +# WORKAROUND: Through given configuration you can workaround following issue https://github.com/verdaccio/verdaccio/issues/301. Set to 0 in case 60 is not enough. +server: + keepAliveTimeout: 60 + # Allow `req.ip` to resolve properly when Verdaccio is behind a proxy or load-balancer + # See: https://expressjs.com/en/guide/behind-proxies.html + # trustProxy: '127.0.0.1' + +# https://verdaccio.org/docs/configuration#offline-publish +# publish: +# allow_offline: false + +# https://verdaccio.org/docs/configuration#url-prefix +# url_prefix: /verdaccio/ +# VERDACCIO_PUBLIC_URL='https://somedomain.org'; +# url_prefix: '/my_prefix' +# // url -> https://somedomain.org/my_prefix/ +# VERDACCIO_PUBLIC_URL='https://somedomain.org'; +# url_prefix: '/' +# // url -> https://somedomain.org/ +# VERDACCIO_PUBLIC_URL='https://somedomain.org/first_prefix'; +# url_prefix: '/second_prefix' +# // url -> https://somedomain.org/second_prefix/' + +# https://verdaccio.org/docs/configuration#security +# security: +# api: +# legacy: true +# jwt: +# sign: +# expiresIn: 29d +# verify: +# someProp: [value] +# web: +# sign: +# expiresIn: 1h # 1 hour by default +# verify: +# someProp: [value] + +# https://verdaccio.org/docs/configuration#user-rate-limit +# userRateLimit: +# windowMs: 50000 +# max: 1000 + +# https://verdaccio.org/docs/configuration#max-body-size +# max_body_size: 10mb + +# https://verdaccio.org/docs/configuration#listen-port +# listen: +# - localhost:4873 # default value +# - http://localhost:4873 # same thing +# - 0.0.0.0:4873 # listen on all addresses (INADDR_ANY) +# - https://example.org:4873 # if you want to use https +# - "[::1]:4873" # ipv6 +# - unix:/tmp/verdaccio.sock # unix socket + +# The HTTPS configuration is useful if you do not consider use a HTTP Proxy +# https://verdaccio.org/docs/configuration#https +# https: +# key: ./path/verdaccio-key.pem +# cert: ./path/verdaccio-cert.pem +# ca: ./path/verdaccio-csr.pem + +# https://verdaccio.org/docs/configuration#proxy +# http_proxy: http://something.local/ +# https_proxy: https://something.local/ + +# https://verdaccio.org/docs/configuration#notifications +# notify: +# method: POST +# headers: [{ "Content-Type": "application/json" }] +# endpoint: https://usagge.hipchat.com/v2/room/3729485/notification?auth_token=mySecretToken +# content: '{"color":"green","message":"New package published: * {{ name }}*","notify":true,"message_format":"text"}' + +middlewares: + audit: + enabled: true + +# https://verdaccio.org/docs/logger +# log settings +log: { type: stdout, format: pretty, level: http } +#experiments: +# # support for npm token command +# token: false +# # enable tarball URL redirect for hosting tarball with a different server, the tarball_url_redirect can be a template string +# tarball_url_redirect: 'https://mycdn.com/verdaccio/${packageName}/${filename}' +# # the tarball_url_redirect can be a function, takes packageName and filename and returns the url, when working with a js configuration file +# tarball_url_redirect(packageName, filename) { +# const signedUrl = // generate a signed url +# return signedUrl; +# } + +# translate your registry, api i18n not available yet +# i18n: +# list of the available translations https://github.com/verdaccio/verdaccio/blob/master/packages/plugins/ui-theme/src/i18n/ABOUT_TRANSLATIONS.md +# web: en-US \ No newline at end of file diff --git a/examples/deploy/private-package-registry-tls/verdaccio_conf/config.yaml b/examples/deploy/private-package-registry-tls/verdaccio_conf/config.yaml new file mode 100644 index 0000000000000..7b2893fc222c3 --- /dev/null +++ b/examples/deploy/private-package-registry-tls/verdaccio_conf/config.yaml @@ -0,0 +1,20 @@ +storage: /verdaccio/storage/data +plugins: /verdaccio/plugins +auth: + htpasswd: + file: /verdaccio/storage/htpasswd +uplinks: + npmjs: + url: https://registry.npmjs.org/ +packages: + "@*/*": + access: $all + publish: $authenticated + "**": + access: $all + proxy: npmjs +listen: + - http://localhost:4873 + - http://npm_registry:4873 +url_prefix: /npm/ +log: { type: stdout, format: pretty, level: http } diff --git a/examples/usecase/query-grpc-service/README.md b/examples/usecase/query-grpc-service/README.md new file mode 100644 index 0000000000000..83f694073f466 --- /dev/null +++ b/examples/usecase/query-grpc-service/README.md @@ -0,0 +1,4 @@ +Query gRPC service in Windmill +============================== + +See [Blog Post](https://www.windmill.dev/blog/query-grpc-service) diff --git a/examples/usecase/query-grpc-service/docker-compose.yml b/examples/usecase/query-grpc-service/docker-compose.yml new file mode 100644 index 0000000000000..a0d9625f350de --- /dev/null +++ b/examples/usecase/query-grpc-service/docker-compose.yml @@ -0,0 +1,31 @@ +version: "3.7" + +services: + grpc: + image: gbouv/grpc-quickstart-service + + db: + image: postgres:14 + volumes: + - db_data:/var/lib/postgresql/data + environment: + POSTGRES_PASSWORD: changeme + POSTGRES_DB: windmill + healthcheck: + test: ["CMD-SHELL", "pg_isready -U postgres"] + interval: 10s + timeout: 5s + retries: 5 + + windmill_server: + image: ghcr.io/windmill-labs/windmill:main + ports: + - 8000:8000 + environment: + - DATABASE_URL=postgres://postgres:changeme@db/windmill?sslmode=disable + depends_on: + db: + condition: service_healthy + +volumes: + db_data: null diff --git a/frontend/.config/sway/config b/frontend/.config/sway/config new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/frontend/.devcontainer.json b/frontend/.devcontainer.json new file mode 100644 index 0000000000000..6b9c4c181e8b2 --- /dev/null +++ b/frontend/.devcontainer.json @@ -0,0 +1,25 @@ +// For format details, see https://aka.ms/devcontainer.json. For config options, see the README at: +// https://github.com/microsoft/vscode-dev-containers/tree/v0.245.2/containers/docker-existing-docker-compose +// If you want to run as a non-root user in the container, see .devcontainer/docker-compose.yml. +{ + "name": "Frontend container", + "dockerComposeFile": [ + "../docker-compose.yml", + "../.devcontainer/docker-compose.yml" + ], + "customizations": { + "vscode": { + "extensions": [] + } + }, + "service": "front", + "workspaceFolder": "/workspace", + "forwardPorts": [ + 8080 + ], + // Uncomment the next line if you want to keep your containers running after VS Code shuts down. + // "shutdownAction": "none", + "postCreateCommand": "cd frontend && npm install && npm run generate-backend-client && wget https://github.com/caddyserver/caddy/releases/download/v2.6.0-beta.3/caddy_2.6.0-beta.3_linux_amd64.deb -O /tmp/caddy.deb && sudo dpkg -i /tmp/caddy.deb && rm /tmp/caddy.deb", + "postStartCommand": "nohup bash -c 'cd frontend && npm run dev &' && nohup bash -c 'caddy run --config frontend/CaddyfileDev &'", + "remoteUser": "node" +} \ No newline at end of file diff --git a/frontend/.env b/frontend/.env new file mode 100644 index 0000000000000..41e34101dfea5 --- /dev/null +++ b/frontend/.env @@ -0,0 +1 @@ +VITE_DEFAULT_WEBHOOK_TYPE=async diff --git a/frontend/.eslintrc.cjs b/frontend/.eslintrc.cjs index ef59cac298186..18e962c6bb838 100644 --- a/frontend/.eslintrc.cjs +++ b/frontend/.eslintrc.cjs @@ -20,4 +20,4 @@ module.exports = { rules: { 'no-console': ['log', { allow: ['warn', 'error'] }] } -}; +} diff --git a/frontend/.gitignore b/frontend/.gitignore index caf29019c2a76..32ae7e5b8976f 100644 --- a/frontend/.gitignore +++ b/frontend/.gitignore @@ -3,6 +3,10 @@ node_modules /build /.svelte-kit /package -/src/gen +/src/lib/gen CaddyfileRemoteRuben - +tests-out/ +storageState.json +.env.production +dist/ +static/tsdocs/ \ No newline at end of file diff --git a/frontend/.prettierrc b/frontend/.prettierrc index ff2677efde552..ac57ae142f77b 100644 --- a/frontend/.prettierrc +++ b/frontend/.prettierrc @@ -2,5 +2,7 @@ "useTabs": true, "singleQuote": true, "trailingComma": "none", - "printWidth": 100 + "printWidth": 100, + "htmlWhitespaceSensitivity": "strict", + "semi": false } diff --git a/frontend/.vscode/settings.json b/frontend/.vscode/settings.json index b4c3fade2943e..e8c3561347077 100644 --- a/frontend/.vscode/settings.json +++ b/frontend/.vscode/settings.json @@ -1,3 +1,5 @@ { - "cSpell.words": ["semibold", "stylelint"] + "cSpell.words": ["semibold", "stylelint"], + "deno.enable": true, + "deno.unstable": true } diff --git a/frontend/Caddyfile b/frontend/Caddyfile deleted file mode 100644 index dd015fd2c29fa..0000000000000 --- a/frontend/Caddyfile +++ /dev/null @@ -1,8 +0,0 @@ -{ - auto_https off -} -:80 { - bind {$ADDRESS} - reverse_proxy /api/* http://localhost:8000 - reverse_proxy /* http://localhost:3000 -} diff --git a/frontend/CaddyfileDemo b/frontend/CaddyfileDemo deleted file mode 100644 index 9fe9dc57d93d7..0000000000000 --- a/frontend/CaddyfileDemo +++ /dev/null @@ -1,16 +0,0 @@ -http://localhost { - bind {$ADDRESS} - reverse_proxy /api/* https://demo.windmill.dev { - header_up Host {http.reverse_proxy.upstream.hostport} - } - reverse_proxy /* http://localhost:3000 -} - - -https://localhost { - bind {$ADDRESS} - reverse_proxy /ws/* https://demo.windmill.dev { - header_up Host {http.reverse_proxy.upstream.hostport} - } -} - diff --git a/frontend/CaddyfileRemote b/frontend/CaddyfileRemote deleted file mode 100644 index c221df3745070..0000000000000 --- a/frontend/CaddyfileRemote +++ /dev/null @@ -1,16 +0,0 @@ -http://localhost { - bind {$ADDRESS} - reverse_proxy /api/* https://alpha.windmill.dev { - header_up Host {http.reverse_proxy.upstream.hostport} - } - reverse_proxy /* http://localhost:3000 -} - - -https://localhost { - bind {$ADDRESS} - reverse_proxy /ws/* https://alpha.windmill.dev { - header_up Host {http.reverse_proxy.upstream.hostport} - } -} - diff --git a/frontend/Dockerfile b/frontend/Dockerfile new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/frontend/NOTICE b/frontend/NOTICE index d38ba879b2a8e..57968db9f14ee 100644 --- a/frontend/NOTICE +++ b/frontend/NOTICE @@ -1,5 +1,3 @@ -Ruben Fiszel - -Copyright (c) 2021 Ruben Fiszel +Copyright (c) 2022 Windmill Labs, Inc Source code in this directory is licensed the GNU Affero General Public License. diff --git a/frontend/README.md b/frontend/README.md index 7ee5313b4c8a2..850df24593c53 100644 --- a/frontend/README.md +++ b/frontend/README.md @@ -1,5 +1,5 @@ # Windmill frontend -The windmill frontend written in Svelte + Tailwind CSS +The Windmill frontend written in Svelte + Tailwind CSS The frontend is under AGPL, see the LICENSE file at the root of this repo diff --git a/frontend/README_DEV.md b/frontend/README_DEV.md index f724717a668e1..198657d3af444 100644 --- a/frontend/README_DEV.md +++ b/frontend/README_DEV.md @@ -1,67 +1,94 @@ # Developing -Once you've created a project and installed dependencies with `npm install` (or -`pnpm install` or `yarn`), start a development server: +In the `frontend/` directory: + +- install the dependencies with `npm install` (or `pnpm install` or `yarn`) +- generate the windmill client: ```bash -npm run dev +npm run generate-backend-client +## on mac use +npm run generate-backend-client-mac ``` -To have the whole stack backing your dev environment, 3 solutions: +Once the dependencies are installed, just start the dev server: -### 1. Backend is run by docker +```bash +npm run dev +``` -In the root folder: +The default proxy is setup to use the remote backend: . + +You can configure another proxy to use like so: ```bash -docker build . -t windmill -docker-compose up db server +REMOTE=http://127.0.0.1:8000 REMOTE_LSP=http://127.0.0.1:3001 npm run dev ``` -### 2. Backend is run by cargo +## Use a Local backend -In the backend folder: +### 1. Backend is run by docker ```bash -cargo run +docker build . -t windmill +docker compose up db windmill_server windmill_worker ``` -In the root folder - ```bash -docker-compose up db +REMOTE=http://localhost REMOTE_LSP=http://localhost npm run dev ``` -### In both cases +### 2. Backend is run by cargo -In the frontend folder: +**Prerequisites** -```bash -sudo caddy run --config ./Caddyfile -``` +- Install Rust [as explained on the website](https://www.rust-lang.org/tools/install). +- Install llvm -(sudo is required to bind port 80 and 443) + **On OSX:** -and then go to + ```bash + brew install llvm gsed -### Backend is run by remote! + # make LLVM tools available on PATH + echo 'export PATH="/opt/homebrew/opt/llvm/bin:$PATH"' >> ~/.zshrc + + # now, restart your shell. You should now have the `lld` binary on your PATH. + ``` + +- To test that you have Rust and Cargo installed run `cargo --version` + +**Known issue on M1 Mac while running `cargorun`** + +- You may encounter `linking with cc failed` build time error. +- To solve this run: + ```bash + echo 'export RUSTFLAGS="-L/opt/homebrew/opt/libomp/lib"' >> ~/.zshrc + source ~/.zshrc + ``` + +In the root folder: ```bash -sudo caddy run --config ./CaddyfileRemote +docker-compose up db ``` -and then go to +In the backend folder: -## Building +```bash +DATABASE_URL=postgres://postgres:changeme@127.0.0.1:5433/windmill?sslmode=disable cargo run +``` + +In the frontend folder: ```bash -npm run build +REMOTE=http://127.0.0.1:8000 REMOTE_LSP=http://127.0.0.1:3001 npm run dev ``` -## Generating the backend client automatically +## Building ```bash -npm run generate-backend-client +NODE_OPTIONS=--max_old_space_size=8096 npm run build ``` ## Formatting @@ -81,8 +108,31 @@ Recommended config for VS Code: ```json "[svelte]": { - "editor.defaultFormatter": "esbenp.prettier-vscode" - } +"editor.defaultFormatter": "esbenp.prettier-vscode" +} ``` - turn _format on save_ on + +## Building + +The project is built with [SvelteKit](https://kit.svelte.dev/) and uses as output static files. +There are others adapters for sveltekit, but we use the static adapter. + +To build the frontend as static assets, use: + +``` +npm run build +``` + +The output is in the `build` folder. + +The default build assume you serve every non static files as the 200.html file which is catchall. If you prefer a normal layout, you can use: + +``` +NOTCATCHALL=true npm run build +``` + +which will generate an index.html and allow you to serve the frontend with any static server. + +Env variables used for build are set in .env file. See [https://vitejs.dev/guide/env-and-mode.html#env-files](https://vitejs.dev/guide/env-and-mode.html#env-files) for more details. diff --git a/frontend/build_full_app_css.sh b/frontend/build_full_app_css.sh new file mode 100755 index 0000000000000..b7a26614c7736 --- /dev/null +++ b/frontend/build_full_app_css.sh @@ -0,0 +1 @@ +NODE_ENV="production" npx tailwindcss -i src/lib/assets/app.css -o static/tailwind_full.css --postcss \ No newline at end of file diff --git a/frontend/bundle_graphql_worker.sh b/frontend/bundle_graphql_worker.sh new file mode 100755 index 0000000000000..d64dea37dbe2d --- /dev/null +++ b/frontend/bundle_graphql_worker.sh @@ -0,0 +1 @@ +npx esbuild node_modules/monaco-graphql/esm/graphql.worker --bundle --minify --outfile=src/lib/monaco_workers/graphql.worker.bundle.js \ No newline at end of file diff --git a/frontend/filterTailwindClasses.js b/frontend/filterTailwindClasses.js new file mode 100644 index 0000000000000..644bb6ca718f0 --- /dev/null +++ b/frontend/filterTailwindClasses.js @@ -0,0 +1,27 @@ +import fs from 'fs' +import tailwindClasses from './tailwindClasses.js' + +function filterTailwindClasses(classes) { + const filters = [ + { pattern: /^m(\w?)-.*$/ }, + { pattern: /^p(\w?)-.*$/ }, + { pattern: /^rounded-.*$/ }, + { pattern: /^shadow-.*$/ }, + { pattern: /^text-[^/]*$/ }, + { pattern: /^bg-[^/]*$/ }, + { pattern: /^border-[^/]*$/ }, + { pattern: /^ring-[^/]*$/ }, + { pattern: /^outline-[^/]*$/ } + ] + + return classes + .filter((className) => { + return filters.some((filter) => filter.pattern.test(className)) + }) + .concat(['shadow', 'border', 'ring', 'rounded', 'outline']) +} + +const filteredClasses = filterTailwindClasses(tailwindClasses) + +const output = `export const tailwindClasses = ${JSON.stringify(filteredClasses, null, 2)};` +fs.writeFileSync('filteredTailwindClasses.ts', output) diff --git a/frontend/npm b/frontend/npm new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/frontend/openapi-ts-error-1726231138297.log b/frontend/openapi-ts-error-1726231138297.log new file mode 100644 index 0000000000000..f78fbf5b1c354 --- /dev/null +++ b/frontend/openapi-ts-error-1726231138297.log @@ -0,0 +1,28 @@ +Error parsing /git/windmill/backend/windmill-api/openapi.yaml: duplicated mapping key (8350:3) + + 8347 | application/json: + 8348 | schema: {} + 8349 | + 8350 | /w/{workspace}/job_helpers/loa ... +----------^ + 8351 | get: + 8352 | summary: Load a preview of ... +ParserError: Error parsing /git/windmill/backend/windmill-api/openapi.yaml: duplicated mapping key (8350:3) + + 8347 | application/json: + 8348 | schema: {} + 8349 | + 8350 | /w/{workspace}/job_helpers/loa ... +----------^ + 8351 | get: + 8352 | summary: Load a preview of ... + at Object.parse (/git/windmill/frontend/node_modules/@apidevtools/json-schema-ref-parser/dist/lib/parsers/yaml.js:44:23) + at getResult (/git/windmill/frontend/node_modules/@apidevtools/json-schema-ref-parser/dist/lib/util/plugins.js:116:22) + at runNextPlugin (/git/windmill/frontend/node_modules/@apidevtools/json-schema-ref-parser/dist/lib/util/plugins.js:64:32) + at /git/windmill/frontend/node_modules/@apidevtools/json-schema-ref-parser/dist/lib/util/plugins.js:55:9 + at new Promise () + at Object.run (/git/windmill/frontend/node_modules/@apidevtools/json-schema-ref-parser/dist/lib/util/plugins.js:54:12) + at parseFile (/git/windmill/frontend/node_modules/@apidevtools/json-schema-ref-parser/dist/lib/parse.js:130:38) + at parse (/git/windmill/frontend/node_modules/@apidevtools/json-schema-ref-parser/dist/lib/parse.js:56:30) + at async $RefParser.parse (/git/windmill/frontend/node_modules/@apidevtools/json-schema-ref-parser/dist/lib/index.js:115:28) + at async $RefParser.resolve (/git/windmill/frontend/node_modules/@apidevtools/json-schema-ref-parser/dist/lib/index.js:145:13) \ No newline at end of file diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 019354ad5bda9..c2cee37b06296 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -1,113 +1,285 @@ { - "name": "windmill", - "version": "1.4.0", - "lockfileVersion": 2, + "name": "windmill-components", + "version": "1.402.1", + "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "windmill", - "version": "1.4.0", - "dependencies": { - "@codingame/monaco-jsonrpc": "^0.3.1", - "@codingame/monaco-languageclient": "^0.17.0", - "@fortawesome/free-brands-svg-icons": "^5.15.4", - "@fortawesome/free-solid-svg-icons": "^5.15.4", - "@types/vscode": "^1.63.0", - "@zerodevx/svelte-toast": "^0.6.2", - "fuse.js": "^6.4.6", - "highlight.js": "^11.5.1", - "monaco-editor": "^0.30.0", - "svelte-awesome": "^2.4.2", - "svelte-markdown": "^0.2.1", - "svelte-split-pane": "^0.1.2" + "name": "windmill-components", + "version": "1.402.1", + "license": "AGPL-3.0", + "dependencies": { + "@aws-crypto/sha256-js": "^4.0.0", + "@codingame/monaco-vscode-configuration-service-override": "~8.0.2", + "@codingame/monaco-vscode-files-service-override": "~8.0.2", + "@codingame/monaco-vscode-keybindings-service-override": "~8.0.2", + "@codingame/monaco-vscode-lifecycle-service-override": "~8.0.2", + "@codingame/monaco-vscode-localization-service-override": "~8.0.2", + "@codingame/monaco-vscode-standalone-css-language-features": "~8.0.2", + "@codingame/monaco-vscode-standalone-json-language-features": "~8.0.2", + "@codingame/monaco-vscode-standalone-languages": "~8.0.2", + "@codingame/monaco-vscode-standalone-typescript-language-features": "~8.0.2", + "@json2csv/plainjs": "^7.0.6", + "@leeoniya/ufuzzy": "^1.0.8", + "@popperjs/core": "^2.11.6", + "@redocly/json-to-json-schema": "^0.0.1", + "@tanstack/svelte-table": "^8.9.9", + "@windmill-labs/svelte-dnd-action": "latest", + "@xyflow/svelte": "^0.1.15", + "ag-charts-community": "^9.0.1", + "ag-charts-enterprise": "^9.0.1", + "ag-grid-community": "^31.0.0", + "ag-grid-enterprise": "^31.0.0", + "ansi_up": "^5.2.1", + "chart.js": "^4.3.0", + "chartjs-adapter-date-fns": "^3.0.0", + "chartjs-plugin-zoom": "^2.0.0", + "d3-zoom": "^3.0.0", + "date-fns": "^2.30.0", + "diff": "^5.1.0", + "driver.js": "^1.3.0", + "esm-env": "^1.0.0", + "fast-equals": "^5.0.1", + "graphql": "^16.7.1", + "hash-sum": "^2.0.0", + "highlight.js": "^11.8.0", + "lucide-svelte": "^0.293.0", + "minimatch": "^10.0.1", + "monaco-editor": "npm:@codingame/monaco-vscode-editor-api@~8.0.2", + "monaco-editor-wrapper": "^5.5.2", + "monaco-graphql": "^1.6.0", + "monaco-languageclient": "~8.8.2", + "monaco-vim": "^0.4.1", + "ol": "^7.4.0", + "openai": "^4.57.2", + "p-limit": "^6.1.0", + "pdfjs-dist": "^3.8.162", + "quill": "^1.3.7", + "rfc4648": "^1.5.3", + "svelte-carousel": "^1.0.25", + "svelte-chartjs": "^3.1.5", + "svelte-exmarkdown": "^3.0.5", + "svelte-infinite-loading": "^1.4.0", + "svelte-tiny-virtual-list": "^2.0.5", + "tailwind-merge": "^1.13.2", + "vscode": "npm:@codingame/monaco-vscode-api@~8.0.2", + "vscode-languageclient": "~9.0.1", + "vscode-uri": "~3.0.8", + "vscode-ws-jsonrpc": "~3.3.2", + "windmill-parser-wasm-go": "^1.397.2", + "windmill-parser-wasm-php": "^1.397.2", + "windmill-parser-wasm-py": "^1.397.2", + "windmill-parser-wasm-regex": "^1.397.2", + "windmill-parser-wasm-rust": "^1.397.2", + "windmill-parser-wasm-ts": "^1.397.2", + "windmill-parser-wasm-yaml": "^1.398.1", + "windmill-sql-datatype-parser-wasm": "^1.318.0", + "y-monaco": "^0.1.4", + "y-websocket": "^1.5.4", + "yaml": "^2.3.4", + "yjs": "^13.6.7" }, "devDependencies": { - "@sveltejs/adapter-node": "^1.0.0-next.55", - "@sveltejs/adapter-static": "^1.0.0-next.21", - "@sveltejs/kit": "next", - "@tailwindcss/forms": "^0.4.0", - "@tailwindcss/typography": "^0.5.0", - "@typescript-eslint/eslint-plugin": "^4.31.1", - "@typescript-eslint/parser": "^4.31.1", - "autoprefixer": "^10.4.1", - "cssnano": "^5.0.8", - "eslint": "^7.32.0", - "eslint-config-prettier": "^8.3.0", - "eslint-plugin-svelte3": "^3.2.1", - "openapi-typescript-codegen": "^0.11.8", - "postcss": "^8.4.5", - "postcss-load-config": "^3.1.0", - "prettier": "^2.4.1", - "prettier-plugin-svelte": "^2.4.0", - "simple-svelte-autocomplete": "^2.2.4", - "stylelint-config-recommended": "^6.0.0", - "svelte": "^3.42.6", - "svelte-awesome": "^2.4.2", - "svelte-check": "^2.2.6", - "svelte-highlight": "^5.1.3", - "svelte-preprocess": "^4.9.8", - "tailwindcss": "^3.0.11", - "tslib": "^2.3.1", - "typescript": "^4.4.3" + "@floating-ui/core": "^1.3.1", + "@hey-api/openapi-ts": "^0.43.0", + "@playwright/test": "^1.34.3", + "@rgossiaux/svelte-headlessui": "^2.0.0", + "@sveltejs/adapter-static": "^3.0.0", + "@sveltejs/kit": "^2.0.0", + "@sveltejs/package": "^2.2.2", + "@sveltejs/vite-plugin-svelte": "^3.0.0", + "@tailwindcss/forms": "^0.5.3", + "@tailwindcss/typography": "^0.5.8", + "@types/d3": "^7.4.0", + "@types/d3-zoom": "^3.0.3", + "@types/lodash": "^4.14.195", + "@types/node": "^20.3.3", + "@types/vscode": "^1.83.5", + "@typescript-eslint/eslint-plugin": "^5.59.8", + "@typescript-eslint/parser": "^5.60.0", + "@windmill-labs/esbuild-import-meta-url-plugin": "0.0.0-semantic-release", + "@zerodevx/svelte-toast": "^0.9.5", + "autoprefixer": "^10.4.13", + "cssnano": "^6.0.1", + "d3-dag": "^0.11.5", + "eslint": "^8.47.0", + "eslint-config-prettier": "^8.6.0", + "eslint-plugin-svelte": "^2.33.1", + "path-browserify": "^1.0.1", + "postcss": "^8.4.24", + "postcss-load-config": "^4.0.1", + "prettier": "^2.8.8", + "prettier-plugin-svelte": "^2.10.1", + "simple-svelte-autocomplete": "^2.5.1", + "style-to-object": "^0.4.1", + "stylelint-config-recommended": "^13.0.0", + "svelte": "^4.2.19", + "svelte-awesome-color-picker": "^3.0.4", + "svelte-check": "^3.4.3", + "svelte-floating-ui": "^1.5.8", + "svelte-highlight": "^7.6.0", + "svelte-multiselect": "^10.0.0", + "svelte-popperjs": "^1.3.2", + "svelte-preprocess": "^5.0.1", + "svelte-range-slider-pips": "^2.3.1", + "svelte-splitpanes": "^0.8.0", + "svelte2tsx": "^0.6.16", + "tailwindcss": "^3.4.1", + "tslib": "^2.6.1", + "typescript": "^5.1.3", + "vite": "^5", + "vite-plugin-circular-dependency": "^0.2.1", + "vite-plugin-mkcert": "^1.17.5", + "yootils": "^0.3.1" + }, + "optionalDependencies": { + "fsevents": "^2.3.3" + }, + "peerDependencies": { + "svelte": "^4.0.0" + } + }, + "../svelte-dnd-action": { + "extraneous": true + }, + "node_modules/@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" } }, "node_modules/@apidevtools/json-schema-ref-parser": { - "version": "9.0.9", - "resolved": "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-9.0.9.tgz", - "integrity": "sha512-GBD2Le9w2+lVFoc4vswGI/TjkNIZSVp7+9xPf+X3uidBfWnAeUWmquteSyt0+VCrhNMWj/FTABISQrD3Z/YA+w==", + "version": "11.6.1", + "resolved": "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-11.6.1.tgz", + "integrity": "sha512-DxjgKBCoyReu4p5HMvpmgSOfRhhBcuf5V5soDDRgOTZMwsA4KSFzol1abFZgiCTE11L2kKGca5Md9GwDdXVBwQ==", "dev": true, "dependencies": { "@jsdevtools/ono": "^7.1.3", - "@types/json-schema": "^7.0.6", - "call-me-maybe": "^1.0.1", + "@types/json-schema": "^7.0.15", "js-yaml": "^4.1.0" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/philsturgeon" } }, - "node_modules/@apidevtools/json-schema-ref-parser/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "node_modules/@aws-crypto/sha256-js": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-4.0.0.tgz", + "integrity": "sha512-MHGJyjE7TX9aaqXj7zk2ppnFUOhaDs5sP+HtNS0evOxn72c+5njUmyJmpGd7TfyoDznZlHMmdo/xGUdu2NIjNQ==", + "dependencies": { + "@aws-crypto/util": "^4.0.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^1.11.1" + } }, - "node_modules/@apidevtools/json-schema-ref-parser/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, + "node_modules/@aws-crypto/sha256-js/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-crypto/util": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-4.0.0.tgz", + "integrity": "sha512-2EnmPy2gsFZ6m8bwUQN4jq+IyXV3quHAcwPOS6ZA3k+geujiqI8aRokO2kFJe+idJ/P3v4qWI186rVMo0+zLDQ==", "dependencies": { - "argparse": "^2.0.1" + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/util/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@aws-sdk/types": { + "version": "3.451.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.451.0.tgz", + "integrity": "sha512-rhK+qeYwCIs+laJfWCcrYEjay2FR/9VABZJ2NRM89jV/fKqGVQR52E5DQqrI+oEIL5JHMhhnr4N4fyECMS35lw==", + "dependencies": { + "@smithy/types": "^2.5.0", + "tslib": "^2.5.0" }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/util-utf8-browser": { + "version": "3.259.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz", + "integrity": "sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==", + "dependencies": { + "tslib": "^2.3.1" } }, "node_modules/@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", + "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "@babel/highlight": "^7.10.4" + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", "dev": true, + "license": "MIT", + "peer": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.17.9", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.9.tgz", - "integrity": "sha512-J9PfEKCbFIv2X5bjTMiZu6Vf341N05QIY+d6FvVKynkG1S7G0j3I0QoRtWIrXhZ+/Nlb5Q0MzqL7TokEJ5BNHg==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", + "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.16.7", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" + "@babel/helper-validator-identifier": "^7.24.7", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" @@ -118,6 +290,8 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { "color-convert": "^1.9.0" }, @@ -130,6 +304,8 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -144,6 +320,8 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { "color-name": "1.1.3" } @@ -151,14 +329,18 @@ "node_modules/@babel/highlight/node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true, + "license": "MIT", + "peer": true }, "node_modules/@babel/highlight/node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, + "license": "MIT", + "peer": true, "engines": { "node": ">=0.8.0" } @@ -166,8 +348,10 @@ "node_modules/@babel/highlight/node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, + "license": "MIT", + "peer": true, "engines": { "node": ">=4" } @@ -177,6 +361,8 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { "has-flag": "^3.0.0" }, @@ -184,4943 +370,5196 @@ "node": ">=4" } }, - "node_modules/@codingame/monaco-jsonrpc": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@codingame/monaco-jsonrpc/-/monaco-jsonrpc-0.3.1.tgz", - "integrity": "sha512-Zxilei5fGV89uGJcFKDQFfZfUbWdP8/NGympXQUX/XRle4CYUabfvEOdY0Diq0NruttlRH3RdWVZ7Nw6f4TClQ==", + "node_modules/@babel/runtime": { + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.2.tgz", + "integrity": "sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg==", "dependencies": { - "vscode-jsonrpc": "^6.0.0" + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@codingame/monaco-languageclient": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@codingame/monaco-languageclient/-/monaco-languageclient-0.17.4.tgz", - "integrity": "sha512-0rz2vFH51q+bLwAMJIwSmX9zcpYCOVzICokzr+ACHc7bZq4RaLfmQ0n7iU8CjPjCB4D+/uykc3duLZakh4ug1w==", + "node_modules/@codingame/monaco-vscode-base-service-override": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-base-service-override/-/monaco-vscode-base-service-override-8.0.2.tgz", + "integrity": "sha512-nE53oxB6INHQ2+81v8+AsY9sTTiaS3xhq9gS3V+XDnxjGr5EgkV61wSeR9dI90EL7CiUN0p0Pcn2sUwRnmzsXQ==", + "license": "MIT", "dependencies": { - "glob-to-regexp": "^0.4.1", - "vscode-jsonrpc": "6.0.0", - "vscode-languageclient": "7.0.0", - "vscode-languageserver-textdocument": "^1.0.1", - "vscode-uri": "^3.0.2" - }, - "engines": { - "vscode": "^1.50.0" + "vscode": "npm:@codingame/monaco-vscode-api@8.0.2" } }, - "node_modules/@eslint/eslintrc": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", - "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", - "dev": true, + "node_modules/@codingame/monaco-vscode-configuration-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-configuration-service-override/-/monaco-vscode-configuration-service-override-8.0.3.tgz", + "integrity": "sha512-Hvpdbq2MbB1VerHf9us/zOL7KzP9djuX2ESlBML0Z1qiu7iyhEylKOmeDp1DTxKd+5xZSeR7637EbJ7XGzVgug==", + "license": "MIT", "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" + "@codingame/monaco-vscode-files-service-override": "8.0.3", + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/@eslint/eslintrc/node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true, - "engines": { - "node": ">= 4" + "node_modules/@codingame/monaco-vscode-configuration-service-override/node_modules/@codingame/monaco-vscode-base-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-base-service-override/-/monaco-vscode-base-service-override-8.0.3.tgz", + "integrity": "sha512-jOK9oO2qAOFTsgIJQ2osDmUet7QpTq8eAQ0xdZp8A3laZGd48PczZ4WBAGbhHkRC6nGJPimP5cA4IJOAjN1wlw==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/@fortawesome/fontawesome-common-types": { - "version": "0.2.36", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.2.36.tgz", - "integrity": "sha512-a/7BiSgobHAgBWeN7N0w+lAhInrGxksn13uK7231n2m8EDPE3BMCl9NZLTGrj9ZXfCmC6LM0QLqXidIizVQ6yg==", - "hasInstallScript": true, - "engines": { - "node": ">=6" + "node_modules/@codingame/monaco-vscode-configuration-service-override/node_modules/@codingame/monaco-vscode-environment-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-environment-service-override/-/monaco-vscode-environment-service-override-8.0.3.tgz", + "integrity": "sha512-OhZRikv3wKkocax/F9r7rZ2OHlXsFaX8cUaFWHOj4Bgj/g1FsnL/EvNUAZer9bVTzdq3a+4uZunz1jn/V5HF4g==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/@fortawesome/free-brands-svg-icons": { - "version": "5.15.4", - "resolved": "https://registry.npmjs.org/@fortawesome/free-brands-svg-icons/-/free-brands-svg-icons-5.15.4.tgz", - "integrity": "sha512-f1witbwycL9cTENJegcmcZRYyawAFbm8+c6IirLmwbbpqz46wyjbQYLuxOc7weXFXfB7QR8/Vd2u5R3q6JYD9g==", - "hasInstallScript": true, + "node_modules/@codingame/monaco-vscode-configuration-service-override/node_modules/@codingame/monaco-vscode-extensions-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-extensions-service-override/-/monaco-vscode-extensions-service-override-8.0.3.tgz", + "integrity": "sha512-VEr8w7ykNNfYx6KGko03WOjaw7HcaETfQT2Eayj/u7lJX+expP6sEM2D3TGBAuHd8feepFzBuVfsL8I/ZLwS+g==", + "license": "MIT", "dependencies": { - "@fortawesome/fontawesome-common-types": "^0.2.36" - }, - "engines": { - "node": ">=6" + "@codingame/monaco-vscode-files-service-override": "8.0.3", + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/@fortawesome/free-solid-svg-icons": { - "version": "5.15.4", - "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-5.15.4.tgz", - "integrity": "sha512-JLmQfz6tdtwxoihXLg6lT78BorrFyCf59SAwBM6qV/0zXyVeDygJVb3fk+j5Qat+Yvcxp1buLTY5iDh1ZSAQ8w==", - "hasInstallScript": true, + "node_modules/@codingame/monaco-vscode-configuration-service-override/node_modules/@codingame/monaco-vscode-files-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-files-service-override/-/monaco-vscode-files-service-override-8.0.3.tgz", + "integrity": "sha512-S3mAHK510EwfdN8us2/UpspBC81pMnjACNVqDAk1QGfh6xKOQ6NPUv6ri/3oF2/2zMl5keI/iihK4xwLEAAd8Q==", + "license": "MIT", "dependencies": { - "@fortawesome/fontawesome-common-types": "^0.2.36" - }, - "engines": { - "node": ">=6" + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", - "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", - "dev": true, + "node_modules/@codingame/monaco-vscode-configuration-service-override/node_modules/@codingame/monaco-vscode-host-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-host-service-override/-/monaco-vscode-host-service-override-8.0.3.tgz", + "integrity": "sha512-VHwFyWTkOqOT+WLB7hC4zZFoahTbcFGJW/MutlR3c5+09v2qddMm2IsxcHKbI3IbHyb4TgPgC0arV4rs1FaNWQ==", + "license": "MIT", "dependencies": { - "@humanwhocodes/object-schema": "^1.2.0", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=10.10.0" + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true + "node_modules/@codingame/monaco-vscode-configuration-service-override/node_modules/@codingame/monaco-vscode-layout-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-layout-service-override/-/monaco-vscode-layout-service-override-8.0.3.tgz", + "integrity": "sha512-/so4xozWoEzbqAVIh6iXosNwA7pTpcmj9uBYCXVrjO4CHxXM9qKf9+ndidO9gwGIoiWYFBUJB6XTQOnCLMRqng==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" + } }, - "node_modules/@jsdevtools/ono": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/@jsdevtools/ono/-/ono-7.1.3.tgz", - "integrity": "sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==", - "dev": true + "node_modules/@codingame/monaco-vscode-configuration-service-override/node_modules/@codingame/monaco-vscode-quickaccess-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-quickaccess-service-override/-/monaco-vscode-quickaccess-service-override-8.0.3.tgz", + "integrity": "sha512-HNFPcQlXEn38abnfSR4JWa5oeYLsC7cCA0eqb6LkpeCMTODlP44mdahaHHWadELOpaD5ZhV4KO+GY2YcgmVXIA==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" + } }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, + "node_modules/@codingame/monaco-vscode-configuration-service-override/node_modules/vscode": { + "name": "@codingame/monaco-vscode-api", + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-api/-/monaco-vscode-api-8.0.3.tgz", + "integrity": "sha512-7Lnha7sspHaZq9OKdvN26mrXtaMxKvK2hri7wLNT5Z/SadM8Pj6CmCv/aDD4UpSaGfc7f6OFwsiqBmsbOYpjIA==", + "license": "MIT", "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" + "@codingame/monaco-vscode-base-service-override": "8.0.3", + "@codingame/monaco-vscode-environment-service-override": "8.0.3", + "@codingame/monaco-vscode-extensions-service-override": "8.0.3", + "@codingame/monaco-vscode-files-service-override": "8.0.3", + "@codingame/monaco-vscode-host-service-override": "8.0.3", + "@codingame/monaco-vscode-layout-service-override": "8.0.3", + "@codingame/monaco-vscode-quickaccess-service-override": "8.0.3", + "@vscode/iconv-lite-umd": "0.7.0", + "jschardet": "3.1.3" } }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "engines": { - "node": ">= 8" + "node_modules/@codingame/monaco-vscode-editor-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-editor-service-override/-/monaco-vscode-editor-service-override-8.0.3.tgz", + "integrity": "sha512-drt4tDSH+zbGzgfpCgZ+zqpR48TWr7xqEopjdNb+Jva6LcfW7vh2D410uslZBG716Tyq21jthFplDZELuChrhw==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, + "node_modules/@codingame/monaco-vscode-editor-service-override/node_modules/@codingame/monaco-vscode-base-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-base-service-override/-/monaco-vscode-base-service-override-8.0.3.tgz", + "integrity": "sha512-jOK9oO2qAOFTsgIJQ2osDmUet7QpTq8eAQ0xdZp8A3laZGd48PczZ4WBAGbhHkRC6nGJPimP5cA4IJOAjN1wlw==", + "license": "MIT", "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/@rollup/pluginutils": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", - "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==", - "dev": true, + "node_modules/@codingame/monaco-vscode-editor-service-override/node_modules/@codingame/monaco-vscode-environment-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-environment-service-override/-/monaco-vscode-environment-service-override-8.0.3.tgz", + "integrity": "sha512-OhZRikv3wKkocax/F9r7rZ2OHlXsFaX8cUaFWHOj4Bgj/g1FsnL/EvNUAZer9bVTzdq3a+4uZunz1jn/V5HF4g==", + "license": "MIT", "dependencies": { - "estree-walker": "^2.0.1", - "picomatch": "^2.2.2" - }, - "engines": { - "node": ">= 8.0.0" + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/@sveltejs/adapter-node": { - "version": "1.0.0-next.73", - "resolved": "https://registry.npmjs.org/@sveltejs/adapter-node/-/adapter-node-1.0.0-next.73.tgz", - "integrity": "sha512-eidd7u1dPHIaBKMjRePrxazUt+Mm/JpnaiKLzZJBdamhBiiYIb+epkPLLqfG5Oo346/0HLKwFRAM/FXn3u3BHQ==", - "dev": true, + "node_modules/@codingame/monaco-vscode-editor-service-override/node_modules/@codingame/monaco-vscode-extensions-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-extensions-service-override/-/monaco-vscode-extensions-service-override-8.0.3.tgz", + "integrity": "sha512-VEr8w7ykNNfYx6KGko03WOjaw7HcaETfQT2Eayj/u7lJX+expP6sEM2D3TGBAuHd8feepFzBuVfsL8I/ZLwS+g==", + "license": "MIT", "dependencies": { - "tiny-glob": "^0.2.9" + "@codingame/monaco-vscode-files-service-override": "8.0.3", + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/@sveltejs/adapter-static": { - "version": "1.0.0-next.29", - "resolved": "https://registry.npmjs.org/@sveltejs/adapter-static/-/adapter-static-1.0.0-next.29.tgz", - "integrity": "sha512-0hjGnfT3BRyoHnzJ2w0/xL+xICRpKneDTm45ZzggiRrc0r71WJfF6toGeg8N4QUQnj8EJ3Itm453gsS1kt7VUQ==", - "dev": true, + "node_modules/@codingame/monaco-vscode-editor-service-override/node_modules/@codingame/monaco-vscode-files-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-files-service-override/-/monaco-vscode-files-service-override-8.0.3.tgz", + "integrity": "sha512-S3mAHK510EwfdN8us2/UpspBC81pMnjACNVqDAk1QGfh6xKOQ6NPUv6ri/3oF2/2zMl5keI/iihK4xwLEAAd8Q==", + "license": "MIT", "dependencies": { - "tiny-glob": "^0.2.9" + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/@sveltejs/kit": { - "version": "1.0.0-next.324", - "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-1.0.0-next.324.tgz", - "integrity": "sha512-/CGW9rQpHQLBb2EcMw08yelD/C9hTsypymctUWdhryMTI8n1VWb0gkUcSHsz8n8oAAbKLXqwyHqeLATfcIMg2w==", - "dev": true, + "node_modules/@codingame/monaco-vscode-editor-service-override/node_modules/@codingame/monaco-vscode-host-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-host-service-override/-/monaco-vscode-host-service-override-8.0.3.tgz", + "integrity": "sha512-VHwFyWTkOqOT+WLB7hC4zZFoahTbcFGJW/MutlR3c5+09v2qddMm2IsxcHKbI3IbHyb4TgPgC0arV4rs1FaNWQ==", + "license": "MIT", "dependencies": { - "@sveltejs/vite-plugin-svelte": "^1.0.0-next.32", - "chokidar": "^3.5.3", - "sade": "^1.7.4", - "vite": "^2.9.0" - }, - "bin": { - "svelte-kit": "svelte-kit.js" - }, - "engines": { - "node": ">=14.13" - }, - "peerDependencies": { - "svelte": "^3.44.0" + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/@sveltejs/vite-plugin-svelte": { - "version": "1.0.0-next.42", - "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-1.0.0-next.42.tgz", - "integrity": "sha512-I8ILzfjVQuOkl6eDHif6/QJhOEBnsA40u6/0RDWK0mujwOr+MfWCWEZEnrTKqa6YIVMO+uktfoknu61chbAIeg==", - "dev": true, + "node_modules/@codingame/monaco-vscode-editor-service-override/node_modules/@codingame/monaco-vscode-layout-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-layout-service-override/-/monaco-vscode-layout-service-override-8.0.3.tgz", + "integrity": "sha512-/so4xozWoEzbqAVIh6iXosNwA7pTpcmj9uBYCXVrjO4CHxXM9qKf9+ndidO9gwGIoiWYFBUJB6XTQOnCLMRqng==", + "license": "MIT", "dependencies": { - "@rollup/pluginutils": "^4.2.1", - "debug": "^4.3.4", - "kleur": "^4.1.4", - "magic-string": "^0.26.1", - "svelte-hmr": "^0.14.11" - }, - "engines": { - "node": "^14.13.1 || >= 16" - }, - "peerDependencies": { - "diff-match-patch": "^1.0.5", - "svelte": "^3.44.0", - "vite": "^2.9.0" - }, - "peerDependenciesMeta": { - "diff-match-patch": { - "optional": true - } + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/@tailwindcss/forms": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.4.1.tgz", - "integrity": "sha512-gS9xjCmJjUBz/eP12QlENPLnf0tCx68oYE3mri0GMP5jdtVwLbGUNSRpjsp6NzLAZzZy3ueOwrcqB78Ax6Z84A==", - "dev": true, + "node_modules/@codingame/monaco-vscode-editor-service-override/node_modules/@codingame/monaco-vscode-quickaccess-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-quickaccess-service-override/-/monaco-vscode-quickaccess-service-override-8.0.3.tgz", + "integrity": "sha512-HNFPcQlXEn38abnfSR4JWa5oeYLsC7cCA0eqb6LkpeCMTODlP44mdahaHHWadELOpaD5ZhV4KO+GY2YcgmVXIA==", + "license": "MIT", "dependencies": { - "mini-svg-data-uri": "^1.2.3" - }, - "peerDependencies": { - "tailwindcss": ">=3.0.0 || >= 3.0.0-alpha.1" + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/@tailwindcss/typography": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.2.tgz", - "integrity": "sha512-coq8DBABRPFcVhVIk6IbKyyHUt7YTEC/C992tatFB+yEx5WGBQrCgsSFjxHUr8AWXphWckadVJbominEduYBqw==", - "dev": true, + "node_modules/@codingame/monaco-vscode-editor-service-override/node_modules/vscode": { + "name": "@codingame/monaco-vscode-api", + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-api/-/monaco-vscode-api-8.0.3.tgz", + "integrity": "sha512-7Lnha7sspHaZq9OKdvN26mrXtaMxKvK2hri7wLNT5Z/SadM8Pj6CmCv/aDD4UpSaGfc7f6OFwsiqBmsbOYpjIA==", + "license": "MIT", "dependencies": { - "lodash.castarray": "^4.4.0", - "lodash.isplainobject": "^4.0.6", - "lodash.merge": "^4.6.2" - }, - "peerDependencies": { - "tailwindcss": ">=3.0.0 || >= 3.0.0-alpha.1 || insiders" + "@codingame/monaco-vscode-base-service-override": "8.0.3", + "@codingame/monaco-vscode-environment-service-override": "8.0.3", + "@codingame/monaco-vscode-extensions-service-override": "8.0.3", + "@codingame/monaco-vscode-files-service-override": "8.0.3", + "@codingame/monaco-vscode-host-service-override": "8.0.3", + "@codingame/monaco-vscode-layout-service-override": "8.0.3", + "@codingame/monaco-vscode-quickaccess-service-override": "8.0.3", + "@vscode/iconv-lite-umd": "0.7.0", + "jschardet": "3.1.3" } }, - "node_modules/@trysound/sax": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", - "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", - "dev": true, - "engines": { - "node": ">=10.13.0" + "node_modules/@codingame/monaco-vscode-environment-service-override": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-environment-service-override/-/monaco-vscode-environment-service-override-8.0.2.tgz", + "integrity": "sha512-X16aJhxVWxtekbre2rnqHerKBL7pMKi1TS7+8zjiE2VTTqcYABJ2TV3Geqlt2tgeXZOrSky6N8iGZRAkSmwdPA==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.2" } }, - "node_modules/@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", - "dev": true + "node_modules/@codingame/monaco-vscode-extensions-service-override": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-extensions-service-override/-/monaco-vscode-extensions-service-override-8.0.2.tgz", + "integrity": "sha512-eOeYLlv+V/cuhtDiJapHP3NyHnCmJu+Rj5l7d5RuI4Ggvn68MjC2GpV95O/EHWTrPLOSDCEpA2PDk06WRqlxwQ==", + "license": "MIT", + "dependencies": { + "@codingame/monaco-vscode-files-service-override": "8.0.2", + "vscode": "npm:@codingame/monaco-vscode-api@8.0.2" + } }, - "node_modules/@types/marked": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@types/marked/-/marked-4.0.3.tgz", - "integrity": "sha512-HnMWQkLJEf/PnxZIfbm0yGJRRZYYMhb++O9M36UCTA9z53uPvVoSlAwJr3XOpDEryb7Hwl1qAx/MV6YIW1RXxg==" + "node_modules/@codingame/monaco-vscode-files-service-override": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-files-service-override/-/monaco-vscode-files-service-override-8.0.2.tgz", + "integrity": "sha512-7DET08EDz68R/XsBpQ3AVcIebNkAguADOSZ1ETyFPn8O9FOtPPew3fUuP8AHpL7ecOzBwHvescnMiBikGaRAcQ==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.2" + } }, - "node_modules/@types/minimist": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", - "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", - "dev": true, - "peer": true + "node_modules/@codingame/monaco-vscode-host-service-override": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-host-service-override/-/monaco-vscode-host-service-override-8.0.2.tgz", + "integrity": "sha512-ZQBboqtBrMMb37wUBdg8h5RLM7gWHrTdg1Z9Xl2wp/rmIzfTaZBcz0s91+BH+ilTJ9QyUcTUYWXoj5HjHhnJ7g==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.2" + } }, - "node_modules/@types/node": { - "version": "17.0.31", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.31.tgz", - "integrity": "sha512-AR0x5HbXGqkEx9CadRH3EBYx/VkiUgZIhP4wvPn/+5KIsgpNoyFaRlVe0Zlx9gRtg8fA06a9tskE2MSN7TcG4Q==", - "dev": true + "node_modules/@codingame/monaco-vscode-keybindings-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-keybindings-service-override/-/monaco-vscode-keybindings-service-override-8.0.3.tgz", + "integrity": "sha512-eknpEamUd3Luk75h02zypQmZgTWuJKXumJxo1lLztSTcRiErehUPbIpRdM8JcD2PSlCD2yyC6q2CkiFdNWi9Yg==", + "license": "MIT", + "dependencies": { + "@codingame/monaco-vscode-files-service-override": "8.0.3", + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" + } }, - "node_modules/@types/node-fetch": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.1.tgz", - "integrity": "sha512-oMqjURCaxoSIsHSr1E47QHzbmzNR5rK8McHuNb11BOM9cHcIK3Avy0s/b2JlXHoQGTYS3NsvWzV1M0iK7l0wbA==", - "dev": true, + "node_modules/@codingame/monaco-vscode-keybindings-service-override/node_modules/@codingame/monaco-vscode-base-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-base-service-override/-/monaco-vscode-base-service-override-8.0.3.tgz", + "integrity": "sha512-jOK9oO2qAOFTsgIJQ2osDmUet7QpTq8eAQ0xdZp8A3laZGd48PczZ4WBAGbhHkRC6nGJPimP5cA4IJOAjN1wlw==", + "license": "MIT", "dependencies": { - "@types/node": "*", - "form-data": "^3.0.0" + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/@types/node-fetch/node_modules/form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", - "dev": true, + "node_modules/@codingame/monaco-vscode-keybindings-service-override/node_modules/@codingame/monaco-vscode-environment-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-environment-service-override/-/monaco-vscode-environment-service-override-8.0.3.tgz", + "integrity": "sha512-OhZRikv3wKkocax/F9r7rZ2OHlXsFaX8cUaFWHOj4Bgj/g1FsnL/EvNUAZer9bVTzdq3a+4uZunz1jn/V5HF4g==", + "license": "MIT", "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/@types/normalize-package-data": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", - "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", - "dev": true, - "peer": true + "node_modules/@codingame/monaco-vscode-keybindings-service-override/node_modules/@codingame/monaco-vscode-extensions-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-extensions-service-override/-/monaco-vscode-extensions-service-override-8.0.3.tgz", + "integrity": "sha512-VEr8w7ykNNfYx6KGko03WOjaw7HcaETfQT2Eayj/u7lJX+expP6sEM2D3TGBAuHd8feepFzBuVfsL8I/ZLwS+g==", + "license": "MIT", + "dependencies": { + "@codingame/monaco-vscode-files-service-override": "8.0.3", + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" + } }, - "node_modules/@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", - "dev": true, - "peer": true + "node_modules/@codingame/monaco-vscode-keybindings-service-override/node_modules/@codingame/monaco-vscode-files-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-files-service-override/-/monaco-vscode-files-service-override-8.0.3.tgz", + "integrity": "sha512-S3mAHK510EwfdN8us2/UpspBC81pMnjACNVqDAk1QGfh6xKOQ6NPUv6ri/3oF2/2zMl5keI/iihK4xwLEAAd8Q==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" + } }, - "node_modules/@types/pug": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/pug/-/pug-2.0.6.tgz", - "integrity": "sha512-SnHmG9wN1UVmagJOnyo/qkk0Z7gejYxOYYmaAwr5u2yFYfsupN3sg10kyzN8Hep/2zbHxCnsumxOoRIRMBwKCg==", - "dev": true + "node_modules/@codingame/monaco-vscode-keybindings-service-override/node_modules/@codingame/monaco-vscode-host-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-host-service-override/-/monaco-vscode-host-service-override-8.0.3.tgz", + "integrity": "sha512-VHwFyWTkOqOT+WLB7hC4zZFoahTbcFGJW/MutlR3c5+09v2qddMm2IsxcHKbI3IbHyb4TgPgC0arV4rs1FaNWQ==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" + } }, - "node_modules/@types/sass": { - "version": "1.43.1", - "resolved": "https://registry.npmjs.org/@types/sass/-/sass-1.43.1.tgz", - "integrity": "sha512-BPdoIt1lfJ6B7rw35ncdwBZrAssjcwzI5LByIrYs+tpXlj/CAkuVdRsgZDdP4lq5EjyWzwxZCqAoFyHKFwp32g==", - "dev": true, + "node_modules/@codingame/monaco-vscode-keybindings-service-override/node_modules/@codingame/monaco-vscode-layout-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-layout-service-override/-/monaco-vscode-layout-service-override-8.0.3.tgz", + "integrity": "sha512-/so4xozWoEzbqAVIh6iXosNwA7pTpcmj9uBYCXVrjO4CHxXM9qKf9+ndidO9gwGIoiWYFBUJB6XTQOnCLMRqng==", + "license": "MIT", "dependencies": { - "@types/node": "*" + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/@types/vscode": { - "version": "1.66.0", - "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.66.0.tgz", - "integrity": "sha512-ZfJck4M7nrGasfs4A4YbUoxis3Vu24cETw3DERsNYtDZmYSYtk6ljKexKFKhImO/ZmY6ZMsmegu2FPkXoUFImA==" + "node_modules/@codingame/monaco-vscode-keybindings-service-override/node_modules/@codingame/monaco-vscode-quickaccess-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-quickaccess-service-override/-/monaco-vscode-quickaccess-service-override-8.0.3.tgz", + "integrity": "sha512-HNFPcQlXEn38abnfSR4JWa5oeYLsC7cCA0eqb6LkpeCMTODlP44mdahaHHWadELOpaD5ZhV4KO+GY2YcgmVXIA==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" + } }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.33.0.tgz", - "integrity": "sha512-aINiAxGVdOl1eJyVjaWn/YcVAq4Gi/Yo35qHGCnqbWVz61g39D0h23veY/MA0rFFGfxK7TySg2uwDeNv+JgVpg==", - "dev": true, + "node_modules/@codingame/monaco-vscode-keybindings-service-override/node_modules/vscode": { + "name": "@codingame/monaco-vscode-api", + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-api/-/monaco-vscode-api-8.0.3.tgz", + "integrity": "sha512-7Lnha7sspHaZq9OKdvN26mrXtaMxKvK2hri7wLNT5Z/SadM8Pj6CmCv/aDD4UpSaGfc7f6OFwsiqBmsbOYpjIA==", + "license": "MIT", "dependencies": { - "@typescript-eslint/experimental-utils": "4.33.0", - "@typescript-eslint/scope-manager": "4.33.0", - "debug": "^4.3.1", - "functional-red-black-tree": "^1.0.1", - "ignore": "^5.1.8", - "regexpp": "^3.1.0", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^4.0.0", - "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "@codingame/monaco-vscode-base-service-override": "8.0.3", + "@codingame/monaco-vscode-environment-service-override": "8.0.3", + "@codingame/monaco-vscode-extensions-service-override": "8.0.3", + "@codingame/monaco-vscode-files-service-override": "8.0.3", + "@codingame/monaco-vscode-host-service-override": "8.0.3", + "@codingame/monaco-vscode-layout-service-override": "8.0.3", + "@codingame/monaco-vscode-quickaccess-service-override": "8.0.3", + "@vscode/iconv-lite-umd": "0.7.0", + "jschardet": "3.1.3" } }, - "node_modules/@typescript-eslint/experimental-utils": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.33.0.tgz", - "integrity": "sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q==", - "dev": true, + "node_modules/@codingame/monaco-vscode-language-pack-cs": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-language-pack-cs/-/monaco-vscode-language-pack-cs-8.0.3.tgz", + "integrity": "sha512-4yzIEPFPK8mrbakRpQh1E/2I5ptu1OEDdevCvrtf5+w/KlzRNobV+FCCPV4AZH0JxUBZFO4Ax/nyA+Vmzrv7aQ==", + "license": "MIT", "dependencies": { - "@types/json-schema": "^7.0.7", - "@typescript-eslint/scope-manager": "4.33.0", - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/typescript-estree": "4.33.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "*" + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/@typescript-eslint/parser": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.33.0.tgz", - "integrity": "sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA==", - "dev": true, + "node_modules/@codingame/monaco-vscode-language-pack-cs/node_modules/@codingame/monaco-vscode-base-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-base-service-override/-/monaco-vscode-base-service-override-8.0.3.tgz", + "integrity": "sha512-jOK9oO2qAOFTsgIJQ2osDmUet7QpTq8eAQ0xdZp8A3laZGd48PczZ4WBAGbhHkRC6nGJPimP5cA4IJOAjN1wlw==", + "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "4.33.0", - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/typescript-estree": "4.33.0", - "debug": "^4.3.1" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz", - "integrity": "sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ==", - "dev": true, + "node_modules/@codingame/monaco-vscode-language-pack-cs/node_modules/@codingame/monaco-vscode-environment-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-environment-service-override/-/monaco-vscode-environment-service-override-8.0.3.tgz", + "integrity": "sha512-OhZRikv3wKkocax/F9r7rZ2OHlXsFaX8cUaFWHOj4Bgj/g1FsnL/EvNUAZer9bVTzdq3a+4uZunz1jn/V5HF4g==", + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/visitor-keys": "4.33.0" - }, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/@typescript-eslint/types": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.33.0.tgz", - "integrity": "sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ==", - "dev": true, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "node_modules/@codingame/monaco-vscode-language-pack-cs/node_modules/@codingame/monaco-vscode-extensions-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-extensions-service-override/-/monaco-vscode-extensions-service-override-8.0.3.tgz", + "integrity": "sha512-VEr8w7ykNNfYx6KGko03WOjaw7HcaETfQT2Eayj/u7lJX+expP6sEM2D3TGBAuHd8feepFzBuVfsL8I/ZLwS+g==", + "license": "MIT", + "dependencies": { + "@codingame/monaco-vscode-files-service-override": "8.0.3", + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz", - "integrity": "sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA==", - "dev": true, + "node_modules/@codingame/monaco-vscode-language-pack-cs/node_modules/@codingame/monaco-vscode-files-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-files-service-override/-/monaco-vscode-files-service-override-8.0.3.tgz", + "integrity": "sha512-S3mAHK510EwfdN8us2/UpspBC81pMnjACNVqDAk1QGfh6xKOQ6NPUv6ri/3oF2/2zMl5keI/iihK4xwLEAAd8Q==", + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/visitor-keys": "4.33.0", - "debug": "^4.3.1", - "globby": "^11.0.3", - "is-glob": "^4.0.1", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz", - "integrity": "sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg==", - "dev": true, + "node_modules/@codingame/monaco-vscode-language-pack-cs/node_modules/@codingame/monaco-vscode-host-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-host-service-override/-/monaco-vscode-host-service-override-8.0.3.tgz", + "integrity": "sha512-VHwFyWTkOqOT+WLB7hC4zZFoahTbcFGJW/MutlR3c5+09v2qddMm2IsxcHKbI3IbHyb4TgPgC0arV4rs1FaNWQ==", + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "4.33.0", - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^8.10.0 || ^10.13.0 || >=11.10.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/@zerodevx/svelte-toast": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/@zerodevx/svelte-toast/-/svelte-toast-0.6.3.tgz", - "integrity": "sha512-k0W1JFoqHIcIQaP9ij99+Rv0ugaQSSNwOuNwwmTGRjWtIqrQr+ExLDE8LQGXLlJIprqDyMWB4lJkUql/r0RAtA==" + "node_modules/@codingame/monaco-vscode-language-pack-cs/node_modules/@codingame/monaco-vscode-layout-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-layout-service-override/-/monaco-vscode-layout-service-override-8.0.3.tgz", + "integrity": "sha512-/so4xozWoEzbqAVIh6iXosNwA7pTpcmj9uBYCXVrjO4CHxXM9qKf9+ndidO9gwGIoiWYFBUJB6XTQOnCLMRqng==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" + } }, - "node_modules/abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "dev": true, + "node_modules/@codingame/monaco-vscode-language-pack-cs/node_modules/@codingame/monaco-vscode-quickaccess-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-quickaccess-service-override/-/monaco-vscode-quickaccess-service-override-8.0.3.tgz", + "integrity": "sha512-HNFPcQlXEn38abnfSR4JWa5oeYLsC7cCA0eqb6LkpeCMTODlP44mdahaHHWadELOpaD5ZhV4KO+GY2YcgmVXIA==", + "license": "MIT", "dependencies": { - "event-target-shim": "^5.0.0" - }, - "engines": { - "node": ">=6.5" + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" + "node_modules/@codingame/monaco-vscode-language-pack-cs/node_modules/vscode": { + "name": "@codingame/monaco-vscode-api", + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-api/-/monaco-vscode-api-8.0.3.tgz", + "integrity": "sha512-7Lnha7sspHaZq9OKdvN26mrXtaMxKvK2hri7wLNT5Z/SadM8Pj6CmCv/aDD4UpSaGfc7f6OFwsiqBmsbOYpjIA==", + "license": "MIT", + "dependencies": { + "@codingame/monaco-vscode-base-service-override": "8.0.3", + "@codingame/monaco-vscode-environment-service-override": "8.0.3", + "@codingame/monaco-vscode-extensions-service-override": "8.0.3", + "@codingame/monaco-vscode-files-service-override": "8.0.3", + "@codingame/monaco-vscode-host-service-override": "8.0.3", + "@codingame/monaco-vscode-layout-service-override": "8.0.3", + "@codingame/monaco-vscode-quickaccess-service-override": "8.0.3", + "@vscode/iconv-lite-umd": "0.7.0", + "jschardet": "3.1.3" } }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + "node_modules/@codingame/monaco-vscode-language-pack-de": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-language-pack-de/-/monaco-vscode-language-pack-de-8.0.3.tgz", + "integrity": "sha512-DT/SRJYzSwwd6BJRDHVUshyiVX8yu19Z4q3OiyUTrEKp3BrdMn8nMj0M/7mad9tjJhj4xYJJABS7PyND41gqTw==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/acorn-node": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", - "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", - "dev": true, + "node_modules/@codingame/monaco-vscode-language-pack-de/node_modules/@codingame/monaco-vscode-base-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-base-service-override/-/monaco-vscode-base-service-override-8.0.3.tgz", + "integrity": "sha512-jOK9oO2qAOFTsgIJQ2osDmUet7QpTq8eAQ0xdZp8A3laZGd48PczZ4WBAGbhHkRC6nGJPimP5cA4IJOAjN1wlw==", + "license": "MIT", "dependencies": { - "acorn": "^7.0.0", - "acorn-walk": "^7.0.0", - "xtend": "^4.0.2" + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", - "dev": true, - "engines": { - "node": ">=0.4.0" + "node_modules/@codingame/monaco-vscode-language-pack-de/node_modules/@codingame/monaco-vscode-environment-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-environment-service-override/-/monaco-vscode-environment-service-override-8.0.3.tgz", + "integrity": "sha512-OhZRikv3wKkocax/F9r7rZ2OHlXsFaX8cUaFWHOj4Bgj/g1FsnL/EvNUAZer9bVTzdq3a+4uZunz1jn/V5HF4g==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, + "node_modules/@codingame/monaco-vscode-language-pack-de/node_modules/@codingame/monaco-vscode-extensions-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-extensions-service-override/-/monaco-vscode-extensions-service-override-8.0.3.tgz", + "integrity": "sha512-VEr8w7ykNNfYx6KGko03WOjaw7HcaETfQT2Eayj/u7lJX+expP6sEM2D3TGBAuHd8feepFzBuVfsL8I/ZLwS+g==", + "license": "MIT", "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "@codingame/monaco-vscode-files-service-override": "8.0.3", + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true, - "engines": { - "node": ">=6" + "node_modules/@codingame/monaco-vscode-language-pack-de/node_modules/@codingame/monaco-vscode-files-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-files-service-override/-/monaco-vscode-files-service-override-8.0.3.tgz", + "integrity": "sha512-S3mAHK510EwfdN8us2/UpspBC81pMnjACNVqDAk1QGfh6xKOQ6NPUv6ri/3oF2/2zMl5keI/iihK4xwLEAAd8Q==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" + "node_modules/@codingame/monaco-vscode-language-pack-de/node_modules/@codingame/monaco-vscode-host-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-host-service-override/-/monaco-vscode-host-service-override-8.0.3.tgz", + "integrity": "sha512-VHwFyWTkOqOT+WLB7hC4zZFoahTbcFGJW/MutlR3c5+09v2qddMm2IsxcHKbI3IbHyb4TgPgC0arV4rs1FaNWQ==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, + "node_modules/@codingame/monaco-vscode-language-pack-de/node_modules/@codingame/monaco-vscode-layout-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-layout-service-override/-/monaco-vscode-layout-service-override-8.0.3.tgz", + "integrity": "sha512-/so4xozWoEzbqAVIh6iXosNwA7pTpcmj9uBYCXVrjO4CHxXM9qKf9+ndidO9gwGIoiWYFBUJB6XTQOnCLMRqng==", + "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, + "node_modules/@codingame/monaco-vscode-language-pack-de/node_modules/@codingame/monaco-vscode-quickaccess-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-quickaccess-service-override/-/monaco-vscode-quickaccess-service-override-8.0.3.tgz", + "integrity": "sha512-HNFPcQlXEn38abnfSR4JWa5oeYLsC7cCA0eqb6LkpeCMTODlP44mdahaHHWadELOpaD5ZhV4KO+GY2YcgmVXIA==", + "license": "MIT", "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/arg": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.1.tgz", - "integrity": "sha512-e0hDa9H2Z9AwFkk2qDlwhoMYE4eToKarchkQHovNdLTCYMHZHeRjI71crOh+dio4K6u1IcwubQqo79Ga4CyAQA==", - "dev": true + "node_modules/@codingame/monaco-vscode-language-pack-de/node_modules/vscode": { + "name": "@codingame/monaco-vscode-api", + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-api/-/monaco-vscode-api-8.0.3.tgz", + "integrity": "sha512-7Lnha7sspHaZq9OKdvN26mrXtaMxKvK2hri7wLNT5Z/SadM8Pj6CmCv/aDD4UpSaGfc7f6OFwsiqBmsbOYpjIA==", + "license": "MIT", + "dependencies": { + "@codingame/monaco-vscode-base-service-override": "8.0.3", + "@codingame/monaco-vscode-environment-service-override": "8.0.3", + "@codingame/monaco-vscode-extensions-service-override": "8.0.3", + "@codingame/monaco-vscode-files-service-override": "8.0.3", + "@codingame/monaco-vscode-host-service-override": "8.0.3", + "@codingame/monaco-vscode-layout-service-override": "8.0.3", + "@codingame/monaco-vscode-quickaccess-service-override": "8.0.3", + "@vscode/iconv-lite-umd": "0.7.0", + "jschardet": "3.1.3" + } }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, + "node_modules/@codingame/monaco-vscode-language-pack-es": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-language-pack-es/-/monaco-vscode-language-pack-es-8.0.3.tgz", + "integrity": "sha512-EFK6mwCeoKH4fnjUzZWe46VyYB6C+zGy0kYDzvaznXG/JN97tipd37gEXsUpU7ZdHtyh4wFoPzeMCeQfXKsNxA==", + "license": "MIT", "dependencies": { - "sprintf-js": "~1.0.2" + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "engines": { - "node": ">=8" + "node_modules/@codingame/monaco-vscode-language-pack-es/node_modules/@codingame/monaco-vscode-base-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-base-service-override/-/monaco-vscode-base-service-override-8.0.3.tgz", + "integrity": "sha512-jOK9oO2qAOFTsgIJQ2osDmUet7QpTq8eAQ0xdZp8A3laZGd48PczZ4WBAGbhHkRC6nGJPimP5cA4IJOAjN1wlw==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.10.0" + "node_modules/@codingame/monaco-vscode-language-pack-es/node_modules/@codingame/monaco-vscode-environment-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-environment-service-override/-/monaco-vscode-environment-service-override-8.0.3.tgz", + "integrity": "sha512-OhZRikv3wKkocax/F9r7rZ2OHlXsFaX8cUaFWHOj4Bgj/g1FsnL/EvNUAZer9bVTzdq3a+4uZunz1jn/V5HF4g==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true, - "engines": { - "node": ">=8" + "node_modules/@codingame/monaco-vscode-language-pack-es/node_modules/@codingame/monaco-vscode-extensions-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-extensions-service-override/-/monaco-vscode-extensions-service-override-8.0.3.tgz", + "integrity": "sha512-VEr8w7ykNNfYx6KGko03WOjaw7HcaETfQT2Eayj/u7lJX+expP6sEM2D3TGBAuHd8feepFzBuVfsL8I/ZLwS+g==", + "license": "MIT", + "dependencies": { + "@codingame/monaco-vscode-files-service-override": "8.0.3", + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true + "node_modules/@codingame/monaco-vscode-language-pack-es/node_modules/@codingame/monaco-vscode-files-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-files-service-override/-/monaco-vscode-files-service-override-8.0.3.tgz", + "integrity": "sha512-S3mAHK510EwfdN8us2/UpspBC81pMnjACNVqDAk1QGfh6xKOQ6NPUv6ri/3oF2/2zMl5keI/iihK4xwLEAAd8Q==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" + } }, - "node_modules/autoprefixer": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.5.tgz", - "integrity": "sha512-Fvd8yCoA7lNX/OUllvS+aS1I7WRBclGXsepbvT8ZaPgrH24rgXpZzF0/6Hh3ZEkwg+0AES/Osd196VZmYoEFtw==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/autoprefixer" - } - ], + "node_modules/@codingame/monaco-vscode-language-pack-es/node_modules/@codingame/monaco-vscode-host-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-host-service-override/-/monaco-vscode-host-service-override-8.0.3.tgz", + "integrity": "sha512-VHwFyWTkOqOT+WLB7hC4zZFoahTbcFGJW/MutlR3c5+09v2qddMm2IsxcHKbI3IbHyb4TgPgC0arV4rs1FaNWQ==", + "license": "MIT", "dependencies": { - "browserslist": "^4.20.2", - "caniuse-lite": "^1.0.30001332", - "fraction.js": "^4.2.0", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", - "postcss-value-parser": "^4.2.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" - }, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.1.0" + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/axios": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.24.0.tgz", - "integrity": "sha512-Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA==", - "dev": true, + "node_modules/@codingame/monaco-vscode-language-pack-es/node_modules/@codingame/monaco-vscode-layout-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-layout-service-override/-/monaco-vscode-layout-service-override-8.0.3.tgz", + "integrity": "sha512-/so4xozWoEzbqAVIh6iXosNwA7pTpcmj9uBYCXVrjO4CHxXM9qKf9+ndidO9gwGIoiWYFBUJB6XTQOnCLMRqng==", + "license": "MIT", "dependencies": { - "follow-redirects": "^1.14.4" + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + "node_modules/@codingame/monaco-vscode-language-pack-es/node_modules/@codingame/monaco-vscode-quickaccess-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-quickaccess-service-override/-/monaco-vscode-quickaccess-service-override-8.0.3.tgz", + "integrity": "sha512-HNFPcQlXEn38abnfSR4JWa5oeYLsC7cCA0eqb6LkpeCMTODlP44mdahaHHWadELOpaD5ZhV4KO+GY2YcgmVXIA==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" + } }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, - "engines": { - "node": ">=8" + "node_modules/@codingame/monaco-vscode-language-pack-es/node_modules/vscode": { + "name": "@codingame/monaco-vscode-api", + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-api/-/monaco-vscode-api-8.0.3.tgz", + "integrity": "sha512-7Lnha7sspHaZq9OKdvN26mrXtaMxKvK2hri7wLNT5Z/SadM8Pj6CmCv/aDD4UpSaGfc7f6OFwsiqBmsbOYpjIA==", + "license": "MIT", + "dependencies": { + "@codingame/monaco-vscode-base-service-override": "8.0.3", + "@codingame/monaco-vscode-environment-service-override": "8.0.3", + "@codingame/monaco-vscode-extensions-service-override": "8.0.3", + "@codingame/monaco-vscode-files-service-override": "8.0.3", + "@codingame/monaco-vscode-host-service-override": "8.0.3", + "@codingame/monaco-vscode-layout-service-override": "8.0.3", + "@codingame/monaco-vscode-quickaccess-service-override": "8.0.3", + "@vscode/iconv-lite-umd": "0.7.0", + "jschardet": "3.1.3" } }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", - "dev": true + "node_modules/@codingame/monaco-vscode-language-pack-fr": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-language-pack-fr/-/monaco-vscode-language-pack-fr-8.0.3.tgz", + "integrity": "sha512-OZvURxC3apd7+g93NIB0OAtuqVR64G1aKLdQ8w0GwhHJa9C0bB+zjD7DNRMqnWU58HEcSSZvN3Y2H6N+viXS4g==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" + } }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "node_modules/@codingame/monaco-vscode-language-pack-fr/node_modules/@codingame/monaco-vscode-base-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-base-service-override/-/monaco-vscode-base-service-override-8.0.3.tgz", + "integrity": "sha512-jOK9oO2qAOFTsgIJQ2osDmUet7QpTq8eAQ0xdZp8A3laZGd48PczZ4WBAGbhHkRC6nGJPimP5cA4IJOAjN1wlw==", + "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, + "node_modules/@codingame/monaco-vscode-language-pack-fr/node_modules/@codingame/monaco-vscode-environment-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-environment-service-override/-/monaco-vscode-environment-service-override-8.0.3.tgz", + "integrity": "sha512-OhZRikv3wKkocax/F9r7rZ2OHlXsFaX8cUaFWHOj4Bgj/g1FsnL/EvNUAZer9bVTzdq3a+4uZunz1jn/V5HF4g==", + "license": "MIT", "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/browserslist": { - "version": "4.20.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.3.tgz", - "integrity": "sha512-NBhymBQl1zM0Y5dQT/O+xiLP9/rzOIQdKM/eMJBAq7yBgaB6krIYLGejrwVYnSHZdqjscB1SPuAjHwxjvN6Wdg==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - } - ], + "node_modules/@codingame/monaco-vscode-language-pack-fr/node_modules/@codingame/monaco-vscode-extensions-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-extensions-service-override/-/monaco-vscode-extensions-service-override-8.0.3.tgz", + "integrity": "sha512-VEr8w7ykNNfYx6KGko03WOjaw7HcaETfQT2Eayj/u7lJX+expP6sEM2D3TGBAuHd8feepFzBuVfsL8I/ZLwS+g==", + "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001332", - "electron-to-chromium": "^1.4.118", - "escalade": "^3.1.1", - "node-releases": "^2.0.3", - "picocolors": "^1.0.0" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + "@codingame/monaco-vscode-files-service-override": "8.0.3", + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", - "dev": true, - "engines": { - "node": "*" + "node_modules/@codingame/monaco-vscode-language-pack-fr/node_modules/@codingame/monaco-vscode-files-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-files-service-override/-/monaco-vscode-files-service-override-8.0.3.tgz", + "integrity": "sha512-S3mAHK510EwfdN8us2/UpspBC81pMnjACNVqDAk1QGfh6xKOQ6NPUv6ri/3oF2/2zMl5keI/iihK4xwLEAAd8Q==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/call-me-maybe": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", - "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=", - "dev": true - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "engines": { - "node": ">=6" + "node_modules/@codingame/monaco-vscode-language-pack-fr/node_modules/@codingame/monaco-vscode-host-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-host-service-override/-/monaco-vscode-host-service-override-8.0.3.tgz", + "integrity": "sha512-VHwFyWTkOqOT+WLB7hC4zZFoahTbcFGJW/MutlR3c5+09v2qddMm2IsxcHKbI3IbHyb4TgPgC0arV4rs1FaNWQ==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node_modules/@codingame/monaco-vscode-language-pack-fr/node_modules/@codingame/monaco-vscode-layout-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-layout-service-override/-/monaco-vscode-layout-service-override-8.0.3.tgz", + "integrity": "sha512-/so4xozWoEzbqAVIh6iXosNwA7pTpcmj9uBYCXVrjO4CHxXM9qKf9+ndidO9gwGIoiWYFBUJB6XTQOnCLMRqng==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/camelcase-css": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", - "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", - "dev": true, - "engines": { - "node": ">= 6" + "node_modules/@codingame/monaco-vscode-language-pack-fr/node_modules/@codingame/monaco-vscode-quickaccess-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-quickaccess-service-override/-/monaco-vscode-quickaccess-service-override-8.0.3.tgz", + "integrity": "sha512-HNFPcQlXEn38abnfSR4JWa5oeYLsC7cCA0eqb6LkpeCMTODlP44mdahaHHWadELOpaD5ZhV4KO+GY2YcgmVXIA==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/camelcase-keys": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", - "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", - "dev": true, - "peer": true, + "node_modules/@codingame/monaco-vscode-language-pack-fr/node_modules/vscode": { + "name": "@codingame/monaco-vscode-api", + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-api/-/monaco-vscode-api-8.0.3.tgz", + "integrity": "sha512-7Lnha7sspHaZq9OKdvN26mrXtaMxKvK2hri7wLNT5Z/SadM8Pj6CmCv/aDD4UpSaGfc7f6OFwsiqBmsbOYpjIA==", + "license": "MIT", "dependencies": { - "camelcase": "^5.3.1", - "map-obj": "^4.0.0", - "quick-lru": "^4.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "@codingame/monaco-vscode-base-service-override": "8.0.3", + "@codingame/monaco-vscode-environment-service-override": "8.0.3", + "@codingame/monaco-vscode-extensions-service-override": "8.0.3", + "@codingame/monaco-vscode-files-service-override": "8.0.3", + "@codingame/monaco-vscode-host-service-override": "8.0.3", + "@codingame/monaco-vscode-layout-service-override": "8.0.3", + "@codingame/monaco-vscode-quickaccess-service-override": "8.0.3", + "@vscode/iconv-lite-umd": "0.7.0", + "jschardet": "3.1.3" } }, - "node_modules/camelcase-keys/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "peer": true, - "engines": { - "node": ">=6" + "node_modules/@codingame/monaco-vscode-language-pack-it": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-language-pack-it/-/monaco-vscode-language-pack-it-8.0.3.tgz", + "integrity": "sha512-WGChBybs9a+eT08/xT5OSGJryUgSlHDi7HRjBXDc72s06IvL4iyL4BZnxShXeS+pR0Z83IlPbxtPDZ4z4RIH4g==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/caniuse-api": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", - "dev": true, + "node_modules/@codingame/monaco-vscode-language-pack-it/node_modules/@codingame/monaco-vscode-base-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-base-service-override/-/monaco-vscode-base-service-override-8.0.3.tgz", + "integrity": "sha512-jOK9oO2qAOFTsgIJQ2osDmUet7QpTq8eAQ0xdZp8A3laZGd48PczZ4WBAGbhHkRC6nGJPimP5cA4IJOAjN1wlw==", + "license": "MIT", "dependencies": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/caniuse-lite": { - "version": "1.0.30001334", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001334.tgz", - "integrity": "sha512-kbaCEBRRVSoeNs74sCuq92MJyGrMtjWVfhltoHUCW4t4pXFvGjUBrfo47weBRViHkiV3eBYyIsfl956NtHGazw==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - } - ] + "node_modules/@codingame/monaco-vscode-language-pack-it/node_modules/@codingame/monaco-vscode-environment-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-environment-service-override/-/monaco-vscode-environment-service-override-8.0.3.tgz", + "integrity": "sha512-OhZRikv3wKkocax/F9r7rZ2OHlXsFaX8cUaFWHOj4Bgj/g1FsnL/EvNUAZer9bVTzdq3a+4uZunz1jn/V5HF4g==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" + } }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, + "node_modules/@codingame/monaco-vscode-language-pack-it/node_modules/@codingame/monaco-vscode-extensions-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-extensions-service-override/-/monaco-vscode-extensions-service-override-8.0.3.tgz", + "integrity": "sha512-VEr8w7ykNNfYx6KGko03WOjaw7HcaETfQT2Eayj/u7lJX+expP6sEM2D3TGBAuHd8feepFzBuVfsL8I/ZLwS+g==", + "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "@codingame/monaco-vscode-files-service-override": "8.0.3", + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], + "node_modules/@codingame/monaco-vscode-language-pack-it/node_modules/@codingame/monaco-vscode-files-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-files-service-override/-/monaco-vscode-files-service-override-8.0.3.tgz", + "integrity": "sha512-S3mAHK510EwfdN8us2/UpspBC81pMnjACNVqDAk1QGfh6xKOQ6NPUv6ri/3oF2/2zMl5keI/iihK4xwLEAAd8Q==", + "license": "MIT", "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/clone-regexp": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clone-regexp/-/clone-regexp-2.2.0.tgz", - "integrity": "sha512-beMpP7BOtTipFuW8hrJvREQ2DrRu3BE7by0ZpibtfBA+qfHYvMGTc2Yb1JMYPKg/JUw0CHYvpg796aNTSW9z7Q==", - "dev": true, - "peer": true, + "node_modules/@codingame/monaco-vscode-language-pack-it/node_modules/@codingame/monaco-vscode-host-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-host-service-override/-/monaco-vscode-host-service-override-8.0.3.tgz", + "integrity": "sha512-VHwFyWTkOqOT+WLB7hC4zZFoahTbcFGJW/MutlR3c5+09v2qddMm2IsxcHKbI3IbHyb4TgPgC0arV4rs1FaNWQ==", + "license": "MIT", "dependencies": { - "is-regexp": "^2.0.0" - }, - "engines": { - "node": ">=6" + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, + "node_modules/@codingame/monaco-vscode-language-pack-it/node_modules/@codingame/monaco-vscode-layout-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-layout-service-override/-/monaco-vscode-layout-service-override-8.0.3.tgz", + "integrity": "sha512-/so4xozWoEzbqAVIh6iXosNwA7pTpcmj9uBYCXVrjO4CHxXM9qKf9+ndidO9gwGIoiWYFBUJB6XTQOnCLMRqng==", + "license": "MIT", "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "node_modules/@codingame/monaco-vscode-language-pack-it/node_modules/@codingame/monaco-vscode-quickaccess-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-quickaccess-service-override/-/monaco-vscode-quickaccess-service-override-8.0.3.tgz", + "integrity": "sha512-HNFPcQlXEn38abnfSR4JWa5oeYLsC7cCA0eqb6LkpeCMTODlP44mdahaHHWadELOpaD5ZhV4KO+GY2YcgmVXIA==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" + } }, - "node_modules/colord": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.2.tgz", - "integrity": "sha512-Uqbg+J445nc1TKn4FoDPS6ZZqAvEDnwrH42yo8B40JSOgSLxMZ/gt3h4nmCtPLQeXhjJJkqBx7SCY35WnIixaQ==", - "dev": true + "node_modules/@codingame/monaco-vscode-language-pack-it/node_modules/vscode": { + "name": "@codingame/monaco-vscode-api", + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-api/-/monaco-vscode-api-8.0.3.tgz", + "integrity": "sha512-7Lnha7sspHaZq9OKdvN26mrXtaMxKvK2hri7wLNT5Z/SadM8Pj6CmCv/aDD4UpSaGfc7f6OFwsiqBmsbOYpjIA==", + "license": "MIT", + "dependencies": { + "@codingame/monaco-vscode-base-service-override": "8.0.3", + "@codingame/monaco-vscode-environment-service-override": "8.0.3", + "@codingame/monaco-vscode-extensions-service-override": "8.0.3", + "@codingame/monaco-vscode-files-service-override": "8.0.3", + "@codingame/monaco-vscode-host-service-override": "8.0.3", + "@codingame/monaco-vscode-layout-service-override": "8.0.3", + "@codingame/monaco-vscode-quickaccess-service-override": "8.0.3", + "@vscode/iconv-lite-umd": "0.7.0", + "jschardet": "3.1.3" + } }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, + "node_modules/@codingame/monaco-vscode-language-pack-ja": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-language-pack-ja/-/monaco-vscode-language-pack-ja-8.0.3.tgz", + "integrity": "sha512-ilzXv35gWhhyMkgGJqjkjkltyuNjJ3a29xVTIQpECXSIAJvZBpAhxCeCbF2CbsPcEwHbeqaDaYljenlCoXCwHg==", + "license": "MIT", "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "dev": true, - "engines": { - "node": ">= 12" + "node_modules/@codingame/monaco-vscode-language-pack-ja/node_modules/@codingame/monaco-vscode-base-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-base-service-override/-/monaco-vscode-base-service-override-8.0.3.tgz", + "integrity": "sha512-jOK9oO2qAOFTsgIJQ2osDmUet7QpTq8eAQ0xdZp8A3laZGd48PczZ4WBAGbhHkRC6nGJPimP5cA4IJOAjN1wlw==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + "node_modules/@codingame/monaco-vscode-language-pack-ja/node_modules/@codingame/monaco-vscode-environment-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-environment-service-override/-/monaco-vscode-environment-service-override-8.0.3.tgz", + "integrity": "sha512-OhZRikv3wKkocax/F9r7rZ2OHlXsFaX8cUaFWHOj4Bgj/g1FsnL/EvNUAZer9bVTzdq3a+4uZunz1jn/V5HF4g==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" + } }, - "node_modules/cosmiconfig": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", - "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", - "dev": true, - "peer": true, + "node_modules/@codingame/monaco-vscode-language-pack-ja/node_modules/@codingame/monaco-vscode-extensions-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-extensions-service-override/-/monaco-vscode-extensions-service-override-8.0.3.tgz", + "integrity": "sha512-VEr8w7ykNNfYx6KGko03WOjaw7HcaETfQT2Eayj/u7lJX+expP6sEM2D3TGBAuHd8feepFzBuVfsL8I/ZLwS+g==", + "license": "MIT", "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - }, - "engines": { - "node": ">=10" + "@codingame/monaco-vscode-files-service-override": "8.0.3", + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, + "node_modules/@codingame/monaco-vscode-language-pack-ja/node_modules/@codingame/monaco-vscode-files-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-files-service-override/-/monaco-vscode-files-service-override-8.0.3.tgz", + "integrity": "sha512-S3mAHK510EwfdN8us2/UpspBC81pMnjACNVqDAk1QGfh6xKOQ6NPUv6ri/3oF2/2zMl5keI/iihK4xwLEAAd8Q==", + "license": "MIT", "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/css-declaration-sorter": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.2.2.tgz", - "integrity": "sha512-Ufadglr88ZLsrvS11gjeu/40Lw74D9Am/Jpr3LlYm5Q4ZP5KdlUhG+6u2EjyXeZcxmZ2h1ebCKngDjolpeLHpg==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.0.9" + "node_modules/@codingame/monaco-vscode-language-pack-ja/node_modules/@codingame/monaco-vscode-host-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-host-service-override/-/monaco-vscode-host-service-override-8.0.3.tgz", + "integrity": "sha512-VHwFyWTkOqOT+WLB7hC4zZFoahTbcFGJW/MutlR3c5+09v2qddMm2IsxcHKbI3IbHyb4TgPgC0arV4rs1FaNWQ==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/css-functions-list": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.0.1.tgz", - "integrity": "sha512-PriDuifDt4u4rkDgnqRCLnjfMatufLmWNfQnGCq34xZwpY3oabwhB9SqRBmuvWUgndbemCFlKqg+nO7C2q0SBw==", - "dev": true, - "peer": true, - "engines": { - "node": ">=12.22" + "node_modules/@codingame/monaco-vscode-language-pack-ja/node_modules/@codingame/monaco-vscode-layout-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-layout-service-override/-/monaco-vscode-layout-service-override-8.0.3.tgz", + "integrity": "sha512-/so4xozWoEzbqAVIh6iXosNwA7pTpcmj9uBYCXVrjO4CHxXM9qKf9+ndidO9gwGIoiWYFBUJB6XTQOnCLMRqng==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", - "dev": true, + "node_modules/@codingame/monaco-vscode-language-pack-ja/node_modules/@codingame/monaco-vscode-quickaccess-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-quickaccess-service-override/-/monaco-vscode-quickaccess-service-override-8.0.3.tgz", + "integrity": "sha512-HNFPcQlXEn38abnfSR4JWa5oeYLsC7cCA0eqb6LkpeCMTODlP44mdahaHHWadELOpaD5ZhV4KO+GY2YcgmVXIA==", + "license": "MIT", "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "dev": true, + "node_modules/@codingame/monaco-vscode-language-pack-ja/node_modules/vscode": { + "name": "@codingame/monaco-vscode-api", + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-api/-/monaco-vscode-api-8.0.3.tgz", + "integrity": "sha512-7Lnha7sspHaZq9OKdvN26mrXtaMxKvK2hri7wLNT5Z/SadM8Pj6CmCv/aDD4UpSaGfc7f6OFwsiqBmsbOYpjIA==", + "license": "MIT", "dependencies": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=8.0.0" + "@codingame/monaco-vscode-base-service-override": "8.0.3", + "@codingame/monaco-vscode-environment-service-override": "8.0.3", + "@codingame/monaco-vscode-extensions-service-override": "8.0.3", + "@codingame/monaco-vscode-files-service-override": "8.0.3", + "@codingame/monaco-vscode-host-service-override": "8.0.3", + "@codingame/monaco-vscode-layout-service-override": "8.0.3", + "@codingame/monaco-vscode-quickaccess-service-override": "8.0.3", + "@vscode/iconv-lite-umd": "0.7.0", + "jschardet": "3.1.3" } }, - "node_modules/css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "dev": true, - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" + "node_modules/@codingame/monaco-vscode-language-pack-ko": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-language-pack-ko/-/monaco-vscode-language-pack-ko-8.0.3.tgz", + "integrity": "sha512-KCjRcBC4F4uUlfkuaAVUijYykHFvSJMWVpBtn8LTb+Sgc+XcAdCjsWfVtegrJddsP0IP0nvxQl6yi62lezj4Gw==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true, - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" + "node_modules/@codingame/monaco-vscode-language-pack-ko/node_modules/@codingame/monaco-vscode-base-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-base-service-override/-/monaco-vscode-base-service-override-8.0.3.tgz", + "integrity": "sha512-jOK9oO2qAOFTsgIJQ2osDmUet7QpTq8eAQ0xdZp8A3laZGd48PczZ4WBAGbhHkRC6nGJPimP5cA4IJOAjN1wlw==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/cssnano": { - "version": "5.1.7", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.7.tgz", - "integrity": "sha512-pVsUV6LcTXif7lvKKW9ZrmX+rGRzxkEdJuVJcp5ftUjWITgwam5LMZOgaTvUrWPkcORBey6he7JKb4XAJvrpKg==", - "dev": true, + "node_modules/@codingame/monaco-vscode-language-pack-ko/node_modules/@codingame/monaco-vscode-environment-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-environment-service-override/-/monaco-vscode-environment-service-override-8.0.3.tgz", + "integrity": "sha512-OhZRikv3wKkocax/F9r7rZ2OHlXsFaX8cUaFWHOj4Bgj/g1FsnL/EvNUAZer9bVTzdq3a+4uZunz1jn/V5HF4g==", + "license": "MIT", "dependencies": { - "cssnano-preset-default": "^5.2.7", - "lilconfig": "^2.0.3", - "yaml": "^1.10.2" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/cssnano" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/cssnano-preset-default": { - "version": "5.2.7", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.7.tgz", - "integrity": "sha512-JiKP38ymZQK+zVKevphPzNSGHSlTI+AOwlasoSRtSVMUU285O7/6uZyd5NbW92ZHp41m0sSHe6JoZosakj63uA==", - "dev": true, - "dependencies": { - "css-declaration-sorter": "^6.2.2", - "cssnano-utils": "^3.1.0", - "postcss-calc": "^8.2.3", - "postcss-colormin": "^5.3.0", - "postcss-convert-values": "^5.1.0", - "postcss-discard-comments": "^5.1.1", - "postcss-discard-duplicates": "^5.1.0", - "postcss-discard-empty": "^5.1.1", - "postcss-discard-overridden": "^5.1.0", - "postcss-merge-longhand": "^5.1.4", - "postcss-merge-rules": "^5.1.1", - "postcss-minify-font-values": "^5.1.0", - "postcss-minify-gradients": "^5.1.1", - "postcss-minify-params": "^5.1.2", - "postcss-minify-selectors": "^5.2.0", - "postcss-normalize-charset": "^5.1.0", - "postcss-normalize-display-values": "^5.1.0", - "postcss-normalize-positions": "^5.1.0", - "postcss-normalize-repeat-style": "^5.1.0", - "postcss-normalize-string": "^5.1.0", - "postcss-normalize-timing-functions": "^5.1.0", - "postcss-normalize-unicode": "^5.1.0", - "postcss-normalize-url": "^5.1.0", - "postcss-normalize-whitespace": "^5.1.1", - "postcss-ordered-values": "^5.1.1", - "postcss-reduce-initial": "^5.1.0", - "postcss-reduce-transforms": "^5.1.0", - "postcss-svgo": "^5.1.0", - "postcss-unique-selectors": "^5.1.1" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node_modules/@codingame/monaco-vscode-language-pack-ko/node_modules/@codingame/monaco-vscode-extensions-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-extensions-service-override/-/monaco-vscode-extensions-service-override-8.0.3.tgz", + "integrity": "sha512-VEr8w7ykNNfYx6KGko03WOjaw7HcaETfQT2Eayj/u7lJX+expP6sEM2D3TGBAuHd8feepFzBuVfsL8I/ZLwS+g==", + "license": "MIT", + "dependencies": { + "@codingame/monaco-vscode-files-service-override": "8.0.3", + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/cssnano-utils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", - "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", - "dev": true, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node_modules/@codingame/monaco-vscode-language-pack-ko/node_modules/@codingame/monaco-vscode-files-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-files-service-override/-/monaco-vscode-files-service-override-8.0.3.tgz", + "integrity": "sha512-S3mAHK510EwfdN8us2/UpspBC81pMnjACNVqDAk1QGfh6xKOQ6NPUv6ri/3oF2/2zMl5keI/iihK4xwLEAAd8Q==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/csso": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", - "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", - "dev": true, + "node_modules/@codingame/monaco-vscode-language-pack-ko/node_modules/@codingame/monaco-vscode-host-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-host-service-override/-/monaco-vscode-host-service-override-8.0.3.tgz", + "integrity": "sha512-VHwFyWTkOqOT+WLB7hC4zZFoahTbcFGJW/MutlR3c5+09v2qddMm2IsxcHKbI3IbHyb4TgPgC0arV4rs1FaNWQ==", + "license": "MIT", "dependencies": { - "css-tree": "^1.1.2" - }, - "engines": { - "node": ">=8.0.0" + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, + "node_modules/@codingame/monaco-vscode-language-pack-ko/node_modules/@codingame/monaco-vscode-layout-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-layout-service-override/-/monaco-vscode-layout-service-override-8.0.3.tgz", + "integrity": "sha512-/so4xozWoEzbqAVIh6iXosNwA7pTpcmj9uBYCXVrjO4CHxXM9qKf9+ndidO9gwGIoiWYFBUJB6XTQOnCLMRqng==", + "license": "MIT", "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.10.0" + "node_modules/@codingame/monaco-vscode-language-pack-ko/node_modules/@codingame/monaco-vscode-quickaccess-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-quickaccess-service-override/-/monaco-vscode-quickaccess-service-override-8.0.3.tgz", + "integrity": "sha512-HNFPcQlXEn38abnfSR4JWa5oeYLsC7cCA0eqb6LkpeCMTODlP44mdahaHHWadELOpaD5ZhV4KO+GY2YcgmVXIA==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/decamelize-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", - "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", - "dev": true, - "peer": true, + "node_modules/@codingame/monaco-vscode-language-pack-ko/node_modules/vscode": { + "name": "@codingame/monaco-vscode-api", + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-api/-/monaco-vscode-api-8.0.3.tgz", + "integrity": "sha512-7Lnha7sspHaZq9OKdvN26mrXtaMxKvK2hri7wLNT5Z/SadM8Pj6CmCv/aDD4UpSaGfc7f6OFwsiqBmsbOYpjIA==", + "license": "MIT", "dependencies": { - "decamelize": "^1.1.0", - "map-obj": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" + "@codingame/monaco-vscode-base-service-override": "8.0.3", + "@codingame/monaco-vscode-environment-service-override": "8.0.3", + "@codingame/monaco-vscode-extensions-service-override": "8.0.3", + "@codingame/monaco-vscode-files-service-override": "8.0.3", + "@codingame/monaco-vscode-host-service-override": "8.0.3", + "@codingame/monaco-vscode-layout-service-override": "8.0.3", + "@codingame/monaco-vscode-quickaccess-service-override": "8.0.3", + "@vscode/iconv-lite-umd": "0.7.0", + "jschardet": "3.1.3" } }, - "node_modules/decamelize-keys/node_modules/map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.10.0" + "node_modules/@codingame/monaco-vscode-language-pack-pl": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-language-pack-pl/-/monaco-vscode-language-pack-pl-8.0.3.tgz", + "integrity": "sha512-IhQwg02cq0bWdSNpkV8ynFqNpRNt5TvKat5JAVYhlVmCoXq5H1D4Grlkl5Lfh7lHJArFvAm1HegXTUxLuylPSw==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true + "node_modules/@codingame/monaco-vscode-language-pack-pl/node_modules/@codingame/monaco-vscode-base-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-base-service-override/-/monaco-vscode-base-service-override-8.0.3.tgz", + "integrity": "sha512-jOK9oO2qAOFTsgIJQ2osDmUet7QpTq8eAQ0xdZp8A3laZGd48PczZ4WBAGbhHkRC6nGJPimP5cA4IJOAjN1wlw==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" + } }, - "node_modules/defined": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", - "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", - "dev": true + "node_modules/@codingame/monaco-vscode-language-pack-pl/node_modules/@codingame/monaco-vscode-environment-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-environment-service-override/-/monaco-vscode-environment-service-override-8.0.3.tgz", + "integrity": "sha512-OhZRikv3wKkocax/F9r7rZ2OHlXsFaX8cUaFWHOj4Bgj/g1FsnL/EvNUAZer9bVTzdq3a+4uZunz1jn/V5HF4g==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" + } }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true, - "engines": { - "node": ">=0.4.0" + "node_modules/@codingame/monaco-vscode-language-pack-pl/node_modules/@codingame/monaco-vscode-extensions-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-extensions-service-override/-/monaco-vscode-extensions-service-override-8.0.3.tgz", + "integrity": "sha512-VEr8w7ykNNfYx6KGko03WOjaw7HcaETfQT2Eayj/u7lJX+expP6sEM2D3TGBAuHd8feepFzBuVfsL8I/ZLwS+g==", + "license": "MIT", + "dependencies": { + "@codingame/monaco-vscode-files-service-override": "8.0.3", + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/detect-indent": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", - "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", - "dev": true, - "engines": { - "node": ">=8" + "node_modules/@codingame/monaco-vscode-language-pack-pl/node_modules/@codingame/monaco-vscode-files-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-files-service-override/-/monaco-vscode-files-service-override-8.0.3.tgz", + "integrity": "sha512-S3mAHK510EwfdN8us2/UpspBC81pMnjACNVqDAk1QGfh6xKOQ6NPUv6ri/3oF2/2zMl5keI/iihK4xwLEAAd8Q==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/detective": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz", - "integrity": "sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==", - "dev": true, + "node_modules/@codingame/monaco-vscode-language-pack-pl/node_modules/@codingame/monaco-vscode-host-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-host-service-override/-/monaco-vscode-host-service-override-8.0.3.tgz", + "integrity": "sha512-VHwFyWTkOqOT+WLB7hC4zZFoahTbcFGJW/MutlR3c5+09v2qddMm2IsxcHKbI3IbHyb4TgPgC0arV4rs1FaNWQ==", + "license": "MIT", "dependencies": { - "acorn-node": "^1.6.1", - "defined": "^1.0.0", - "minimist": "^1.1.1" - }, - "bin": { - "detective": "bin/detective.js" - }, - "engines": { - "node": ">=0.8.0" + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/didyoumean": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", - "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", - "dev": true + "node_modules/@codingame/monaco-vscode-language-pack-pl/node_modules/@codingame/monaco-vscode-layout-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-layout-service-override/-/monaco-vscode-layout-service-override-8.0.3.tgz", + "integrity": "sha512-/so4xozWoEzbqAVIh6iXosNwA7pTpcmj9uBYCXVrjO4CHxXM9qKf9+ndidO9gwGIoiWYFBUJB6XTQOnCLMRqng==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" + } }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, + "node_modules/@codingame/monaco-vscode-language-pack-pl/node_modules/@codingame/monaco-vscode-quickaccess-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-quickaccess-service-override/-/monaco-vscode-quickaccess-service-override-8.0.3.tgz", + "integrity": "sha512-HNFPcQlXEn38abnfSR4JWa5oeYLsC7cCA0eqb6LkpeCMTODlP44mdahaHHWadELOpaD5ZhV4KO+GY2YcgmVXIA==", + "license": "MIT", "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/dlv": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", - "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", - "dev": true + "node_modules/@codingame/monaco-vscode-language-pack-pl/node_modules/vscode": { + "name": "@codingame/monaco-vscode-api", + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-api/-/monaco-vscode-api-8.0.3.tgz", + "integrity": "sha512-7Lnha7sspHaZq9OKdvN26mrXtaMxKvK2hri7wLNT5Z/SadM8Pj6CmCv/aDD4UpSaGfc7f6OFwsiqBmsbOYpjIA==", + "license": "MIT", + "dependencies": { + "@codingame/monaco-vscode-base-service-override": "8.0.3", + "@codingame/monaco-vscode-environment-service-override": "8.0.3", + "@codingame/monaco-vscode-extensions-service-override": "8.0.3", + "@codingame/monaco-vscode-files-service-override": "8.0.3", + "@codingame/monaco-vscode-host-service-override": "8.0.3", + "@codingame/monaco-vscode-layout-service-override": "8.0.3", + "@codingame/monaco-vscode-quickaccess-service-override": "8.0.3", + "@vscode/iconv-lite-umd": "0.7.0", + "jschardet": "3.1.3" + } }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, + "node_modules/@codingame/monaco-vscode-language-pack-pt-br": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-language-pack-pt-br/-/monaco-vscode-language-pack-pt-br-8.0.3.tgz", + "integrity": "sha512-CdvYCyzRb1l54BgJEzAav9amVHdAx77BepxpkS7QacTkLURm4Td5A79CNHzwHUiDHPnviBY2Z9Jve/BJAksI4g==", + "license": "MIT", "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", - "dev": true, + "node_modules/@codingame/monaco-vscode-language-pack-pt-br/node_modules/@codingame/monaco-vscode-base-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-base-service-override/-/monaco-vscode-base-service-override-8.0.3.tgz", + "integrity": "sha512-jOK9oO2qAOFTsgIJQ2osDmUet7QpTq8eAQ0xdZp8A3laZGd48PczZ4WBAGbhHkRC6nGJPimP5cA4IJOAjN1wlw==", + "license": "MIT", "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ] + "node_modules/@codingame/monaco-vscode-language-pack-pt-br/node_modules/@codingame/monaco-vscode-environment-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-environment-service-override/-/monaco-vscode-environment-service-override-8.0.3.tgz", + "integrity": "sha512-OhZRikv3wKkocax/F9r7rZ2OHlXsFaX8cUaFWHOj4Bgj/g1FsnL/EvNUAZer9bVTzdq3a+4uZunz1jn/V5HF4g==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" + } }, - "node_modules/domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "dev": true, + "node_modules/@codingame/monaco-vscode-language-pack-pt-br/node_modules/@codingame/monaco-vscode-extensions-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-extensions-service-override/-/monaco-vscode-extensions-service-override-8.0.3.tgz", + "integrity": "sha512-VEr8w7ykNNfYx6KGko03WOjaw7HcaETfQT2Eayj/u7lJX+expP6sEM2D3TGBAuHd8feepFzBuVfsL8I/ZLwS+g==", + "license": "MIT", "dependencies": { - "domelementtype": "^2.2.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" + "@codingame/monaco-vscode-files-service-override": "8.0.3", + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "dev": true, + "node_modules/@codingame/monaco-vscode-language-pack-pt-br/node_modules/@codingame/monaco-vscode-files-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-files-service-override/-/monaco-vscode-files-service-override-8.0.3.tgz", + "integrity": "sha512-S3mAHK510EwfdN8us2/UpspBC81pMnjACNVqDAk1QGfh6xKOQ6NPUv6ri/3oF2/2zMl5keI/iihK4xwLEAAd8Q==", + "license": "MIT", "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/electron-to-chromium": { - "version": "1.4.129", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.129.tgz", - "integrity": "sha512-GgtN6bsDtHdtXJtlMYZWGB/uOyjZWjmRDumXTas7dGBaB9zUyCjzHet1DY2KhyHN8R0GLbzZWqm4efeddqqyRQ==", - "dev": true + "node_modules/@codingame/monaco-vscode-language-pack-pt-br/node_modules/@codingame/monaco-vscode-host-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-host-service-override/-/monaco-vscode-host-service-override-8.0.3.tgz", + "integrity": "sha512-VHwFyWTkOqOT+WLB7hC4zZFoahTbcFGJW/MutlR3c5+09v2qddMm2IsxcHKbI3IbHyb4TgPgC0arV4rs1FaNWQ==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" + } }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "node_modules/@codingame/monaco-vscode-language-pack-pt-br/node_modules/@codingame/monaco-vscode-layout-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-layout-service-override/-/monaco-vscode-layout-service-override-8.0.3.tgz", + "integrity": "sha512-/so4xozWoEzbqAVIh6iXosNwA7pTpcmj9uBYCXVrjO4CHxXM9qKf9+ndidO9gwGIoiWYFBUJB6XTQOnCLMRqng==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" + } }, - "node_modules/enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, + "node_modules/@codingame/monaco-vscode-language-pack-pt-br/node_modules/@codingame/monaco-vscode-quickaccess-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-quickaccess-service-override/-/monaco-vscode-quickaccess-service-override-8.0.3.tgz", + "integrity": "sha512-HNFPcQlXEn38abnfSR4JWa5oeYLsC7cCA0eqb6LkpeCMTODlP44mdahaHHWadELOpaD5ZhV4KO+GY2YcgmVXIA==", + "license": "MIT", "dependencies": { - "ansi-colors": "^4.1.1" - }, - "engines": { - "node": ">=8.6" + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "dev": true, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" + "node_modules/@codingame/monaco-vscode-language-pack-pt-br/node_modules/vscode": { + "name": "@codingame/monaco-vscode-api", + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-api/-/monaco-vscode-api-8.0.3.tgz", + "integrity": "sha512-7Lnha7sspHaZq9OKdvN26mrXtaMxKvK2hri7wLNT5Z/SadM8Pj6CmCv/aDD4UpSaGfc7f6OFwsiqBmsbOYpjIA==", + "license": "MIT", + "dependencies": { + "@codingame/monaco-vscode-base-service-override": "8.0.3", + "@codingame/monaco-vscode-environment-service-override": "8.0.3", + "@codingame/monaco-vscode-extensions-service-override": "8.0.3", + "@codingame/monaco-vscode-files-service-override": "8.0.3", + "@codingame/monaco-vscode-host-service-override": "8.0.3", + "@codingame/monaco-vscode-layout-service-override": "8.0.3", + "@codingame/monaco-vscode-quickaccess-service-override": "8.0.3", + "@vscode/iconv-lite-umd": "0.7.0", + "jschardet": "3.1.3" } }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "peer": true, + "node_modules/@codingame/monaco-vscode-language-pack-qps-ploc": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-language-pack-qps-ploc/-/monaco-vscode-language-pack-qps-ploc-8.0.3.tgz", + "integrity": "sha512-KeCU/g56cZcZ8rd/wfrR+cMznDLDIxDorFnXUEcr1ei31zlfpspUeJ8wAqQ+gxw56Idr70d36iSxlGCVWjwcbA==", + "license": "MIT", "dependencies": { - "is-arrayish": "^0.2.1" + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/es6-promise": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", - "integrity": "sha1-oIzd6EzNvzTQJ6FFG8kdS80ophM=", - "dev": true + "node_modules/@codingame/monaco-vscode-language-pack-qps-ploc/node_modules/@codingame/monaco-vscode-base-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-base-service-override/-/monaco-vscode-base-service-override-8.0.3.tgz", + "integrity": "sha512-jOK9oO2qAOFTsgIJQ2osDmUet7QpTq8eAQ0xdZp8A3laZGd48PczZ4WBAGbhHkRC6nGJPimP5cA4IJOAjN1wlw==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" + } }, - "node_modules/esbuild": { - "version": "0.14.38", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.38.tgz", - "integrity": "sha512-12fzJ0fsm7gVZX1YQ1InkOE5f9Tl7cgf6JPYXRJtPIoE0zkWAbHdPHVPPaLi9tYAcEBqheGzqLn/3RdTOyBfcA==", - "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "esbuild-android-64": "0.14.38", - "esbuild-android-arm64": "0.14.38", - "esbuild-darwin-64": "0.14.38", - "esbuild-darwin-arm64": "0.14.38", - "esbuild-freebsd-64": "0.14.38", - "esbuild-freebsd-arm64": "0.14.38", - "esbuild-linux-32": "0.14.38", - "esbuild-linux-64": "0.14.38", - "esbuild-linux-arm": "0.14.38", - "esbuild-linux-arm64": "0.14.38", - "esbuild-linux-mips64le": "0.14.38", - "esbuild-linux-ppc64le": "0.14.38", - "esbuild-linux-riscv64": "0.14.38", - "esbuild-linux-s390x": "0.14.38", - "esbuild-netbsd-64": "0.14.38", - "esbuild-openbsd-64": "0.14.38", - "esbuild-sunos-64": "0.14.38", - "esbuild-windows-32": "0.14.38", - "esbuild-windows-64": "0.14.38", - "esbuild-windows-arm64": "0.14.38" - } - }, - "node_modules/esbuild-android-64": { - "version": "0.14.38", - "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.38.tgz", - "integrity": "sha512-aRFxR3scRKkbmNuGAK+Gee3+yFxkTJO/cx83Dkyzo4CnQl/2zVSurtG6+G86EQIZ+w+VYngVyK7P3HyTBKu3nw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" + "node_modules/@codingame/monaco-vscode-language-pack-qps-ploc/node_modules/@codingame/monaco-vscode-environment-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-environment-service-override/-/monaco-vscode-environment-service-override-8.0.3.tgz", + "integrity": "sha512-OhZRikv3wKkocax/F9r7rZ2OHlXsFaX8cUaFWHOj4Bgj/g1FsnL/EvNUAZer9bVTzdq3a+4uZunz1jn/V5HF4g==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/esbuild-android-arm64": { - "version": "0.14.38", - "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.38.tgz", - "integrity": "sha512-L2NgQRWuHFI89IIZIlpAcINy9FvBk6xFVZ7xGdOwIm8VyhX1vNCEqUJO3DPSSy945Gzdg98cxtNt8Grv1CsyhA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" + "node_modules/@codingame/monaco-vscode-language-pack-qps-ploc/node_modules/@codingame/monaco-vscode-extensions-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-extensions-service-override/-/monaco-vscode-extensions-service-override-8.0.3.tgz", + "integrity": "sha512-VEr8w7ykNNfYx6KGko03WOjaw7HcaETfQT2Eayj/u7lJX+expP6sEM2D3TGBAuHd8feepFzBuVfsL8I/ZLwS+g==", + "license": "MIT", + "dependencies": { + "@codingame/monaco-vscode-files-service-override": "8.0.3", + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/esbuild-darwin-64": { - "version": "0.14.38", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.38.tgz", - "integrity": "sha512-5JJvgXkX87Pd1Og0u/NJuO7TSqAikAcQQ74gyJ87bqWRVeouky84ICoV4sN6VV53aTW+NE87qLdGY4QA2S7KNA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" + "node_modules/@codingame/monaco-vscode-language-pack-qps-ploc/node_modules/@codingame/monaco-vscode-files-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-files-service-override/-/monaco-vscode-files-service-override-8.0.3.tgz", + "integrity": "sha512-S3mAHK510EwfdN8us2/UpspBC81pMnjACNVqDAk1QGfh6xKOQ6NPUv6ri/3oF2/2zMl5keI/iihK4xwLEAAd8Q==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/esbuild-darwin-arm64": { - "version": "0.14.38", - "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.38.tgz", - "integrity": "sha512-eqF+OejMI3mC5Dlo9Kdq/Ilbki9sQBw3QlHW3wjLmsLh+quNfHmGMp3Ly1eWm981iGBMdbtSS9+LRvR2T8B3eQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" + "node_modules/@codingame/monaco-vscode-language-pack-qps-ploc/node_modules/@codingame/monaco-vscode-host-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-host-service-override/-/monaco-vscode-host-service-override-8.0.3.tgz", + "integrity": "sha512-VHwFyWTkOqOT+WLB7hC4zZFoahTbcFGJW/MutlR3c5+09v2qddMm2IsxcHKbI3IbHyb4TgPgC0arV4rs1FaNWQ==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/esbuild-freebsd-64": { - "version": "0.14.38", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.38.tgz", - "integrity": "sha512-epnPbhZUt93xV5cgeY36ZxPXDsQeO55DppzsIgWM8vgiG/Rz+qYDLmh5ts3e+Ln1wA9dQ+nZmVHw+RjaW3I5Ig==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" + "node_modules/@codingame/monaco-vscode-language-pack-qps-ploc/node_modules/@codingame/monaco-vscode-layout-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-layout-service-override/-/monaco-vscode-layout-service-override-8.0.3.tgz", + "integrity": "sha512-/so4xozWoEzbqAVIh6iXosNwA7pTpcmj9uBYCXVrjO4CHxXM9qKf9+ndidO9gwGIoiWYFBUJB6XTQOnCLMRqng==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/esbuild-freebsd-arm64": { - "version": "0.14.38", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.38.tgz", - "integrity": "sha512-/9icXUYJWherhk+y5fjPI5yNUdFPtXHQlwP7/K/zg8t8lQdHVj20SqU9/udQmeUo5pDFHMYzcEFfJqgOVeKNNQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" + "node_modules/@codingame/monaco-vscode-language-pack-qps-ploc/node_modules/@codingame/monaco-vscode-quickaccess-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-quickaccess-service-override/-/monaco-vscode-quickaccess-service-override-8.0.3.tgz", + "integrity": "sha512-HNFPcQlXEn38abnfSR4JWa5oeYLsC7cCA0eqb6LkpeCMTODlP44mdahaHHWadELOpaD5ZhV4KO+GY2YcgmVXIA==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/esbuild-linux-32": { - "version": "0.14.38", - "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.38.tgz", - "integrity": "sha512-QfgfeNHRFvr2XeHFzP8kOZVnal3QvST3A0cgq32ZrHjSMFTdgXhMhmWdKzRXP/PKcfv3e2OW9tT9PpcjNvaq6g==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" + "node_modules/@codingame/monaco-vscode-language-pack-qps-ploc/node_modules/vscode": { + "name": "@codingame/monaco-vscode-api", + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-api/-/monaco-vscode-api-8.0.3.tgz", + "integrity": "sha512-7Lnha7sspHaZq9OKdvN26mrXtaMxKvK2hri7wLNT5Z/SadM8Pj6CmCv/aDD4UpSaGfc7f6OFwsiqBmsbOYpjIA==", + "license": "MIT", + "dependencies": { + "@codingame/monaco-vscode-base-service-override": "8.0.3", + "@codingame/monaco-vscode-environment-service-override": "8.0.3", + "@codingame/monaco-vscode-extensions-service-override": "8.0.3", + "@codingame/monaco-vscode-files-service-override": "8.0.3", + "@codingame/monaco-vscode-host-service-override": "8.0.3", + "@codingame/monaco-vscode-layout-service-override": "8.0.3", + "@codingame/monaco-vscode-quickaccess-service-override": "8.0.3", + "@vscode/iconv-lite-umd": "0.7.0", + "jschardet": "3.1.3" } }, - "node_modules/esbuild-linux-64": { - "version": "0.14.38", - "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.38.tgz", - "integrity": "sha512-uuZHNmqcs+Bj1qiW9k/HZU3FtIHmYiuxZ/6Aa+/KHb/pFKr7R3aVqvxlAudYI9Fw3St0VCPfv7QBpUITSmBR1Q==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" + "node_modules/@codingame/monaco-vscode-language-pack-ru": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-language-pack-ru/-/monaco-vscode-language-pack-ru-8.0.3.tgz", + "integrity": "sha512-xSEu4ubhtYMlK7RrAyoNFwDbbAhY3S754sxxNeQpbyt7+6JWHNpSdWBTOSAprQyQf37taL/ceQaJQoPYwSAyjg==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/esbuild-linux-arm": { - "version": "0.14.38", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.38.tgz", - "integrity": "sha512-FiFvQe8J3VKTDXG01JbvoVRXQ0x6UZwyrU4IaLBZeq39Bsbatd94Fuc3F1RGqPF5RbIWW7RvkVQjn79ejzysnA==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" + "node_modules/@codingame/monaco-vscode-language-pack-ru/node_modules/@codingame/monaco-vscode-base-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-base-service-override/-/monaco-vscode-base-service-override-8.0.3.tgz", + "integrity": "sha512-jOK9oO2qAOFTsgIJQ2osDmUet7QpTq8eAQ0xdZp8A3laZGd48PczZ4WBAGbhHkRC6nGJPimP5cA4IJOAjN1wlw==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/esbuild-linux-arm64": { - "version": "0.14.38", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.38.tgz", - "integrity": "sha512-HlMGZTEsBrXrivr64eZ/EO0NQM8H8DuSENRok9d+Jtvq8hOLzrxfsAT9U94K3KOGk2XgCmkaI2KD8hX7F97lvA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" + "node_modules/@codingame/monaco-vscode-language-pack-ru/node_modules/@codingame/monaco-vscode-environment-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-environment-service-override/-/monaco-vscode-environment-service-override-8.0.3.tgz", + "integrity": "sha512-OhZRikv3wKkocax/F9r7rZ2OHlXsFaX8cUaFWHOj4Bgj/g1FsnL/EvNUAZer9bVTzdq3a+4uZunz1jn/V5HF4g==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/esbuild-linux-mips64le": { - "version": "0.14.38", - "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.38.tgz", - "integrity": "sha512-qd1dLf2v7QBiI5wwfil9j0HG/5YMFBAmMVmdeokbNAMbcg49p25t6IlJFXAeLzogv1AvgaXRXvgFNhScYEUXGQ==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" + "node_modules/@codingame/monaco-vscode-language-pack-ru/node_modules/@codingame/monaco-vscode-extensions-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-extensions-service-override/-/monaco-vscode-extensions-service-override-8.0.3.tgz", + "integrity": "sha512-VEr8w7ykNNfYx6KGko03WOjaw7HcaETfQT2Eayj/u7lJX+expP6sEM2D3TGBAuHd8feepFzBuVfsL8I/ZLwS+g==", + "license": "MIT", + "dependencies": { + "@codingame/monaco-vscode-files-service-override": "8.0.3", + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/esbuild-linux-ppc64le": { - "version": "0.14.38", - "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.38.tgz", - "integrity": "sha512-mnbEm7o69gTl60jSuK+nn+pRsRHGtDPfzhrqEUXyCl7CTOCLtWN2bhK8bgsdp6J/2NyS/wHBjs1x8aBWwP2X9Q==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" + "node_modules/@codingame/monaco-vscode-language-pack-ru/node_modules/@codingame/monaco-vscode-files-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-files-service-override/-/monaco-vscode-files-service-override-8.0.3.tgz", + "integrity": "sha512-S3mAHK510EwfdN8us2/UpspBC81pMnjACNVqDAk1QGfh6xKOQ6NPUv6ri/3oF2/2zMl5keI/iihK4xwLEAAd8Q==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/esbuild-linux-riscv64": { - "version": "0.14.38", - "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.38.tgz", - "integrity": "sha512-+p6YKYbuV72uikChRk14FSyNJZ4WfYkffj6Af0/Tw63/6TJX6TnIKE+6D3xtEc7DeDth1fjUOEqm+ApKFXbbVQ==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" + "node_modules/@codingame/monaco-vscode-language-pack-ru/node_modules/@codingame/monaco-vscode-host-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-host-service-override/-/monaco-vscode-host-service-override-8.0.3.tgz", + "integrity": "sha512-VHwFyWTkOqOT+WLB7hC4zZFoahTbcFGJW/MutlR3c5+09v2qddMm2IsxcHKbI3IbHyb4TgPgC0arV4rs1FaNWQ==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/esbuild-linux-s390x": { - "version": "0.14.38", - "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.38.tgz", - "integrity": "sha512-0zUsiDkGJiMHxBQ7JDU8jbaanUY975CdOW1YDrurjrM0vWHfjv9tLQsW9GSyEb/heSK1L5gaweRjzfUVBFoybQ==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" + "node_modules/@codingame/monaco-vscode-language-pack-ru/node_modules/@codingame/monaco-vscode-layout-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-layout-service-override/-/monaco-vscode-layout-service-override-8.0.3.tgz", + "integrity": "sha512-/so4xozWoEzbqAVIh6iXosNwA7pTpcmj9uBYCXVrjO4CHxXM9qKf9+ndidO9gwGIoiWYFBUJB6XTQOnCLMRqng==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/esbuild-netbsd-64": { - "version": "0.14.38", - "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.38.tgz", - "integrity": "sha512-cljBAApVwkpnJZfnRVThpRBGzCi+a+V9Ofb1fVkKhtrPLDYlHLrSYGtmnoTVWDQdU516qYI8+wOgcGZ4XIZh0Q==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" + "node_modules/@codingame/monaco-vscode-language-pack-ru/node_modules/@codingame/monaco-vscode-quickaccess-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-quickaccess-service-override/-/monaco-vscode-quickaccess-service-override-8.0.3.tgz", + "integrity": "sha512-HNFPcQlXEn38abnfSR4JWa5oeYLsC7cCA0eqb6LkpeCMTODlP44mdahaHHWadELOpaD5ZhV4KO+GY2YcgmVXIA==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/esbuild-openbsd-64": { - "version": "0.14.38", - "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.38.tgz", - "integrity": "sha512-CDswYr2PWPGEPpLDUO50mL3WO/07EMjnZDNKpmaxUPsrW+kVM3LoAqr/CE8UbzugpEiflYqJsGPLirThRB18IQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" + "node_modules/@codingame/monaco-vscode-language-pack-ru/node_modules/vscode": { + "name": "@codingame/monaco-vscode-api", + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-api/-/monaco-vscode-api-8.0.3.tgz", + "integrity": "sha512-7Lnha7sspHaZq9OKdvN26mrXtaMxKvK2hri7wLNT5Z/SadM8Pj6CmCv/aDD4UpSaGfc7f6OFwsiqBmsbOYpjIA==", + "license": "MIT", + "dependencies": { + "@codingame/monaco-vscode-base-service-override": "8.0.3", + "@codingame/monaco-vscode-environment-service-override": "8.0.3", + "@codingame/monaco-vscode-extensions-service-override": "8.0.3", + "@codingame/monaco-vscode-files-service-override": "8.0.3", + "@codingame/monaco-vscode-host-service-override": "8.0.3", + "@codingame/monaco-vscode-layout-service-override": "8.0.3", + "@codingame/monaco-vscode-quickaccess-service-override": "8.0.3", + "@vscode/iconv-lite-umd": "0.7.0", + "jschardet": "3.1.3" } }, - "node_modules/esbuild-sunos-64": { - "version": "0.14.38", - "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.38.tgz", - "integrity": "sha512-2mfIoYW58gKcC3bck0j7lD3RZkqYA7MmujFYmSn9l6TiIcAMpuEvqksO+ntBgbLep/eyjpgdplF7b+4T9VJGOA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" + "node_modules/@codingame/monaco-vscode-language-pack-tr": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-language-pack-tr/-/monaco-vscode-language-pack-tr-8.0.3.tgz", + "integrity": "sha512-slfG1d0og8h7duUh15BFxNQTNEEg0YguPwHxumJoMkzBnVQZPNv5ZCG3uKgy3pfpneArh/9B4jvlLzhpjwJHXw==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/esbuild-windows-32": { - "version": "0.14.38", - "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.38.tgz", - "integrity": "sha512-L2BmEeFZATAvU+FJzJiRLFUP+d9RHN+QXpgaOrs2klshoAm1AE6Us4X6fS9k33Uy5SzScn2TpcgecbqJza1Hjw==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" + "node_modules/@codingame/monaco-vscode-language-pack-tr/node_modules/@codingame/monaco-vscode-base-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-base-service-override/-/monaco-vscode-base-service-override-8.0.3.tgz", + "integrity": "sha512-jOK9oO2qAOFTsgIJQ2osDmUet7QpTq8eAQ0xdZp8A3laZGd48PczZ4WBAGbhHkRC6nGJPimP5cA4IJOAjN1wlw==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/esbuild-windows-64": { - "version": "0.14.38", - "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.38.tgz", - "integrity": "sha512-Khy4wVmebnzue8aeSXLC+6clo/hRYeNIm0DyikoEqX+3w3rcvrhzpoix0S+MF9vzh6JFskkIGD7Zx47ODJNyCw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" + "node_modules/@codingame/monaco-vscode-language-pack-tr/node_modules/@codingame/monaco-vscode-environment-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-environment-service-override/-/monaco-vscode-environment-service-override-8.0.3.tgz", + "integrity": "sha512-OhZRikv3wKkocax/F9r7rZ2OHlXsFaX8cUaFWHOj4Bgj/g1FsnL/EvNUAZer9bVTzdq3a+4uZunz1jn/V5HF4g==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/esbuild-windows-arm64": { - "version": "0.14.38", - "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.38.tgz", - "integrity": "sha512-k3FGCNmHBkqdJXuJszdWciAH77PukEyDsdIryEHn9cKLQFxzhT39dSumeTuggaQcXY57UlmLGIkklWZo2qzHpw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" + "node_modules/@codingame/monaco-vscode-language-pack-tr/node_modules/@codingame/monaco-vscode-extensions-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-extensions-service-override/-/monaco-vscode-extensions-service-override-8.0.3.tgz", + "integrity": "sha512-VEr8w7ykNNfYx6KGko03WOjaw7HcaETfQT2Eayj/u7lJX+expP6sEM2D3TGBAuHd8feepFzBuVfsL8I/ZLwS+g==", + "license": "MIT", + "dependencies": { + "@codingame/monaco-vscode-files-service-override": "8.0.3", + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, - "engines": { - "node": ">=6" + "node_modules/@codingame/monaco-vscode-language-pack-tr/node_modules/@codingame/monaco-vscode-files-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-files-service-override/-/monaco-vscode-files-service-override-8.0.3.tgz", + "integrity": "sha512-S3mAHK510EwfdN8us2/UpspBC81pMnjACNVqDAk1QGfh6xKOQ6NPUv6ri/3oF2/2zMl5keI/iihK4xwLEAAd8Q==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node_modules/@codingame/monaco-vscode-language-pack-tr/node_modules/@codingame/monaco-vscode-host-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-host-service-override/-/monaco-vscode-host-service-override-8.0.3.tgz", + "integrity": "sha512-VHwFyWTkOqOT+WLB7hC4zZFoahTbcFGJW/MutlR3c5+09v2qddMm2IsxcHKbI3IbHyb4TgPgC0arV4rs1FaNWQ==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/eslint": { - "version": "7.32.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", - "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", - "dev": true, + "node_modules/@codingame/monaco-vscode-language-pack-tr/node_modules/@codingame/monaco-vscode-layout-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-layout-service-override/-/monaco-vscode-layout-service-override-8.0.3.tgz", + "integrity": "sha512-/so4xozWoEzbqAVIh6iXosNwA7pTpcmj9uBYCXVrjO4CHxXM9qKf9+ndidO9gwGIoiWYFBUJB6XTQOnCLMRqng==", + "license": "MIT", "dependencies": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.3", - "@humanwhocodes/config-array": "^0.5.0", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.1.2", - "globals": "^13.6.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "table": "^6.0.9", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/eslint-config-prettier": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", - "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", - "dev": true, - "bin": { - "eslint-config-prettier": "bin/cli.js" - }, - "peerDependencies": { - "eslint": ">=7.0.0" + "node_modules/@codingame/monaco-vscode-language-pack-tr/node_modules/@codingame/monaco-vscode-quickaccess-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-quickaccess-service-override/-/monaco-vscode-quickaccess-service-override-8.0.3.tgz", + "integrity": "sha512-HNFPcQlXEn38abnfSR4JWa5oeYLsC7cCA0eqb6LkpeCMTODlP44mdahaHHWadELOpaD5ZhV4KO+GY2YcgmVXIA==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/eslint-plugin-svelte3": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-svelte3/-/eslint-plugin-svelte3-3.4.1.tgz", - "integrity": "sha512-7p59WG8qV8L6wLdl4d/c3mdjkgVglQCdv5XOTk/iNPBKXuuV+Q0eFP5Wa6iJd/G2M1qR3BkLPEzaANOqKAZczw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "eslint": ">=6.0.0", - "svelte": "^3.2.0" + "node_modules/@codingame/monaco-vscode-language-pack-tr/node_modules/vscode": { + "name": "@codingame/monaco-vscode-api", + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-api/-/monaco-vscode-api-8.0.3.tgz", + "integrity": "sha512-7Lnha7sspHaZq9OKdvN26mrXtaMxKvK2hri7wLNT5Z/SadM8Pj6CmCv/aDD4UpSaGfc7f6OFwsiqBmsbOYpjIA==", + "license": "MIT", + "dependencies": { + "@codingame/monaco-vscode-base-service-override": "8.0.3", + "@codingame/monaco-vscode-environment-service-override": "8.0.3", + "@codingame/monaco-vscode-extensions-service-override": "8.0.3", + "@codingame/monaco-vscode-files-service-override": "8.0.3", + "@codingame/monaco-vscode-host-service-override": "8.0.3", + "@codingame/monaco-vscode-layout-service-override": "8.0.3", + "@codingame/monaco-vscode-quickaccess-service-override": "8.0.3", + "@vscode/iconv-lite-umd": "0.7.0", + "jschardet": "3.1.3" } }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, + "node_modules/@codingame/monaco-vscode-language-pack-zh-hans": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-language-pack-zh-hans/-/monaco-vscode-language-pack-zh-hans-8.0.3.tgz", + "integrity": "sha512-vKDZUgm5sgsGn6Bipoo8BWgPLkkhSAza/fAcI9HHqfk1MO9RX0ES/HAVn+FGrWHSvQi4Z5fNUNBq0hgzVnZLFQ==", + "license": "MIT", "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, + "node_modules/@codingame/monaco-vscode-language-pack-zh-hans/node_modules/@codingame/monaco-vscode-base-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-base-service-override/-/monaco-vscode-base-service-override-8.0.3.tgz", + "integrity": "sha512-jOK9oO2qAOFTsgIJQ2osDmUet7QpTq8eAQ0xdZp8A3laZGd48PczZ4WBAGbhHkRC6nGJPimP5cA4IJOAjN1wlw==", + "license": "MIT", "dependencies": { - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=5" + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, - "engines": { - "node": ">=10" + "node_modules/@codingame/monaco-vscode-language-pack-zh-hans/node_modules/@codingame/monaco-vscode-environment-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-environment-service-override/-/monaco-vscode-environment-service-override-8.0.3.tgz", + "integrity": "sha512-OhZRikv3wKkocax/F9r7rZ2OHlXsFaX8cUaFWHOj4Bgj/g1FsnL/EvNUAZer9bVTzdq3a+4uZunz1jn/V5HF4g==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/eslint/node_modules/eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, + "node_modules/@codingame/monaco-vscode-language-pack-zh-hans/node_modules/@codingame/monaco-vscode-extensions-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-extensions-service-override/-/monaco-vscode-extensions-service-override-8.0.3.tgz", + "integrity": "sha512-VEr8w7ykNNfYx6KGko03WOjaw7HcaETfQT2Eayj/u7lJX+expP6sEM2D3TGBAuHd8feepFzBuVfsL8I/ZLwS+g==", + "license": "MIT", "dependencies": { - "eslint-visitor-keys": "^1.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" + "@codingame/monaco-vscode-files-service-override": "8.0.3", + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/eslint/node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true, - "engines": { - "node": ">=4" + "node_modules/@codingame/monaco-vscode-language-pack-zh-hans/node_modules/@codingame/monaco-vscode-files-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-files-service-override/-/monaco-vscode-files-service-override-8.0.3.tgz", + "integrity": "sha512-S3mAHK510EwfdN8us2/UpspBC81pMnjACNVqDAk1QGfh6xKOQ6NPUv6ri/3oF2/2zMl5keI/iihK4xwLEAAd8Q==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/eslint/node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true, - "engines": { - "node": ">= 4" + "node_modules/@codingame/monaco-vscode-language-pack-zh-hans/node_modules/@codingame/monaco-vscode-host-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-host-service-override/-/monaco-vscode-host-service-override-8.0.3.tgz", + "integrity": "sha512-VHwFyWTkOqOT+WLB7hC4zZFoahTbcFGJW/MutlR3c5+09v2qddMm2IsxcHKbI3IbHyb4TgPgC0arV4rs1FaNWQ==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/espree": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", - "dev": true, + "node_modules/@codingame/monaco-vscode-language-pack-zh-hans/node_modules/@codingame/monaco-vscode-layout-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-layout-service-override/-/monaco-vscode-layout-service-override-8.0.3.tgz", + "integrity": "sha512-/so4xozWoEzbqAVIh6iXosNwA7pTpcmj9uBYCXVrjO4CHxXM9qKf9+ndidO9gwGIoiWYFBUJB6XTQOnCLMRqng==", + "license": "MIT", "dependencies": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/espree/node_modules/eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true, - "engines": { - "node": ">=4" + "node_modules/@codingame/monaco-vscode-language-pack-zh-hans/node_modules/@codingame/monaco-vscode-quickaccess-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-quickaccess-service-override/-/monaco-vscode-quickaccess-service-override-8.0.3.tgz", + "integrity": "sha512-HNFPcQlXEn38abnfSR4JWa5oeYLsC7cCA0eqb6LkpeCMTODlP44mdahaHHWadELOpaD5ZhV4KO+GY2YcgmVXIA==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" + "node_modules/@codingame/monaco-vscode-language-pack-zh-hans/node_modules/vscode": { + "name": "@codingame/monaco-vscode-api", + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-api/-/monaco-vscode-api-8.0.3.tgz", + "integrity": "sha512-7Lnha7sspHaZq9OKdvN26mrXtaMxKvK2hri7wLNT5Z/SadM8Pj6CmCv/aDD4UpSaGfc7f6OFwsiqBmsbOYpjIA==", + "license": "MIT", + "dependencies": { + "@codingame/monaco-vscode-base-service-override": "8.0.3", + "@codingame/monaco-vscode-environment-service-override": "8.0.3", + "@codingame/monaco-vscode-extensions-service-override": "8.0.3", + "@codingame/monaco-vscode-files-service-override": "8.0.3", + "@codingame/monaco-vscode-host-service-override": "8.0.3", + "@codingame/monaco-vscode-layout-service-override": "8.0.3", + "@codingame/monaco-vscode-quickaccess-service-override": "8.0.3", + "@vscode/iconv-lite-umd": "0.7.0", + "jschardet": "3.1.3" } }, - "node_modules/esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, + "node_modules/@codingame/monaco-vscode-language-pack-zh-hant": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-language-pack-zh-hant/-/monaco-vscode-language-pack-zh-hant-8.0.3.tgz", + "integrity": "sha512-Oqn9VmavmqWMCOno0ZAXzqb0Mepq6+21mMHVqEe4sWc6Fr4zM+cYx9h60y7C1leVUc3UDd0qbMYEVElxDVzyKQ==", + "license": "MIT", "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/esquery/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" + "node_modules/@codingame/monaco-vscode-language-pack-zh-hant/node_modules/@codingame/monaco-vscode-base-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-base-service-override/-/monaco-vscode-base-service-override-8.0.3.tgz", + "integrity": "sha512-jOK9oO2qAOFTsgIJQ2osDmUet7QpTq8eAQ0xdZp8A3laZGd48PczZ4WBAGbhHkRC6nGJPimP5cA4IJOAjN1wlw==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, + "node_modules/@codingame/monaco-vscode-language-pack-zh-hant/node_modules/@codingame/monaco-vscode-environment-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-environment-service-override/-/monaco-vscode-environment-service-override-8.0.3.tgz", + "integrity": "sha512-OhZRikv3wKkocax/F9r7rZ2OHlXsFaX8cUaFWHOj4Bgj/g1FsnL/EvNUAZer9bVTzdq3a+4uZunz1jn/V5HF4g==", + "license": "MIT", "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" + "node_modules/@codingame/monaco-vscode-language-pack-zh-hant/node_modules/@codingame/monaco-vscode-extensions-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-extensions-service-override/-/monaco-vscode-extensions-service-override-8.0.3.tgz", + "integrity": "sha512-VEr8w7ykNNfYx6KGko03WOjaw7HcaETfQT2Eayj/u7lJX+expP6sEM2D3TGBAuHd8feepFzBuVfsL8I/ZLwS+g==", + "license": "MIT", + "dependencies": { + "@codingame/monaco-vscode-files-service-override": "8.0.3", + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" + "node_modules/@codingame/monaco-vscode-language-pack-zh-hant/node_modules/@codingame/monaco-vscode-files-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-files-service-override/-/monaco-vscode-files-service-override-8.0.3.tgz", + "integrity": "sha512-S3mAHK510EwfdN8us2/UpspBC81pMnjACNVqDAk1QGfh6xKOQ6NPUv6ri/3oF2/2zMl5keI/iihK4xwLEAAd8Q==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true + "node_modules/@codingame/monaco-vscode-language-pack-zh-hant/node_modules/@codingame/monaco-vscode-host-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-host-service-override/-/monaco-vscode-host-service-override-8.0.3.tgz", + "integrity": "sha512-VHwFyWTkOqOT+WLB7hC4zZFoahTbcFGJW/MutlR3c5+09v2qddMm2IsxcHKbI3IbHyb4TgPgC0arV4rs1FaNWQ==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" + } }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "engines": { - "node": ">=0.10.0" + "node_modules/@codingame/monaco-vscode-language-pack-zh-hant/node_modules/@codingame/monaco-vscode-layout-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-layout-service-override/-/monaco-vscode-layout-service-override-8.0.3.tgz", + "integrity": "sha512-/so4xozWoEzbqAVIh6iXosNwA7pTpcmj9uBYCXVrjO4CHxXM9qKf9+ndidO9gwGIoiWYFBUJB6XTQOnCLMRqng==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", - "dev": true, - "engines": { - "node": ">=6" + "node_modules/@codingame/monaco-vscode-language-pack-zh-hant/node_modules/@codingame/monaco-vscode-quickaccess-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-quickaccess-service-override/-/monaco-vscode-quickaccess-service-override-8.0.3.tgz", + "integrity": "sha512-HNFPcQlXEn38abnfSR4JWa5oeYLsC7cCA0eqb6LkpeCMTODlP44mdahaHHWadELOpaD5ZhV4KO+GY2YcgmVXIA==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/execall": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/execall/-/execall-2.0.0.tgz", - "integrity": "sha512-0FU2hZ5Hh6iQnarpRtQurM/aAvp3RIbfvgLHrcqJYzhXyV2KFruhuChf9NC6waAhiUR7FFtlugkI4p7f2Fqlow==", - "dev": true, - "peer": true, + "node_modules/@codingame/monaco-vscode-language-pack-zh-hant/node_modules/vscode": { + "name": "@codingame/monaco-vscode-api", + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-api/-/monaco-vscode-api-8.0.3.tgz", + "integrity": "sha512-7Lnha7sspHaZq9OKdvN26mrXtaMxKvK2hri7wLNT5Z/SadM8Pj6CmCv/aDD4UpSaGfc7f6OFwsiqBmsbOYpjIA==", + "license": "MIT", "dependencies": { - "clone-regexp": "^2.1.0" - }, - "engines": { - "node": ">=8" + "@codingame/monaco-vscode-base-service-override": "8.0.3", + "@codingame/monaco-vscode-environment-service-override": "8.0.3", + "@codingame/monaco-vscode-extensions-service-override": "8.0.3", + "@codingame/monaco-vscode-files-service-override": "8.0.3", + "@codingame/monaco-vscode-host-service-override": "8.0.3", + "@codingame/monaco-vscode-layout-service-override": "8.0.3", + "@codingame/monaco-vscode-quickaccess-service-override": "8.0.3", + "@vscode/iconv-lite-umd": "0.7.0", + "jschardet": "3.1.3" } }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true + "node_modules/@codingame/monaco-vscode-languages-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-languages-service-override/-/monaco-vscode-languages-service-override-8.0.3.tgz", + "integrity": "sha512-sixRGBScbhW24xKLn9RXPiY406MWL/trAWAhyyAeuFPL59eUYewaFiPxGBO7fJ5sx6iE8UaRKo4qxhtRraDbxw==", + "license": "MIT", + "dependencies": { + "@codingame/monaco-vscode-files-service-override": "8.0.3", + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" + } }, - "node_modules/fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", - "dev": true, + "node_modules/@codingame/monaco-vscode-languages-service-override/node_modules/@codingame/monaco-vscode-base-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-base-service-override/-/monaco-vscode-base-service-override-8.0.3.tgz", + "integrity": "sha512-jOK9oO2qAOFTsgIJQ2osDmUet7QpTq8eAQ0xdZp8A3laZGd48PczZ4WBAGbhHkRC6nGJPimP5cA4IJOAjN1wlw==", + "license": "MIT", "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true + "node_modules/@codingame/monaco-vscode-languages-service-override/node_modules/@codingame/monaco-vscode-environment-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-environment-service-override/-/monaco-vscode-environment-service-override-8.0.3.tgz", + "integrity": "sha512-OhZRikv3wKkocax/F9r7rZ2OHlXsFaX8cUaFWHOj4Bgj/g1FsnL/EvNUAZer9bVTzdq3a+4uZunz1jn/V5HF4g==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" + } }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true + "node_modules/@codingame/monaco-vscode-languages-service-override/node_modules/@codingame/monaco-vscode-extensions-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-extensions-service-override/-/monaco-vscode-extensions-service-override-8.0.3.tgz", + "integrity": "sha512-VEr8w7ykNNfYx6KGko03WOjaw7HcaETfQT2Eayj/u7lJX+expP6sEM2D3TGBAuHd8feepFzBuVfsL8I/ZLwS+g==", + "license": "MIT", + "dependencies": { + "@codingame/monaco-vscode-files-service-override": "8.0.3", + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" + } }, - "node_modules/fastest-levenshtein": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", - "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==", - "dev": true, - "peer": true + "node_modules/@codingame/monaco-vscode-languages-service-override/node_modules/@codingame/monaco-vscode-files-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-files-service-override/-/monaco-vscode-files-service-override-8.0.3.tgz", + "integrity": "sha512-S3mAHK510EwfdN8us2/UpspBC81pMnjACNVqDAk1QGfh6xKOQ6NPUv6ri/3oF2/2zMl5keI/iihK4xwLEAAd8Q==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" + } }, - "node_modules/fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dev": true, + "node_modules/@codingame/monaco-vscode-languages-service-override/node_modules/@codingame/monaco-vscode-host-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-host-service-override/-/monaco-vscode-host-service-override-8.0.3.tgz", + "integrity": "sha512-VHwFyWTkOqOT+WLB7hC4zZFoahTbcFGJW/MutlR3c5+09v2qddMm2IsxcHKbI3IbHyb4TgPgC0arV4rs1FaNWQ==", + "license": "MIT", "dependencies": { - "reusify": "^1.0.4" + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, + "node_modules/@codingame/monaco-vscode-languages-service-override/node_modules/@codingame/monaco-vscode-layout-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-layout-service-override/-/monaco-vscode-layout-service-override-8.0.3.tgz", + "integrity": "sha512-/so4xozWoEzbqAVIh6iXosNwA7pTpcmj9uBYCXVrjO4CHxXM9qKf9+ndidO9gwGIoiWYFBUJB6XTQOnCLMRqng==", + "license": "MIT", "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, + "node_modules/@codingame/monaco-vscode-languages-service-override/node_modules/@codingame/monaco-vscode-quickaccess-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-quickaccess-service-override/-/monaco-vscode-quickaccess-service-override-8.0.3.tgz", + "integrity": "sha512-HNFPcQlXEn38abnfSR4JWa5oeYLsC7cCA0eqb6LkpeCMTODlP44mdahaHHWadELOpaD5ZhV4KO+GY2YcgmVXIA==", + "license": "MIT", "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "peer": true, + "node_modules/@codingame/monaco-vscode-languages-service-override/node_modules/vscode": { + "name": "@codingame/monaco-vscode-api", + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-api/-/monaco-vscode-api-8.0.3.tgz", + "integrity": "sha512-7Lnha7sspHaZq9OKdvN26mrXtaMxKvK2hri7wLNT5Z/SadM8Pj6CmCv/aDD4UpSaGfc7f6OFwsiqBmsbOYpjIA==", + "license": "MIT", "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" + "@codingame/monaco-vscode-base-service-override": "8.0.3", + "@codingame/monaco-vscode-environment-service-override": "8.0.3", + "@codingame/monaco-vscode-extensions-service-override": "8.0.3", + "@codingame/monaco-vscode-files-service-override": "8.0.3", + "@codingame/monaco-vscode-host-service-override": "8.0.3", + "@codingame/monaco-vscode-layout-service-override": "8.0.3", + "@codingame/monaco-vscode-quickaccess-service-override": "8.0.3", + "@vscode/iconv-lite-umd": "0.7.0", + "jschardet": "3.1.3" } }, - "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, + "node_modules/@codingame/monaco-vscode-layout-service-override": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-layout-service-override/-/monaco-vscode-layout-service-override-8.0.2.tgz", + "integrity": "sha512-guwDg1G8qkf6I3ArpWuqtdsLkxYuAR3GxfhtzYIFLLQtrPrsOeyPXWecrYKslTt/7fWEY4QyMis/eIq5us5bAg==", + "license": "MIT", "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" + "vscode": "npm:@codingame/monaco-vscode-api@8.0.2" } }, - "node_modules/flatted": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz", - "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==", - "dev": true + "node_modules/@codingame/monaco-vscode-lifecycle-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-lifecycle-service-override/-/monaco-vscode-lifecycle-service-override-8.0.3.tgz", + "integrity": "sha512-4u2MeMAYqlMsZPoXdKTuqDhEdd3COR4pneXX0mIAUb40fA3BfqAovoi2Nay8qRkEO7ZU5pbM7b6pX0GN6yLLYw==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" + } }, - "node_modules/follow-redirects": { - "version": "1.14.9", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.9.tgz", - "integrity": "sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } + "node_modules/@codingame/monaco-vscode-lifecycle-service-override/node_modules/@codingame/monaco-vscode-base-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-base-service-override/-/monaco-vscode-base-service-override-8.0.3.tgz", + "integrity": "sha512-jOK9oO2qAOFTsgIJQ2osDmUet7QpTq8eAQ0xdZp8A3laZGd48PczZ4WBAGbhHkRC6nGJPimP5cA4IJOAjN1wlw==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dev": true, + "node_modules/@codingame/monaco-vscode-lifecycle-service-override/node_modules/@codingame/monaco-vscode-environment-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-environment-service-override/-/monaco-vscode-environment-service-override-8.0.3.tgz", + "integrity": "sha512-OhZRikv3wKkocax/F9r7rZ2OHlXsFaX8cUaFWHOj4Bgj/g1FsnL/EvNUAZer9bVTzdq3a+4uZunz1jn/V5HF4g==", + "license": "MIT", "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/fraction.js": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", - "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", - "dev": true, - "engines": { - "node": "*" - }, - "funding": { - "type": "patreon", - "url": "https://www.patreon.com/infusion" + "node_modules/@codingame/monaco-vscode-lifecycle-service-override/node_modules/@codingame/monaco-vscode-extensions-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-extensions-service-override/-/monaco-vscode-extensions-service-override-8.0.3.tgz", + "integrity": "sha512-VEr8w7ykNNfYx6KGko03WOjaw7HcaETfQT2Eayj/u7lJX+expP6sEM2D3TGBAuHd8feepFzBuVfsL8I/ZLwS+g==", + "license": "MIT", + "dependencies": { + "@codingame/monaco-vscode-files-service-override": "8.0.3", + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true + "node_modules/@codingame/monaco-vscode-lifecycle-service-override/node_modules/@codingame/monaco-vscode-files-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-files-service-override/-/monaco-vscode-files-service-override-8.0.3.tgz", + "integrity": "sha512-S3mAHK510EwfdN8us2/UpspBC81pMnjACNVqDAk1QGfh6xKOQ6NPUv6ri/3oF2/2zMl5keI/iihK4xwLEAAd8Q==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" + } }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + "node_modules/@codingame/monaco-vscode-lifecycle-service-override/node_modules/@codingame/monaco-vscode-host-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-host-service-override/-/monaco-vscode-host-service-override-8.0.3.tgz", + "integrity": "sha512-VHwFyWTkOqOT+WLB7hC4zZFoahTbcFGJW/MutlR3c5+09v2qddMm2IsxcHKbI3IbHyb4TgPgC0arV4rs1FaNWQ==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true + "node_modules/@codingame/monaco-vscode-lifecycle-service-override/node_modules/@codingame/monaco-vscode-layout-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-layout-service-override/-/monaco-vscode-layout-service-override-8.0.3.tgz", + "integrity": "sha512-/so4xozWoEzbqAVIh6iXosNwA7pTpcmj9uBYCXVrjO4CHxXM9qKf9+ndidO9gwGIoiWYFBUJB6XTQOnCLMRqng==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" + } }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true + "node_modules/@codingame/monaco-vscode-lifecycle-service-override/node_modules/@codingame/monaco-vscode-quickaccess-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-quickaccess-service-override/-/monaco-vscode-quickaccess-service-override-8.0.3.tgz", + "integrity": "sha512-HNFPcQlXEn38abnfSR4JWa5oeYLsC7cCA0eqb6LkpeCMTODlP44mdahaHHWadELOpaD5ZhV4KO+GY2YcgmVXIA==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" + } }, - "node_modules/fuse.js": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-6.5.3.tgz", - "integrity": "sha512-sA5etGE7yD/pOqivZRBvUBd/NaL2sjAu6QuSaFoe1H2BrJSkH/T/UXAJ8CdXdw7DvY3Hs8CXKYkDWX7RiP5KOg==", - "engines": { - "node": ">=10" + "node_modules/@codingame/monaco-vscode-lifecycle-service-override/node_modules/vscode": { + "name": "@codingame/monaco-vscode-api", + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-api/-/monaco-vscode-api-8.0.3.tgz", + "integrity": "sha512-7Lnha7sspHaZq9OKdvN26mrXtaMxKvK2hri7wLNT5Z/SadM8Pj6CmCv/aDD4UpSaGfc7f6OFwsiqBmsbOYpjIA==", + "license": "MIT", + "dependencies": { + "@codingame/monaco-vscode-base-service-override": "8.0.3", + "@codingame/monaco-vscode-environment-service-override": "8.0.3", + "@codingame/monaco-vscode-extensions-service-override": "8.0.3", + "@codingame/monaco-vscode-files-service-override": "8.0.3", + "@codingame/monaco-vscode-host-service-override": "8.0.3", + "@codingame/monaco-vscode-layout-service-override": "8.0.3", + "@codingame/monaco-vscode-quickaccess-service-override": "8.0.3", + "@vscode/iconv-lite-umd": "0.7.0", + "jschardet": "3.1.3" } }, - "node_modules/get-stdin": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz", - "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==", - "dev": true, - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node_modules/@codingame/monaco-vscode-localization-service-override": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-localization-service-override/-/monaco-vscode-localization-service-override-8.0.2.tgz", + "integrity": "sha512-XiU3qCS9jCVWeAcEmaxfJnKaQiHoKlpYEMEfstOuvLfRCuRswWXjhYPG9gJVTx0m28MbCY0uhtjOXtOz3GRTtA==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.2" } }, - "node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, + "node_modules/@codingame/monaco-vscode-model-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-model-service-override/-/monaco-vscode-model-service-override-8.0.3.tgz", + "integrity": "sha512-1qdXPtUcyB729dK8bsSdvChifTQXewW6kZSBOClIbZ22zuCgoIbFQ0xfJXkrB+z3fxoEW6s1L148dEuIVFP9xA==", + "license": "MIT", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, + "node_modules/@codingame/monaco-vscode-model-service-override/node_modules/@codingame/monaco-vscode-base-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-base-service-override/-/monaco-vscode-base-service-override-8.0.3.tgz", + "integrity": "sha512-jOK9oO2qAOFTsgIJQ2osDmUet7QpTq8eAQ0xdZp8A3laZGd48PczZ4WBAGbhHkRC6nGJPimP5cA4IJOAjN1wlw==", + "license": "MIT", "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" + "node_modules/@codingame/monaco-vscode-model-service-override/node_modules/@codingame/monaco-vscode-environment-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-environment-service-override/-/monaco-vscode-environment-service-override-8.0.3.tgz", + "integrity": "sha512-OhZRikv3wKkocax/F9r7rZ2OHlXsFaX8cUaFWHOj4Bgj/g1FsnL/EvNUAZer9bVTzdq3a+4uZunz1jn/V5HF4g==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" + } }, - "node_modules/global-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", - "dev": true, - "peer": true, + "node_modules/@codingame/monaco-vscode-model-service-override/node_modules/@codingame/monaco-vscode-extensions-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-extensions-service-override/-/monaco-vscode-extensions-service-override-8.0.3.tgz", + "integrity": "sha512-VEr8w7ykNNfYx6KGko03WOjaw7HcaETfQT2Eayj/u7lJX+expP6sEM2D3TGBAuHd8feepFzBuVfsL8I/ZLwS+g==", + "license": "MIT", "dependencies": { - "global-prefix": "^3.0.0" - }, - "engines": { - "node": ">=6" + "@codingame/monaco-vscode-files-service-override": "8.0.3", + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/global-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", - "dev": true, - "peer": true, + "node_modules/@codingame/monaco-vscode-model-service-override/node_modules/@codingame/monaco-vscode-files-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-files-service-override/-/monaco-vscode-files-service-override-8.0.3.tgz", + "integrity": "sha512-S3mAHK510EwfdN8us2/UpspBC81pMnjACNVqDAk1QGfh6xKOQ6NPUv6ri/3oF2/2zMl5keI/iihK4xwLEAAd8Q==", + "license": "MIT", "dependencies": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" - }, - "engines": { - "node": ">=6" + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/global-prefix/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "peer": true, + "node_modules/@codingame/monaco-vscode-model-service-override/node_modules/@codingame/monaco-vscode-host-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-host-service-override/-/monaco-vscode-host-service-override-8.0.3.tgz", + "integrity": "sha512-VHwFyWTkOqOT+WLB7hC4zZFoahTbcFGJW/MutlR3c5+09v2qddMm2IsxcHKbI3IbHyb4TgPgC0arV4rs1FaNWQ==", + "license": "MIT", "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/globals": { - "version": "13.13.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.13.0.tgz", - "integrity": "sha512-EQ7Q18AJlPwp3vUDL4mKA0KXrXyNIQyWon6T6XQiBQF0XHvRsiCSrWmmeATpUzdJN2HhWZU6Pdl0a9zdep5p6A==", - "dev": true, + "node_modules/@codingame/monaco-vscode-model-service-override/node_modules/@codingame/monaco-vscode-layout-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-layout-service-override/-/monaco-vscode-layout-service-override-8.0.3.tgz", + "integrity": "sha512-/so4xozWoEzbqAVIh6iXosNwA7pTpcmj9uBYCXVrjO4CHxXM9qKf9+ndidO9gwGIoiWYFBUJB6XTQOnCLMRqng==", + "license": "MIT", "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/globalyzer": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz", - "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==", - "dev": true + "node_modules/@codingame/monaco-vscode-model-service-override/node_modules/@codingame/monaco-vscode-quickaccess-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-quickaccess-service-override/-/monaco-vscode-quickaccess-service-override-8.0.3.tgz", + "integrity": "sha512-HNFPcQlXEn38abnfSR4JWa5oeYLsC7cCA0eqb6LkpeCMTODlP44mdahaHHWadELOpaD5ZhV4KO+GY2YcgmVXIA==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" + } }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, + "node_modules/@codingame/monaco-vscode-model-service-override/node_modules/vscode": { + "name": "@codingame/monaco-vscode-api", + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-api/-/monaco-vscode-api-8.0.3.tgz", + "integrity": "sha512-7Lnha7sspHaZq9OKdvN26mrXtaMxKvK2hri7wLNT5Z/SadM8Pj6CmCv/aDD4UpSaGfc7f6OFwsiqBmsbOYpjIA==", + "license": "MIT", "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "@codingame/monaco-vscode-base-service-override": "8.0.3", + "@codingame/monaco-vscode-environment-service-override": "8.0.3", + "@codingame/monaco-vscode-extensions-service-override": "8.0.3", + "@codingame/monaco-vscode-files-service-override": "8.0.3", + "@codingame/monaco-vscode-host-service-override": "8.0.3", + "@codingame/monaco-vscode-layout-service-override": "8.0.3", + "@codingame/monaco-vscode-quickaccess-service-override": "8.0.3", + "@vscode/iconv-lite-umd": "0.7.0", + "jschardet": "3.1.3" } }, - "node_modules/globjoin": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz", - "integrity": "sha1-L0SUrIkZ43Z8XLtpHp9GMyQoXUM=", - "dev": true, - "peer": true + "node_modules/@codingame/monaco-vscode-monarch-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-monarch-service-override/-/monaco-vscode-monarch-service-override-8.0.3.tgz", + "integrity": "sha512-UwRGlZz/1QpP7i7v+sJGmrY0FI9hGC/7oul8dSk/UMRaeEd4YNu6LAjKruhGhPhUp+fm8ixkb0XAPpcvH6dR3Q==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" + } }, - "node_modules/globrex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", - "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", - "dev": true + "node_modules/@codingame/monaco-vscode-monarch-service-override/node_modules/@codingame/monaco-vscode-base-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-base-service-override/-/monaco-vscode-base-service-override-8.0.3.tgz", + "integrity": "sha512-jOK9oO2qAOFTsgIJQ2osDmUet7QpTq8eAQ0xdZp8A3laZGd48PczZ4WBAGbhHkRC6nGJPimP5cA4IJOAjN1wlw==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" + } }, - "node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true + "node_modules/@codingame/monaco-vscode-monarch-service-override/node_modules/@codingame/monaco-vscode-environment-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-environment-service-override/-/monaco-vscode-environment-service-override-8.0.3.tgz", + "integrity": "sha512-OhZRikv3wKkocax/F9r7rZ2OHlXsFaX8cUaFWHOj4Bgj/g1FsnL/EvNUAZer9bVTzdq3a+4uZunz1jn/V5HF4g==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" + } }, - "node_modules/handlebars": { - "version": "4.7.7", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", - "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", - "dev": true, + "node_modules/@codingame/monaco-vscode-monarch-service-override/node_modules/@codingame/monaco-vscode-extensions-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-extensions-service-override/-/monaco-vscode-extensions-service-override-8.0.3.tgz", + "integrity": "sha512-VEr8w7ykNNfYx6KGko03WOjaw7HcaETfQT2Eayj/u7lJX+expP6sEM2D3TGBAuHd8feepFzBuVfsL8I/ZLwS+g==", + "license": "MIT", "dependencies": { - "minimist": "^1.2.5", - "neo-async": "^2.6.0", - "source-map": "^0.6.1", - "wordwrap": "^1.0.0" - }, - "bin": { - "handlebars": "bin/handlebars" - }, - "engines": { - "node": ">=0.4.7" - }, - "optionalDependencies": { - "uglify-js": "^3.1.4" + "@codingame/monaco-vscode-files-service-override": "8.0.3", + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/hard-rejection": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", - "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", - "dev": true, - "peer": true, - "engines": { - "node": ">=6" + "node_modules/@codingame/monaco-vscode-monarch-service-override/node_modules/@codingame/monaco-vscode-files-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-files-service-override/-/monaco-vscode-files-service-override-8.0.3.tgz", + "integrity": "sha512-S3mAHK510EwfdN8us2/UpspBC81pMnjACNVqDAk1QGfh6xKOQ6NPUv6ri/3oF2/2zMl5keI/iihK4xwLEAAd8Q==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, + "node_modules/@codingame/monaco-vscode-monarch-service-override/node_modules/@codingame/monaco-vscode-host-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-host-service-override/-/monaco-vscode-host-service-override-8.0.3.tgz", + "integrity": "sha512-VHwFyWTkOqOT+WLB7hC4zZFoahTbcFGJW/MutlR3c5+09v2qddMm2IsxcHKbI3IbHyb4TgPgC0arV4rs1FaNWQ==", + "license": "MIT", "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" + "node_modules/@codingame/monaco-vscode-monarch-service-override/node_modules/@codingame/monaco-vscode-layout-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-layout-service-override/-/monaco-vscode-layout-service-override-8.0.3.tgz", + "integrity": "sha512-/so4xozWoEzbqAVIh6iXosNwA7pTpcmj9uBYCXVrjO4CHxXM9qKf9+ndidO9gwGIoiWYFBUJB6XTQOnCLMRqng==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/highlight.js": { - "version": "11.5.1", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.5.1.tgz", - "integrity": "sha512-LKzHqnxr4CrD2YsNoIf/o5nJ09j4yi/GcH5BnYz9UnVpZdS4ucMgvP61TDty5xJcFGRjnH4DpujkS9bHT3hq0Q==", - "engines": { - "node": ">=12.0.0" + "node_modules/@codingame/monaco-vscode-monarch-service-override/node_modules/@codingame/monaco-vscode-quickaccess-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-quickaccess-service-override/-/monaco-vscode-quickaccess-service-override-8.0.3.tgz", + "integrity": "sha512-HNFPcQlXEn38abnfSR4JWa5oeYLsC7cCA0eqb6LkpeCMTODlP44mdahaHHWadELOpaD5ZhV4KO+GY2YcgmVXIA==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", - "dev": true, - "peer": true, + "node_modules/@codingame/monaco-vscode-monarch-service-override/node_modules/vscode": { + "name": "@codingame/monaco-vscode-api", + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-api/-/monaco-vscode-api-8.0.3.tgz", + "integrity": "sha512-7Lnha7sspHaZq9OKdvN26mrXtaMxKvK2hri7wLNT5Z/SadM8Pj6CmCv/aDD4UpSaGfc7f6OFwsiqBmsbOYpjIA==", + "license": "MIT", "dependencies": { - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=10" + "@codingame/monaco-vscode-base-service-override": "8.0.3", + "@codingame/monaco-vscode-environment-service-override": "8.0.3", + "@codingame/monaco-vscode-extensions-service-override": "8.0.3", + "@codingame/monaco-vscode-files-service-override": "8.0.3", + "@codingame/monaco-vscode-host-service-override": "8.0.3", + "@codingame/monaco-vscode-layout-service-override": "8.0.3", + "@codingame/monaco-vscode-quickaccess-service-override": "8.0.3", + "@vscode/iconv-lite-umd": "0.7.0", + "jschardet": "3.1.3" } }, - "node_modules/html-tags": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.2.0.tgz", - "integrity": "sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg==", - "dev": true, - "peer": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node_modules/@codingame/monaco-vscode-quickaccess-service-override": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-quickaccess-service-override/-/monaco-vscode-quickaccess-service-override-8.0.2.tgz", + "integrity": "sha512-4Wli5dY0NPuotwjmnyyJOqTo4CZmI4TlI/sjOSJvOvwHSwbCgaNWovTgDceoCmopsiiTG00n9SyT2geA8gxpqg==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.2" } }, - "node_modules/ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true, - "engines": { - "node": ">= 4" + "node_modules/@codingame/monaco-vscode-standalone-css-language-features": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-standalone-css-language-features/-/monaco-vscode-standalone-css-language-features-8.0.3.tgz", + "integrity": "sha512-n7u/rSAsewtTeFCgLMhTguoD4vH7Mr9LVAIK4rbwRykyyYbnHVIdXchdJwLLL0D4JqN5am8WyYtcJSfTB5LqXA==", + "license": "MIT", + "dependencies": { + "monaco-editor": "npm:@codingame/monaco-vscode-editor-api@8.0.3" } }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, + "node_modules/@codingame/monaco-vscode-standalone-css-language-features/node_modules/@codingame/monaco-vscode-base-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-base-service-override/-/monaco-vscode-base-service-override-8.0.3.tgz", + "integrity": "sha512-jOK9oO2qAOFTsgIJQ2osDmUet7QpTq8eAQ0xdZp8A3laZGd48PczZ4WBAGbhHkRC6nGJPimP5cA4IJOAjN1wlw==", + "license": "MIT", "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/import-lazy": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", - "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", - "dev": true, - "peer": true, - "engines": { - "node": ">=8" + "node_modules/@codingame/monaco-vscode-standalone-css-language-features/node_modules/@codingame/monaco-vscode-environment-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-environment-service-override/-/monaco-vscode-environment-service-override-8.0.3.tgz", + "integrity": "sha512-OhZRikv3wKkocax/F9r7rZ2OHlXsFaX8cUaFWHOj4Bgj/g1FsnL/EvNUAZer9bVTzdq3a+4uZunz1jn/V5HF4g==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true, - "engines": { - "node": ">=0.8.19" + "node_modules/@codingame/monaco-vscode-standalone-css-language-features/node_modules/@codingame/monaco-vscode-extensions-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-extensions-service-override/-/monaco-vscode-extensions-service-override-8.0.3.tgz", + "integrity": "sha512-VEr8w7ykNNfYx6KGko03WOjaw7HcaETfQT2Eayj/u7lJX+expP6sEM2D3TGBAuHd8feepFzBuVfsL8I/ZLwS+g==", + "license": "MIT", + "dependencies": { + "@codingame/monaco-vscode-files-service-override": "8.0.3", + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true, - "peer": true, - "engines": { - "node": ">=8" + "node_modules/@codingame/monaco-vscode-standalone-css-language-features/node_modules/@codingame/monaco-vscode-files-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-files-service-override/-/monaco-vscode-files-service-override-8.0.3.tgz", + "integrity": "sha512-S3mAHK510EwfdN8us2/UpspBC81pMnjACNVqDAk1QGfh6xKOQ6NPUv6ri/3oF2/2zMl5keI/iihK4xwLEAAd8Q==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, + "node_modules/@codingame/monaco-vscode-standalone-css-language-features/node_modules/@codingame/monaco-vscode-host-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-host-service-override/-/monaco-vscode-host-service-override-8.0.3.tgz", + "integrity": "sha512-VHwFyWTkOqOT+WLB7hC4zZFoahTbcFGJW/MutlR3c5+09v2qddMm2IsxcHKbI3IbHyb4TgPgC0arV4rs1FaNWQ==", + "license": "MIT", "dependencies": { - "once": "^1.3.0", - "wrappy": "1" + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true + "node_modules/@codingame/monaco-vscode-standalone-css-language-features/node_modules/@codingame/monaco-vscode-layout-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-layout-service-override/-/monaco-vscode-layout-service-override-8.0.3.tgz", + "integrity": "sha512-/so4xozWoEzbqAVIh6iXosNwA7pTpcmj9uBYCXVrjO4CHxXM9qKf9+ndidO9gwGIoiWYFBUJB6XTQOnCLMRqng==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" + } }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true, - "peer": true + "node_modules/@codingame/monaco-vscode-standalone-css-language-features/node_modules/@codingame/monaco-vscode-quickaccess-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-quickaccess-service-override/-/monaco-vscode-quickaccess-service-override-8.0.3.tgz", + "integrity": "sha512-HNFPcQlXEn38abnfSR4JWa5oeYLsC7cCA0eqb6LkpeCMTODlP44mdahaHHWadELOpaD5ZhV4KO+GY2YcgmVXIA==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" + } }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true, - "peer": true + "node_modules/@codingame/monaco-vscode-standalone-css-language-features/node_modules/monaco-editor": { + "name": "@codingame/monaco-vscode-editor-api", + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-editor-api/-/monaco-vscode-editor-api-8.0.3.tgz", + "integrity": "sha512-GTfLNnczFGOcOE6tdQ+GQTtFwecB9aVNDIawGIBKxCzZxKbvWvWMkh1ZFzyMsO1Vq4/h3xHj2sL3U/gNqNV3kA==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" + } }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, + "node_modules/@codingame/monaco-vscode-standalone-css-language-features/node_modules/vscode": { + "name": "@codingame/monaco-vscode-api", + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-api/-/monaco-vscode-api-8.0.3.tgz", + "integrity": "sha512-7Lnha7sspHaZq9OKdvN26mrXtaMxKvK2hri7wLNT5Z/SadM8Pj6CmCv/aDD4UpSaGfc7f6OFwsiqBmsbOYpjIA==", + "license": "MIT", "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" + "@codingame/monaco-vscode-base-service-override": "8.0.3", + "@codingame/monaco-vscode-environment-service-override": "8.0.3", + "@codingame/monaco-vscode-extensions-service-override": "8.0.3", + "@codingame/monaco-vscode-files-service-override": "8.0.3", + "@codingame/monaco-vscode-host-service-override": "8.0.3", + "@codingame/monaco-vscode-layout-service-override": "8.0.3", + "@codingame/monaco-vscode-quickaccess-service-override": "8.0.3", + "@vscode/iconv-lite-umd": "0.7.0", + "jschardet": "3.1.3" } }, - "node_modules/is-core-module": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", - "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", - "dev": true, + "node_modules/@codingame/monaco-vscode-standalone-json-language-features": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-standalone-json-language-features/-/monaco-vscode-standalone-json-language-features-8.0.2.tgz", + "integrity": "sha512-jek9BtxkpTI3E4ap9wv8tyHlBB6Gnv5NdEXHckL9juQZ5Tjsjh/NBBrT9ne58jyf28xCM/YwI94R3kNkQRcr6g==", + "license": "MIT", "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "monaco-editor": "npm:@codingame/monaco-vscode-editor-api@8.0.2" } }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true, - "engines": { - "node": ">=0.10.0" + "node_modules/@codingame/monaco-vscode-standalone-languages": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-standalone-languages/-/monaco-vscode-standalone-languages-8.0.2.tgz", + "integrity": "sha512-KRr8Rde4E5A5ctRVlrFiHPQhr+oMtJT9q5H7AUKXzU2KN0+VEAZFUmtCzUoyqhWjOwmvPK8cTTnSQHME3eqqmw==", + "license": "MIT", + "dependencies": { + "monaco-editor": "npm:@codingame/monaco-vscode-editor-api@8.0.2" } }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" + "node_modules/@codingame/monaco-vscode-standalone-typescript-language-features": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-standalone-typescript-language-features/-/monaco-vscode-standalone-typescript-language-features-8.0.3.tgz", + "integrity": "sha512-IoaB3WhzTdRkbZiWLXBzZI0nnn1aSDkzje1znOwkWCqEpLHl3kuMebJcAUSdjlRPWXvHgtSXqyZqZ1FmaVXhEg==", + "license": "MIT", + "dependencies": { + "monaco-editor": "npm:@codingame/monaco-vscode-editor-api@8.0.3" } }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, + "node_modules/@codingame/monaco-vscode-standalone-typescript-language-features/node_modules/@codingame/monaco-vscode-base-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-base-service-override/-/monaco-vscode-base-service-override-8.0.3.tgz", + "integrity": "sha512-jOK9oO2qAOFTsgIJQ2osDmUet7QpTq8eAQ0xdZp8A3laZGd48PczZ4WBAGbhHkRC6nGJPimP5cA4IJOAjN1wlw==", + "license": "MIT", "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" + "node_modules/@codingame/monaco-vscode-standalone-typescript-language-features/node_modules/@codingame/monaco-vscode-environment-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-environment-service-override/-/monaco-vscode-environment-service-override-8.0.3.tgz", + "integrity": "sha512-OhZRikv3wKkocax/F9r7rZ2OHlXsFaX8cUaFWHOj4Bgj/g1FsnL/EvNUAZer9bVTzdq3a+4uZunz1jn/V5HF4g==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.10.0" + "node_modules/@codingame/monaco-vscode-standalone-typescript-language-features/node_modules/@codingame/monaco-vscode-extensions-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-extensions-service-override/-/monaco-vscode-extensions-service-override-8.0.3.tgz", + "integrity": "sha512-VEr8w7ykNNfYx6KGko03WOjaw7HcaETfQT2Eayj/u7lJX+expP6sEM2D3TGBAuHd8feepFzBuVfsL8I/ZLwS+g==", + "license": "MIT", + "dependencies": { + "@codingame/monaco-vscode-files-service-override": "8.0.3", + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.10.0" + "node_modules/@codingame/monaco-vscode-standalone-typescript-language-features/node_modules/@codingame/monaco-vscode-files-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-files-service-override/-/monaco-vscode-files-service-override-8.0.3.tgz", + "integrity": "sha512-S3mAHK510EwfdN8us2/UpspBC81pMnjACNVqDAk1QGfh6xKOQ6NPUv6ri/3oF2/2zMl5keI/iihK4xwLEAAd8Q==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/is-regexp": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-2.1.0.tgz", - "integrity": "sha512-OZ4IlER3zmRIoB9AqNhEggVxqIH4ofDns5nRrPS6yQxXE1TPCUpFznBfRQmQa8uC+pXqjMnukiJBxCisIxiLGA==", - "dev": true, - "peer": true, - "engines": { - "node": ">=6" + "node_modules/@codingame/monaco-vscode-standalone-typescript-language-features/node_modules/@codingame/monaco-vscode-host-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-host-service-override/-/monaco-vscode-host-service-override-8.0.3.tgz", + "integrity": "sha512-VHwFyWTkOqOT+WLB7hC4zZFoahTbcFGJW/MutlR3c5+09v2qddMm2IsxcHKbI3IbHyb4TgPgC0arV4rs1FaNWQ==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, + "node_modules/@codingame/monaco-vscode-standalone-typescript-language-features/node_modules/@codingame/monaco-vscode-layout-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-layout-service-override/-/monaco-vscode-layout-service-override-8.0.3.tgz", + "integrity": "sha512-/so4xozWoEzbqAVIh6iXosNwA7pTpcmj9uBYCXVrjO4CHxXM9qKf9+ndidO9gwGIoiWYFBUJB6XTQOnCLMRqng==", + "license": "MIT", "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true, - "peer": true + "node_modules/@codingame/monaco-vscode-standalone-typescript-language-features/node_modules/@codingame/monaco-vscode-quickaccess-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-quickaccess-service-override/-/monaco-vscode-quickaccess-service-override-8.0.3.tgz", + "integrity": "sha512-HNFPcQlXEn38abnfSR4JWa5oeYLsC7cCA0eqb6LkpeCMTODlP44mdahaHHWadELOpaD5ZhV4KO+GY2YcgmVXIA==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" + } }, - "node_modules/json-schema-ref-parser": { - "version": "9.0.9", - "resolved": "https://registry.npmjs.org/json-schema-ref-parser/-/json-schema-ref-parser-9.0.9.tgz", - "integrity": "sha512-qcP2lmGy+JUoQJ4DOQeLaZDqH9qSkeGCK3suKWxJXS82dg728Mn3j97azDMaOUmJAN4uCq91LdPx4K7E8F1a7Q==", - "dev": true, + "node_modules/@codingame/monaco-vscode-standalone-typescript-language-features/node_modules/monaco-editor": { + "name": "@codingame/monaco-vscode-editor-api", + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-editor-api/-/monaco-vscode-editor-api-8.0.3.tgz", + "integrity": "sha512-GTfLNnczFGOcOE6tdQ+GQTtFwecB9aVNDIawGIBKxCzZxKbvWvWMkh1ZFzyMsO1Vq4/h3xHj2sL3U/gNqNV3kA==", + "license": "MIT", "dependencies": { - "@apidevtools/json-schema-ref-parser": "9.0.9" - }, - "engines": { - "node": ">=10" + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "node_modules/@codingame/monaco-vscode-standalone-typescript-language-features/node_modules/vscode": { + "name": "@codingame/monaco-vscode-api", + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-api/-/monaco-vscode-api-8.0.3.tgz", + "integrity": "sha512-7Lnha7sspHaZq9OKdvN26mrXtaMxKvK2hri7wLNT5Z/SadM8Pj6CmCv/aDD4UpSaGfc7f6OFwsiqBmsbOYpjIA==", + "license": "MIT", + "dependencies": { + "@codingame/monaco-vscode-base-service-override": "8.0.3", + "@codingame/monaco-vscode-environment-service-override": "8.0.3", + "@codingame/monaco-vscode-extensions-service-override": "8.0.3", + "@codingame/monaco-vscode-files-service-override": "8.0.3", + "@codingame/monaco-vscode-host-service-override": "8.0.3", + "@codingame/monaco-vscode-layout-service-override": "8.0.3", + "@codingame/monaco-vscode-quickaccess-service-override": "8.0.3", + "@vscode/iconv-lite-umd": "0.7.0", + "jschardet": "3.1.3" + } }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true + "node_modules/@codingame/monaco-vscode-textmate-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-textmate-service-override/-/monaco-vscode-textmate-service-override-8.0.3.tgz", + "integrity": "sha512-6FQvF5b5SSi3XQo1xZNV3ibSAm6LGk4D/ImGf6GXGzDul/4xkeLQnmPgfb8L8ME/NLafjzLXg4AAzcvPfSZFNg==", + "license": "MIT", + "dependencies": { + "@codingame/monaco-vscode-files-service-override": "8.0.3", + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3", + "vscode-oniguruma": "1.7.0", + "vscode-textmate": "9.0.0" + } }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.10.0" + "node_modules/@codingame/monaco-vscode-textmate-service-override/node_modules/@codingame/monaco-vscode-base-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-base-service-override/-/monaco-vscode-base-service-override-8.0.3.tgz", + "integrity": "sha512-jOK9oO2qAOFTsgIJQ2osDmUet7QpTq8eAQ0xdZp8A3laZGd48PczZ4WBAGbhHkRC6nGJPimP5cA4IJOAjN1wlw==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/kleur": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.4.tgz", - "integrity": "sha512-8QADVssbrFjivHWQU7KkMgptGTl6WAcSdlbBPY4uNF+mWr6DGcKrvY2w4FQJoXch7+fKMjj0dRrL75vk3k23OA==", - "dev": true, - "engines": { - "node": ">=6" + "node_modules/@codingame/monaco-vscode-textmate-service-override/node_modules/@codingame/monaco-vscode-environment-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-environment-service-override/-/monaco-vscode-environment-service-override-8.0.3.tgz", + "integrity": "sha512-OhZRikv3wKkocax/F9r7rZ2OHlXsFaX8cUaFWHOj4Bgj/g1FsnL/EvNUAZer9bVTzdq3a+4uZunz1jn/V5HF4g==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/known-css-properties": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.24.0.tgz", - "integrity": "sha512-RTSoaUAfLvpR357vWzAz/50Q/BmHfmE6ETSWfutT0AJiw10e6CmcdYRQJlLRd95B53D0Y2aD1jSxD3V3ySF+PA==", - "dev": true, - "peer": true + "node_modules/@codingame/monaco-vscode-textmate-service-override/node_modules/@codingame/monaco-vscode-extensions-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-extensions-service-override/-/monaco-vscode-extensions-service-override-8.0.3.tgz", + "integrity": "sha512-VEr8w7ykNNfYx6KGko03WOjaw7HcaETfQT2Eayj/u7lJX+expP6sEM2D3TGBAuHd8feepFzBuVfsL8I/ZLwS+g==", + "license": "MIT", + "dependencies": { + "@codingame/monaco-vscode-files-service-override": "8.0.3", + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" + } }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, + "node_modules/@codingame/monaco-vscode-textmate-service-override/node_modules/@codingame/monaco-vscode-files-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-files-service-override/-/monaco-vscode-files-service-override-8.0.3.tgz", + "integrity": "sha512-S3mAHK510EwfdN8us2/UpspBC81pMnjACNVqDAk1QGfh6xKOQ6NPUv6ri/3oF2/2zMl5keI/iihK4xwLEAAd8Q==", + "license": "MIT", "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/lilconfig": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.5.tgz", - "integrity": "sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==", - "dev": true, - "engines": { - "node": ">=10" + "node_modules/@codingame/monaco-vscode-textmate-service-override/node_modules/@codingame/monaco-vscode-host-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-host-service-override/-/monaco-vscode-host-service-override-8.0.3.tgz", + "integrity": "sha512-VHwFyWTkOqOT+WLB7hC4zZFoahTbcFGJW/MutlR3c5+09v2qddMm2IsxcHKbI3IbHyb4TgPgC0arV4rs1FaNWQ==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true, - "peer": true + "node_modules/@codingame/monaco-vscode-textmate-service-override/node_modules/@codingame/monaco-vscode-layout-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-layout-service-override/-/monaco-vscode-layout-service-override-8.0.3.tgz", + "integrity": "sha512-/so4xozWoEzbqAVIh6iXosNwA7pTpcmj9uBYCXVrjO4CHxXM9qKf9+ndidO9gwGIoiWYFBUJB6XTQOnCLMRqng==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" + } }, - "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "peer": true, + "node_modules/@codingame/monaco-vscode-textmate-service-override/node_modules/@codingame/monaco-vscode-quickaccess-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-quickaccess-service-override/-/monaco-vscode-quickaccess-service-override-8.0.3.tgz", + "integrity": "sha512-HNFPcQlXEn38abnfSR4JWa5oeYLsC7cCA0eqb6LkpeCMTODlP44mdahaHHWadELOpaD5ZhV4KO+GY2YcgmVXIA==", + "license": "MIT", "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/lodash.castarray": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.castarray/-/lodash.castarray-4.4.0.tgz", - "integrity": "sha1-wCUTUV4wna3dTCTGDP3c9ZdtkRU=", - "dev": true + "node_modules/@codingame/monaco-vscode-textmate-service-override/node_modules/vscode": { + "name": "@codingame/monaco-vscode-api", + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-api/-/monaco-vscode-api-8.0.3.tgz", + "integrity": "sha512-7Lnha7sspHaZq9OKdvN26mrXtaMxKvK2hri7wLNT5Z/SadM8Pj6CmCv/aDD4UpSaGfc7f6OFwsiqBmsbOYpjIA==", + "license": "MIT", + "dependencies": { + "@codingame/monaco-vscode-base-service-override": "8.0.3", + "@codingame/monaco-vscode-environment-service-override": "8.0.3", + "@codingame/monaco-vscode-extensions-service-override": "8.0.3", + "@codingame/monaco-vscode-files-service-override": "8.0.3", + "@codingame/monaco-vscode-host-service-override": "8.0.3", + "@codingame/monaco-vscode-layout-service-override": "8.0.3", + "@codingame/monaco-vscode-quickaccess-service-override": "8.0.3", + "@vscode/iconv-lite-umd": "0.7.0", + "jschardet": "3.1.3" + } }, - "node_modules/lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=", - "dev": true + "node_modules/@codingame/monaco-vscode-theme-defaults-default-extension": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-theme-defaults-default-extension/-/monaco-vscode-theme-defaults-default-extension-8.0.3.tgz", + "integrity": "sha512-xJ/ghjWvXPRDgY9GBws9jesHinF8RL4wHNGcF7E1421zujjsMNwJLfBShgTCyNb9jT/UTLo8f1FZRllJnXDZww==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" + } }, - "node_modules/lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", - "dev": true + "node_modules/@codingame/monaco-vscode-theme-defaults-default-extension/node_modules/@codingame/monaco-vscode-base-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-base-service-override/-/monaco-vscode-base-service-override-8.0.3.tgz", + "integrity": "sha512-jOK9oO2qAOFTsgIJQ2osDmUet7QpTq8eAQ0xdZp8A3laZGd48PczZ4WBAGbhHkRC6nGJPimP5cA4IJOAjN1wlw==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" + } }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true + "node_modules/@codingame/monaco-vscode-theme-defaults-default-extension/node_modules/@codingame/monaco-vscode-environment-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-environment-service-override/-/monaco-vscode-environment-service-override-8.0.3.tgz", + "integrity": "sha512-OhZRikv3wKkocax/F9r7rZ2OHlXsFaX8cUaFWHOj4Bgj/g1FsnL/EvNUAZer9bVTzdq3a+4uZunz1jn/V5HF4g==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" + } }, - "node_modules/lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", - "dev": true + "node_modules/@codingame/monaco-vscode-theme-defaults-default-extension/node_modules/@codingame/monaco-vscode-extensions-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-extensions-service-override/-/monaco-vscode-extensions-service-override-8.0.3.tgz", + "integrity": "sha512-VEr8w7ykNNfYx6KGko03WOjaw7HcaETfQT2Eayj/u7lJX+expP6sEM2D3TGBAuHd8feepFzBuVfsL8I/ZLwS+g==", + "license": "MIT", + "dependencies": { + "@codingame/monaco-vscode-files-service-override": "8.0.3", + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" + } }, - "node_modules/lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", - "dev": true + "node_modules/@codingame/monaco-vscode-theme-defaults-default-extension/node_modules/@codingame/monaco-vscode-files-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-files-service-override/-/monaco-vscode-files-service-override-8.0.3.tgz", + "integrity": "sha512-S3mAHK510EwfdN8us2/UpspBC81pMnjACNVqDAk1QGfh6xKOQ6NPUv6ri/3oF2/2zMl5keI/iihK4xwLEAAd8Q==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" + } }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "node_modules/@codingame/monaco-vscode-theme-defaults-default-extension/node_modules/@codingame/monaco-vscode-host-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-host-service-override/-/monaco-vscode-host-service-override-8.0.3.tgz", + "integrity": "sha512-VHwFyWTkOqOT+WLB7hC4zZFoahTbcFGJW/MutlR3c5+09v2qddMm2IsxcHKbI3IbHyb4TgPgC0arV4rs1FaNWQ==", + "license": "MIT", "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/magic-string": { - "version": "0.26.1", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.26.1.tgz", - "integrity": "sha512-ndThHmvgtieXe8J/VGPjG+Apu7v7ItcD5mhEIvOscWjPF/ccOiLxHaSuCAS2G+3x4GKsAbT8u7zdyamupui8Tg==", - "dev": true, + "node_modules/@codingame/monaco-vscode-theme-defaults-default-extension/node_modules/@codingame/monaco-vscode-layout-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-layout-service-override/-/monaco-vscode-layout-service-override-8.0.3.tgz", + "integrity": "sha512-/so4xozWoEzbqAVIh6iXosNwA7pTpcmj9uBYCXVrjO4CHxXM9qKf9+ndidO9gwGIoiWYFBUJB6XTQOnCLMRqng==", + "license": "MIT", "dependencies": { - "sourcemap-codec": "^1.4.8" - }, - "engines": { - "node": ">=12" + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/map-obj": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", - "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", - "dev": true, - "peer": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node_modules/@codingame/monaco-vscode-theme-defaults-default-extension/node_modules/@codingame/monaco-vscode-quickaccess-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-quickaccess-service-override/-/monaco-vscode-quickaccess-service-override-8.0.3.tgz", + "integrity": "sha512-HNFPcQlXEn38abnfSR4JWa5oeYLsC7cCA0eqb6LkpeCMTODlP44mdahaHHWadELOpaD5ZhV4KO+GY2YcgmVXIA==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/marked": { - "version": "4.0.14", - "resolved": "https://registry.npmjs.org/marked/-/marked-4.0.14.tgz", - "integrity": "sha512-HL5sSPE/LP6U9qKgngIIPTthuxC0jrfxpYMZ3LdGDD3vTnLs59m2Z7r6+LNDR3ToqEQdkKd6YaaEfJhodJmijQ==", - "bin": { - "marked": "bin/marked.js" - }, - "engines": { - "node": ">= 12" + "node_modules/@codingame/monaco-vscode-theme-defaults-default-extension/node_modules/vscode": { + "name": "@codingame/monaco-vscode-api", + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-api/-/monaco-vscode-api-8.0.3.tgz", + "integrity": "sha512-7Lnha7sspHaZq9OKdvN26mrXtaMxKvK2hri7wLNT5Z/SadM8Pj6CmCv/aDD4UpSaGfc7f6OFwsiqBmsbOYpjIA==", + "license": "MIT", + "dependencies": { + "@codingame/monaco-vscode-base-service-override": "8.0.3", + "@codingame/monaco-vscode-environment-service-override": "8.0.3", + "@codingame/monaco-vscode-extensions-service-override": "8.0.3", + "@codingame/monaco-vscode-files-service-override": "8.0.3", + "@codingame/monaco-vscode-host-service-override": "8.0.3", + "@codingame/monaco-vscode-layout-service-override": "8.0.3", + "@codingame/monaco-vscode-quickaccess-service-override": "8.0.3", + "@vscode/iconv-lite-umd": "0.7.0", + "jschardet": "3.1.3" } }, - "node_modules/mathml-tag-names": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", - "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==", - "dev": true, - "peer": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "node_modules/@codingame/monaco-vscode-theme-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-theme-service-override/-/monaco-vscode-theme-service-override-8.0.3.tgz", + "integrity": "sha512-w/hlLEOSWNOAErqylXyzrRhmdtipBvZkuQHKrvOv6A492bvrh0kKMuvzOknwLz3Hfy30IcJzy3uDF6vJAt4CuQ==", + "license": "MIT", + "dependencies": { + "@codingame/monaco-vscode-files-service-override": "8.0.3", + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", - "dev": true + "node_modules/@codingame/monaco-vscode-theme-service-override/node_modules/@codingame/monaco-vscode-base-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-base-service-override/-/monaco-vscode-base-service-override-8.0.3.tgz", + "integrity": "sha512-jOK9oO2qAOFTsgIJQ2osDmUet7QpTq8eAQ0xdZp8A3laZGd48PczZ4WBAGbhHkRC6nGJPimP5cA4IJOAjN1wlw==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" + } }, - "node_modules/meow": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz", - "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==", - "dev": true, - "peer": true, + "node_modules/@codingame/monaco-vscode-theme-service-override/node_modules/@codingame/monaco-vscode-environment-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-environment-service-override/-/monaco-vscode-environment-service-override-8.0.3.tgz", + "integrity": "sha512-OhZRikv3wKkocax/F9r7rZ2OHlXsFaX8cUaFWHOj4Bgj/g1FsnL/EvNUAZer9bVTzdq3a+4uZunz1jn/V5HF4g==", + "license": "MIT", "dependencies": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize": "^1.2.0", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/meow/node_modules/type-fest": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", - "dev": true, - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node_modules/@codingame/monaco-vscode-theme-service-override/node_modules/@codingame/monaco-vscode-extensions-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-extensions-service-override/-/monaco-vscode-extensions-service-override-8.0.3.tgz", + "integrity": "sha512-VEr8w7ykNNfYx6KGko03WOjaw7HcaETfQT2Eayj/u7lJX+expP6sEM2D3TGBAuHd8feepFzBuVfsL8I/ZLwS+g==", + "license": "MIT", + "dependencies": { + "@codingame/monaco-vscode-files-service-override": "8.0.3", + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "engines": { - "node": ">= 8" + "node_modules/@codingame/monaco-vscode-theme-service-override/node_modules/@codingame/monaco-vscode-files-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-files-service-override/-/monaco-vscode-files-service-override-8.0.3.tgz", + "integrity": "sha512-S3mAHK510EwfdN8us2/UpspBC81pMnjACNVqDAk1QGfh6xKOQ6NPUv6ri/3oF2/2zMl5keI/iihK4xwLEAAd8Q==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, + "node_modules/@codingame/monaco-vscode-theme-service-override/node_modules/@codingame/monaco-vscode-host-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-host-service-override/-/monaco-vscode-host-service-override-8.0.3.tgz", + "integrity": "sha512-VHwFyWTkOqOT+WLB7hC4zZFoahTbcFGJW/MutlR3c5+09v2qddMm2IsxcHKbI3IbHyb4TgPgC0arV4rs1FaNWQ==", + "license": "MIT", "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true, - "engines": { - "node": ">= 0.6" + "node_modules/@codingame/monaco-vscode-theme-service-override/node_modules/@codingame/monaco-vscode-layout-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-layout-service-override/-/monaco-vscode-layout-service-override-8.0.3.tgz", + "integrity": "sha512-/so4xozWoEzbqAVIh6iXosNwA7pTpcmj9uBYCXVrjO4CHxXM9qKf9+ndidO9gwGIoiWYFBUJB6XTQOnCLMRqng==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, + "node_modules/@codingame/monaco-vscode-theme-service-override/node_modules/@codingame/monaco-vscode-quickaccess-service-override": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-quickaccess-service-override/-/monaco-vscode-quickaccess-service-override-8.0.3.tgz", + "integrity": "sha512-HNFPcQlXEn38abnfSR4JWa5oeYLsC7cCA0eqb6LkpeCMTODlP44mdahaHHWadELOpaD5ZhV4KO+GY2YcgmVXIA==", + "license": "MIT", "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" + "vscode": "npm:@codingame/monaco-vscode-api@8.0.3" } }, - "node_modules/min-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", - "dev": true, - "engines": { - "node": ">=4" + "node_modules/@codingame/monaco-vscode-theme-service-override/node_modules/vscode": { + "name": "@codingame/monaco-vscode-api", + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-api/-/monaco-vscode-api-8.0.3.tgz", + "integrity": "sha512-7Lnha7sspHaZq9OKdvN26mrXtaMxKvK2hri7wLNT5Z/SadM8Pj6CmCv/aDD4UpSaGfc7f6OFwsiqBmsbOYpjIA==", + "license": "MIT", + "dependencies": { + "@codingame/monaco-vscode-base-service-override": "8.0.3", + "@codingame/monaco-vscode-environment-service-override": "8.0.3", + "@codingame/monaco-vscode-extensions-service-override": "8.0.3", + "@codingame/monaco-vscode-files-service-override": "8.0.3", + "@codingame/monaco-vscode-host-service-override": "8.0.3", + "@codingame/monaco-vscode-layout-service-override": "8.0.3", + "@codingame/monaco-vscode-quickaccess-service-override": "8.0.3", + "@vscode/iconv-lite-umd": "0.7.0", + "jschardet": "3.1.3" } }, - "node_modules/mini-svg-data-uri": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz", - "integrity": "sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==", + "node_modules/@csstools/css-parser-algorithms": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.7.1.tgz", + "integrity": "sha512-2SJS42gxmACHgikc1WGesXLIT8d/q2l0UFM7TaEeIzdFCE/FPMtTiizcPGGJtlPo2xuQzY09OhrLTzRxqJqwGw==", "dev": true, - "bin": { - "mini-svg-data-uri": "cli.js" + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "peer": true, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^2.4.1" } }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, + "node_modules/@csstools/css-tokenizer": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.4.1.tgz", + "integrity": "sha512-eQ9DIktFJBhGjioABJRtUucoWR2mwllurfnM8LuNGAqX3ViZXaUchqk+1s7jjtkFiT9ySdACsFEA3etErkALUg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "peer": true, "engines": { - "node": "*" + "node": "^14 || ^16 || >=18" } }, - "node_modules/minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", - "dev": true - }, - "node_modules/minimist-options": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", - "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", + "node_modules/@csstools/media-query-list-parser": { + "version": "2.1.13", + "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.13.tgz", + "integrity": "sha512-XaHr+16KRU9Gf8XLi3q8kDlI18d5vzKSKCY510Vrtc9iNR0NJzbY9hhTmwhzYZj/ZwGL4VmB3TA9hJW0Um2qFA==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", "peer": true, - "dependencies": { - "arrify": "^1.0.1", - "is-plain-obj": "^1.1.0", - "kind-of": "^6.0.3" - }, "engines": { - "node": ">= 6" + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^2.7.1", + "@csstools/css-tokenizer": "^2.4.1" } }, - "node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], "engines": { - "node": ">=10" + "node": ">=12" } }, - "node_modules/monaco-editor": { - "version": "0.30.1", - "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.30.1.tgz", - "integrity": "sha512-B/y4+b2O5G2gjuxIFtCE2EkM17R2NM7/3F8x0qcPsqy4V83bitJTIO4TIeZpYlzu/xy6INiY/+84BEm6+7Cmzg==" - }, - "node_modules/mri": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", - "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", + "node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=4" + "node": ">=12" } }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/nanoid": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", - "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", + "node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], "dev": true, - "bin": { - "nanoid": "bin/nanoid.cjs" - }, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + "node": ">=12" } }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true - }, - "node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "whatwg-url": "^5.0.0" - }, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } + "node": ">=12" } }, - "node_modules/node-releases": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.4.tgz", - "integrity": "sha512-gbMzqQtTtDz/00jQzZ21PQzdI9PyLYqUSvD0p3naOhX4odFji0ZxYdnVwPTxmSwkmxhcFImpozceidSG+AgoPQ==", - "dev": true - }, - "node_modules/normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], "dev": true, - "peer": true, - "dependencies": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" - }, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=10" + "node": ">=12" } }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=0.10.0" + "node": ">=12" } }, - "node_modules/normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": ">=0.10.0" + "node": ">=12" } }, - "node_modules/normalize-selector": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/normalize-selector/-/normalize-selector-0.2.0.tgz", - "integrity": "sha1-0LFF62kRicY6eNIB3E/bEpPvDAM=", + "node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], "dev": true, - "peer": true + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } }, - "node_modules/normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=12" } }, - "node_modules/nth-check": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", - "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", + "node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "node_modules/object-hash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", - "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">= 6" + "node": ">=12" } }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], "dev": true, - "dependencies": { - "wrappy": "1" + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "node_modules/openapi-typescript-codegen": { - "version": "0.11.8", - "resolved": "https://registry.npmjs.org/openapi-typescript-codegen/-/openapi-typescript-codegen-0.11.8.tgz", - "integrity": "sha512-Hurkrn7tfOT4UibZaJljUfoApU80SU8UF/o0zFc/NjG1si0TjXl1L8iT7lF0alBu6D87RZNwfojAh8v4//IL9w==", + "node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], "dev": true, - "dependencies": { - "@types/node-fetch": "^2.5.12", - "abort-controller": "^3.0.0", - "axios": "^0.24.0", - "camelcase": "^6.2.0", - "commander": "^8.3.0", - "form-data": "^4.0.0", - "handlebars": "^4.7.6", - "json-schema-ref-parser": "^9.0.7", - "mkdirp": "^1.0.4", - "node-fetch": "^2.6.5", - "rimraf": "^3.0.2" - }, - "bin": { - "openapi": "bin/index.js" + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], "dev": true, - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - }, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">= 0.8.0" + "node": ">=12" } }, - "node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], "dev": true, - "peer": true, - "dependencies": { - "p-try": "^2.0.0" - }, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=12" } }, - "node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], "dev": true, - "peer": true, - "dependencies": { - "p-limit": "^2.2.0" - }, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], "dev": true, - "peer": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=6" + "node": ">=12" } }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "callsites": "^3.0.0" - }, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], "engines": { - "node": ">=6" + "node": ">=12" } }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], "dev": true, - "peer": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=12" } }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], "dev": true, - "peer": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=0.10.0" + "node": ">=12" } }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, "engines": { - "node": ">=8.6" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, - "node_modules/postcss": { - "version": "8.4.13", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.13.tgz", - "integrity": "sha512-jtL6eTBrza5MPzy8oJLFuUscHDXTV5KcLlqAWHl5q5WYRfnNRGSmOZmOZ1T6Gy7A99mOZfqungmZMpMmCVJ8ZA==", + "node_modules/@eslint-community/regexpp": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - } - ], - "dependencies": { - "nanoid": "^3.3.3", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, "engines": { - "node": "^10 || ^12 || >=14" + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, - "node_modules/postcss-calc": { - "version": "8.2.4", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", - "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", + "node_modules/@eslint/eslintrc": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.3.tgz", + "integrity": "sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA==", "dev": true, "dependencies": { - "postcss-selector-parser": "^6.0.9", - "postcss-value-parser": "^4.2.0" + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" }, - "peerDependencies": { - "postcss": "^8.2.2" + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/postcss-colormin": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.0.tgz", - "integrity": "sha512-WdDO4gOFG2Z8n4P8TWBpshnL3JpmNmJwdnfP2gbk2qBA8PWwOYcmjmI/t3CmMeL72a7Hkd+x/Mg9O2/0rD54Pg==", + "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "dependencies": { - "browserslist": "^4.16.6", - "caniuse-api": "^3.0.0", - "colord": "^2.9.1", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/postcss-convert-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.0.tgz", - "integrity": "sha512-GkyPbZEYJiWtQB0KZ0X6qusqFHUepguBCNFi9t5JJc7I2OTXG7C0twbTLvCfaKOLl3rSXmpAwV7W5txd91V84g==", + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, "dependencies": { - "postcss-value-parser": "^4.2.0" + "brace-expansion": "^1.1.7" }, "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": "*" } }, - "node_modules/postcss-discard-comments": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.1.tgz", - "integrity": "sha512-5JscyFmvkUxz/5/+TB3QTTT9Gi9jHkcn8dcmmuN68JQcv3aQg4y88yEHHhwFB52l/NkaJ43O0dbksGMAo49nfQ==", + "node_modules/@eslint/js": { + "version": "8.54.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.54.0.tgz", + "integrity": "sha512-ut5V+D+fOoWPgGGNj83GGjnntO39xDy6DWxO0wb7Jp3DcMX0TfIqdzHF85VTQkerdyGmuuMD9AKAo5KiNlf/AQ==", "dev": true, "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/postcss-discard-duplicates": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", - "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", + "node_modules/@floating-ui/core": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.5.0.tgz", + "integrity": "sha512-kK1h4m36DQ0UHGj5Ah4db7R0rHemTqqO0QLvUqi1/mUUp3LuAWbWxdxSIf/XsnH9VS6rRVPLJCncjRzUvyCLXg==", + "dev": true, + "dependencies": { + "@floating-ui/utils": "^0.1.3" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.5.3.tgz", + "integrity": "sha512-ClAbQnEqJAKCJOEbbLo5IUlZHkNszqhuxS4fHAVxRPXPya6Ysf2G8KypnYcOTpx6I8xcgF9bbHb6g/2KpbV8qA==", + "dev": true, + "dependencies": { + "@floating-ui/core": "^1.4.2", + "@floating-ui/utils": "^0.1.3" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.1.6.tgz", + "integrity": "sha512-OfX7E2oUDYxtBvsuS4e/jSn4Q9Qb6DzgeYtsAdkPZ47znpoNsMgZw0+tVijiv3uGNR6dgNlty6r9rzIzHjtd/A==", + "dev": true + }, + "node_modules/@hey-api/openapi-ts": { + "version": "0.43.0", + "resolved": "https://registry.npmjs.org/@hey-api/openapi-ts/-/openapi-ts-0.43.0.tgz", + "integrity": "sha512-Qq3bcy579T+8hhhaSW7MuFgvD07tl8njiFh8/mTYGXerBjoWxAn2ygkV+yE+RKY0eMvSmeH2+9yEAsrVrh5Hjw==", "dev": true, + "dependencies": { + "@apidevtools/json-schema-ref-parser": "11.6.1", + "c12": "1.10.0", + "camelcase": "8.0.0", + "commander": "12.0.0", + "handlebars": "4.7.8" + }, + "bin": { + "openapi-ts": "bin/index.cjs" + }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^18.0.0 || >=20.0.0" }, "peerDependencies": { - "postcss": "^8.2.15" + "typescript": "^5.x" } }, - "node_modules/postcss-discard-empty": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", - "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", + "node_modules/@hey-api/openapi-ts/node_modules/camelcase": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-8.0.0.tgz", + "integrity": "sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==", "dev": true, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": ">=16" }, - "peerDependencies": { - "postcss": "^8.2.15" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/postcss-discard-overridden": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", - "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", + "node_modules/@hey-api/openapi-ts/node_modules/commander": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.0.0.tgz", + "integrity": "sha512-MwVNWlYjDTtOjX5PiD7o5pK0UrFU/OYgcJfjjK4RaHZETNtjJqrZa9Y9ds88+A+f+d5lv+561eZ+yCKoS3gbAA==", "dev": true, "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": ">=18" } }, - "node_modules/postcss-js": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz", - "integrity": "sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==", + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.13", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz", + "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==", "dev": true, "dependencies": { - "camelcase-css": "^2.0.1" + "@humanwhocodes/object-schema": "^2.0.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" }, "engines": { - "node": "^12 || ^14 || >= 16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": "^8.3.3" + "node": ">=10.10.0" } }, - "node_modules/postcss-load-config": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", - "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", + "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "dependencies": { - "lilconfig": "^2.0.5", - "yaml": "^1.10.2" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">= 10" + "node": "*" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": ">=8.0.9", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "postcss": { - "optional": true - }, - "ts-node": { - "optional": true - } + "type": "github", + "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/postcss-media-query-parser": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", - "integrity": "sha1-J7Ocb02U+Bsac7j3Y1HGCeXO8kQ=", - "dev": true, - "peer": true + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz", + "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==", + "dev": true }, - "node_modules/postcss-merge-longhand": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.4.tgz", - "integrity": "sha512-hbqRRqYfmXoGpzYKeW0/NCZhvNyQIlQeWVSao5iKWdyx7skLvCfQFGIUsP9NUs3dSbPac2IC4Go85/zG+7MlmA==", - "dev": true, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", "dependencies": { - "postcss-value-parser": "^4.2.0", - "stylehacks": "^5.1.0" + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", + "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@jsdevtools/ono": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@jsdevtools/ono/-/ono-7.1.3.tgz", + "integrity": "sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==", + "dev": true + }, + "node_modules/@json2csv/formatters": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/@json2csv/formatters/-/formatters-7.0.6.tgz", + "integrity": "sha512-hjIk1H1TR4ydU5ntIENEPgoMGW+Q7mJ+537sDFDbsk+Y3EPl2i4NfFVjw0NJRgT+ihm8X30M67mA8AS6jPidSA==" + }, + "node_modules/@json2csv/plainjs": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/@json2csv/plainjs/-/plainjs-7.0.6.tgz", + "integrity": "sha512-4Md7RPDCSYpmW1HWIpWBOqCd4vWfIqm53S3e/uzQ62iGi7L3r34fK/8nhOMEe+/eVfCx8+gdSCt1d74SlacQHw==", + "dependencies": { + "@json2csv/formatters": "^7.0.6", + "@streamparser/json": "^0.0.20" + } + }, + "node_modules/@kurkle/color": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@kurkle/color/-/color-0.3.2.tgz", + "integrity": "sha512-fuscdXJ9G1qb7W8VdHi+IwRqij3lBkosAm4ydQtEmbY58OzHXqQhvlxqEkoz0yssNVn38bcpRWgA9PP+OGoisw==" + }, + "node_modules/@leeoniya/ufuzzy": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@leeoniya/ufuzzy/-/ufuzzy-1.0.11.tgz", + "integrity": "sha512-QWyEseqEK9t50h9baDmoPkTPSczWZH5TaZAXSBBWbSI6+AxHFd6ldZRmyvCKfyNvjceJ6MwqKCeizsVT+gyJPw==" + }, + "node_modules/@mapbox/jsonlint-lines-primitives": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@mapbox/jsonlint-lines-primitives/-/jsonlint-lines-primitives-2.0.2.tgz", + "integrity": "sha512-rY0o9A5ECsTQRVhv7tL/OyDpGAoUB4tTvLiW1DSzQGq4bvTPhNw1VpSNjDJc5GFZ2XuyOtSWSVN05qOtcD71qQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@mapbox/mapbox-gl-style-spec": { + "version": "13.28.0", + "resolved": "https://registry.npmjs.org/@mapbox/mapbox-gl-style-spec/-/mapbox-gl-style-spec-13.28.0.tgz", + "integrity": "sha512-B8xM7Fp1nh5kejfIl4SWeY0gtIeewbuRencqO3cJDrCHZpaPg7uY+V8abuR+esMeuOjRl5cLhVTP40v+1ywxbg==", + "dependencies": { + "@mapbox/jsonlint-lines-primitives": "~2.0.2", + "@mapbox/point-geometry": "^0.1.0", + "@mapbox/unitbezier": "^0.0.0", + "csscolorparser": "~1.0.2", + "json-stringify-pretty-compact": "^2.0.0", + "minimist": "^1.2.6", + "rw": "^1.3.3", + "sort-object": "^0.3.2" }, - "peerDependencies": { - "postcss": "^8.2.15" + "bin": { + "gl-style-composite": "bin/gl-style-composite.js", + "gl-style-format": "bin/gl-style-format.js", + "gl-style-migrate": "bin/gl-style-migrate.js", + "gl-style-validate": "bin/gl-style-validate.js" } }, - "node_modules/postcss-merge-rules": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.1.tgz", - "integrity": "sha512-8wv8q2cXjEuCcgpIB1Xx1pIy8/rhMPIQqYKNzEdyx37m6gpq83mQQdCxgIkFgliyEnKvdwJf/C61vN4tQDq4Ww==", + "node_modules/@mapbox/node-pre-gyp": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz", + "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==", + "optional": true, + "dependencies": { + "detect-libc": "^2.0.0", + "https-proxy-agent": "^5.0.0", + "make-dir": "^3.1.0", + "node-fetch": "^2.6.7", + "nopt": "^5.0.0", + "npmlog": "^5.0.1", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.11" + }, + "bin": { + "node-pre-gyp": "bin/node-pre-gyp" + } + }, + "node_modules/@mapbox/point-geometry": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@mapbox/point-geometry/-/point-geometry-0.1.0.tgz", + "integrity": "sha512-6j56HdLTwWGO0fJPlrZtdU/B13q8Uwmo18Ck2GnGgN9PCFyKTZ3UbXeEdRFh18i9XQ92eH2VdtpJHpBD3aripQ==" + }, + "node_modules/@mapbox/unitbezier": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/@mapbox/unitbezier/-/unitbezier-0.0.0.tgz", + "integrity": "sha512-HPnRdYO0WjFjRTSwO3frz1wKaU649OBFPX3Zo/2WZvuRi6zMiRGui8SnPQiQABgqCf8YikDe5t3HViTVw1WUzA==" + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, "dependencies": { - "browserslist": "^4.16.6", - "caniuse-api": "^3.0.0", - "cssnano-utils": "^3.1.0", - "postcss-selector-parser": "^6.0.5" + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" }, "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": ">= 8" } }, - "node_modules/postcss-minify-font-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", - "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, "dependencies": { - "postcss-value-parser": "^4.2.0" + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": ">= 8" } }, - "node_modules/postcss-minify-gradients": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", - "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", + "node_modules/@octokit/auth-token": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-4.0.0.tgz", + "integrity": "sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/core": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-5.2.0.tgz", + "integrity": "sha512-1LFfa/qnMQvEOAdzlQymH0ulepxbxnCYAKJZfMci/5XJyIHWgEYnDmgnKakbTh7CH2tFQ5O60oYDvns4i9RAIg==", "dev": true, + "license": "MIT", "dependencies": { - "colord": "^2.9.1", - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" + "@octokit/auth-token": "^4.0.0", + "@octokit/graphql": "^7.1.0", + "@octokit/request": "^8.3.1", + "@octokit/request-error": "^5.1.0", + "@octokit/types": "^13.0.0", + "before-after-hook": "^2.2.0", + "universal-user-agent": "^6.0.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": ">= 18" } }, - "node_modules/postcss-minify-params": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.2.tgz", - "integrity": "sha512-aEP+p71S/urY48HWaRHasyx4WHQJyOYaKpQ6eXl8k0kxg66Wt/30VR6/woh8THgcpRbonJD5IeD+CzNhPi1L8g==", + "node_modules/@octokit/endpoint": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-9.0.5.tgz", + "integrity": "sha512-ekqR4/+PCLkEBF6qgj8WqJfvDq65RH85OAgrtnVp1mSxaXF03u2xW/hUdweGS5654IlC0wkNYC18Z50tSYTAFw==", "dev": true, + "license": "MIT", "dependencies": { - "browserslist": "^4.16.6", - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" + "@octokit/types": "^13.1.0", + "universal-user-agent": "^6.0.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": ">= 18" } }, - "node_modules/postcss-minify-selectors": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.0.tgz", - "integrity": "sha512-vYxvHkW+iULstA+ctVNx0VoRAR4THQQRkG77o0oa4/mBS0OzGvvzLIvHDv/nNEM0crzN2WIyFU5X7wZhaUK3RA==", + "node_modules/@octokit/graphql": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-7.1.0.tgz", + "integrity": "sha512-r+oZUH7aMFui1ypZnAvZmn0KSqAUgE1/tUXIWaqUCa1758ts/Jio84GZuzsvUkme98kv0WFY8//n0J1Z+vsIsQ==", "dev": true, + "license": "MIT", "dependencies": { - "postcss-selector-parser": "^6.0.5" + "@octokit/request": "^8.3.0", + "@octokit/types": "^13.0.0", + "universal-user-agent": "^6.0.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": ">= 18" } }, - "node_modules/postcss-nested": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.6.tgz", - "integrity": "sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==", + "node_modules/@octokit/openapi-types": { + "version": "22.2.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-22.2.0.tgz", + "integrity": "sha512-QBhVjcUa9W7Wwhm6DBFu6ZZ+1/t/oYxqc2tp81Pi41YNuJinbFRx8B133qVOrAaBbF7D/m0Et6f9/pZt9Rc+tg==", "dev": true, + "license": "MIT" + }, + "node_modules/@octokit/plugin-paginate-rest": { + "version": "11.3.1", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-11.3.1.tgz", + "integrity": "sha512-ryqobs26cLtM1kQxqeZui4v8FeznirUsksiA+RYemMPJ7Micju0WSkv50dBksTuZks9O5cg4wp+t8fZ/cLY56g==", + "dev": true, + "license": "MIT", "dependencies": { - "postcss-selector-parser": "^6.0.6" + "@octokit/types": "^13.5.0" }, "engines": { - "node": ">=12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" + "node": ">= 18" }, "peerDependencies": { - "postcss": "^8.2.14" + "@octokit/core": "5" } }, - "node_modules/postcss-normalize-charset": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", - "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", + "node_modules/@octokit/plugin-request-log": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-4.0.1.tgz", + "integrity": "sha512-GihNqNpGHorUrO7Qa9JbAl0dbLnqJVrV8OXe2Zm5/Y4wFkZQDfTreBzVmiRfJVfE4mClXdihHnbpyyO9FSX4HA==", "dev": true, + "license": "MIT", "engines": { - "node": "^10 || ^12 || >=14.0" + "node": ">= 18" }, "peerDependencies": { - "postcss": "^8.2.15" + "@octokit/core": "5" } }, - "node_modules/postcss-normalize-display-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", - "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", + "node_modules/@octokit/plugin-rest-endpoint-methods": { + "version": "13.2.2", + "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-13.2.2.tgz", + "integrity": "sha512-EI7kXWidkt3Xlok5uN43suK99VWqc8OaIMktY9d9+RNKl69juoTyxmLoWPIZgJYzi41qj/9zU7G/ljnNOJ5AFA==", "dev": true, + "license": "MIT", "dependencies": { - "postcss-value-parser": "^4.2.0" + "@octokit/types": "^13.5.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": ">= 18" }, "peerDependencies": { - "postcss": "^8.2.15" + "@octokit/core": "^5" } }, - "node_modules/postcss-normalize-positions": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.0.tgz", - "integrity": "sha512-8gmItgA4H5xiUxgN/3TVvXRoJxkAWLW6f/KKhdsH03atg0cB8ilXnrB5PpSshwVu/dD2ZsRFQcR1OEmSBDAgcQ==", + "node_modules/@octokit/request": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-8.4.0.tgz", + "integrity": "sha512-9Bb014e+m2TgBeEJGEbdplMVWwPmL1FPtggHQRkV+WVsMggPtEkLKPlcVYm/o8xKLkpJ7B+6N8WfQMtDLX2Dpw==", "dev": true, + "license": "MIT", "dependencies": { - "postcss-value-parser": "^4.2.0" + "@octokit/endpoint": "^9.0.1", + "@octokit/request-error": "^5.1.0", + "@octokit/types": "^13.1.0", + "universal-user-agent": "^6.0.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": ">= 18" } }, - "node_modules/postcss-normalize-repeat-style": { + "node_modules/@octokit/request-error": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.0.tgz", - "integrity": "sha512-IR3uBjc+7mcWGL6CtniKNQ4Rr5fTxwkaDHwMBDGGs1x9IVRkYIT/M4NelZWkAOBdV6v3Z9S46zqaKGlyzHSchw==", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-5.1.0.tgz", + "integrity": "sha512-GETXfE05J0+7H2STzekpKObFe765O5dlAKUTLNGeH+x47z7JjXHfsHKo5z21D/o/IOZTUEI6nyWyR+bZVP/n5Q==", "dev": true, + "license": "MIT", "dependencies": { - "postcss-value-parser": "^4.2.0" + "@octokit/types": "^13.1.0", + "deprecation": "^2.0.0", + "once": "^1.4.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": ">= 18" } }, - "node_modules/postcss-normalize-string": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", - "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", + "node_modules/@octokit/rest": { + "version": "20.1.1", + "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-20.1.1.tgz", + "integrity": "sha512-MB4AYDsM5jhIHro/dq4ix1iWTLGToIGk6cWF5L6vanFaMble5jTX/UBQyiv05HsWnwUtY8JrfHy2LWfKwihqMw==", "dev": true, + "license": "MIT", "dependencies": { - "postcss-value-parser": "^4.2.0" + "@octokit/core": "^5.0.2", + "@octokit/plugin-paginate-rest": "11.3.1", + "@octokit/plugin-request-log": "^4.0.0", + "@octokit/plugin-rest-endpoint-methods": "13.2.2" }, "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": ">= 18" } }, - "node_modules/postcss-normalize-timing-functions": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", - "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", + "node_modules/@octokit/types": { + "version": "13.5.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.5.0.tgz", + "integrity": "sha512-HdqWTf5Z3qwDVlzCrP8UJquMwunpDiMPt5er+QjGzL4hqr/vBVY/MauQgS1xWxCDT1oMx1EULyqxncdCY/NVSQ==", "dev": true, + "license": "MIT", "dependencies": { - "postcss-value-parser": "^4.2.0" + "@octokit/openapi-types": "^22.2.0" + } + }, + "node_modules/@petamoriken/float16": { + "version": "3.8.4", + "resolved": "https://registry.npmjs.org/@petamoriken/float16/-/float16-3.8.4.tgz", + "integrity": "sha512-kB+NJ5Br56ZhElKsf0pM7/PQfrDdDVMRz8f0JM6eVOGE+L89z9hwcst9QvWBBnazzuqGTGtPsJNZoQ1JdNiGSQ==" + }, + "node_modules/@playwright/test": { + "version": "1.40.0", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.40.0.tgz", + "integrity": "sha512-PdW+kn4eV99iP5gxWNSDQCbhMaDVej+RXL5xr6t04nbKLCBwYtA046t7ofoczHOm8u6c+45hpDKQVZqtqwkeQg==", + "dev": true, + "dependencies": { + "playwright": "1.40.0" }, - "engines": { - "node": "^10 || ^12 || >=14.0" + "bin": { + "playwright": "cli.js" }, + "engines": { + "node": ">=16" + } + }, + "node_modules/@polka/url": { + "version": "1.0.0-next.24", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.24.tgz", + "integrity": "sha512-2LuNTFBIO0m7kKIQvvPHN6UE63VjpmL9rnEEaOOaiSPbZK+zUOYIzBAWcED+3XYzhYsd/0mD57VdxAEqqV52CQ==", + "dev": true + }, + "node_modules/@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/@redocly/json-to-json-schema": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/@redocly/json-to-json-schema/-/json-to-json-schema-0.0.1.tgz", + "integrity": "sha512-dSMyuNPN2k+tFeNZ0+QJ7S1zDJ0UeNL+lpnPFR9K5avj2V4uG4m6FdjrApQ9Zi35AIocaDp/KGfBD9gR5MLUbQ==" + }, + "node_modules/@rgossiaux/svelte-headlessui": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@rgossiaux/svelte-headlessui/-/svelte-headlessui-2.0.0.tgz", + "integrity": "sha512-ksh245HqMM8yqkzd/OyAK2FCHZYOSA3ldLIHab7C9S60FmifqT24JFVgi8tZpsDEMk3plbfQvfah93n5IEi8sg==", + "dev": true, "peerDependencies": { - "postcss": "^8.2.15" + "svelte": "^3.47.0" } }, - "node_modules/postcss-normalize-unicode": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.0.tgz", - "integrity": "sha512-J6M3MizAAZ2dOdSjy2caayJLQT8E8K9XjLce8AUQMwOrCvjCHv24aLC/Lps1R1ylOfol5VIDMaM/Lo9NGlk1SQ==", + "node_modules/@rollup/pluginutils": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.5.tgz", + "integrity": "sha512-6aEYR910NyP73oHiJglti74iRyOwgFU4x3meH/H8OJx6Ry0j6cOVZ5X/wTvub7G7Ao6qaHBEaNsV3GLJkSsF+Q==", "dev": true, "dependencies": { - "browserslist": "^4.16.6", - "postcss-value-parser": "^4.2.0" + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": ">=14.0.0" }, "peerDependencies": { - "postcss": "^8.2.15" + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } } }, - "node_modules/postcss-normalize-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", - "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", + "node_modules/@rollup/pluginutils/node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true + }, + "node_modules/@rollup/pluginutils/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.20.0.tgz", + "integrity": "sha512-TSpWzflCc4VGAUJZlPpgAJE1+V60MePDQnBd7PPkpuEmOy8i87aL6tinFGKBFKuEDikYpig72QzdT3QPYIi+oA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.20.0.tgz", + "integrity": "sha512-u00Ro/nok7oGzVuh/FMYfNoGqxU5CPWz1mxV85S2w9LxHR8OoMQBuSk+3BKVIDYgkpeOET5yXkx90OYFc+ytpQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.20.0.tgz", + "integrity": "sha512-uFVfvzvsdGtlSLuL0ZlvPJvl6ZmrH4CBwLGEFPe7hUmf7htGAN+aXo43R/V6LATyxlKVC/m6UsLb7jbG+LG39Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.20.0.tgz", + "integrity": "sha512-xbrMDdlev53vNXexEa6l0LffojxhqDTBeL+VUxuuIXys4x6xyvbKq5XqTXBCEUA8ty8iEJblHvFaWRJTk/icAQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.20.0.tgz", + "integrity": "sha512-jMYvxZwGmoHFBTbr12Xc6wOdc2xA5tF5F2q6t7Rcfab68TT0n+r7dgawD4qhPEvasDsVpQi+MgDzj2faOLsZjA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.20.0.tgz", + "integrity": "sha512-1asSTl4HKuIHIB1GcdFHNNZhxAYEdqML/MW4QmPS4G0ivbEcBr1JKlFLKsIRqjSwOBkdItn3/ZDlyvZ/N6KPlw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.20.0.tgz", + "integrity": "sha512-COBb8Bkx56KldOYJfMf6wKeYJrtJ9vEgBRAOkfw6Ens0tnmzPqvlpjZiLgkhg6cA3DGzCmLmmd319pmHvKWWlQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.20.0.tgz", + "integrity": "sha512-+it+mBSyMslVQa8wSPvBx53fYuZK/oLTu5RJoXogjk6x7Q7sz1GNRsXWjn6SwyJm8E/oMjNVwPhmNdIjwP135Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.20.0.tgz", + "integrity": "sha512-yAMvqhPfGKsAxHN8I4+jE0CpLWD8cv4z7CK7BMmhjDuz606Q2tFKkWRY8bHR9JQXYcoLfopo5TTqzxgPUjUMfw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.20.0.tgz", + "integrity": "sha512-qmuxFpfmi/2SUkAw95TtNq/w/I7Gpjurx609OOOV7U4vhvUhBcftcmXwl3rqAek+ADBwSjIC4IVNLiszoj3dPA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.20.0.tgz", + "integrity": "sha512-I0BtGXddHSHjV1mqTNkgUZLnS3WtsqebAXv11D5BZE/gfw5KoyXSAXVqyJximQXNvNzUo4GKlCK/dIwXlz+jlg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.20.0.tgz", + "integrity": "sha512-y+eoL2I3iphUg9tN9GB6ku1FA8kOfmF4oUEWhztDJ4KXJy1agk/9+pejOuZkNFhRwHAOxMsBPLbXPd6mJiCwew==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.20.0.tgz", + "integrity": "sha512-hM3nhW40kBNYUkZb/r9k2FKK+/MnKglX7UYd4ZUy5DJs8/sMsIbqWK2piZtVGE3kcXVNj3B2IrUYROJMMCikNg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.20.0.tgz", + "integrity": "sha512-psegMvP+Ik/Bg7QRJbv8w8PAytPA7Uo8fpFjXyCRHWm6Nt42L+JtoqH8eDQ5hRP7/XW2UiIriy1Z46jf0Oa1kA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.20.0.tgz", + "integrity": "sha512-GabekH3w4lgAJpVxkk7hUzUf2hICSQO0a/BLFA11/RMxQT92MabKAqyubzDZmMOC/hcJNlc+rrypzNzYl4Dx7A==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.20.0.tgz", + "integrity": "sha512-aJ1EJSuTdGnM6qbVC4B5DSmozPTqIag9fSzXRNNo+humQLG89XpPgdt16Ia56ORD7s+H8Pmyx44uczDQ0yDzpg==", + "cpu": [ + "x64" + ], "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@smithy/types": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.5.0.tgz", + "integrity": "sha512-/a31lYofrMBkJb3BuPlYJTMKDj0hUmKUP6JFZQu6YVuQVoAjubiY0A52U9S0Uysd33n/djexCUSNJ+G9bf3/aA==", "dependencies": { - "normalize-url": "^6.0.1", - "postcss-value-parser": "^4.2.0" + "tslib": "^2.5.0" }, "engines": { - "node": "^10 || ^12 || >=14.0" - }, + "node": ">=14.0.0" + } + }, + "node_modules/@streamparser/json": { + "version": "0.0.20", + "resolved": "https://registry.npmjs.org/@streamparser/json/-/json-0.0.20.tgz", + "integrity": "sha512-VqAAkydywPpkw63WQhPVKCD3SdwXuihCUVZbbiY3SfSTGQyHmwRoq27y4dmJdZuJwd5JIlQoMPyGvMbUPY0RKQ==" + }, + "node_modules/@svelte-put/shortcut": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@svelte-put/shortcut/-/shortcut-3.1.1.tgz", + "integrity": "sha512-2L5EYTZXiaKvbEelVkg5znxqvfZGZai3m97+cAiUBhLZwXnGtviTDpHxOoZBsqz41szlfRMcamW/8o0+fbW3ZQ==", "peerDependencies": { - "postcss": "^8.2.15" + "svelte": "^3.55.0 || ^4.0.0 || ^5.0.0" } }, - "node_modules/postcss-normalize-whitespace": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", - "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", + "node_modules/@sveltejs/adapter-static": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sveltejs/adapter-static/-/adapter-static-3.0.1.tgz", + "integrity": "sha512-6lMvf7xYEJ+oGeR5L8DFJJrowkefTK6ZgA4JiMqoClMkKq0s6yvsd3FZfCFvX1fQ0tpCD7fkuRVHsnUVgsHyNg==", + "dev": true, + "peerDependencies": { + "@sveltejs/kit": "^2.0.0" + } + }, + "node_modules/@sveltejs/kit": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-2.5.0.tgz", + "integrity": "sha512-1uyXvzC2Lu1FZa30T4y5jUAC21R309ZMRG0TPt+PPPbNUoDpy8zSmSNVWYaBWxYDqLGQ5oPNWvjvvF2IjJ1jmA==", "dev": true, + "hasInstallScript": true, "dependencies": { - "postcss-value-parser": "^4.2.0" + "@types/cookie": "^0.6.0", + "cookie": "^0.6.0", + "devalue": "^4.3.2", + "esm-env": "^1.0.0", + "import-meta-resolve": "^4.0.0", + "kleur": "^4.1.5", + "magic-string": "^0.30.5", + "mrmime": "^2.0.0", + "sade": "^1.8.1", + "set-cookie-parser": "^2.6.0", + "sirv": "^2.0.4", + "tiny-glob": "^0.2.9" + }, + "bin": { + "svelte-kit": "svelte-kit.js" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": ">=18.13" }, "peerDependencies": { - "postcss": "^8.2.15" + "@sveltejs/vite-plugin-svelte": "^3.0.0", + "svelte": "^4.0.0 || ^5.0.0-next.0", + "vite": "^5.0.3" } }, - "node_modules/postcss-ordered-values": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.1.tgz", - "integrity": "sha512-7lxgXF0NaoMIgyihL/2boNAEZKiW0+HkMhdKMTD93CjW8TdCy2hSdj8lsAo+uwm7EDG16Da2Jdmtqpedl0cMfw==", + "node_modules/@sveltejs/package": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@sveltejs/package/-/package-2.2.2.tgz", + "integrity": "sha512-rP3sVv6cAntcdcG4r4KspLU6nZYYUrHJBAX3Arrw0KJFdgxtlsi2iDwN0Jwr/vIkgjcU0ZPWM8kkT5kpZDlWAw==", "dev": true, "dependencies": { - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" + "chokidar": "^3.5.3", + "kleur": "^4.1.5", + "sade": "^1.8.1", + "semver": "^7.5.3", + "svelte2tsx": "~0.6.19" + }, + "bin": { + "svelte-package": "svelte-package.js" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^16.14 || >=18" }, "peerDependencies": { - "postcss": "^8.2.15" + "svelte": "^3.44.0 || ^4.0.0" } }, - "node_modules/postcss-reduce-initial": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.0.tgz", - "integrity": "sha512-5OgTUviz0aeH6MtBjHfbr57tml13PuedK/Ecg8szzd4XRMbYxH4572JFG067z+FqBIf6Zp/d+0581glkvvWMFw==", + "node_modules/@sveltejs/vite-plugin-svelte": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-3.0.2.tgz", + "integrity": "sha512-MpmF/cju2HqUls50WyTHQBZUV3ovV/Uk8k66AN2gwHogNAG8wnW8xtZDhzNBsFJJuvmq1qnzA5kE7YfMJNFv2Q==", "dev": true, "dependencies": { - "browserslist": "^4.16.6", - "caniuse-api": "^3.0.0" + "@sveltejs/vite-plugin-svelte-inspector": "^2.0.0", + "debug": "^4.3.4", + "deepmerge": "^4.3.1", + "kleur": "^4.1.5", + "magic-string": "^0.30.5", + "svelte-hmr": "^0.15.3", + "vitefu": "^0.2.5" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^18.0.0 || >=20" }, "peerDependencies": { - "postcss": "^8.2.15" + "svelte": "^4.0.0 || ^5.0.0-next.0", + "vite": "^5.0.0" } }, - "node_modules/postcss-reduce-transforms": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", - "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", + "node_modules/@sveltejs/vite-plugin-svelte-inspector": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-2.0.0.tgz", + "integrity": "sha512-gjr9ZFg1BSlIpfZ4PRewigrvYmHWbDrq2uvvPB1AmTWKuM+dI1JXQSUu2pIrYLb/QncyiIGkFDFKTwJ0XqQZZg==", "dev": true, "dependencies": { - "postcss-value-parser": "^4.2.0" + "debug": "^4.3.4" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": "^18.0.0 || >=20" }, "peerDependencies": { - "postcss": "^8.2.15" + "@sveltejs/vite-plugin-svelte": "^3.0.0", + "svelte": "^4.0.0 || ^5.0.0-next.0", + "vite": "^5.0.0" } }, - "node_modules/postcss-resolve-nested-selector": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz", - "integrity": "sha1-Kcy8fDfe36wwTp//C/FZaz9qDk4=", + "node_modules/@tailwindcss/forms": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.5.7.tgz", + "integrity": "sha512-QE7X69iQI+ZXwldE+rzasvbJiyV/ju1FGHH0Qn2W3FKbuYtqp8LKcy6iSw79fVUT5/Vvf+0XgLCeYVG+UV6hOw==", "dev": true, - "peer": true + "dependencies": { + "mini-svg-data-uri": "^1.2.3" + }, + "peerDependencies": { + "tailwindcss": ">=3.0.0 || >= 3.0.0-alpha.1" + } }, - "node_modules/postcss-safe-parser": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz", - "integrity": "sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==", + "node_modules/@tailwindcss/typography": { + "version": "0.5.10", + "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.10.tgz", + "integrity": "sha512-Pe8BuPJQJd3FfRnm6H0ulKIGoMEQS+Vq01R6M5aCrFB/ccR/shT+0kXLjouGC1gFLm9hopTFN+DMP0pfwRWzPw==", "dev": true, - "peer": true, - "engines": { - "node": ">=12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" + "dependencies": { + "lodash.castarray": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.merge": "^4.6.2", + "postcss-selector-parser": "6.0.10" }, "peerDependencies": { - "postcss": "^8.3.3" + "tailwindcss": ">=3.0.0 || insiders" } }, - "node_modules/postcss-selector-parser": { - "version": "6.0.10", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", - "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", - "dev": true, + "node_modules/@tanstack/svelte-table": { + "version": "8.10.7", + "resolved": "https://registry.npmjs.org/@tanstack/svelte-table/-/svelte-table-8.10.7.tgz", + "integrity": "sha512-nHHBYAzXZKs5GseAEJJFyK8EP5arHplHJc3a1X50oUv/xnE10EY/DhLV0YSNigIbNEbDcj+AsTg/6OtamIARQg==", "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" + "@tanstack/table-core": "8.10.7" }, "engines": { - "node": ">=4" + "node": ">=12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "svelte": "^4.0.0 || ^3.49.0" } }, - "node_modules/postcss-svgo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", - "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", - "dev": true, - "dependencies": { - "postcss-value-parser": "^4.2.0", - "svgo": "^2.7.0" - }, + "node_modules/@tanstack/table-core": { + "version": "8.10.7", + "resolved": "https://registry.npmjs.org/@tanstack/table-core/-/table-core-8.10.7.tgz", + "integrity": "sha512-KQk5OMg5OH6rmbHZxuNROvdI+hKDIUxANaHlV+dPlNN7ED3qYQ/WkpY2qlXww1SIdeMlkIhpN/2L00rof0fXFw==", "engines": { - "node": "^10 || ^12 || >=14.0" + "node": ">=12" }, - "peerDependencies": { - "postcss": "^8.2.15" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" } }, - "node_modules/postcss-unique-selectors": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", - "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", + "node_modules/@trysound/sax": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", "dev": true, - "dependencies": { - "postcss-selector-parser": "^6.0.5" - }, "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" + "node": ">=10.13.0" } }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "node_modules/@types/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==", + "dev": true + }, + "node_modules/@types/d3": { + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/@types/d3/-/d3-7.4.3.tgz", + "integrity": "sha512-lZXZ9ckh5R8uiFVt8ogUNf+pIrK4EsWrx2Np75WvF/eTpJ0FMHNhjXk8CKEx/+gpHbNQyJWehbFaTvqmHWB3ww==", + "dev": true, + "dependencies": { + "@types/d3-array": "*", + "@types/d3-axis": "*", + "@types/d3-brush": "*", + "@types/d3-chord": "*", + "@types/d3-color": "*", + "@types/d3-contour": "*", + "@types/d3-delaunay": "*", + "@types/d3-dispatch": "*", + "@types/d3-drag": "*", + "@types/d3-dsv": "*", + "@types/d3-ease": "*", + "@types/d3-fetch": "*", + "@types/d3-force": "*", + "@types/d3-format": "*", + "@types/d3-geo": "*", + "@types/d3-hierarchy": "*", + "@types/d3-interpolate": "*", + "@types/d3-path": "*", + "@types/d3-polygon": "*", + "@types/d3-quadtree": "*", + "@types/d3-random": "*", + "@types/d3-scale": "*", + "@types/d3-scale-chromatic": "*", + "@types/d3-selection": "*", + "@types/d3-shape": "*", + "@types/d3-time": "*", + "@types/d3-time-format": "*", + "@types/d3-timer": "*", + "@types/d3-transition": "*", + "@types/d3-zoom": "*" + } + }, + "node_modules/@types/d3-array": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.1.tgz", + "integrity": "sha512-Y2Jn2idRrLzUfAKV2LyRImR+y4oa2AntrgID95SHJxuMUrkNXmanDSed71sRNZysveJVt1hLLemQZIady0FpEg==", "dev": true }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "node_modules/@types/d3-axis": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-axis/-/d3-axis-3.0.6.tgz", + "integrity": "sha512-pYeijfZuBd87T0hGn0FO1vQ/cgLk6E1ALJjfkC0oJ8cbwkZl3TpgS8bVBLZN+2jjGgg38epgxb2zmoGtSfvgMw==", "dev": true, - "engines": { - "node": ">= 0.8.0" + "dependencies": { + "@types/d3-selection": "*" } }, - "node_modules/prettier": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.6.2.tgz", - "integrity": "sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew==", + "node_modules/@types/d3-brush": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-brush/-/d3-brush-3.0.6.tgz", + "integrity": "sha512-nH60IZNNxEcrh6L1ZSMNA28rj27ut/2ZmI3r96Zd+1jrZD++zD3LsMIjWlvg4AYrHn/Pqz4CF3veCxGjtbqt7A==", "dev": true, - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" + "dependencies": { + "@types/d3-selection": "*" } }, - "node_modules/prettier-plugin-svelte": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/prettier-plugin-svelte/-/prettier-plugin-svelte-2.7.0.tgz", - "integrity": "sha512-fQhhZICprZot2IqEyoiUYLTRdumULGRvw0o4dzl5jt0jfzVWdGqeYW27QTWAeXhoupEZJULmNoH3ueJwUWFLIA==", + "node_modules/@types/d3-chord": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-chord/-/d3-chord-3.0.6.tgz", + "integrity": "sha512-LFYWWd8nwfwEmTZG9PfQxd17HbNPksHBiJHaKuY1XeqscXacsS2tyoo6OdRsjf+NQYeB6XrNL3a25E3gH69lcg==", + "dev": true + }, + "node_modules/@types/d3-color": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.3.tgz", + "integrity": "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==" + }, + "node_modules/@types/d3-contour": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-contour/-/d3-contour-3.0.6.tgz", + "integrity": "sha512-BjzLgXGnCWjUSYGfH1cpdo41/hgdWETu4YxpezoztawmqsvCeep+8QGfiY6YbDvfgHz/DkjeIkkZVJavB4a3rg==", "dev": true, - "peerDependencies": { - "prettier": "^1.16.4 || ^2.0.0", - "svelte": "^3.2.0" + "dependencies": { + "@types/d3-array": "*", + "@types/geojson": "*" } }, - "node_modules/progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true, - "engines": { - "node": ">=0.4.0" + "node_modules/@types/d3-delaunay": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-delaunay/-/d3-delaunay-6.0.4.tgz", + "integrity": "sha512-ZMaSKu4THYCU6sV64Lhg6qjf1orxBthaC161plr5KuPHo3CNm8DTHiLw/5Eq2b6TsNP0W0iJrUOFscY6Q450Hw==", + "dev": true + }, + "node_modules/@types/d3-dispatch": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-dispatch/-/d3-dispatch-3.0.6.tgz", + "integrity": "sha512-4fvZhzMeeuBJYZXRXrRIQnvUYfyXwYmLsdiN7XXmVNQKKw1cM8a5WdID0g1hVFZDqT9ZqZEY5pD44p24VS7iZQ==", + "dev": true + }, + "node_modules/@types/d3-drag": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@types/d3-drag/-/d3-drag-3.0.7.tgz", + "integrity": "sha512-HE3jVKlzU9AaMazNufooRJ5ZpWmLIoc90A37WU2JMmeq28w1FQqCZswHZ3xR+SuxYftzHq6WU6KJHvqxKzTxxQ==", + "dependencies": { + "@types/d3-selection": "*" } }, - "node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "node_modules/@types/d3-dsv": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@types/d3-dsv/-/d3-dsv-3.0.7.tgz", + "integrity": "sha512-n6QBF9/+XASqcKK6waudgL0pf/S5XHPPI8APyMLLUHd8NqouBGLsU8MgtO7NINGtPBtk9Kko/W4ea0oAspwh9g==", + "dev": true + }, + "node_modules/@types/d3-ease": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.2.tgz", + "integrity": "sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==", + "dev": true + }, + "node_modules/@types/d3-fetch": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@types/d3-fetch/-/d3-fetch-3.0.7.tgz", + "integrity": "sha512-fTAfNmxSb9SOWNB9IoG5c8Hg6R+AzUHDRlsXsDZsNp6sxAEOP0tkP3gKkNSO/qmHPoBFTxNrjDprVHDQDvo5aA==", "dev": true, - "engines": { - "node": ">=6" + "dependencies": { + "@types/d3-dsv": "*" } }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] + "node_modules/@types/d3-force": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@types/d3-force/-/d3-force-3.0.9.tgz", + "integrity": "sha512-IKtvyFdb4Q0LWna6ymywQsEYjK/94SGhPrMfEr1TIc5OBeziTi+1jcCvttts8e0UWZIxpasjnQk9MNk/3iS+kA==", + "dev": true }, - "node_modules/quick-lru": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", - "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", + "node_modules/@types/d3-format": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-format/-/d3-format-3.0.4.tgz", + "integrity": "sha512-fALi2aI6shfg7vM5KiR1wNJnZ7r6UuggVqtDA+xiEdPZQwy/trcQaHnwShLuLdta2rTymCNpxYTiMZX/e09F4g==", + "dev": true + }, + "node_modules/@types/d3-geo": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@types/d3-geo/-/d3-geo-3.1.0.tgz", + "integrity": "sha512-856sckF0oP/diXtS4jNsiQw/UuK5fQG8l/a9VVLeSouf1/PPbBE1i1W852zVwKwYCBkFJJB7nCFTbk6UMEXBOQ==", "dev": true, - "peer": true, - "engines": { - "node": ">=8" + "dependencies": { + "@types/geojson": "*" } }, - "node_modules/read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, - "peer": true, + "node_modules/@types/d3-hierarchy": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/@types/d3-hierarchy/-/d3-hierarchy-3.1.6.tgz", + "integrity": "sha512-qlmD/8aMk5xGorUvTUWHCiumvgaUXYldYjNVOWtYoTYY/L+WwIEAmJxUmTgr9LoGNG0PPAOmqMDJVDPc7DOpPw==", + "dev": true + }, + "node_modules/@types/d3-interpolate": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz", + "integrity": "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==", "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "engines": { - "node": ">=8" + "@types/d3-color": "*" } }, - "node_modules/read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "node_modules/@types/d3-path": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.0.2.tgz", + "integrity": "sha512-WAIEVlOCdd/NKRYTsqCpOMHQHemKBEINf8YXMYOtXH0GA7SY0dqMB78P3Uhgfy+4X+/Mlw2wDtlETkN6kQUCMA==", + "dev": true + }, + "node_modules/@types/d3-polygon": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-polygon/-/d3-polygon-3.0.2.tgz", + "integrity": "sha512-ZuWOtMaHCkN9xoeEMr1ubW2nGWsp4nIql+OPQRstu4ypeZ+zk3YKqQT0CXVe/PYqrKpZAi+J9mTs05TKwjXSRA==", + "dev": true + }, + "node_modules/@types/d3-quadtree": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/d3-quadtree/-/d3-quadtree-3.0.5.tgz", + "integrity": "sha512-Cb1f3jyNBnvMMkf4KBZ7IgAQVWd9yzBwYcrxGqg3aPCUgWELAS+nyeB7r76aqu1e3+CGDjhk4BrWaFBekMwigg==", + "dev": true + }, + "node_modules/@types/d3-random": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/d3-random/-/d3-random-3.0.3.tgz", + "integrity": "sha512-Imagg1vJ3y76Y2ea0871wpabqp613+8/r0mCLEBfdtqC7xMSfj9idOnmBYyMoULfHePJyxMAw3nWhJxzc+LFwQ==", + "dev": true + }, + "node_modules/@types/d3-scale": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.8.tgz", + "integrity": "sha512-gkK1VVTr5iNiYJ7vWDI+yUFFlszhNMtVeneJ6lUTKPjprsvLLI9/tgEGiXJOnlINJA8FyA88gfnQsHbybVZrYQ==", "dev": true, - "peer": true, "dependencies": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "@types/d3-time": "*" } }, - "node_modules/read-pkg-up/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "node_modules/@types/d3-scale-chromatic": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-scale-chromatic/-/d3-scale-chromatic-3.0.2.tgz", + "integrity": "sha512-kpKNZMDT3OAX6b5ct5nS/mv6LULagnUy4DmS6yyNjclje1qVe7vbjPwY3q1TGz6+Wr2IUkgFatCzqYUl54fHag==", + "dev": true + }, + "node_modules/@types/d3-selection": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@types/d3-selection/-/d3-selection-3.0.10.tgz", + "integrity": "sha512-cuHoUgS/V3hLdjJOLTT691+G2QoqAjCVLmr4kJXR4ha56w1Zdu8UUQ5TxLRqudgNjwXeQxKMq4j+lyf9sWuslg==" + }, + "node_modules/@types/d3-shape": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.5.tgz", + "integrity": "sha512-dfEWpZJ1Pdg8meLlICX1M3WBIpxnaH2eQV2eY43Y5ysRJOTAV9f3/R++lgJKFstfrEOE2zdJ0sv5qwr2Bkic6Q==", "dev": true, - "peer": true, - "engines": { - "node": ">=8" + "dependencies": { + "@types/d3-path": "*" } }, - "node_modules/read-pkg/node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true, - "peer": true + "node_modules/@types/d3-time": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.3.tgz", + "integrity": "sha512-2p6olUZ4w3s+07q3Tm2dbiMZy5pCDfYwtLXXHUnVzXgQlZ/OyPtUz6OL382BkOuGlLXqfT+wqv8Fw2v8/0geBw==", + "dev": true }, - "node_modules/read-pkg/node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "peer": true, + "node_modules/@types/d3-time-format": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/d3-time-format/-/d3-time-format-4.0.3.tgz", + "integrity": "sha512-5xg9rC+wWL8kdDj153qZcsJ0FWiFt0J5RB6LYUNZjwSnesfblqrI/bJ1wBdJ8OQfncgbJG5+2F+qfqnqyzYxyg==", + "dev": true + }, + "node_modules/@types/d3-timer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.2.tgz", + "integrity": "sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==", + "dev": true + }, + "node_modules/@types/d3-transition": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@types/d3-transition/-/d3-transition-3.0.8.tgz", + "integrity": "sha512-ew63aJfQ/ms7QQ4X7pk5NxQ9fZH/z+i24ZfJ6tJSfqxJMrYLiK01EAs2/Rtw/JreGUsS3pLPNV644qXFGnoZNQ==", "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" + "@types/d3-selection": "*" } }, - "node_modules/read-pkg/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "peer": true, - "bin": { - "semver": "bin/semver" + "node_modules/@types/d3-zoom": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@types/d3-zoom/-/d3-zoom-3.0.8.tgz", + "integrity": "sha512-iqMC4/YlFCSlO8+2Ii1GGGliCAY4XdeG748w5vQUbevlbDu0zSjH/+jojorQVBK/se0j6DUFNPBGSqD3YWYnDw==", + "dependencies": { + "@types/d3-interpolate": "*", + "@types/d3-selection": "*" } }, - "node_modules/read-pkg/node_modules/type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true, - "peer": true, - "engines": { - "node": ">=8" + "node_modules/@types/debug": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", + "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", + "dependencies": { + "@types/ms": "*" } }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==" + }, + "node_modules/@types/geojson": { + "version": "7946.0.13", + "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.13.tgz", + "integrity": "sha512-bmrNrgKMOhM3WsafmbGmC+6dsF2Z308vLFsQ3a/bT8X8Sv5clVYpPars/UPq+sAaJP+5OoLAYgwbkS5QEJdLUQ==", + "dev": true + }, + "node_modules/@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" + "@types/unist": "*" } }, - "node_modules/redent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", - "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", - "dev": true, - "peer": true, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true + }, + "node_modules/@types/lodash": { + "version": "4.14.201", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.201.tgz", + "integrity": "sha512-y9euML0cim1JrykNxADLfaG0FgD1g/yTHwUs/Jg9ZIU7WKj2/4IW9Lbb1WZbvck78W/lfGXFfe+u2EGfIJXdLQ==", + "dev": true + }, + "node_modules/@types/mdast": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz", + "integrity": "sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==", "dependencies": { - "indent-string": "^4.0.0", - "strip-indent": "^3.0.0" - }, - "engines": { - "node": ">=8" + "@types/unist": "*" } }, - "node_modules/regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "node_modules/@types/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==", "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" + "license": "MIT", + "peer": true + }, + "node_modules/@types/ms": { + "version": "0.7.34", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz", + "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==" + }, + "node_modules/@types/node": { + "version": "20.9.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.9.1.tgz", + "integrity": "sha512-HhmzZh5LSJNS5O8jQKpJ/3ZcrrlG6L70hpGqMIAoM9YVD0YBRNWYsfwcXq8VnSjlNpCpgLzMXdiPo+dxcvSmiA==", + "dependencies": { + "undici-types": "~5.26.4" } }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true, - "engines": { - "node": ">=0.10.0" + "node_modules/@types/node-fetch": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.9.tgz", + "integrity": "sha512-bQVlnMLFJ2d35DkPNjEPmd9ueO/rh5EiaZt2bhqiSarPjZIuIV6bPQVqcrEyvNo+AfTrRGVazle1tl597w3gfA==", + "dependencies": { + "@types/node": "*", + "form-data": "^4.0.0" } }, - "node_modules/resolve": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", - "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", + "node_modules/@types/normalize-package-data": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", + "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", "dev": true, - "dependencies": { - "is-core-module": "^2.8.1", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" + "license": "MIT", + "peer": true + }, + "node_modules/@types/pug": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/@types/pug/-/pug-2.0.9.tgz", + "integrity": "sha512-Yg4LkgFYvn1faISbDNWmcAC1XoDT8IoMUFspp5mnagKk+UvD2N0IWt5A7GRdMubsNWqgCLmrkf8rXkzNqb4szA==", + "dev": true + }, + "node_modules/@types/qs": { + "version": "6.9.15", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.15.tgz", + "integrity": "sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==" + }, + "node_modules/@types/semver": { + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.5.tgz", + "integrity": "sha512-+d+WYC1BxJ6yVOgUgzK8gWvp5qF8ssV5r4nsDcZWKRWcDQLQ619tvWAxJQYGgBrO1MnLJC7a5GtiYsAoQ47dJg==", + "dev": true + }, + "node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==" + }, + "node_modules/@types/vscode": { + "version": "1.84.1", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.84.1.tgz", + "integrity": "sha512-DB10vBRLEPA/us7p3gQilU2Tq5HDu6JWTyCpD9qtb7MKWIvJS5In9HU3YgVGCXf/miwHJiY62aXwjtUSMpT8HA==", + "dev": true + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", + "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", + "dev": true, + "dependencies": { + "@eslint-community/regexpp": "^4.4.0", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/type-utils": "5.62.0", + "@typescript-eslint/utils": "5.62.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" }, - "bin": { - "resolve": "bin/resolve" + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "node_modules/@typescript-eslint/parser": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", + "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "debug": "^4.3.4" + }, "engines": { - "node": ">=4" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", + "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0" + }, "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "node_modules/@typescript-eslint/type-utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", + "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", "dev": true, "dependencies": { - "glob": "^7.1.3" + "@typescript-eslint/typescript-estree": "5.62.0", + "@typescript-eslint/utils": "5.62.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" }, - "bin": { - "rimraf": "bin.js" + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/rollup": { - "version": "2.71.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.71.1.tgz", - "integrity": "sha512-lMZk3XfUBGjrrZQpvPSoXcZSfKcJ2Bgn+Z0L1MoW2V8Wh7BVM+LOBJTPo16yul2MwL59cXedzW1ruq3rCjSRgw==", + "node_modules/@typescript-eslint/types": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", + "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", "dev": true, - "bin": { - "rollup": "dist/bin/rollup" - }, "engines": { - "node": ">=10.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, - "optionalDependencies": { - "fsevents": "~2.3.2" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", + "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], "dependencies": { - "queue-microtask": "^1.2.2" + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/sade": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", - "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", + "node_modules/@typescript-eslint/utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", + "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", "dev": true, "dependencies": { - "mri": "^1.1.0" + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" }, "engines": { - "node": ">=6" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/sander": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/sander/-/sander-0.5.1.tgz", - "integrity": "sha1-dB4kXiMfB8r7b98PEzrfohalAq0=", + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", + "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", "dev": true, "dependencies": { - "es6-promise": "^3.1.2", - "graceful-fs": "^4.1.3", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.2" + "@typescript-eslint/types": "5.62.0", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/sander/node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==" + }, + "node_modules/@vscode/iconv-lite-umd": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@vscode/iconv-lite-umd/-/iconv-lite-umd-0.7.0.tgz", + "integrity": "sha512-bRRFxLfg5dtAyl5XyiVWz/ZBPahpOpPrNYnnHpOpUZvam4tKH35wdhP4Kj6PbM0+KdliOsPzbGWpkxcdpNB/sg==", + "license": "MIT" + }, + "node_modules/@windmill-labs/esbuild-import-meta-url-plugin": { + "version": "0.0.0-semantic-release", + "resolved": "https://registry.npmjs.org/@windmill-labs/esbuild-import-meta-url-plugin/-/esbuild-import-meta-url-plugin-0.0.0-semantic-release.tgz", + "integrity": "sha512-WaexVcQOpYhX+bRmLq0ZyST1NWu1ujPVLxfcfScP7AX7DUdHfXiLTL1mhdwBcFYiucylOZbkUp2z5lkeSC4abg==", "dev": true, + "license": "ISC", "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" + "esbuild": ">=0.19.x", + "import-meta-resolve": "^4.0.0" } }, - "node_modules/sander/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" + "node_modules/@windmill-labs/svelte-dnd-action": { + "version": "0.9.48", + "resolved": "https://registry.npmjs.org/@windmill-labs/svelte-dnd-action/-/svelte-dnd-action-0.9.48.tgz", + "integrity": "sha512-A6pWayH3nOi79DZohTscGj5t2PuNtHlKM5WIAj9WlVDx5pS1A+MsyfuNZi8oCpj2590wFmQl+58G4y4xZqDa1Q==", + "peerDependencies": { + "svelte": ">=3.23.0 || ^5.0.0-next.0" } }, - "node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "node_modules/@xyflow/svelte": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/@xyflow/svelte/-/svelte-0.1.15.tgz", + "integrity": "sha512-QGM7rlBkoLG6jhHA9U8ZyMtqL62Cpn/T4OElTAUuKTgwuLTdzWqwSCdXpFTs8T6eiJD/Y4jYbVYsmQKDaB9rOw==", + "license": "MIT", "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" + "@svelte-put/shortcut": "^3.1.0", + "@xyflow/system": "0.0.38", + "classcat": "^5.0.4" }, - "engines": { - "node": ">=10" + "peerDependencies": { + "svelte": "^3.0.0 || ^4.0.0" } }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, + "node_modules/@xyflow/system": { + "version": "0.0.38", + "resolved": "https://registry.npmjs.org/@xyflow/system/-/system-0.0.38.tgz", + "integrity": "sha512-auJU8djbT59S5Afb9lFds1lQJvKIb0zUoHhO+il/ogDDG5BbFds6D8g5a8Q3oHdyR6dy0TaD1oZq9s7Ydhn41g==", + "license": "MIT", "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" + "@types/d3-drag": "^3.0.7", + "@types/d3-selection": "^3.0.10", + "@types/d3-transition": "^3.0.8", + "@types/d3-zoom": "^3.0.8", + "d3-drag": "^3.0.0", + "d3-selection": "^3.0.0", + "d3-zoom": "^3.0.0" } }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "node_modules/@zerodevx/svelte-toast": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@zerodevx/svelte-toast/-/svelte-toast-0.9.5.tgz", + "integrity": "sha512-JLeB/oRdJfT+dz9A5bgd3Z7TuQnBQbeUtXrGIrNWMGqWbabpepBF2KxtWVhL2qtxpRqhae2f6NAOzH7xs4jUSw==", "dev": true, - "engines": { - "node": ">=8" + "peerDependencies": { + "svelte": "^3.57.0 || ^4.0.0" } }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, - "peer": true - }, - "node_modules/simple-svelte-autocomplete": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/simple-svelte-autocomplete/-/simple-svelte-autocomplete-2.4.0.tgz", - "integrity": "sha512-hiYaT04ZP/zTZxKqwG9MefXP5tCN2MjQojuh1JYMT1rRnXOG4yHK7s5nHy1A+xd5v/PAnyb7ohijTsJk2SyfnQ==", - "dev": true + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "optional": true }, - "node_modules/slash": { + "node_modules/abort-controller": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "dependencies": { + "event-target-shim": "^5.0.0" + }, "engines": { - "node": ">=8" + "node": ">=6.5" } }, - "node_modules/slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, + "node_modules/abstract-leveldown": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", + "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", + "optional": true, "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" + "buffer": "^5.5.0", + "immediate": "^3.2.3", + "level-concat-iterator": "~2.0.0", + "level-supports": "~1.0.0", + "xtend": "~4.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" + "node": ">=6" } }, - "node_modules/sorcery": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/sorcery/-/sorcery-0.10.0.tgz", - "integrity": "sha1-iukK19fLBfxZ8asMY3hF1cFaUrc=", - "dev": true, - "dependencies": { - "buffer-crc32": "^0.2.5", - "minimist": "^1.2.0", - "sander": "^0.5.0", - "sourcemap-codec": "^1.3.0" - }, + "node_modules/acorn": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", "bin": { - "sorcery": "bin/index.js" + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" } }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, - "engines": { - "node": ">=0.10.0" + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", - "dev": true + "node_modules/ag-charts-community": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/ag-charts-community/-/ag-charts-community-9.0.1.tgz", + "integrity": "sha512-FZy1tAWO10TzRheoM622/vJWRqldAYH3VGreQ8qirt7FB/ctIR4kjY9GPZywDJnVcb/wET3nrgwq2vIiFKhKBw==" }, - "node_modules/spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "dev": true, - "peer": true, + "node_modules/ag-charts-enterprise": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/ag-charts-enterprise/-/ag-charts-enterprise-9.0.1.tgz", + "integrity": "sha512-b8Lz6wgs/CSL1lz0PUnNod016Z5n7vus1mTM9GXhxJ3uyEYP0klwFyvgtK0Cjgc0YeFyhoVDmb38dMKIvHnUyg==", "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" + "ag-charts-community": "9.0.1" } }, - "node_modules/spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true, - "peer": true + "node_modules/ag-grid-community": { + "version": "31.0.0", + "resolved": "https://registry.npmjs.org/ag-grid-community/-/ag-grid-community-31.0.0.tgz", + "integrity": "sha512-OUrXSAbLs0s5DTL9G/J626IKF2mzENHtLzLo5SV0RMO34ZzQANZd1mWlahT0uhZyUFnhyyEEecJBE5nSI88VEw==" }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "peer": true, + "node_modules/ag-grid-enterprise": { + "version": "31.0.0", + "resolved": "https://registry.npmjs.org/ag-grid-enterprise/-/ag-grid-enterprise-31.0.0.tgz", + "integrity": "sha512-upYw/eeMMqM6TQsOgbAGItSS+x74Spsub8jqqyrozPry8l1UgLmq8TetBrfQ9neS5q8MQpRTHJbXWS3+Gdbo5g==", "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", - "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", - "dev": true, - "peer": true - }, - "node_modules/specificity": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/specificity/-/specificity-0.4.1.tgz", - "integrity": "sha512-1klA3Gi5PD1Wv9Q0wUoOQN1IWAuPu0D1U03ThXTr0cJ20+/iq2tHSDnK7Kk/0LXJ1ztUB2/1Os0wKmfyNgUQfg==", - "dev": true, - "peer": true, - "bin": { - "specificity": "bin/specificity" + "ag-grid-community": "~31.0.0" } }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "node_modules/stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", - "dev": true - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "optional": true, "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "debug": "4" }, "engines": { - "node": ">=8" + "node": ">= 6.0.0" } }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, + "node_modules/agentkeepalive": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz", + "integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==", "dependencies": { - "ansi-regex": "^5.0.1" + "humanize-ms": "^1.2.1" }, "engines": { - "node": ">=8" + "node": ">= 8.0.0" } }, - "node_modules/strip-indent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "dependencies": { - "min-indent": "^1.0.0" + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi_up": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/ansi_up/-/ansi_up-5.2.1.tgz", + "integrity": "sha512-5bz5T/7FRmlxA37zDXhG6cAwlcZtfnmNLDJra66EEIT3kYlw5aPJdbkJEhm59D6kA4Wi5ict6u6IDYHJaQlH+g==", "engines": { - "node": ">=8" + "node": "*" } }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "devOptional": true, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/style-search": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz", - "integrity": "sha1-eVjHk+R+MuB9K1yv5cC/jhLneQI=", - "dev": true, - "peer": true - }, - "node_modules/stylehacks": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.0.tgz", - "integrity": "sha512-SzLmvHQTrIWfSgljkQCw2++C9+Ne91d/6Sp92I8c5uHTcy/PgeHamwITIbBW9wnFTY/3ZfSXR9HIL6Ikqmcu6Q==", + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { - "browserslist": "^4.16.6", - "postcss-selector-parser": "^6.0.4" + "color-convert": "^2.0.1" }, "engines": { - "node": "^10 || ^12 || >=14.0" + "node": ">=8" }, - "peerDependencies": { - "postcss": "^8.2.15" + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/stylelint": { - "version": "14.8.1", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-14.8.1.tgz", - "integrity": "sha512-0YxTop3wTeEVmQWhS7jjLFaBkvfPmffRiJ6eFIDlK++f3OklaobTYFJu32E5u/cIrFLbcW52pLqrYpihA/y0/w==", + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, - "peer": true, "dependencies": { - "balanced-match": "^2.0.0", - "colord": "^2.9.2", - "cosmiconfig": "^7.0.1", - "css-functions-list": "^3.0.1", - "debug": "^4.3.4", - "execall": "^2.0.0", - "fast-glob": "^3.2.11", - "fastest-levenshtein": "^1.0.12", - "file-entry-cache": "^6.0.1", - "get-stdin": "^8.0.0", - "global-modules": "^2.0.0", - "globby": "^11.1.0", - "globjoin": "^0.1.4", - "html-tags": "^3.2.0", - "ignore": "^5.2.0", - "import-lazy": "^4.0.0", - "imurmurhash": "^0.1.4", - "is-plain-object": "^5.0.0", - "known-css-properties": "^0.24.0", - "mathml-tag-names": "^2.1.3", - "meow": "^9.0.0", - "micromatch": "^4.0.5", "normalize-path": "^3.0.0", - "normalize-selector": "^0.2.0", - "picocolors": "^1.0.0", - "postcss": "^8.4.12", - "postcss-media-query-parser": "^0.2.3", - "postcss-resolve-nested-selector": "^0.1.1", - "postcss-safe-parser": "^6.0.0", - "postcss-selector-parser": "^6.0.10", - "postcss-value-parser": "^4.2.0", - "resolve-from": "^5.0.0", - "specificity": "^0.4.1", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "style-search": "^0.1.0", - "supports-hyperlinks": "^2.2.0", - "svg-tags": "^1.0.0", - "table": "^6.8.0", - "v8-compile-cache": "^2.3.0", - "write-file-atomic": "^4.0.1" - }, - "bin": { - "stylelint": "bin/stylelint.js" + "picomatch": "^2.0.4" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/stylelint" + "node": ">= 8" } }, - "node_modules/stylelint-config-recommended": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-6.0.0.tgz", - "integrity": "sha512-ZorSSdyMcxWpROYUvLEMm0vSZud2uB7tX1hzBZwvVY9SV/uly4AvvJPPhCcymZL3fcQhEQG5AELmrxWqtmzacw==", + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, - "peerDependencies": { - "stylelint": "^14.0.0" + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/stylelint/node_modules/balanced-match": { + "node_modules/aproba": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz", - "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==", - "dev": true, - "peer": true + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", + "optional": true }, - "node_modules/stylelint/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "peer": true, + "node_modules/are-we-there-yet": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", + "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", + "optional": true, + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "dev": true + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/aria-query": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" + "dequal": "^2.0.3" } }, - "node_modules/supports-hyperlinks": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", - "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true, - "peer": true, - "dependencies": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - }, "engines": { "node": ">=8" } }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "node_modules/arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", "dev": true, + "license": "MIT", + "peer": true, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=0.10.0" } }, - "node_modules/svelte": { - "version": "3.48.0", - "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.48.0.tgz", - "integrity": "sha512-fN2YRm/bGumvjUpu6yI3BpvZnpIm9I6A7HR4oUNYd7ggYyIwSA/BX7DJ+UXXffLp6XNcUijyLvttbPVCYa/3xQ==", + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "license": "MIT", + "peer": true, "engines": { - "node": ">= 8" + "node": ">=8" } }, - "node_modules/svelte-awesome": { - "version": "2.4.6", - "resolved": "https://registry.npmjs.org/svelte-awesome/-/svelte-awesome-2.4.6.tgz", - "integrity": "sha512-l3TUuAvFUT3KOD0NiMi0y2oN+GuTvO/K8muk9nupgITHMXEJCvZ/wsejSH3vJI1pjb3vLkD00upvUQ9QgX9NhA==", - "dev": true, - "peerDependencies": { - "svelte": "^3.43.1" - } + "node_modules/async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", + "optional": true }, - "node_modules/svelte-check": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-2.7.0.tgz", - "integrity": "sha512-GrvG24j0+i8AOm0k0KyJ6Dqc+TAR2yzB7rtS4nljHStunVxCTr/1KYlv4EsOeoqtHLzeWMOd5D2O6nDdP/yw4A==", + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/autoprefixer": { + "version": "10.4.16", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.16.tgz", + "integrity": "sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==", "dev": true, - "dependencies": { - "chokidar": "^3.4.1", - "fast-glob": "^3.2.7", - "import-fresh": "^3.2.1", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "browserslist": "^4.21.10", + "caniuse-lite": "^1.0.30001538", + "fraction.js": "^4.3.6", + "normalize-range": "^0.1.2", "picocolors": "^1.0.0", - "sade": "^1.7.4", - "source-map": "^0.7.3", - "svelte-preprocess": "^4.0.0", - "typescript": "*" + "postcss-value-parser": "^4.2.0" }, "bin": { - "svelte-check": "bin/svelte-check" + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" }, "peerDependencies": { - "svelte": "^3.24.0" + "postcss": "^8.1.0" } }, - "node_modules/svelte-check/node_modules/source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "node_modules/axios": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.3.tgz", + "integrity": "sha512-Ar7ND9pU99eJ9GpoGQKhKf58GpUOgnzuaB7ueNQ5BMi0p+LZ5oaEnfF999fAArcTIBwXTCHAmGcHOZJaWPq9Nw==", "dev": true, + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/axobject-query": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", + "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", + "license": "Apache-2.0", "engines": { - "node": ">= 8" + "node": ">= 0.4" } }, - "node_modules/svelte-highlight": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/svelte-highlight/-/svelte-highlight-5.3.2.tgz", - "integrity": "sha512-a9FbXm9oXkoUzLZxGaOpi/UZXxt2tO2+TTRQYtz+UpOFbbRGeZx7zG53QHwv7cpT+/kY10sc6VLZGzjBJviv6w==", - "dev": true, - "dependencies": { - "highlight.js": "11.5.0" + "node_modules/bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/svelte-highlight/node_modules/highlight.js": { - "version": "11.5.0", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.5.0.tgz", - "integrity": "sha512-SM6WDj5/C+VfIY8pZ6yW6Xa0Fm1tniYVYWYW1Q/DcMnISZFrC3aQAZZZFAAZtybKNrGId3p/DNbFTtcTXXgYBw==", + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "optional": true + }, + "node_modules/before-after-hook": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz", + "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==", "dev": true, - "engines": { - "node": ">=12.0.0" - } + "license": "Apache-2.0" }, - "node_modules/svelte-hmr": { - "version": "0.14.11", - "resolved": "https://registry.npmjs.org/svelte-hmr/-/svelte-hmr-0.14.11.tgz", - "integrity": "sha512-R9CVfX6DXxW1Kn45Jtmx+yUe+sPhrbYSUp7TkzbW0jI5fVPn6lsNG9NEs5dFg5qRhFNAoVdRw5qQDLALNKhwbQ==", + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "dev": true, "engines": { - "node": "^12.20 || ^14.13.1 || >= 16" - }, - "peerDependencies": { - "svelte": ">=3.19.0" + "node": ">=8" } }, - "node_modules/svelte-markdown": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/svelte-markdown/-/svelte-markdown-0.2.2.tgz", - "integrity": "sha512-bNxpG3gRbC2UjAFakIMcLEzVq5db2Md57aeU4wKCuffSfD6f7RkvtYDqbrAk2ycC55t3wykOy0E7KDuvVKyDYA==", + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dependencies": { - "@types/marked": "^4.0.1", - "marked": "^4.0.10" - }, - "peerDependencies": { - "svelte": "^3.0.0" + "balanced-match": "^1.0.0" } }, - "node_modules/svelte-preprocess": { - "version": "4.10.6", - "resolved": "https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-4.10.6.tgz", - "integrity": "sha512-I2SV1w/AveMvgIQlUF/ZOO3PYVnhxfcpNyGt8pxpUVhPfyfL/CZBkkw/KPfuFix5FJ9TnnNYMhACK3DtSaYVVQ==", + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, - "hasInstallScript": true, "dependencies": { - "@types/pug": "^2.0.4", - "@types/sass": "^1.16.0", - "detect-indent": "^6.0.0", - "magic-string": "^0.25.7", - "sorcery": "^0.10.0", - "strip-indent": "^3.0.0" + "fill-range": "^7.0.1" }, "engines": { - "node": ">= 9.11.2" - }, - "peerDependencies": { - "@babel/core": "^7.10.2", - "coffeescript": "^2.5.1", - "less": "^3.11.3 || ^4.0.0", - "postcss": "^7 || ^8", - "postcss-load-config": "^2.1.0 || ^3.0.0", - "pug": "^3.0.0", - "sass": "^1.26.8", - "stylus": "^0.55.0", - "sugarss": "^2.0.0", - "svelte": "^3.23.0", - "typescript": "^3.9.5 || ^4.0.0" - }, - "peerDependenciesMeta": { - "@babel/core": { - "optional": true - }, - "coffeescript": { - "optional": true - }, - "less": { - "optional": true - }, - "node-sass": { - "optional": true - }, - "postcss": { - "optional": true - }, - "postcss-load-config": { - "optional": true - }, - "pug": { - "optional": true + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz", + "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" }, - "sass": { - "optional": true + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" }, - "stylus": { - "optional": true + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001541", + "electron-to-chromium": "^1.4.535", + "node-releases": "^2.0.13", + "update-browserslist-db": "^1.0.13" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" }, - "sugarss": { - "optional": true + { + "type": "patreon", + "url": "https://www.patreon.com/feross" }, - "typescript": { - "optional": true + { + "type": "consulting", + "url": "https://feross.org/support" } + ], + "optional": true, + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" } }, - "node_modules/svelte-preprocess/node_modules/magic-string": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", - "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", "dev": true, - "dependencies": { - "sourcemap-codec": "^1.4.8" + "engines": { + "node": "*" } }, - "node_modules/svelte-split-pane": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/svelte-split-pane/-/svelte-split-pane-0.1.2.tgz", - "integrity": "sha512-JluEydC9v2DetyhlwCF3CdqAkET8XPHP7WeWbl4lVLOg55avDOhoS5U6BRhvWd104HOqhUcCSz+7Nveyjmzjeg==" - }, - "node_modules/svg-tags": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", - "integrity": "sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q=", + "node_modules/c12": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/c12/-/c12-1.10.0.tgz", + "integrity": "sha512-0SsG7UDhoRWcuSvKWHaXmu5uNjDCDN3nkQLRL4Q42IlFy+ze58FcCoI3uPwINXinkz7ZinbhEgyzYFw9u9ZV8g==", "dev": true, - "peer": true + "dependencies": { + "chokidar": "^3.6.0", + "confbox": "^0.1.3", + "defu": "^6.1.4", + "dotenv": "^16.4.5", + "giget": "^1.2.1", + "jiti": "^1.21.0", + "mlly": "^1.6.1", + "ohash": "^1.1.3", + "pathe": "^1.1.2", + "perfect-debounce": "^1.0.0", + "pkg-types": "^1.0.3", + "rc9": "^2.1.1" + } }, - "node_modules/svgo": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", - "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", - "dev": true, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", "dependencies": { - "@trysound/sax": "0.2.0", - "commander": "^7.2.0", - "css-select": "^4.1.3", - "css-tree": "^1.1.3", - "csso": "^4.2.0", - "picocolors": "^1.0.0", - "stable": "^0.1.8" - }, - "bin": { - "svgo": "bin/svgo" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" }, "engines": { - "node": ">=10.13.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/svgo/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, "engines": { - "node": ">= 10" + "node": ">=6" } }, - "node_modules/table": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/table/-/table-6.8.0.tgz", - "integrity": "sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA==", + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true, - "dependencies": { - "ajv": "^8.0.1", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" + "license": "MIT", + "peer": true, + "engines": { + "node": ">=10" }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "dev": true, "engines": { - "node": ">=10.0.0" + "node": ">= 6" } }, - "node_modules/table/node_modules/ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "node_modules/camelcase-keys": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-7.0.2.tgz", + "integrity": "sha512-Rjs1H+A9R+Ig+4E/9oyB66UC5Mj9Xq3N//vcLf2WzgdTi/3gUu3Z9KoqmlrEG4VuuLK8wJHofxzdQXz/knhiYg==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "camelcase": "^6.3.0", + "map-obj": "^4.1.0", + "quick-lru": "^5.1.1", + "type-fest": "^1.2.1" + }, + "engines": { + "node": ">=12" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/table/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "node_modules/tailwindcss": { - "version": "3.0.24", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.0.24.tgz", - "integrity": "sha512-H3uMmZNWzG6aqmg9q07ZIRNIawoiEcNFKDfL+YzOPuPsXuDXxJxB9icqzLgdzKNwjG3SAro2h9SYav8ewXNgig==", + "node_modules/camelcase-keys/node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", "dev": true, - "dependencies": { - "arg": "^5.0.1", - "chokidar": "^3.5.3", - "color-name": "^1.1.4", - "detective": "^5.2.0", - "didyoumean": "^1.2.2", - "dlv": "^1.1.3", - "fast-glob": "^3.2.11", - "glob-parent": "^6.0.2", - "is-glob": "^4.0.3", - "lilconfig": "^2.0.5", - "normalize-path": "^3.0.0", - "object-hash": "^3.0.0", - "picocolors": "^1.0.0", - "postcss": "^8.4.12", - "postcss-js": "^4.0.0", - "postcss-load-config": "^3.1.4", - "postcss-nested": "5.0.6", - "postcss-selector-parser": "^6.0.10", - "postcss-value-parser": "^4.2.0", - "quick-lru": "^5.1.1", - "resolve": "^1.22.0" - }, - "bin": { - "tailwind": "lib/cli.js", - "tailwindcss": "lib/cli.js" - }, + "license": "MIT", + "peer": true, "engines": { - "node": ">=12.13.0" - }, - "peerDependencies": { - "postcss": "^8.0.9" - } - }, - "node_modules/tailwindcss/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.3" + "node": ">=10" }, - "engines": { - "node": ">=10.13.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/tailwindcss/node_modules/quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "node_modules/camelcase-keys/node_modules/type-fest": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", "dev": true, + "license": "(MIT OR CC0-1.0)", + "peer": true, "engines": { "node": ">=10" }, @@ -5128,4146 +5567,8190 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, - "node_modules/tiny-glob": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz", - "integrity": "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==", + "node_modules/caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", "dev": true, "dependencies": { - "globalyzer": "0.1.0", - "globrex": "^0.1.2" + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" } }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "node_modules/caniuse-lite": { + "version": "1.0.30001655", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001655.tgz", + "integrity": "sha512-jRGVy3iSGO5Uutn2owlb5gR6qsGngTw9ZTb4ali9f3glshcNmJ2noam4Mo9zia5P9Dk3jNNydy7vQjuE5dQmfg==", "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/canvas": { + "version": "2.11.2", + "resolved": "https://registry.npmjs.org/canvas/-/canvas-2.11.2.tgz", + "integrity": "sha512-ItanGBMrmRV7Py2Z+Xhs7cT+FNt5K0vPL4p9EZ/UX/Mu7hFbkxSjKF2KVtPwX7UYWp7dRKnrTvReflgrItJbdw==", + "hasInstallScript": true, + "optional": true, "dependencies": { - "is-number": "^7.0.0" + "@mapbox/node-pre-gyp": "^1.0.0", + "nan": "^2.17.0", + "simple-get": "^3.0.3" }, "engines": { - "node": ">=8.0" + "node": ">=6" } }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=", - "dev": true - }, - "node_modules/trim-newlines": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", - "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", - "dev": true, - "peer": true, - "engines": { - "node": ">=8" + "node_modules/ccount": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", - "dev": true - }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { - "tslib": "^1.8.1" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">= 6" + "node": ">=10" }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/tsutils/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true + "node_modules/character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, + "node_modules/chart.js": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.4.0.tgz", + "integrity": "sha512-vQEj6d+z0dcsKLlQvbKIMYFHd3t8W/7L2vfJIbYcfyPcRx92CsHqECpueN8qVGNlKyDcr5wBrYAYKnfu/9Q1hQ==", "dependencies": { - "prelude-ls": "^1.2.1" + "@kurkle/color": "^0.3.0" }, "engines": { - "node": ">= 0.8.0" + "pnpm": ">=7" } }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" + "node_modules/chartjs-adapter-date-fns": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chartjs-adapter-date-fns/-/chartjs-adapter-date-fns-3.0.0.tgz", + "integrity": "sha512-Rs3iEB3Q5pJ973J93OBTpnP7qoGwvq3nUnoMdtxO+9aoJof7UFcRbWcIDteXuYd1fgAvct/32T9qaLyLuZVwCg==", + "peerDependencies": { + "chart.js": ">=2.8.0", + "date-fns": ">=2.0.0" + } + }, + "node_modules/chartjs-plugin-zoom": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/chartjs-plugin-zoom/-/chartjs-plugin-zoom-2.0.1.tgz", + "integrity": "sha512-ogOmLu6e+Q7E1XWOCOz9YwybMslz9qNfGV2a+qjfmqJYpsw5ZMoRHZBUyW+NGhkpQ5PwwPA/+rikHpBZb7PZuA==", + "dependencies": { + "hammerjs": "^2.0.8" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "chart.js": ">=3.2.0" } }, - "node_modules/typescript": { - "version": "4.6.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.4.tgz", - "integrity": "sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg==", + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" }, "engines": { - "node": ">=4.2.0" + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" } }, - "node_modules/uglify-js": { - "version": "3.15.4", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.15.4.tgz", - "integrity": "sha512-vMOPGDuvXecPs34V74qDKk4iJ/SN4vL3Ow/23ixafENYvtrNvtbcgUeugTcUGRGsOF/5fU8/NYSL5Hyb3l1OJA==", - "dev": true, - "optional": true, - "bin": { - "uglifyjs": "bin/uglifyjs" - }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "devOptional": true, "engines": { - "node": ">=0.8.0" + "node": ">=10" } }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "node_modules/citty": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/citty/-/citty-0.1.6.tgz", + "integrity": "sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==", "dev": true, "dependencies": { - "punycode": "^2.1.0" + "consola": "^3.2.3" } }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true + "node_modules/classcat": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/classcat/-/classcat-5.0.5.tgz", + "integrity": "sha512-JhZUT7JFcQy/EzW605k/ktHtncoo9vnyW/2GspNYwFlN1C/WmjuV/xtS04e9SOkL2sTdw0VAZ2UGCcQ9lR6p6w==" }, - "node_modules/v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true + "node_modules/clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", + "engines": { + "node": ">=0.8" + } }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "peer": true, + "node_modules/code-red": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/code-red/-/code-red-1.0.4.tgz", + "integrity": "sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw==", "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" + "@jridgewell/sourcemap-codec": "^1.4.15", + "@types/estree": "^1.0.1", + "acorn": "^8.10.0", + "estree-walker": "^3.0.3", + "periscopic": "^3.1.0" } }, - "node_modules/vite": { - "version": "2.9.6", - "resolved": "https://registry.npmjs.org/vite/-/vite-2.9.6.tgz", - "integrity": "sha512-3IffdrByHW95Yjv0a13TQOQfJs7L5dVlSPuTt432XLbRMriWbThqJN2k/IS6kXn5WY4xBLhK9XoaWay1B8VzUw==", + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { - "esbuild": "^0.14.27", - "postcss": "^8.4.12", - "resolve": "^1.22.0", - "rollup": "^2.59.0" - }, - "bin": { - "vite": "bin/vite.js" + "color-name": "~1.1.4" }, "engines": { - "node": ">=12.2.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - }, - "peerDependencies": { - "less": "*", - "sass": "*", - "stylus": "*" - }, - "peerDependenciesMeta": { - "less": { - "optional": true - }, - "sass": { - "optional": true - }, - "stylus": { - "optional": true - } + "node": ">=7.0.0" } }, - "node_modules/vscode-jsonrpc": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz", - "integrity": "sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg==", - "engines": { - "node": ">=8.0.0 || >=10.0.0" + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "optional": true, + "bin": { + "color-support": "bin.js" } }, - "node_modules/vscode-languageclient": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-7.0.0.tgz", - "integrity": "sha512-P9AXdAPlsCgslpP9pRxYPqkNYV7Xq8300/aZDpO35j1fJm/ncize8iGswzYlcvFw5DQUx4eVk+KvfXdL0rehNg==", + "node_modules/colord": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", + "dev": true + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "dependencies": { - "minimatch": "^3.0.4", - "semver": "^7.3.4", - "vscode-languageserver-protocol": "3.16.0" + "delayed-stream": "~1.0.0" }, "engines": { - "vscode": "^1.52.0" + "node": ">= 0.8" } }, - "node_modules/vscode-languageserver-protocol": { - "version": "3.16.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.16.0.tgz", - "integrity": "sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A==", - "dependencies": { - "vscode-jsonrpc": "6.0.0", - "vscode-languageserver-types": "3.16.0" - } - }, - "node_modules/vscode-languageserver-textdocument": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.4.tgz", - "integrity": "sha512-/xhqXP/2A2RSs+J8JNXpiiNVvvNM0oTosNVmQnunlKvq9o4mupHOBAnnzH0lwIPKazXKvAKsVp1kr+H/K4lgoQ==" - }, - "node_modules/vscode-languageserver-types": { - "version": "3.16.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz", - "integrity": "sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==" - }, - "node_modules/vscode-uri": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.3.tgz", - "integrity": "sha512-EcswR2S8bpR7fD0YPeS7r2xXExrScVMxg4MedACaWHEtx9ftCF/qHG1xGkolzTPcEmjTavCQgbVzHUIdTMzFGA==" + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "devOptional": true }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=", + "node_modules/confbox": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.6.tgz", + "integrity": "sha512-ONc4FUXne/1UBN1EuxvQ5rAjjAbo+N4IxrxWI8bzGHbd1PyrFlI/E3G23/yoJZDFBaFFxPGfI0EOq0fa4dgX7A==", "dev": true }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", - "dev": true, - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "node_modules/consola": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/consola/-/consola-3.2.3.tgz", + "integrity": "sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==", "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, "engines": { - "node": ">= 8" + "node": "^14.18.0 || >=16.10.0" } }, - "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "optional": true + }, + "node_modules/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">= 0.6" } }, - "node_modules/wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", - "dev": true - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "node_modules/write-file-atomic": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.1.tgz", - "integrity": "sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ==", + "node_modules/cosmiconfig": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", + "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0", + "path-type": "^4.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, "engines": { - "node": ">=0.4" + "node": ">= 8" } }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "node_modules/css-declaration-sorter": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz", + "integrity": "sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==", "dev": true, "engines": { - "node": ">= 6" + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.0.9" } }, - "node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "node_modules/css-functions-list": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.2.tgz", + "integrity": "sha512-c+N0v6wbKVxTu5gOBBFkr9BEdBWaqqjQeiJ8QvSRIJOf+UxlJh930m8e6/WNeODIK0mYLFkoONrnj16i2EcvfQ==", "dev": true, + "license": "MIT", "peer": true, "engines": { - "node": ">=10" + "node": ">=12 || >=16" } - } - }, - "dependencies": { - "@apidevtools/json-schema-ref-parser": { - "version": "9.0.9", - "resolved": "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-9.0.9.tgz", - "integrity": "sha512-GBD2Le9w2+lVFoc4vswGI/TjkNIZSVp7+9xPf+X3uidBfWnAeUWmquteSyt0+VCrhNMWj/FTABISQrD3Z/YA+w==", - "dev": true, - "requires": { - "@jsdevtools/ono": "^7.1.3", - "@types/json-schema": "^7.0.6", - "call-me-maybe": "^1.0.1", - "js-yaml": "^4.1.0" + }, + "node_modules/css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-tree": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", + "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", "dependencies": { - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - } + "mdn-data": "2.0.30", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" } }, - "@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", "dev": true, - "requires": { - "@babel/highlight": "^7.10.4" + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" } }, - "@babel/helper-validator-identifier": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", - "dev": true + "node_modules/csscolorparser": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/csscolorparser/-/csscolorparser-1.0.3.tgz", + "integrity": "sha512-umPSgYwZkdFoUrH5hIq5kf0wPSXiro51nPw0j2K/c83KflkPSTBGMz6NJvMB+07VlL0y7VPo6QJcDjcgKTTm3w==" }, - "@babel/highlight": { - "version": "7.17.9", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.9.tgz", - "integrity": "sha512-J9PfEKCbFIv2X5bjTMiZu6Vf341N05QIY+d6FvVKynkG1S7G0j3I0QoRtWIrXhZ+/Nlb5Q0MzqL7TokEJ5BNHg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.16.7", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" } }, - "@codingame/monaco-jsonrpc": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@codingame/monaco-jsonrpc/-/monaco-jsonrpc-0.3.1.tgz", - "integrity": "sha512-Zxilei5fGV89uGJcFKDQFfZfUbWdP8/NGympXQUX/XRle4CYUabfvEOdY0Diq0NruttlRH3RdWVZ7Nw6f4TClQ==", - "requires": { - "vscode-jsonrpc": "^6.0.0" - } - }, - "@codingame/monaco-languageclient": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@codingame/monaco-languageclient/-/monaco-languageclient-0.17.4.tgz", - "integrity": "sha512-0rz2vFH51q+bLwAMJIwSmX9zcpYCOVzICokzr+ACHc7bZq4RaLfmQ0n7iU8CjPjCB4D+/uykc3duLZakh4ug1w==", - "requires": { - "glob-to-regexp": "^0.4.1", - "vscode-jsonrpc": "6.0.0", - "vscode-languageclient": "7.0.0", - "vscode-languageserver-textdocument": "^1.0.1", - "vscode-uri": "^3.0.2" - } - }, - "@eslint/eslintrc": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", - "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", - "dev": true, - "requires": { - "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - }, + "node_modules/cssnano": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-6.0.1.tgz", + "integrity": "sha512-fVO1JdJ0LSdIGJq68eIxOqFpIJrZqXUsBt8fkrBcztCQqAjQD51OhZp7tc0ImcbwXD4k7ny84QTV90nZhmqbkg==", + "dev": true, "dependencies": { - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - } + "cssnano-preset-default": "^6.0.1", + "lilconfig": "^2.1.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/cssnano" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "@fortawesome/fontawesome-common-types": { - "version": "0.2.36", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.2.36.tgz", - "integrity": "sha512-a/7BiSgobHAgBWeN7N0w+lAhInrGxksn13uK7231n2m8EDPE3BMCl9NZLTGrj9ZXfCmC6LM0QLqXidIizVQ6yg==" - }, - "@fortawesome/free-brands-svg-icons": { - "version": "5.15.4", - "resolved": "https://registry.npmjs.org/@fortawesome/free-brands-svg-icons/-/free-brands-svg-icons-5.15.4.tgz", - "integrity": "sha512-f1witbwycL9cTENJegcmcZRYyawAFbm8+c6IirLmwbbpqz46wyjbQYLuxOc7weXFXfB7QR8/Vd2u5R3q6JYD9g==", - "requires": { - "@fortawesome/fontawesome-common-types": "^0.2.36" + "node_modules/cssnano-preset-default": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-6.0.1.tgz", + "integrity": "sha512-7VzyFZ5zEB1+l1nToKyrRkuaJIx0zi/1npjvZfbBwbtNTzhLtlvYraK/7/uqmX2Wb2aQtd983uuGw79jAjLSuQ==", + "dev": true, + "dependencies": { + "css-declaration-sorter": "^6.3.1", + "cssnano-utils": "^4.0.0", + "postcss-calc": "^9.0.0", + "postcss-colormin": "^6.0.0", + "postcss-convert-values": "^6.0.0", + "postcss-discard-comments": "^6.0.0", + "postcss-discard-duplicates": "^6.0.0", + "postcss-discard-empty": "^6.0.0", + "postcss-discard-overridden": "^6.0.0", + "postcss-merge-longhand": "^6.0.0", + "postcss-merge-rules": "^6.0.1", + "postcss-minify-font-values": "^6.0.0", + "postcss-minify-gradients": "^6.0.0", + "postcss-minify-params": "^6.0.0", + "postcss-minify-selectors": "^6.0.0", + "postcss-normalize-charset": "^6.0.0", + "postcss-normalize-display-values": "^6.0.0", + "postcss-normalize-positions": "^6.0.0", + "postcss-normalize-repeat-style": "^6.0.0", + "postcss-normalize-string": "^6.0.0", + "postcss-normalize-timing-functions": "^6.0.0", + "postcss-normalize-unicode": "^6.0.0", + "postcss-normalize-url": "^6.0.0", + "postcss-normalize-whitespace": "^6.0.0", + "postcss-ordered-values": "^6.0.0", + "postcss-reduce-initial": "^6.0.0", + "postcss-reduce-transforms": "^6.0.0", + "postcss-svgo": "^6.0.0", + "postcss-unique-selectors": "^6.0.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "@fortawesome/free-solid-svg-icons": { - "version": "5.15.4", - "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-5.15.4.tgz", - "integrity": "sha512-JLmQfz6tdtwxoihXLg6lT78BorrFyCf59SAwBM6qV/0zXyVeDygJVb3fk+j5Qat+Yvcxp1buLTY5iDh1ZSAQ8w==", - "requires": { - "@fortawesome/fontawesome-common-types": "^0.2.36" + "node_modules/cssnano-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-4.0.0.tgz", + "integrity": "sha512-Z39TLP+1E0KUcd7LGyF4qMfu8ZufI0rDzhdyAMsa/8UyNUU8wpS0fhdBxbQbv32r64ea00h4878gommRVg2BHw==", + "dev": true, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "@humanwhocodes/config-array": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", - "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", + "node_modules/csso": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", + "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", "dev": true, - "requires": { - "@humanwhocodes/object-schema": "^1.2.0", - "debug": "^4.1.1", - "minimatch": "^3.0.4" + "dependencies": { + "css-tree": "~2.2.0" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" } }, - "@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, - "@jsdevtools/ono": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/@jsdevtools/ono/-/ono-7.1.3.tgz", - "integrity": "sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==", - "dev": true - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "node_modules/csso/node_modules/css-tree": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", + "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" + "dependencies": { + "mdn-data": "2.0.28", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" } }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "node_modules/csso/node_modules/mdn-data": { + "version": "2.0.28", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", + "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", "dev": true }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "node_modules/d3-array": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" + "dependencies": { + "internmap": "1 - 2" + }, + "engines": { + "node": ">=12" } }, - "@rollup/pluginutils": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", - "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==", - "dev": true, - "requires": { - "estree-walker": "^2.0.1", - "picomatch": "^2.2.2" + "node_modules/d3-color": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", + "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", + "engines": { + "node": ">=12" } }, - "@sveltejs/adapter-node": { - "version": "1.0.0-next.73", - "resolved": "https://registry.npmjs.org/@sveltejs/adapter-node/-/adapter-node-1.0.0-next.73.tgz", - "integrity": "sha512-eidd7u1dPHIaBKMjRePrxazUt+Mm/JpnaiKLzZJBdamhBiiYIb+epkPLLqfG5Oo346/0HLKwFRAM/FXn3u3BHQ==", + "node_modules/d3-dag": { + "version": "0.11.5", + "resolved": "https://registry.npmjs.org/d3-dag/-/d3-dag-0.11.5.tgz", + "integrity": "sha512-sNHvYqjzDlvV2fyEkoOCSuLs2GeWliIg7pJcAiKXgtUSxl0kIX0C2q1J8JzzA9CQWptKxYtzxFCXiKptTW8qsQ==", "dev": true, - "requires": { - "tiny-glob": "^0.2.9" + "dependencies": { + "d3-array": "^3.1.6", + "fastpriorityqueue": "0.7.2", + "javascript-lp-solver": "0.4.24", + "quadprog": "^1.6.1" } }, - "@sveltejs/adapter-static": { - "version": "1.0.0-next.29", - "resolved": "https://registry.npmjs.org/@sveltejs/adapter-static/-/adapter-static-1.0.0-next.29.tgz", - "integrity": "sha512-0hjGnfT3BRyoHnzJ2w0/xL+xICRpKneDTm45ZzggiRrc0r71WJfF6toGeg8N4QUQnj8EJ3Itm453gsS1kt7VUQ==", - "dev": true, - "requires": { - "tiny-glob": "^0.2.9" + "node_modules/d3-dispatch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", + "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==", + "engines": { + "node": ">=12" } }, - "@sveltejs/kit": { - "version": "1.0.0-next.324", - "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-1.0.0-next.324.tgz", - "integrity": "sha512-/CGW9rQpHQLBb2EcMw08yelD/C9hTsypymctUWdhryMTI8n1VWb0gkUcSHsz8n8oAAbKLXqwyHqeLATfcIMg2w==", - "dev": true, - "requires": { - "@sveltejs/vite-plugin-svelte": "^1.0.0-next.32", - "chokidar": "^3.5.3", - "sade": "^1.7.4", - "vite": "^2.9.0" + "node_modules/d3-drag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", + "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-selection": "3" + }, + "engines": { + "node": ">=12" } }, - "@sveltejs/vite-plugin-svelte": { - "version": "1.0.0-next.42", - "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-1.0.0-next.42.tgz", - "integrity": "sha512-I8ILzfjVQuOkl6eDHif6/QJhOEBnsA40u6/0RDWK0mujwOr+MfWCWEZEnrTKqa6YIVMO+uktfoknu61chbAIeg==", - "dev": true, - "requires": { - "@rollup/pluginutils": "^4.2.1", - "debug": "^4.3.4", - "kleur": "^4.1.4", - "magic-string": "^0.26.1", - "svelte-hmr": "^0.14.11" + "node_modules/d3-ease": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", + "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", + "engines": { + "node": ">=12" } }, - "@tailwindcss/forms": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.4.1.tgz", - "integrity": "sha512-gS9xjCmJjUBz/eP12QlENPLnf0tCx68oYE3mri0GMP5jdtVwLbGUNSRpjsp6NzLAZzZy3ueOwrcqB78Ax6Z84A==", - "dev": true, - "requires": { - "mini-svg-data-uri": "^1.2.3" + "node_modules/d3-interpolate": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", + "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", + "dependencies": { + "d3-color": "1 - 3" + }, + "engines": { + "node": ">=12" } }, - "@tailwindcss/typography": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.2.tgz", - "integrity": "sha512-coq8DBABRPFcVhVIk6IbKyyHUt7YTEC/C992tatFB+yEx5WGBQrCgsSFjxHUr8AWXphWckadVJbominEduYBqw==", - "dev": true, - "requires": { - "lodash.castarray": "^4.4.0", - "lodash.isplainobject": "^4.0.6", - "lodash.merge": "^4.6.2" + "node_modules/d3-selection": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", + "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", + "engines": { + "node": ">=12" } }, - "@trysound/sax": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", - "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", - "dev": true + "node_modules/d3-timer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", + "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", + "engines": { + "node": ">=12" + } }, - "@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", - "dev": true + "node_modules/d3-transition": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", + "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", + "dependencies": { + "d3-color": "1 - 3", + "d3-dispatch": "1 - 3", + "d3-ease": "1 - 3", + "d3-interpolate": "1 - 3", + "d3-timer": "1 - 3" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "d3-selection": "2 - 3" + } }, - "@types/marked": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@types/marked/-/marked-4.0.3.tgz", - "integrity": "sha512-HnMWQkLJEf/PnxZIfbm0yGJRRZYYMhb++O9M36UCTA9z53uPvVoSlAwJr3XOpDEryb7Hwl1qAx/MV6YIW1RXxg==" + "node_modules/d3-zoom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz", + "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "2 - 3", + "d3-transition": "2 - 3" + }, + "engines": { + "node": ">=12" + } }, - "@types/minimist": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", - "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", - "dev": true, - "peer": true + "node_modules/date-fns": { + "version": "2.30.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", + "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", + "dependencies": { + "@babel/runtime": "^7.21.0" + }, + "engines": { + "node": ">=0.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/date-fns" + } }, - "@types/node": { - "version": "17.0.31", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.31.tgz", - "integrity": "sha512-AR0x5HbXGqkEx9CadRH3EBYx/VkiUgZIhP4wvPn/+5KIsgpNoyFaRlVe0Zlx9gRtg8fA06a9tskE2MSN7TcG4Q==", - "dev": true + "node_modules/debounce-promise": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/debounce-promise/-/debounce-promise-3.1.2.tgz", + "integrity": "sha512-rZHcgBkbYavBeD9ej6sP56XfG53d51CD4dnaw989YX/nZ/ZJfgRx/9ePKmTNiUiyQvh4mtrMoS3OAWW+yoYtpg==", + "license": "MIT" }, - "@types/node-fetch": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.1.tgz", - "integrity": "sha512-oMqjURCaxoSIsHSr1E47QHzbmzNR5rK8McHuNb11BOM9cHcIK3Avy0s/b2JlXHoQGTYS3NsvWzV1M0iK7l0wbA==", - "dev": true, - "requires": { - "@types/node": "*", - "form-data": "^3.0.0" - }, - "dependencies": { - "form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true } } }, - "@types/normalize-package-data": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", - "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", + "node_modules/decamelize": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-5.0.1.tgz", + "integrity": "sha512-VfxadyCECXgQlkoEAjeghAr5gY3Hf+IKjKb+X8tGVDtveCjN+USwprd2q3QXBR9T1+x2DG0XZF5/w+7HAtSaXA==", "dev": true, - "peer": true + "license": "MIT", + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "node_modules/decamelize-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", + "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", "dev": true, - "peer": true - }, - "@types/pug": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/pug/-/pug-2.0.6.tgz", - "integrity": "sha512-SnHmG9wN1UVmagJOnyo/qkk0Z7gejYxOYYmaAwr5u2yFYfsupN3sg10kyzN8Hep/2zbHxCnsumxOoRIRMBwKCg==", - "dev": true + "license": "MIT", + "peer": true, + "dependencies": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "@types/sass": { - "version": "1.43.1", - "resolved": "https://registry.npmjs.org/@types/sass/-/sass-1.43.1.tgz", - "integrity": "sha512-BPdoIt1lfJ6B7rw35ncdwBZrAssjcwzI5LByIrYs+tpXlj/CAkuVdRsgZDdP4lq5EjyWzwxZCqAoFyHKFwp32g==", + "node_modules/decamelize-keys/node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", "dev": true, - "requires": { - "@types/node": "*" + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" } }, - "@types/vscode": { - "version": "1.66.0", - "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.66.0.tgz", - "integrity": "sha512-ZfJck4M7nrGasfs4A4YbUoxis3Vu24cETw3DERsNYtDZmYSYtk6ljKexKFKhImO/ZmY6ZMsmegu2FPkXoUFImA==" - }, - "@typescript-eslint/eslint-plugin": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.33.0.tgz", - "integrity": "sha512-aINiAxGVdOl1eJyVjaWn/YcVAq4Gi/Yo35qHGCnqbWVz61g39D0h23veY/MA0rFFGfxK7TySg2uwDeNv+JgVpg==", + "node_modules/decamelize-keys/node_modules/map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", "dev": true, - "requires": { - "@typescript-eslint/experimental-utils": "4.33.0", - "@typescript-eslint/scope-manager": "4.33.0", - "debug": "^4.3.1", - "functional-red-black-tree": "^1.0.1", - "ignore": "^5.1.8", - "regexpp": "^3.1.0", - "semver": "^7.3.5", - "tsutils": "^3.21.0" + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" } }, - "@typescript-eslint/experimental-utils": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.33.0.tgz", - "integrity": "sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.7", - "@typescript-eslint/scope-manager": "4.33.0", - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/typescript-estree": "4.33.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" + "node_modules/decode-named-character-reference": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz", + "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==", + "dependencies": { + "character-entities": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "@typescript-eslint/parser": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.33.0.tgz", - "integrity": "sha512-ZohdsbXadjGBSK0/r+d87X0SBmKzOq4/S5nzK6SBgJspFo9/CUDJ7hjayuze+JK7CZQLDMroqytp7pOcFKTxZA==", - "dev": true, - "requires": { - "@typescript-eslint/scope-manager": "4.33.0", - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/typescript-estree": "4.33.0", - "debug": "^4.3.1" + "node_modules/decompress-response": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", + "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", + "optional": true, + "dependencies": { + "mimic-response": "^2.0.0" + }, + "engines": { + "node": ">=8" } }, - "@typescript-eslint/scope-manager": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.33.0.tgz", - "integrity": "sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ==", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/visitor-keys": "4.33.0" + "node_modules/dedent-js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dedent-js/-/dedent-js-1.0.1.tgz", + "integrity": "sha512-OUepMozQULMLUmhxS95Vudo0jb0UchLimi3+pQ2plj61Fcy8axbP9hbiD4Sz6DPqn6XG3kfmziVfQ1rSys5AJQ==", + "dev": true + }, + "node_modules/deep-equal": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.2.tgz", + "integrity": "sha512-5tdhKF6DbU7iIzrIOa1AOUt39ZRm13cmL1cGEh//aqR8x9+tNfbywRf0n5FD/18OKMdo7DNEtrX2t22ZAkI+eg==", + "dependencies": { + "is-arguments": "^1.1.1", + "is-date-object": "^1.0.5", + "is-regex": "^1.1.4", + "object-is": "^1.1.5", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.5.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "@typescript-eslint/types": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.33.0.tgz", - "integrity": "sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ==", + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, - "@typescript-eslint/typescript-estree": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.33.0.tgz", - "integrity": "sha512-rkWRY1MPFzjwnEVHsxGemDzqqddw2QbTJlICPD9p9I9LfsO8fdmfQPOX3uKfUaGRDFJbfrtm/sXhVXN4E+bzCA==", + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", "dev": true, - "requires": { - "@typescript-eslint/types": "4.33.0", - "@typescript-eslint/visitor-keys": "4.33.0", - "debug": "^4.3.1", - "globby": "^11.0.3", - "is-glob": "^4.0.1", - "semver": "^7.3.5", - "tsutils": "^3.21.0" + "engines": { + "node": ">=0.10.0" } }, - "@typescript-eslint/visitor-keys": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.33.0.tgz", - "integrity": "sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg==", - "dev": true, - "requires": { - "@typescript-eslint/types": "4.33.0", - "eslint-visitor-keys": "^2.0.0" + "node_modules/deferred-leveldown": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz", + "integrity": "sha512-a59VOT+oDy7vtAbLRCZwWgxu2BaCfd5Hk7wxJd48ei7I+nsg8Orlb9CLG0PMZienk9BSUKgeAqkO2+Lw+1+Ukw==", + "optional": true, + "dependencies": { + "abstract-leveldown": "~6.2.1", + "inherits": "^2.0.3" + }, + "engines": { + "node": ">=6" } }, - "@zerodevx/svelte-toast": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/@zerodevx/svelte-toast/-/svelte-toast-0.6.3.tgz", - "integrity": "sha512-k0W1JFoqHIcIQaP9ij99+Rv0ugaQSSNwOuNwwmTGRjWtIqrQr+ExLDE8LQGXLlJIprqDyMWB4lJkUql/r0RAtA==" + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "dev": true, - "requires": { - "event-target-shim": "^5.0.0" + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "node_modules/defu": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz", + "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==", "dev": true }, - "acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "requires": {} - }, - "acorn-node": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", - "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", - "dev": true, - "requires": { - "acorn": "^7.0.0", - "acorn-walk": "^7.0.0", - "xtend": "^4.0.2" + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" } }, - "acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", - "dev": true + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "optional": true }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "node_modules/deprecation": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", + "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==", "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } + "license": "ISC" }, - "ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "engines": { + "node": ">=6" + } }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "node_modules/destr": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/destr/-/destr-2.0.3.tgz", + "integrity": "sha512-2N3BOUU4gYMpTP24s5rF5iP7BDr7uNTCs4ozw3kf/eKfvWSIu93GEBi5m427YoyJoeOzQ5smuu4nNAPGb8idSQ==", "dev": true }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/detect-indent": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", + "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", "dev": true, - "requires": { - "color-convert": "^2.0.1" + "engines": { + "node": ">=8" } }, - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" + "node_modules/detect-libc": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz", + "integrity": "sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==", + "optional": true, + "engines": { + "node": ">=8" } }, - "arg": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.1.tgz", - "integrity": "sha512-e0hDa9H2Z9AwFkk2qDlwhoMYE4eToKarchkQHovNdLTCYMHZHeRjI71crOh+dio4K6u1IcwubQqo79Ga4CyAQA==", + "node_modules/devalue": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/devalue/-/devalue-4.3.2.tgz", + "integrity": "sha512-KqFl6pOgOW+Y6wJgu80rHpo2/3H07vr8ntR9rkkFIRETewbf5GaYYcakYfiKz89K+sLsuPkQIZaXDMjUObZwWg==", "dev": true }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" + "node_modules/devlop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", + "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", + "dependencies": { + "dequal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", - "dev": true, - "peer": true - }, - "astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", "dev": true }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true + "node_modules/diff": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", + "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==", + "engines": { + "node": ">=0.3.1" + } }, - "autoprefixer": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.5.tgz", - "integrity": "sha512-Fvd8yCoA7lNX/OUllvS+aS1I7WRBclGXsepbvT8ZaPgrH24rgXpZzF0/6Hh3ZEkwg+0AES/Osd196VZmYoEFtw==", + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, - "requires": { - "browserslist": "^4.20.2", - "caniuse-lite": "^1.0.30001332", - "fraction.js": "^4.2.0", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", - "postcss-value-parser": "^4.2.0" + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "axios": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.24.0.tgz", - "integrity": "sha512-Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA==", - "dev": true, - "requires": { - "follow-redirects": "^1.14.4" - } - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true - }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", "dev": true }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, - "requires": { - "fill-range": "^7.0.1" + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" } }, - "browserslist": { - "version": "4.20.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.3.tgz", - "integrity": "sha512-NBhymBQl1zM0Y5dQT/O+xiLP9/rzOIQdKM/eMJBAq7yBgaB6krIYLGejrwVYnSHZdqjscB1SPuAjHwxjvN6Wdg==", + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001332", - "electron-to-chromium": "^1.4.118", - "escalade": "^3.1.1", - "node-releases": "^2.0.3", - "picocolors": "^1.0.0" + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" } }, - "buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", - "dev": true - }, - "call-me-maybe": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", - "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=", - "dev": true - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true - }, - "camelcase-css": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", - "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", - "dev": true - }, - "camelcase-keys": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", - "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", "dev": true, - "peer": true, - "requires": { - "camelcase": "^5.3.1", - "map-obj": "^4.0.0", - "quick-lru": "^4.0.1" - }, - "dependencies": { - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "peer": true + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" } - } - }, - "caniuse-api": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", - "dev": true, - "requires": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" - } - }, - "caniuse-lite": { - "version": "1.0.30001334", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001334.tgz", - "integrity": "sha512-kbaCEBRRVSoeNs74sCuq92MJyGrMtjWVfhltoHUCW4t4pXFvGjUBrfo47weBRViHkiV3eBYyIsfl956NtHGazw==", - "dev": true - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } + ] }, - "chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", "dev": true, - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" } }, - "clone-regexp": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clone-regexp/-/clone-regexp-2.2.0.tgz", - "integrity": "sha512-beMpP7BOtTipFuW8hrJvREQ2DrRu3BE7by0ZpibtfBA+qfHYvMGTc2Yb1JMYPKg/JUw0CHYvpg796aNTSW9z7Q==", + "node_modules/domutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", "dev": true, - "peer": true, - "requires": { - "is-regexp": "^2.0.0" + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" } }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/dotenv": { + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", "dev": true, - "requires": { - "color-name": "~1.1.4" + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" } }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "node_modules/driver.js": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/driver.js/-/driver.js-1.3.1.tgz", + "integrity": "sha512-MvUdXbqSgEsgS/H9KyWb5Rxy0aE6BhOVT4cssi2x2XjmXea6qQfgdx32XKVLLSqTaIw7q/uxU5Xl3NV7+cN6FQ==" }, - "colord": { - "version": "2.9.2", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.2.tgz", - "integrity": "sha512-Uqbg+J445nc1TKn4FoDPS6ZZqAvEDnwrH42yo8B40JSOgSLxMZ/gt3h4nmCtPLQeXhjJJkqBx7SCY35WnIixaQ==", - "dev": true + "node_modules/earcut": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/earcut/-/earcut-2.2.4.tgz", + "integrity": "sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ==" }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" + "node_modules/easy-reactive": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/easy-reactive/-/easy-reactive-1.0.4.tgz", + "integrity": "sha512-dFVouegPctMf6XT5si+sRByBWUQE30n99TW0Y45Y7mccmNsbSl4uXA2sBGI8zCDZqXjhb8ouA3wVVhSSGpXk5Q==", + "dependencies": { + "lodash.clonedeep": "^4.5.0", + "lodash.get": "^4.4.2", + "lodash.isequal": "^4.5.0" } }, - "commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "node_modules/electron-to-chromium": { + "version": "1.4.588", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.588.tgz", + "integrity": "sha512-soytjxwbgcCu7nh5Pf4S2/4wa6UIu+A3p03U2yVr53qGxi1/VTR3ENI+p50v+UxqqZAfl48j3z55ud7VHIOr9w==", "dev": true }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "devOptional": true }, - "cosmiconfig": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", - "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", - "dev": true, - "peer": true, - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" + "node_modules/encoding-down": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/encoding-down/-/encoding-down-6.3.0.tgz", + "integrity": "sha512-QKrV0iKR6MZVJV08QY0wp1e7vF6QbhnbQhb07bwpEyuz4uZiZgPlEGdkCROuFkUwdxlFaiPIhjyarH1ee/3vhw==", + "optional": true, + "dependencies": { + "abstract-leveldown": "^6.2.1", + "inherits": "^2.0.3", + "level-codec": "^9.0.0", + "level-errors": "^2.0.0" + }, + "engines": { + "node": ">=6" } }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" } }, - "css-declaration-sorter": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.2.2.tgz", - "integrity": "sha512-Ufadglr88ZLsrvS11gjeu/40Lw74D9Am/Jpr3LlYm5Q4ZP5KdlUhG+6u2EjyXeZcxmZ2h1ebCKngDjolpeLHpg==", - "dev": true, - "requires": {} - }, - "css-functions-list": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.0.1.tgz", - "integrity": "sha512-PriDuifDt4u4rkDgnqRCLnjfMatufLmWNfQnGCq34xZwpY3oabwhB9SqRBmuvWUgndbemCFlKqg+nO7C2q0SBw==", - "dev": true, - "peer": true + "node_modules/errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "optional": true, + "dependencies": { + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" + } }, - "css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, - "requires": { - "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" + "license": "MIT", + "peer": true, + "dependencies": { + "is-arrayish": "^0.2.1" } }, - "css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "dev": true, - "requires": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" } }, - "css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "dev": true + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "engines": { + "node": ">= 0.4" + } }, - "cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "node_modules/es6-promise": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", + "integrity": "sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==", "dev": true }, - "cssnano": { - "version": "5.1.7", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.7.tgz", - "integrity": "sha512-pVsUV6LcTXif7lvKKW9ZrmX+rGRzxkEdJuVJcp5ftUjWITgwam5LMZOgaTvUrWPkcORBey6he7JKb4XAJvrpKg==", + "node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", "dev": true, - "requires": { - "cssnano-preset-default": "^5.2.7", - "lilconfig": "^2.0.3", - "yaml": "^1.10.2" + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" } }, - "cssnano-preset-default": { - "version": "5.2.7", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.7.tgz", - "integrity": "sha512-JiKP38ymZQK+zVKevphPzNSGHSlTI+AOwlasoSRtSVMUU285O7/6uZyd5NbW92ZHp41m0sSHe6JoZosakj63uA==", - "dev": true, - "requires": { - "css-declaration-sorter": "^6.2.2", - "cssnano-utils": "^3.1.0", - "postcss-calc": "^8.2.3", - "postcss-colormin": "^5.3.0", - "postcss-convert-values": "^5.1.0", - "postcss-discard-comments": "^5.1.1", - "postcss-discard-duplicates": "^5.1.0", - "postcss-discard-empty": "^5.1.1", - "postcss-discard-overridden": "^5.1.0", - "postcss-merge-longhand": "^5.1.4", - "postcss-merge-rules": "^5.1.1", - "postcss-minify-font-values": "^5.1.0", - "postcss-minify-gradients": "^5.1.1", - "postcss-minify-params": "^5.1.2", - "postcss-minify-selectors": "^5.2.0", - "postcss-normalize-charset": "^5.1.0", - "postcss-normalize-display-values": "^5.1.0", - "postcss-normalize-positions": "^5.1.0", - "postcss-normalize-repeat-style": "^5.1.0", - "postcss-normalize-string": "^5.1.0", - "postcss-normalize-timing-functions": "^5.1.0", - "postcss-normalize-unicode": "^5.1.0", - "postcss-normalize-url": "^5.1.0", - "postcss-normalize-whitespace": "^5.1.1", - "postcss-ordered-values": "^5.1.1", - "postcss-reduce-initial": "^5.1.0", - "postcss-reduce-transforms": "^5.1.0", - "postcss-svgo": "^5.1.0", - "postcss-unique-selectors": "^5.1.1" - } - }, - "cssnano-utils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", - "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", - "dev": true, - "requires": {} - }, - "csso": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", - "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", "dev": true, - "requires": { - "css-tree": "^1.1.2" + "engines": { + "node": ">=6" } }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, - "requires": { - "ms": "2.1.2" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true, - "peer": true - }, - "decamelize-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", - "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", - "dev": true, - "peer": true, - "requires": { - "decamelize": "^1.1.0", - "map-obj": "^1.0.0" + "node_modules/eslint": { + "version": "8.54.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.54.0.tgz", + "integrity": "sha512-NY0DfAkM8BIZDVl6PgSa1ttZbx3xHgJzSNJKYcQglem6CppHyMhRIQkBVSSMaSRnLhig3jsDbEzOjwCVt4AmmA==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.3", + "@eslint/js": "8.54.0", + "@humanwhocodes/config-array": "^0.11.13", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" }, - "dependencies": { - "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", - "dev": true, - "peer": true - } + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "defined": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", - "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", - "dev": true - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, - "detect-indent": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", - "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", - "dev": true - }, - "detective": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz", - "integrity": "sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==", + "node_modules/eslint-compat-utils": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.1.2.tgz", + "integrity": "sha512-Jia4JDldWnFNIru1Ehx1H5s9/yxiRHY/TimCuUc0jNexew3cF1gI6CYZil1ociakfWO3rRqFjl1mskBblB3RYg==", "dev": true, - "requires": { - "acorn-node": "^1.6.1", - "defined": "^1.0.0", - "minimist": "^1.1.1" + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "eslint": ">=6.0.0" } }, - "didyoumean": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", - "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", - "dev": true - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "node_modules/eslint-config-prettier": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz", + "integrity": "sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==", "dev": true, - "requires": { - "path-type": "^4.0.0" + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" } }, - "dlv": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", - "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", - "dev": true - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "node_modules/eslint-plugin-svelte": { + "version": "2.35.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-svelte/-/eslint-plugin-svelte-2.35.0.tgz", + "integrity": "sha512-3WDFxNrkXaMlpqoNo3M1ZOQuoFLMO9+bdnN6oVVXaydXC7nzCJuGy9a0zqoNDHMSRPYt0Rqo6hIdHMEaI5sQnw==", "dev": true, - "requires": { - "esutils": "^2.0.2" + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@jridgewell/sourcemap-codec": "^1.4.14", + "debug": "^4.3.1", + "eslint-compat-utils": "^0.1.2", + "esutils": "^2.0.3", + "known-css-properties": "^0.29.0", + "postcss": "^8.4.5", + "postcss-load-config": "^3.1.4", + "postcss-safe-parser": "^6.0.0", + "postcss-selector-parser": "^6.0.11", + "semver": "^7.5.3", + "svelte-eslint-parser": ">=0.33.0 <1.0.0" + }, + "engines": { + "node": "^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ota-meshi" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0-0", + "svelte": "^3.37.0 || ^4.0.0" + }, + "peerDependenciesMeta": { + "svelte": { + "optional": true + } } }, - "dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "node_modules/eslint-plugin-svelte/node_modules/postcss-load-config": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", + "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", "dev": true, - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" + "dependencies": { + "lilconfig": "^2.0.5", + "yaml": "^1.10.2" + }, + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } } }, - "domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "dev": true - }, - "domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "node_modules/eslint-plugin-svelte/node_modules/postcss-selector-parser": { + "version": "6.0.13", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", + "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", "dev": true, - "requires": { - "domelementtype": "^2.2.0" + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" } }, - "domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "node_modules/eslint-plugin-svelte/node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", "dev": true, - "requires": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" + "engines": { + "node": ">= 6" } }, - "electron-to-chromium": { - "version": "1.4.129", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.129.tgz", - "integrity": "sha512-GgtN6bsDtHdtXJtlMYZWGB/uOyjZWjmRDumXTas7dGBaB9zUyCjzHet1DY2KhyHN8R0GLbzZWqm4efeddqqyRQ==", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, - "requires": { - "ansi-colors": "^4.1.1" + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" } }, - "entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "dev": true - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, - "peer": true, - "requires": { - "is-arrayish": "^0.2.1" + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "es6-promise": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", - "integrity": "sha1-oIzd6EzNvzTQJ6FFG8kdS80ophM=", - "dev": true - }, - "esbuild": { - "version": "0.14.38", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.38.tgz", - "integrity": "sha512-12fzJ0fsm7gVZX1YQ1InkOE5f9Tl7cgf6JPYXRJtPIoE0zkWAbHdPHVPPaLi9tYAcEBqheGzqLn/3RdTOyBfcA==", - "dev": true, - "requires": { - "esbuild-android-64": "0.14.38", - "esbuild-android-arm64": "0.14.38", - "esbuild-darwin-64": "0.14.38", - "esbuild-darwin-arm64": "0.14.38", - "esbuild-freebsd-64": "0.14.38", - "esbuild-freebsd-arm64": "0.14.38", - "esbuild-linux-32": "0.14.38", - "esbuild-linux-64": "0.14.38", - "esbuild-linux-arm": "0.14.38", - "esbuild-linux-arm64": "0.14.38", - "esbuild-linux-mips64le": "0.14.38", - "esbuild-linux-ppc64le": "0.14.38", - "esbuild-linux-riscv64": "0.14.38", - "esbuild-linux-s390x": "0.14.38", - "esbuild-netbsd-64": "0.14.38", - "esbuild-openbsd-64": "0.14.38", - "esbuild-sunos-64": "0.14.38", - "esbuild-windows-32": "0.14.38", - "esbuild-windows-64": "0.14.38", - "esbuild-windows-arm64": "0.14.38" - } - }, - "esbuild-android-64": { - "version": "0.14.38", - "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.38.tgz", - "integrity": "sha512-aRFxR3scRKkbmNuGAK+Gee3+yFxkTJO/cx83Dkyzo4CnQl/2zVSurtG6+G86EQIZ+w+VYngVyK7P3HyTBKu3nw==", - "dev": true, - "optional": true - }, - "esbuild-android-arm64": { - "version": "0.14.38", - "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.38.tgz", - "integrity": "sha512-L2NgQRWuHFI89IIZIlpAcINy9FvBk6xFVZ7xGdOwIm8VyhX1vNCEqUJO3DPSSy945Gzdg98cxtNt8Grv1CsyhA==", - "dev": true, - "optional": true - }, - "esbuild-darwin-64": { - "version": "0.14.38", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.38.tgz", - "integrity": "sha512-5JJvgXkX87Pd1Og0u/NJuO7TSqAikAcQQ74gyJ87bqWRVeouky84ICoV4sN6VV53aTW+NE87qLdGY4QA2S7KNA==", + "node_modules/eslint/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "optional": true + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } }, - "esbuild-darwin-arm64": { - "version": "0.14.38", - "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.38.tgz", - "integrity": "sha512-eqF+OejMI3mC5Dlo9Kdq/Ilbki9sQBw3QlHW3wjLmsLh+quNfHmGMp3Ly1eWm981iGBMdbtSS9+LRvR2T8B3eQ==", + "node_modules/eslint/node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, - "optional": true + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } }, - "esbuild-freebsd-64": { - "version": "0.14.38", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.38.tgz", - "integrity": "sha512-epnPbhZUt93xV5cgeY36ZxPXDsQeO55DppzsIgWM8vgiG/Rz+qYDLmh5ts3e+Ln1wA9dQ+nZmVHw+RjaW3I5Ig==", + "node_modules/eslint/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, - "optional": true + "engines": { + "node": ">=4.0" + } }, - "esbuild-freebsd-arm64": { - "version": "0.14.38", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.38.tgz", - "integrity": "sha512-/9icXUYJWherhk+y5fjPI5yNUdFPtXHQlwP7/K/zg8t8lQdHVj20SqU9/udQmeUo5pDFHMYzcEFfJqgOVeKNNQ==", + "node_modules/eslint/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, - "optional": true + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } }, - "esbuild-linux-32": { - "version": "0.14.38", - "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.38.tgz", - "integrity": "sha512-QfgfeNHRFvr2XeHFzP8kOZVnal3QvST3A0cgq32ZrHjSMFTdgXhMhmWdKzRXP/PKcfv3e2OW9tT9PpcjNvaq6g==", + "node_modules/eslint/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "optional": true + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } }, - "esbuild-linux-64": { - "version": "0.14.38", - "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.38.tgz", - "integrity": "sha512-uuZHNmqcs+Bj1qiW9k/HZU3FtIHmYiuxZ/6Aa+/KHb/pFKr7R3aVqvxlAudYI9Fw3St0VCPfv7QBpUITSmBR1Q==", - "dev": true, - "optional": true + "node_modules/esm-env": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/esm-env/-/esm-env-1.0.0.tgz", + "integrity": "sha512-Cf6VksWPsTuW01vU9Mk/3vRue91Zevka5SjyNf3nEpokFRuqt/KjUQoGAwq9qMmhpLTHmXzSIrFRw8zxWzmFBA==" }, - "esbuild-linux-arm": { - "version": "0.14.38", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.38.tgz", - "integrity": "sha512-FiFvQe8J3VKTDXG01JbvoVRXQ0x6UZwyrU4IaLBZeq39Bsbatd94Fuc3F1RGqPF5RbIWW7RvkVQjn79ejzysnA==", + "node_modules/esm-env-robust": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/esm-env-robust/-/esm-env-robust-0.0.3.tgz", + "integrity": "sha512-90Gnuw2DALOqlL1581VxP3GHPUNHX9U+fQ+8FNcTTFClhY5gEggAAnJ3q1b2Oq23knRsjv8YpNeMRPaMLUymOA==", "dev": true, - "optional": true + "dependencies": { + "esm-env": "^1.0.0" + } }, - "esbuild-linux-arm64": { - "version": "0.14.38", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.38.tgz", - "integrity": "sha512-HlMGZTEsBrXrivr64eZ/EO0NQM8H8DuSENRok9d+Jtvq8hOLzrxfsAT9U94K3KOGk2XgCmkaI2KD8hX7F97lvA==", + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, - "optional": true + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } }, - "esbuild-linux-mips64le": { - "version": "0.14.38", - "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.38.tgz", - "integrity": "sha512-qd1dLf2v7QBiI5wwfil9j0HG/5YMFBAmMVmdeokbNAMbcg49p25t6IlJFXAeLzogv1AvgaXRXvgFNhScYEUXGQ==", + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", "dev": true, - "optional": true + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } }, - "esbuild-linux-ppc64le": { - "version": "0.14.38", - "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.38.tgz", - "integrity": "sha512-mnbEm7o69gTl60jSuK+nn+pRsRHGtDPfzhrqEUXyCl7CTOCLtWN2bhK8bgsdp6J/2NyS/wHBjs1x8aBWwP2X9Q==", + "node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, - "optional": true + "engines": { + "node": ">=4.0" + } }, - "esbuild-linux-riscv64": { - "version": "0.14.38", - "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.38.tgz", - "integrity": "sha512-+p6YKYbuV72uikChRk14FSyNJZ4WfYkffj6Af0/Tw63/6TJX6TnIKE+6D3xtEc7DeDth1fjUOEqm+ApKFXbbVQ==", + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, - "optional": true - }, - "esbuild-linux-s390x": { - "version": "0.14.38", - "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.38.tgz", - "integrity": "sha512-0zUsiDkGJiMHxBQ7JDU8jbaanUY975CdOW1YDrurjrM0vWHfjv9tLQsW9GSyEb/heSK1L5gaweRjzfUVBFoybQ==", - "dev": true, - "optional": true - }, - "esbuild-netbsd-64": { - "version": "0.14.38", - "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.38.tgz", - "integrity": "sha512-cljBAApVwkpnJZfnRVThpRBGzCi+a+V9Ofb1fVkKhtrPLDYlHLrSYGtmnoTVWDQdU516qYI8+wOgcGZ4XIZh0Q==", - "dev": true, - "optional": true - }, - "esbuild-openbsd-64": { - "version": "0.14.38", - "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.38.tgz", - "integrity": "sha512-CDswYr2PWPGEPpLDUO50mL3WO/07EMjnZDNKpmaxUPsrW+kVM3LoAqr/CE8UbzugpEiflYqJsGPLirThRB18IQ==", - "dev": true, - "optional": true - }, - "esbuild-sunos-64": { - "version": "0.14.38", - "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.38.tgz", - "integrity": "sha512-2mfIoYW58gKcC3bck0j7lD3RZkqYA7MmujFYmSn9l6TiIcAMpuEvqksO+ntBgbLep/eyjpgdplF7b+4T9VJGOA==", - "dev": true, - "optional": true - }, - "esbuild-windows-32": { - "version": "0.14.38", - "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.38.tgz", - "integrity": "sha512-L2BmEeFZATAvU+FJzJiRLFUP+d9RHN+QXpgaOrs2klshoAm1AE6Us4X6fS9k33Uy5SzScn2TpcgecbqJza1Hjw==", - "dev": true, - "optional": true - }, - "esbuild-windows-64": { - "version": "0.14.38", - "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.38.tgz", - "integrity": "sha512-Khy4wVmebnzue8aeSXLC+6clo/hRYeNIm0DyikoEqX+3w3rcvrhzpoix0S+MF9vzh6JFskkIGD7Zx47ODJNyCw==", - "dev": true, - "optional": true - }, - "esbuild-windows-arm64": { - "version": "0.14.38", - "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.38.tgz", - "integrity": "sha512-k3FGCNmHBkqdJXuJszdWciAH77PukEyDsdIryEHn9cKLQFxzhT39dSumeTuggaQcXY57UlmLGIkklWZo2qzHpw==", - "dev": true, - "optional": true - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, - "eslint": { - "version": "7.32.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", - "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", - "dev": true, - "requires": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.3", - "@humanwhocodes/config-array": "^0.5.0", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.1.2", - "globals": "^13.6.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "table": "^6.0.9", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "dependencies": { - "eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^1.1.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true - } - } - }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - } + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" } }, - "eslint-config-prettier": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", - "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, - "requires": {} + "engines": { + "node": ">=4.0" + } }, - "eslint-plugin-svelte3": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-svelte3/-/eslint-plugin-svelte3-3.4.1.tgz", - "integrity": "sha512-7p59WG8qV8L6wLdl4d/c3mdjkgVglQCdv5XOTk/iNPBKXuuV+Q0eFP5Wa6iJd/G2M1qR3BkLPEzaANOqKAZczw==", + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true, - "requires": {} + "engines": { + "node": ">=4.0" + } }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dependencies": { + "@types/estree": "^1.0.0" } }, - "eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, - "requires": { - "eslint-visitor-keys": "^2.0.0" + "engines": { + "node": ">=0.10.0" } }, - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true - }, - "espree": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", - "dev": true, - "requires": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true - } + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "engines": { + "node": ">=6" } }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true + "node_modules/eventemitter3": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-2.0.3.tgz", + "integrity": "sha512-jLN68Dx5kyFHaePoXWPsCGW5qdyZQtLYHkxkg02/Mz6g0kYpDx4FyP6XfArhQdlOC4b8Mv+EMxPo/8La7Tzghg==" }, - "esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "node_modules/execa": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", + "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", "dev": true, - "requires": { - "estraverse": "^5.1.0" - }, "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } + "cross-spawn": "^7.0.3", + "get-stream": "^8.0.1", + "human-signals": "^5.0.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "node_modules/execa/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, - "requires": { - "estraverse": "^5.2.0" + "engines": { + "node": ">=14" }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" }, - "estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true + "node_modules/fast-diff": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.1.2.tgz", + "integrity": "sha512-KaJUt+M9t1qaIteSvjc6P3RbMdXsNhK61GRftR6SNxqmhthcd9MGIi4T+o0jD8LUSpSnSKXE20nLtJ3fOHxQig==" }, - "event-target-shim": { + "node_modules/fast-equals": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", - "dev": true - }, - "execall": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/execall/-/execall-2.0.0.tgz", - "integrity": "sha512-0FU2hZ5Hh6iQnarpRtQurM/aAvp3RIbfvgLHrcqJYzhXyV2KFruhuChf9NC6waAhiUR7FFtlugkI4p7f2Fqlow==", - "dev": true, - "peer": true, - "requires": { - "clone-regexp": "^2.1.0" + "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-5.0.1.tgz", + "integrity": "sha512-WF1Wi8PwwSY7/6Kx0vKXtw8RwuSGoM1bvDaJbu7MxDlR1vovZjIAKrnzyrThgAjm6JDTu0fVgWXDlMGspodfoQ==", + "engines": { + "node": ">=6.0.0" } }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "dev": true, - "requires": { + "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" } }, - "fast-json-stable-stringify": { + "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true }, - "fast-levenshtein": { + "node_modules/fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, - "fastest-levenshtein": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", - "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==", + "node_modules/fast-uri": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.1.tgz", + "integrity": "sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==", "dev": true, + "license": "MIT", "peer": true }, - "fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "node_modules/fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 4.9.1" + } + }, + "node_modules/fastpriorityqueue": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/fastpriorityqueue/-/fastpriorityqueue-0.7.2.tgz", + "integrity": "sha512-5DtIKh6vtOmEGkYdEPNNb+mxeYCnBiKbK3s4gq52l6cX8I5QaTDWWw0Wx/iYo80fVOblSycHu1/iJeqeNxG8Jw==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", "dev": true, - "requires": { + "dependencies": { "reusify": "^1.0.4" } }, - "file-entry-cache": { + "node_modules/file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, - "requires": { + "dependencies": { "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" } }, - "fill-range": { + "node_modules/fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dev": true, - "requires": { + "dependencies": { "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, - "peer": true, - "requires": { - "locate-path": "^5.0.0", + "dependencies": { + "locate-path": "^6.0.0", "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", "dev": true, - "requires": { - "flatted": "^3.1.0", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" } }, - "flatted": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz", - "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==", + "node_modules/flatted": { + "version": "3.2.9", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", + "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", "dev": true }, - "follow-redirects": { - "version": "1.14.9", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.9.tgz", - "integrity": "sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w==", - "dev": true + "node_modules/follow-redirects": { + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } }, - "form-data": { + "node_modules/form-data": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dev": true, - "requires": { + "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" } }, - "fraction.js": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", - "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", - "dev": true - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true + "node_modules/form-data-encoder": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.2.tgz", + "integrity": "sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==" }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true + "node_modules/formdata-node": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/formdata-node/-/formdata-node-4.4.1.tgz", + "integrity": "sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==", + "dependencies": { + "node-domexception": "1.0.0", + "web-streams-polyfill": "4.0.0-beta.3" + }, + "engines": { + "node": ">= 12.20" + } }, - "fuse.js": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-6.5.3.tgz", - "integrity": "sha512-sA5etGE7yD/pOqivZRBvUBd/NaL2sjAu6QuSaFoe1H2BrJSkH/T/UXAJ8CdXdw7DvY3Hs8CXKYkDWX7RiP5KOg==" + "node_modules/formdata-node/node_modules/web-streams-polyfill": { + "version": "4.0.0-beta.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz", + "integrity": "sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==", + "engines": { + "node": ">= 14" + } }, - "get-stdin": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz", - "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==", + "node_modules/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", "dev": true, - "peer": true + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } }, - "glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "devOptional": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "devOptional": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "devOptional": true + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gauge": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", + "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", + "optional": true, + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.2", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.1", + "object-assign": "^4.1.1", + "signal-exit": "^3.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/geotiff": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/geotiff/-/geotiff-2.1.0.tgz", + "integrity": "sha512-B/iFJuFfRpmPHXf8aIRPRgUWwfaNb6dlsynkM8SWeHAPu7CpyvfqEa43KlBt7xxq5OTVysQacFHxhCn3SZhRKQ==", + "dependencies": { + "@petamoriken/float16": "^3.4.7", + "lerc": "^3.0.0", + "pako": "^2.0.4", + "parse-headers": "^2.0.2", + "quick-lru": "^6.1.1", + "web-worker": "^1.2.0", + "xml-utils": "^1.0.2", + "zstddec": "^0.1.0" + }, + "engines": { + "node": ">=10.19" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-stream": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", + "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", "dev": true, - "requires": { + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/giget": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/giget/-/giget-1.2.3.tgz", + "integrity": "sha512-8EHPljDvs7qKykr6uw8b+lqLiUc/vUg+KVTI0uND4s63TdsZM2Xus3mflvF0DDG9SiM4RlCkFGL+7aAjRmV7KA==", + "dev": true, + "dependencies": { + "citty": "^0.1.6", + "consola": "^3.2.3", + "defu": "^6.1.4", + "node-fetch-native": "^1.6.3", + "nypm": "^0.3.8", + "ohash": "^1.1.3", + "pathe": "^1.1.2", + "tar": "^6.2.0" + }, + "bin": { + "giget": "dist/cli.mjs" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "devOptional": true, + "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^3.0.4", + "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "glob-parent": { + "node_modules/glob-parent": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, - "requires": { + "dependencies": { "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" } }, - "glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" + "node_modules/glob/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "devOptional": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "devOptional": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } }, - "global-modules": { + "node_modules/global-modules": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", "dev": true, + "license": "MIT", "peer": true, - "requires": { + "dependencies": { "global-prefix": "^3.0.0" + }, + "engines": { + "node": ">=6" } }, - "global-prefix": { + "node_modules/global-prefix": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", "dev": true, + "license": "MIT", "peer": true, - "requires": { + "dependencies": { "ini": "^1.3.5", "kind-of": "^6.0.2", "which": "^1.3.1" }, + "engines": { + "node": ">=6" + } + }, + "node_modules/global-prefix/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "license": "ISC", + "peer": true, "dependencies": { - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "peer": true, - "requires": { - "isexe": "^2.0.0" - } - } + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" } }, - "globals": { - "version": "13.13.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.13.0.tgz", - "integrity": "sha512-EQ7Q18AJlPwp3vUDL4mKA0KXrXyNIQyWon6T6XQiBQF0XHvRsiCSrWmmeATpUzdJN2HhWZU6Pdl0a9zdep5p6A==", + "node_modules/globals": { + "version": "13.23.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz", + "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==", "dev": true, - "requires": { + "dependencies": { "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "globalyzer": { + "node_modules/globalyzer": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz", "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==", "dev": true }, - "globby": { + "node_modules/globby": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, - "requires": { + "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", "fast-glob": "^3.2.9", "ignore": "^5.2.0", "merge2": "^1.4.1", "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "globjoin": { + "node_modules/globjoin": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz", - "integrity": "sha1-L0SUrIkZ43Z8XLtpHp9GMyQoXUM=", + "integrity": "sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==", "dev": true, + "license": "MIT", "peer": true }, - "globrex": { + "node_modules/globrex": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", "dev": true }, - "graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "dev": true }, - "handlebars": { - "version": "4.7.7", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", - "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", + "node_modules/graphql": { + "version": "16.8.1", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.8.1.tgz", + "integrity": "sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw==", + "engines": { + "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" + } + }, + "node_modules/graphql-language-service": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/graphql-language-service/-/graphql-language-service-5.3.0.tgz", + "integrity": "sha512-gCQIIy7lM9CB1KPLEb+DNZLczA9zuTLEOJE2hEQZTFYInogdmMDRa6RAkvM4LL0LcgcS+3uPs6KtHlcjCqRbUg==", + "license": "MIT", + "dependencies": { + "debounce-promise": "^3.1.2", + "nullthrows": "^1.0.0", + "vscode-languageserver-types": "^3.17.1" + }, + "bin": { + "graphql": "dist/temp-bin.js" + }, + "peerDependencies": { + "graphql": "^15.5.0 || ^16.0.0 || ^17.0.0-alpha.2" + } + }, + "node_modules/hammerjs": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/hammerjs/-/hammerjs-2.0.8.tgz", + "integrity": "sha512-tSQXBXS/MWQOn/RKckawJ61vvsDpCom87JgxiYdGwHdOa0ht0vzUWDlfioofFCRU0L+6NGDt6XzbgoJvZkMeRQ==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/handlebars": { + "version": "4.7.8", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", + "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", "dev": true, - "requires": { + "dependencies": { "minimist": "^1.2.5", - "neo-async": "^2.6.0", + "neo-async": "^2.6.2", "source-map": "^0.6.1", - "uglify-js": "^3.1.4", "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" } }, - "hard-rejection": { + "node_modules/hard-rejection": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", "dev": true, - "peer": true - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6" } }, - "has-flag": { + "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "highlight.js": { - "version": "11.5.1", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.5.1.tgz", - "integrity": "sha512-LKzHqnxr4CrD2YsNoIf/o5nJ09j4yi/GcH5BnYz9UnVpZdS4ucMgvP61TDty5xJcFGRjnH4DpujkS9bHT3hq0Q==" + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "optional": true + }, + "node_modules/hash-sum": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-2.0.0.tgz", + "integrity": "sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==" + }, + "node_modules/hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/highlight.js": { + "version": "11.9.0", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.9.0.tgz", + "integrity": "sha512-fJ7cW7fQGCYAkgv4CPfwFHrfd/cLS4Hau96JuJ+ZTOWhjnhoeN1ub1tFmALm/+lW5z4WCAuAV9bm05AP0mS6Gw==", + "engines": { + "node": ">=12.0.0" + } }, - "hosted-git-info": { + "node_modules/hosted-git-info": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", "dev": true, + "license": "ISC", "peer": true, - "requires": { + "dependencies": { "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" } }, - "html-tags": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.2.0.tgz", - "integrity": "sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg==", + "node_modules/html-tags": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", + "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", "dev": true, - "peer": true + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "optional": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/human-signals": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", + "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", + "dev": true, + "engines": { + "node": ">=16.17.0" + } + }, + "node_modules/humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "dependencies": { + "ms": "^2.0.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/ignore": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", + "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/immediate": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz", + "integrity": "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==", + "optional": true }, - "import-fresh": { + "node_modules/import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, - "requires": { + "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "import-lazy": { + "node_modules/import-lazy": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", "dev": true, - "peer": true + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/import-meta-resolve": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.0.0.tgz", + "integrity": "sha512-okYUR7ZQPH+efeuMJGlq4f8ubUgO50kByRPyt/Cy1Io4PSRsPjxME+YlVaCOx+NIToW7hCsZNFJyTPFFKepRSA==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, - "imurmurhash": { + "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } }, - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "node_modules/indent-string": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", + "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", "dev": true, - "peer": true + "license": "MIT", + "peer": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "inflight": { + "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "devOptional": true, + "dependencies": { "once": "^1.3.0", "wrappy": "1" } }, - "inherits": { + "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true + "devOptional": true }, - "ini": { + "node_modules/ini": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true, + "license": "ISC", "peer": true }, - "is-arrayish": { + "node_modules/inline-style-parser": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", + "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==", + "dev": true + }, + "node_modules/internmap": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", + "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", "dev": true, + "license": "MIT", "peer": true }, - "is-binary-path": { + "node_modules/is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, - "requires": { + "dependencies": { "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" } }, - "is-core-module": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", - "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", + "node_modules/is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", "dev": true, - "requires": { - "has": "^1.0.3" + "dependencies": { + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "is-extglob": { + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "is-fullwidth-code-point": { + "node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true + "devOptional": true, + "engines": { + "node": ">=8" + } }, - "is-glob": { + "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, - "requires": { + "dependencies": { "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "is-number": { + "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.12.0" + } }, - "is-plain-obj": { + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-obj": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", "dev": true, - "peer": true + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } }, - "is-plain-object": { + "node_modules/is-plain-object": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", "dev": true, - "peer": true + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } }, - "is-regexp": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-2.1.0.tgz", - "integrity": "sha512-OZ4IlER3zmRIoB9AqNhEggVxqIH4ofDns5nRrPS6yQxXE1TPCUpFznBfRQmQa8uC+pXqjMnukiJBxCisIxiLGA==", + "node_modules/is-reference": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.2.tgz", + "integrity": "sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==", + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", "dev": true, - "peer": true + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "isexe": { + "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/isomorphic.js": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/isomorphic.js/-/isomorphic.js-0.2.5.tgz", + "integrity": "sha512-PIeMbHqMt4DnUP3MA/Flc0HElYjMXArsw1qwJZcm9sqR8mq3l8NYizFMty0pWwE/tzIGH3EKK5+jes5mAr85yw==", + "funding": { + "type": "GitHub Sponsors ❤", + "url": "https://github.com/sponsors/dmonad" + } + }, + "node_modules/javascript-lp-solver": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/javascript-lp-solver/-/javascript-lp-solver-0.4.24.tgz", + "integrity": "sha512-5edoDKnMrt/u3M6GnZKDDIPxOyFOg+WrwDv8mjNiMC2DePhy2H9/FFQgf4ggywaXT1utvkxusJcjQUER72cZmA==", "dev": true }, - "js-tokens": { + "node_modules/jiti": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz", + "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==", + "dev": true, + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true + "dev": true, + "license": "MIT", + "peer": true }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "json-parse-even-better-errors": { + "node_modules/jschardet": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/jschardet/-/jschardet-3.1.3.tgz", + "integrity": "sha512-Q1PKVMK/uu+yjdlobgWIYkUOCR1SqUmW9m/eUJNNj4zI2N12i25v8fYpVf+zCakQeaTdBdhnZTFbVIAVZIVVOg==", + "license": "LGPL-2.1+", + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "dev": true, + "license": "MIT", "peer": true }, - "json-schema-ref-parser": { - "version": "9.0.9", - "resolved": "https://registry.npmjs.org/json-schema-ref-parser/-/json-schema-ref-parser-9.0.9.tgz", - "integrity": "sha512-qcP2lmGy+JUoQJ4DOQeLaZDqH9qSkeGCK3suKWxJXS82dg728Mn3j97azDMaOUmJAN4uCq91LdPx4K7E8F1a7Q==", - "dev": true, - "requires": { - "@apidevtools/json-schema-ref-parser": "9.0.9" - } - }, - "json-schema-traverse": { + "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true }, - "json-stable-stringify-without-jsonify": { + "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true }, - "kind-of": { + "node_modules/json-stringify-pretty-compact": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/json-stringify-pretty-compact/-/json-stringify-pretty-compact-2.0.0.tgz", + "integrity": "sha512-WRitRfs6BGq4q8gTgOy4ek7iPFXjbra0H3PmDLKm2xnZ+Gh1HUhiKGgCZkSPNULlP7mvfu6FV/mOLhCarspADQ==" + }, + "node_modules/jsonc-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", + "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, - "peer": true - }, - "kleur": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.4.tgz", - "integrity": "sha512-8QADVssbrFjivHWQU7KkMgptGTl6WAcSdlbBPY4uNF+mWr6DGcKrvY2w4FQJoXch7+fKMjj0dRrL75vk3k23OA==", - "dev": true + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } }, - "known-css-properties": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.24.0.tgz", - "integrity": "sha512-RTSoaUAfLvpR357vWzAz/50Q/BmHfmE6ETSWfutT0AJiw10e6CmcdYRQJlLRd95B53D0Y2aD1jSxD3V3ySF+PA==", + "node_modules/kleur": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", "dev": true, - "peer": true + "engines": { + "node": ">=6" + } + }, + "node_modules/known-css-properties": { + "version": "0.29.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.29.0.tgz", + "integrity": "sha512-Ne7wqW7/9Cz54PDt4I3tcV+hAyat8ypyOGzYRJQfdxnnjeWsTxt1cy8pjvvKeI5kfXuyvULyeeAvwvvtAX3ayQ==", + "dev": true + }, + "node_modules/lerc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lerc/-/lerc-3.0.0.tgz", + "integrity": "sha512-Rm4J/WaHhRa93nCN2mwWDZFoRVF18G1f47C+kvQWyHGEZxFpTUi73p7lMVSAndyxGt6lJ2/CFbOcf9ra5p8aww==" + }, + "node_modules/level": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/level/-/level-6.0.1.tgz", + "integrity": "sha512-psRSqJZCsC/irNhfHzrVZbmPYXDcEYhA5TVNwr+V92jF44rbf86hqGp8fiT702FyiArScYIlPSBTDUASCVNSpw==", + "optional": true, + "dependencies": { + "level-js": "^5.0.0", + "level-packager": "^5.1.0", + "leveldown": "^5.4.0" + }, + "engines": { + "node": ">=8.6.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/level" + } + }, + "node_modules/level-codec": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-9.0.2.tgz", + "integrity": "sha512-UyIwNb1lJBChJnGfjmO0OR+ezh2iVu1Kas3nvBS/BzGnx79dv6g7unpKIDNPMhfdTEGoc7mC8uAu51XEtX+FHQ==", + "optional": true, + "dependencies": { + "buffer": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/level-concat-iterator": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz", + "integrity": "sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw==", + "optional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/level-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-2.0.1.tgz", + "integrity": "sha512-UVprBJXite4gPS+3VznfgDSU8PTRuVX0NXwoWW50KLxd2yw4Y1t2JUR5In1itQnudZqRMT9DlAM3Q//9NCjCFw==", + "optional": true, + "dependencies": { + "errno": "~0.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/level-iterator-stream": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-4.0.2.tgz", + "integrity": "sha512-ZSthfEqzGSOMWoUGhTXdX9jv26d32XJuHz/5YnuHZzH6wldfWMOVwI9TBtKcya4BKTyTt3XVA0A3cF3q5CY30Q==", + "optional": true, + "dependencies": { + "inherits": "^2.0.4", + "readable-stream": "^3.4.0", + "xtend": "^4.0.2" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/level-js": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/level-js/-/level-js-5.0.2.tgz", + "integrity": "sha512-SnBIDo2pdO5VXh02ZmtAyPP6/+6YTJg2ibLtl9C34pWvmtMEmRTWpra+qO/hifkUtBTOtfx6S9vLDjBsBK4gRg==", + "optional": true, + "dependencies": { + "abstract-leveldown": "~6.2.3", + "buffer": "^5.5.0", + "inherits": "^2.0.3", + "ltgt": "^2.1.2" + } }, - "levn": { + "node_modules/level-packager": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/level-packager/-/level-packager-5.1.1.tgz", + "integrity": "sha512-HMwMaQPlTC1IlcwT3+swhqf/NUO+ZhXVz6TY1zZIIZlIR0YSn8GtAAWmIvKjNY16ZkEg/JcpAuQskxsXqC0yOQ==", + "optional": true, + "dependencies": { + "encoding-down": "^6.3.0", + "levelup": "^4.3.2" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/level-supports": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz", + "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==", + "optional": true, + "dependencies": { + "xtend": "^4.0.2" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/leveldown": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/leveldown/-/leveldown-5.6.0.tgz", + "integrity": "sha512-iB8O/7Db9lPaITU1aA2txU/cBEXAt4vWwKQRrrWuS6XDgbP4QZGj9BL2aNbwb002atoQ/lIotJkfyzz+ygQnUQ==", + "hasInstallScript": true, + "optional": true, + "dependencies": { + "abstract-leveldown": "~6.2.1", + "napi-macros": "~2.0.0", + "node-gyp-build": "~4.1.0" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/levelup": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/levelup/-/levelup-4.4.0.tgz", + "integrity": "sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ==", + "optional": true, + "dependencies": { + "deferred-leveldown": "~5.3.0", + "level-errors": "~2.0.0", + "level-iterator-stream": "~4.0.0", + "level-supports": "~1.0.0", + "xtend": "~4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, - "requires": { + "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lib0": { + "version": "0.2.87", + "resolved": "https://registry.npmjs.org/lib0/-/lib0-0.2.87.tgz", + "integrity": "sha512-TbB63XJixvNToW2IHWAFsCJj9tVnajmwjE14p69i51Rx8byOQd2IP4ourE8v4d7vhyO++nVm1sQk3ePslfbucg==", + "dependencies": { + "isomorphic.js": "^0.2.4" + }, + "bin": { + "0gentesthtml": "bin/gentesthtml.js", + "0serve": "bin/0serve.js" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "type": "GitHub Sponsors ❤", + "url": "https://github.com/sponsors/dmonad" + } + }, + "node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "node_modules/locate-character": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-character/-/locate-character-3.0.0.tgz", + "integrity": "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==" + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.castarray": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.castarray/-/lodash.castarray-4.4.0.tgz", + "integrity": "sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==", + "dev": true + }, + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" + }, + "node_modules/lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==" + }, + "node_modules/lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "dev": true + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "dev": true + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", + "dev": true + }, + "node_modules/longest-streak": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", + "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dev": true, + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ltgt": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz", + "integrity": "sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA==", + "optional": true + }, + "node_modules/lucide-svelte": { + "version": "0.293.0", + "resolved": "https://registry.npmjs.org/lucide-svelte/-/lucide-svelte-0.293.0.tgz", + "integrity": "sha512-nQ6QO6anjjiVoipw3dNptzI6NWuiArlhysVtRpoAWICSQVMR3ybwVf6piUUqbjGe+RfGufLzCl93C/yhsS+p4w==", + "peerDependencies": { + "svelte": ">=3 <5" + } + }, + "node_modules/magic-string": { + "version": "0.30.5", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.5.tgz", + "integrity": "sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "optional": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "optional": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/map-obj": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", + "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mapbox-to-css-font": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/mapbox-to-css-font/-/mapbox-to-css-font-2.4.2.tgz", + "integrity": "sha512-f+NBjJJY4T3dHtlEz1wCG7YFlkODEjFIYlxDdLIDMNpkSksqTt+l/d4rjuwItxuzkuMFvPyrjzV2lxRM4ePcIA==" + }, + "node_modules/markdown-table": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.3.tgz", + "integrity": "sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/mathml-tag-names": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", + "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==", + "dev": true, + "license": "MIT", + "peer": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/mdast-util-find-and-replace": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.1.tgz", + "integrity": "sha512-SG21kZHGC3XRTSUhtofZkBzZTJNM5ecCi0SK2IMKmSXR8vO3peL+kb1O0z7Zl83jKtutG4k5Wv/W7V3/YHvzPA==", + "dependencies": { + "@types/mdast": "^4.0.0", + "escape-string-regexp": "^5.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mdast-util-from-markdown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.0.tgz", + "integrity": "sha512-n7MTOr/z+8NAX/wmhhDji8O3bRvPTV/U0oTCaZJkjhPSKTPhS3xufVhKGF8s1pJ7Ox4QgoIU7KHseh09S+9rTA==", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.0.0.tgz", + "integrity": "sha512-dgQEX5Amaq+DuUqf26jJqSK9qgixgd6rYDHAv4aTBuA92cTknZlKpPfa86Z/s8Dj8xsAQpFfBmPUHWJBWqS4Bw==", + "dependencies": { + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-gfm-autolink-literal": "^2.0.0", + "mdast-util-gfm-footnote": "^2.0.0", + "mdast-util-gfm-strikethrough": "^2.0.0", + "mdast-util-gfm-table": "^2.0.0", + "mdast-util-gfm-task-list-item": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-autolink-literal": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.0.tgz", + "integrity": "sha512-FyzMsduZZHSc3i0Px3PQcBT4WJY/X/RCtEJKuybiC6sjPqLv7h1yqAkmILZtuxMSsUyaLUWNp71+vQH2zqp5cg==", + "dependencies": { + "@types/mdast": "^4.0.0", + "ccount": "^2.0.0", + "devlop": "^1.0.0", + "mdast-util-find-and-replace": "^3.0.0", + "micromark-util-character": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-footnote": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.0.0.tgz", + "integrity": "sha512-5jOT2boTSVkMnQ7LTrd6n/18kqwjmuYqo7JUPe+tRCY6O7dAuTFMtTPauYYrMPpox9hlN0uOx/FL8XvEfG9/mQ==", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.1.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-strikethrough": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz", + "integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-table": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz", + "integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "markdown-table": "^3.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-task-list-item": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz", + "integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-phrasing": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", + "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", + "dependencies": { + "@types/mdast": "^4.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-hast": { + "version": "13.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.1.0.tgz", + "integrity": "sha512-/e2l/6+OdGp/FB+ctrJ9Avz71AN/GRH3oi/3KAx/kMnoUsD6q0woXlDT8lLEeViVKE7oZxE7RXzvO3T8kF2/sA==", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@ungap/structured-clone": "^1.0.0", + "devlop": "^1.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "trim-lines": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-markdown": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.0.tgz", + "integrity": "sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ==", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "longest-streak": "^3.0.0", + "mdast-util-phrasing": "^4.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark-util-decode-string": "^2.0.0", + "unist-util-visit": "^5.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "dependencies": { + "@types/mdast": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdn-data": { + "version": "2.0.30", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", + "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==" + }, + "node_modules/meow": { + "version": "10.1.5", + "resolved": "https://registry.npmjs.org/meow/-/meow-10.1.5.tgz", + "integrity": "sha512-/d+PQ4GKmGvM9Bee/DPa8z3mXs/pkvJE2KEThngVNOqtmljC6K7NMPxtc2JeZYTmpWb9k/TmxjeL18ez3h7vCw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@types/minimist": "^1.2.2", + "camelcase-keys": "^7.0.0", + "decamelize": "^5.0.0", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.2", + "read-pkg-up": "^8.0.0", + "redent": "^4.0.0", + "trim-newlines": "^4.0.2", + "type-fest": "^1.2.2", + "yargs-parser": "^20.2.9" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/meow/node_modules/type-fest": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromark": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.0.tgz", + "integrity": "sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-core-commonmark": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.0.tgz", + "integrity": "sha512-jThOz/pVmAYUtkroV3D5c1osFXAMv9e0ypGDOIZuCeAe91/sD6BoE2Sjzt30yuXtwOYUmySOhMas/PVyh02itA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-destination": "^2.0.0", + "micromark-factory-label": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-title": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-html-tag-name": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-gfm": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz", + "integrity": "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==", + "dependencies": { + "micromark-extension-gfm-autolink-literal": "^2.0.0", + "micromark-extension-gfm-footnote": "^2.0.0", + "micromark-extension-gfm-strikethrough": "^2.0.0", + "micromark-extension-gfm-table": "^2.0.0", + "micromark-extension-gfm-tagfilter": "^2.0.0", + "micromark-extension-gfm-task-list-item": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-autolink-literal": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.0.0.tgz", + "integrity": "sha512-rTHfnpt/Q7dEAK1Y5ii0W8bhfJlVJFnJMHIPisfPK3gpVNuOP0VnRl96+YJ3RYWV/P4gFeQoGKNlT3RhuvpqAg==", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-footnote": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.0.0.tgz", + "integrity": "sha512-6Rzu0CYRKDv3BfLAUnZsSlzx3ak6HAoI85KTiijuKIz5UxZxbUI+pD6oHgw+6UtQuiRwnGRhzMmPRv4smcz0fg==", + "dependencies": { + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-strikethrough": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.0.0.tgz", + "integrity": "sha512-c3BR1ClMp5fxxmwP6AoOY2fXO9U8uFMKs4ADD66ahLTNcwzSCyRVU4k7LPV5Nxo/VJiR4TdzxRQY2v3qIUceCw==", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-table": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.0.0.tgz", + "integrity": "sha512-PoHlhypg1ItIucOaHmKE8fbin3vTLpDOUg8KAr8gRCF1MOZI9Nquq2i/44wFvviM4WuxJzc3demT8Y3dkfvYrw==", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-tagfilter": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz", + "integrity": "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==", + "dependencies": { + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-task-list-item": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.0.1.tgz", + "integrity": "sha512-cY5PzGcnULaN5O7T+cOzfMoHjBW7j+T9D2sucA5d/KbsBTPcYdebm9zUd9zzdgJGCwahV+/W78Z3nbulBYVbTw==", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-factory-destination": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.0.tgz", + "integrity": "sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-label": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.0.tgz", + "integrity": "sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-space": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", + "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-title": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.0.tgz", + "integrity": "sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "lilconfig": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.5.tgz", - "integrity": "sha512-xaYmXZtTHPAw5m+xLN8ab9C+3a8YmV3asNSPOATITbtwrfbwaLJj8h66H1WMIpALCkqsIzK3h7oQ+PdX+LQ9Eg==", - "dev": true + "node_modules/micromark-factory-whitespace": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.0.tgz", + "integrity": "sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } }, - "lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true, - "peer": true + "node_modules/micromark-util-character": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", + "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "peer": true, - "requires": { - "p-locate": "^4.1.0" + "node_modules/micromark-util-chunked": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.0.tgz", + "integrity": "sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^2.0.0" } }, - "lodash.castarray": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.castarray/-/lodash.castarray-4.4.0.tgz", - "integrity": "sha1-wCUTUV4wna3dTCTGDP3c9ZdtkRU=", - "dev": true + "node_modules/micromark-util-classify-character": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.0.tgz", + "integrity": "sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } }, - "lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=", - "dev": true + "node_modules/micromark-util-combine-extensions": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.0.tgz", + "integrity": "sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-chunked": "^2.0.0", + "micromark-util-types": "^2.0.0" + } }, - "lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", - "dev": true + "node_modules/micromark-util-decode-numeric-character-reference": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.1.tgz", + "integrity": "sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } }, - "lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true + "node_modules/micromark-util-decode-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.0.tgz", + "integrity": "sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } }, - "lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", - "dev": true + "node_modules/micromark-util-encode": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz", + "integrity": "sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] }, - "lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", - "dev": true + "node_modules/micromark-util-html-tag-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.0.tgz", + "integrity": "sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" + "node_modules/micromark-util-normalize-identifier": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.0.tgz", + "integrity": "sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^2.0.0" } }, - "magic-string": { - "version": "0.26.1", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.26.1.tgz", - "integrity": "sha512-ndThHmvgtieXe8J/VGPjG+Apu7v7ItcD5mhEIvOscWjPF/ccOiLxHaSuCAS2G+3x4GKsAbT8u7zdyamupui8Tg==", - "dev": true, - "requires": { - "sourcemap-codec": "^1.4.8" + "node_modules/micromark-util-resolve-all": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.0.tgz", + "integrity": "sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-types": "^2.0.0" } }, - "map-obj": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", - "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", - "dev": true, - "peer": true - }, - "marked": { - "version": "4.0.14", - "resolved": "https://registry.npmjs.org/marked/-/marked-4.0.14.tgz", - "integrity": "sha512-HL5sSPE/LP6U9qKgngIIPTthuxC0jrfxpYMZ3LdGDD3vTnLs59m2Z7r6+LNDR3ToqEQdkKd6YaaEfJhodJmijQ==" - }, - "mathml-tag-names": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", - "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==", - "dev": true, - "peer": true - }, - "mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", - "dev": true + "node_modules/micromark-util-sanitize-uri": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz", + "integrity": "sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } }, - "meow": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz", - "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==", - "dev": true, - "peer": true, - "requires": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize": "^1.2.0", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" - }, - "dependencies": { - "type-fest": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", - "dev": true, - "peer": true + "node_modules/micromark-util-subtokenize": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.0.tgz", + "integrity": "sha512-vc93L1t+gpR3p8jxeVdaYlbV2jTYteDje19rNSS/H5dlhxUYll5Fy6vJ2cDwP8RnsXi818yGty1ayP55y3W6fg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" } + ], + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true + "node_modules/micromark-util-symbol": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", + "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-util-types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", + "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] }, - "micromatch": { + "node_modules/micromatch": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "dev": true, - "requires": { + "dependencies": { "braces": "^3.0.2", "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "mime-db": { + "node_modules/mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true + "engines": { + "node": ">= 0.6" + } }, - "mime-types": { + "node_modules/mime-types": { "version": "2.1.35", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, - "requires": { + "dependencies": { "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "min-indent": { + "node_modules/mimic-response": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", + "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==", + "optional": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/min-indent": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", - "dev": true + "dev": true, + "engines": { + "node": ">=4" + } }, - "mini-svg-data-uri": { + "node_modules/mini-svg-data-uri": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz", "integrity": "sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==", - "dev": true + "dev": true, + "bin": { + "mini-svg-data-uri": "cli.js" + } }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "requires": { - "brace-expansion": "^1.1.7" + "node_modules/minimatch": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.1.tgz", + "integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", - "dev": true + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "minimist-options": { + "node_modules/minimist-options": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", "dev": true, + "license": "MIT", "peer": true, - "requires": { + "dependencies": { "arrify": "^1.0.1", "is-plain-obj": "^1.1.0", "kind-of": "^6.0.3" + }, + "engines": { + "node": ">= 6" } }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true + "node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "devOptional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "devOptional": true, + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "devOptional": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mlly": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.6.1.tgz", + "integrity": "sha512-vLgaHvaeunuOXHSmEbZ9izxPx3USsk8KCQ8iC+aTlp5sKRSoZvwhHh5L9VbKSaVC6sJDqbyohIS76E2VmHIPAA==", + "dev": true, + "dependencies": { + "acorn": "^8.11.3", + "pathe": "^1.1.2", + "pkg-types": "^1.0.3", + "ufo": "^1.3.2" + } + }, + "node_modules/monaco-editor": { + "name": "@codingame/monaco-vscode-editor-api", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-editor-api/-/monaco-vscode-editor-api-8.0.2.tgz", + "integrity": "sha512-uA0vYsupVQ/k3UW1Yj7WizdoUxo9WkEKcy83PGvm5yhhx/CMkA5b2tEhCjgqVyWTJVeAETI6ICHDsGuh+kmXcg==", + "license": "MIT", + "dependencies": { + "vscode": "npm:@codingame/monaco-vscode-api@8.0.2" + } + }, + "node_modules/monaco-editor-wrapper": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/monaco-editor-wrapper/-/monaco-editor-wrapper-5.5.2.tgz", + "integrity": "sha512-YuoIV2hxqGpgYGFshsDNvItLMKeriCbFcroCo/NinrEDzr2PlWuIFbaKBr2r6to2sNq53d6iUpjz6P7PTe/nrw==", + "license": "MIT", + "dependencies": { + "@codingame/monaco-vscode-configuration-service-override": "~8.0.2", + "@codingame/monaco-vscode-editor-service-override": "~8.0.2", + "@codingame/monaco-vscode-language-pack-cs": "~8.0.2", + "@codingame/monaco-vscode-language-pack-de": "~8.0.2", + "@codingame/monaco-vscode-language-pack-es": "~8.0.2", + "@codingame/monaco-vscode-language-pack-fr": "~8.0.2", + "@codingame/monaco-vscode-language-pack-it": "~8.0.2", + "@codingame/monaco-vscode-language-pack-ja": "~8.0.2", + "@codingame/monaco-vscode-language-pack-ko": "~8.0.2", + "@codingame/monaco-vscode-language-pack-pl": "~8.0.2", + "@codingame/monaco-vscode-language-pack-pt-br": "~8.0.2", + "@codingame/monaco-vscode-language-pack-qps-ploc": "~8.0.2", + "@codingame/monaco-vscode-language-pack-ru": "~8.0.2", + "@codingame/monaco-vscode-language-pack-tr": "~8.0.2", + "@codingame/monaco-vscode-language-pack-zh-hans": "~8.0.2", + "@codingame/monaco-vscode-language-pack-zh-hant": "~8.0.2", + "@codingame/monaco-vscode-monarch-service-override": "~8.0.2", + "@codingame/monaco-vscode-textmate-service-override": "~8.0.2", + "@codingame/monaco-vscode-theme-defaults-default-extension": "~8.0.2", + "@codingame/monaco-vscode-theme-service-override": "~8.0.2", + "monaco-editor": "npm:@codingame/monaco-vscode-editor-api@~8.0.2", + "vscode": "npm:@codingame/monaco-vscode-api@~8.0.2", + "vscode-languageclient": "~9.0.1", + "vscode-languageserver-protocol": "~3.17.5", + "vscode-ws-jsonrpc": "~3.3.2" + }, + "peerDependencies": { + "monaco-editor": "npm:@codingame/monaco-vscode-editor-api@~8.0.2", + "monaco-languageclient": "~8.8.2", + "vscode": "npm:@codingame/monaco-vscode-api@~8.0.2" + }, + "peerDependenciesMeta": { + "monaco-editor": { + "optional": false + }, + "monaco-languageclient": { + "optional": false + }, + "vscode": { + "optional": false + } + } + }, + "node_modules/monaco-graphql": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/monaco-graphql/-/monaco-graphql-1.6.0.tgz", + "integrity": "sha512-KFANLCtgsaHhLAqxiIbwjGwjsO19j1vQhw1iSgaewxr1/RfUEs5FBoUVfq3JITrpgLjBahfcgIWlB0mdgb9RgA==", + "license": "MIT", + "dependencies": { + "graphql-language-service": "^5.3.0", + "picomatch-browser": "^2.2.6" + }, + "peerDependencies": { + "graphql": "^15.5.0 || ^16.0.0 || ^17.0.0-alpha.2", + "monaco-editor": ">= 0.20.0 < 1", + "prettier": "^2.8.0 || ^3.0.0" + } + }, + "node_modules/monaco-languageclient": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/monaco-languageclient/-/monaco-languageclient-8.8.2.tgz", + "integrity": "sha512-qE5LaHcTELjGMbq3iwBq1DqBEjzEYsPHaQUeAqNmGAFyMEJ0O+wldXAQgAqfB+oWrh2xmSiFcizmXqRawrx8oQ==", + "license": "MIT", + "dependencies": { + "@codingame/monaco-vscode-extensions-service-override": "~8.0.2", + "@codingame/monaco-vscode-languages-service-override": "~8.0.2", + "@codingame/monaco-vscode-localization-service-override": "~8.0.2", + "@codingame/monaco-vscode-model-service-override": "~8.0.2", + "monaco-editor": "npm:@codingame/monaco-vscode-editor-api@~8.0.2", + "vscode": "npm:@codingame/monaco-vscode-api@~8.0.2", + "vscode-languageclient": "~9.0.1" + }, + "engines": { + "node": ">=16.11.0", + "npm": ">=9.0.0" + }, + "peerDependencies": { + "monaco-editor": "npm:@codingame/monaco-vscode-editor-api@~8.0.2", + "vscode": "npm:@codingame/monaco-vscode-api@~8.0.2" + }, + "peerDependenciesMeta": { + "monaco-editor": { + "optional": false + }, + "vscode": { + "optional": false + } + } }, - "monaco-editor": { - "version": "0.30.1", - "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.30.1.tgz", - "integrity": "sha512-B/y4+b2O5G2gjuxIFtCE2EkM17R2NM7/3F8x0qcPsqy4V83bitJTIO4TIeZpYlzu/xy6INiY/+84BEm6+7Cmzg==" + "node_modules/monaco-vim": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/monaco-vim/-/monaco-vim-0.4.1.tgz", + "integrity": "sha512-+cy0TE9xarjLIgUexqxIEbat3K1l7WbiFSLZKAO2kYl1qFRvkeWn4ro/C4c6dK0i9+WQKUC4Dhu/nyCbZfA37w==", + "license": "MIT", + "peerDependencies": { + "monaco-editor": "*" + } }, - "mri": { + "node_modules/mri": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", - "dev": true + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/mrmime": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz", + "integrity": "sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==", + "dev": true, + "engines": { + "node": ">=10" + } }, - "ms": { + "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, - "nanoid": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", - "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", - "dev": true + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nan": { + "version": "2.18.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.18.0.tgz", + "integrity": "sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w==", + "optional": true + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/napi-macros": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/napi-macros/-/napi-macros-2.0.0.tgz", + "integrity": "sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg==", + "optional": true }, - "natural-compare": { + "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", "dev": true }, - "neo-async": { + "node_modules/neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "dev": true }, - "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", "dev": true, - "requires": { + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node_modules/node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "github", + "url": "https://paypal.me/jimmywarting" + } + ], + "engines": { + "node": ">=10.5.0" + } + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dependencies": { "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } } }, - "node-releases": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.4.tgz", - "integrity": "sha512-gbMzqQtTtDz/00jQzZ21PQzdI9PyLYqUSvD0p3naOhX4odFji0ZxYdnVwPTxmSwkmxhcFImpozceidSG+AgoPQ==", + "node_modules/node-fetch-native": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.4.tgz", + "integrity": "sha512-IhOigYzAKHd244OC0JIMIUrjzctirCmPkaIfhDeGcEETWof5zKYUW7e7MYvChGWh/4CJeXEgsRyGzuF334rOOQ==", + "dev": true + }, + "node_modules/node-gyp-build": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.1.1.tgz", + "integrity": "sha512-dSq1xmcPDKPZ2EED2S6zw/b9NKsqzXRE6dVr8TVQnI3FJOTteUMuqF3Qqs6LZg+mLGYJWqQzMbIjMtJqTv87nQ==", + "optional": true, + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/node-releases": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", + "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", "dev": true }, - "normalize-package-data": { + "node_modules/nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "optional": true, + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/normalize-package-data": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", "dev": true, + "license": "BSD-2-Clause", "peer": true, - "requires": { + "dependencies": { "hosted-git-info": "^4.0.1", "is-core-module": "^2.5.0", "semver": "^7.3.4", "validate-npm-package-license": "^3.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", + "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", + "dev": true, + "dependencies": { + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npmlog": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", + "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", + "optional": true, + "dependencies": { + "are-we-there-yet": "^2.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^3.0.0", + "set-blocking": "^2.0.0" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/nullthrows": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz", + "integrity": "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==", + "license": "MIT" + }, + "node_modules/nypm": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/nypm/-/nypm-0.3.8.tgz", + "integrity": "sha512-IGWlC6So2xv6V4cIDmoV0SwwWx7zLG086gyqkyumteH2fIgCAM4nDVFB2iDRszDvmdSVW9xb1N+2KjQ6C7d4og==", + "dev": true, + "dependencies": { + "citty": "^0.1.6", + "consola": "^3.2.3", + "execa": "^8.0.1", + "pathe": "^1.1.2", + "ufo": "^1.4.0" + }, + "bin": { + "nypm": "dist/cli.mjs" + }, + "engines": { + "node": "^14.16.0 || >=16.10.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "devOptional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/object-inspect": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", - "dev": true + "node_modules/object-is": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "normalize-selector": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/normalize-selector/-/normalize-selector-0.2.0.tgz", - "integrity": "sha1-0LFF62kRicY6eNIB3E/bEpPvDAM=", - "dev": true, - "peer": true + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "engines": { + "node": ">= 0.4" + } }, - "normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "node_modules/ohash": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/ohash/-/ohash-1.1.3.tgz", + "integrity": "sha512-zuHHiGTYTA1sYJ/wZN+t5HKZaH23i4yI1HMwbuXm24Nid7Dv0KcuRlKoNKS9UNfAVSBlnGLcuQrnOKWOZoEGaw==", "dev": true }, - "nth-check": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", - "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", - "dev": true, - "requires": { - "boolbase": "^1.0.0" + "node_modules/ol": { + "version": "7.5.2", + "resolved": "https://registry.npmjs.org/ol/-/ol-7.5.2.tgz", + "integrity": "sha512-HJbb3CxXrksM6ct367LsP3N+uh+iBBMdP3DeGGipdV9YAYTP0vTJzqGnoqQ6C2IW4qf8krw9yuyQbc9fjOIaOQ==", + "dependencies": { + "earcut": "^2.2.3", + "geotiff": "^2.0.7", + "ol-mapbox-style": "^10.1.0", + "pbf": "3.2.1", + "rbush": "^3.0.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/openlayers" } }, - "object-hash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", - "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", - "dev": true + "node_modules/ol-mapbox-style": { + "version": "10.7.0", + "resolved": "https://registry.npmjs.org/ol-mapbox-style/-/ol-mapbox-style-10.7.0.tgz", + "integrity": "sha512-S/UdYBuOjrotcR95Iq9AejGYbifKeZE85D9VtH11ryJLQPTZXZSW1J5bIXcr4AlAH6tyjPPHTK34AdkwB32Myw==", + "dependencies": { + "@mapbox/mapbox-gl-style-spec": "^13.23.1", + "mapbox-to-css-font": "^2.4.1", + "ol": "^7.3.0" + } }, - "once": { + "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "devOptional": true, + "dependencies": { "wrappy": "1" } }, - "openapi-typescript-codegen": { - "version": "0.11.8", - "resolved": "https://registry.npmjs.org/openapi-typescript-codegen/-/openapi-typescript-codegen-0.11.8.tgz", - "integrity": "sha512-Hurkrn7tfOT4UibZaJljUfoApU80SU8UF/o0zFc/NjG1si0TjXl1L8iT7lF0alBu6D87RZNwfojAh8v4//IL9w==", + "node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", "dev": true, - "requires": { - "@types/node-fetch": "^2.5.12", + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/openai": { + "version": "4.57.2", + "resolved": "https://registry.npmjs.org/openai/-/openai-4.57.2.tgz", + "integrity": "sha512-IgIxNjo9tfgnfx6gmwNMg3tdF9giK/2lbwG5DY7zs4TP9Gz+h6h2hBOMoalLPFUVOO5HLOgMI/PFV5VDAUvvMg==", + "dependencies": { + "@types/node": "^18.11.18", + "@types/node-fetch": "^2.6.4", + "@types/qs": "^6.9.7", "abort-controller": "^3.0.0", - "axios": "^0.24.0", - "camelcase": "^6.2.0", - "commander": "^8.3.0", - "form-data": "^4.0.0", - "handlebars": "^4.7.6", - "json-schema-ref-parser": "^9.0.7", - "mkdirp": "^1.0.4", - "node-fetch": "^2.6.5", - "rimraf": "^3.0.2" + "agentkeepalive": "^4.2.1", + "form-data-encoder": "1.7.2", + "formdata-node": "^4.3.2", + "node-fetch": "^2.6.7", + "qs": "^6.10.3" + }, + "bin": { + "openai": "bin/cli" + }, + "peerDependencies": { + "zod": "^3.23.8" + }, + "peerDependenciesMeta": { + "zod": { + "optional": true + } + } + }, + "node_modules/openai/node_modules/@types/node": { + "version": "18.18.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.18.9.tgz", + "integrity": "sha512-0f5klcuImLnG4Qreu9hPj/rEfFq6YRc5n2mAjSsH+ec/mJL+3voBH0+8T7o8RpFjH7ovc+TRsL/c7OYIQsPTfQ==", + "dependencies": { + "undici-types": "~5.26.4" } }, - "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "node_modules/optionator": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", "dev": true, - "requires": { + "dependencies": { + "@aashutoshrathi/word-wrap": "^1.2.3", "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" + "type-check": "^0.4.0" + }, + "engines": { + "node": ">= 0.8.0" } }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "node_modules/p-limit": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-6.1.0.tgz", + "integrity": "sha512-H0jc0q1vOzlEk0TqAKXKZxdl7kX3OFUzCnNVUnq5Pc3DGo0kpeaMuPqxQn235HibwBEb0/pm9dgKTjXy66fBkg==", + "license": "MIT", + "dependencies": { + "yocto-queue": "^1.1.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, - "peer": true, - "requires": { - "p-try": "^2.0.0" + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "node_modules/p-locate/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, - "peer": true, - "requires": { - "p-limit": "^2.2.0" + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "node_modules/p-locate/node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, - "peer": true + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pako": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pako/-/pako-2.1.0.tgz", + "integrity": "sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==" }, - "parent-module": { + "node_modules/parchment": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/parchment/-/parchment-1.1.4.tgz", + "integrity": "sha512-J5FBQt/pM2inLzg4hEWmzQx/8h8D0CiDxaG3vyp9rKrQRSDgBlhjdP5jQGgosEajXPSQouXGHOmVdgo7QmJuOg==" + }, + "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, - "requires": { + "dependencies": { "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" } }, - "parse-json": { + "node_modules/parse-headers": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.5.tgz", + "integrity": "sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==" + }, + "node_modules/parse-json": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, + "license": "MIT", "peer": true, - "requires": { + "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", "json-parse-even-better-errors": "^2.3.0", "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "dev": true, + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" } }, - "path-exists": { + "node_modules/path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "dev": true + }, + "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, - "peer": true + "engines": { + "node": ">=8" + } }, - "path-is-absolute": { + "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "devOptional": true, + "engines": { + "node": ">=0.10.0" + } }, - "path-key": { + "node_modules/path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true + "dev": true, + "engines": { + "node": ">=8" + } }, - "path-parse": { + "node_modules/path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, - "path-type": { + "node_modules/path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path2d-polyfill": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path2d-polyfill/-/path2d-polyfill-2.0.1.tgz", + "integrity": "sha512-ad/3bsalbbWhmBo0D6FZ4RNMwsLsPpL6gnvhuSaU5Vm7b06Kr5ubSltQQ0T7YKsiJQO+g22zJ4dJKNTXIyOXtA==", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/pathe": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", "dev": true }, - "picocolors": { + "node_modules/pbf": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/pbf/-/pbf-3.2.1.tgz", + "integrity": "sha512-ClrV7pNOn7rtmoQVF4TS1vyU0WhYRnP92fzbfF75jAIwpnzdJXf8iTd4CMEqO4yUenH6NDqLiwjqlh6QgZzgLQ==", + "dependencies": { + "ieee754": "^1.1.12", + "resolve-protobuf-schema": "^2.1.0" + }, + "bin": { + "pbf": "bin/pbf" + } + }, + "node_modules/pdfjs-dist": { + "version": "3.11.174", + "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-3.11.174.tgz", + "integrity": "sha512-TdTZPf1trZ8/UFu5Cx/GXB7GZM30LT+wWUNfsi6Bq8ePLnb+woNKtDymI2mxZYBpMbonNFqKmiz684DIfnd8dA==", + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "canvas": "^2.11.2", + "path2d-polyfill": "^2.0.1" + } + }, + "node_modules/perfect-debounce": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz", + "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==", "dev": true }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "node_modules/periscopic": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/periscopic/-/periscopic-3.1.0.tgz", + "integrity": "sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^3.0.0", + "is-reference": "^3.0.0" + } + }, + "node_modules/picocolors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", "dev": true }, - "postcss": { - "version": "8.4.13", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.13.tgz", - "integrity": "sha512-jtL6eTBrza5MPzy8oJLFuUscHDXTV5KcLlqAWHl5q5WYRfnNRGSmOZmOZ1T6Gy7A99mOZfqungmZMpMmCVJ8ZA==", + "node_modules/picomatch-browser": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/picomatch-browser/-/picomatch-browser-2.2.6.tgz", + "integrity": "sha512-0ypsOQt9D4e3hziV8O4elD9uN0z/jtUEfxVRtNaAAtXIyUx9m/SzlO020i8YNL2aL/E6blOvvHQcin6HZlFy/w==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-types": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.0.3.tgz", + "integrity": "sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==", + "dev": true, + "dependencies": { + "jsonc-parser": "^3.2.0", + "mlly": "^1.2.0", + "pathe": "^1.1.0" + } + }, + "node_modules/playwright": { + "version": "1.40.0", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.40.0.tgz", + "integrity": "sha512-gyHAgQjiDf1m34Xpwzaqb76KgfzYrhK7iih+2IzcOCoZWr/8ZqmdBw+t0RU85ZmfJMgtgAiNtBQ/KS2325INXw==", + "dev": true, + "dependencies": { + "playwright-core": "1.40.0" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=16" + }, + "optionalDependencies": { + "fsevents": "2.3.2" + } + }, + "node_modules/playwright-core": { + "version": "1.40.0", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.40.0.tgz", + "integrity": "sha512-fvKewVJpGeca8t0ipM56jkVSU6Eo0RmFvQ/MaCQNDYm+sdvKkMBBWTE1FdeMqIdumRaXXjZChWHvIzCGM/tA/Q==", + "dev": true, + "bin": { + "playwright-core": "cli.js" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/playwright/node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/postcss": { + "version": "8.4.41", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.41.tgz", + "integrity": "sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.1", + "source-map-js": "^1.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-calc": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-9.0.1.tgz", + "integrity": "sha512-TipgjGyzP5QzEhsOZUaIkeO5mKeMFpebWzRogWG/ysonUlnHcq5aJe0jOjpfzUU8PeSaBQnrE8ehR0QA5vs8PQ==", "dev": true, - "requires": { - "nanoid": "^3.3.3", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" + "dependencies": { + "postcss-selector-parser": "^6.0.11", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.2" } }, - "postcss-calc": { - "version": "8.2.4", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", - "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", + "node_modules/postcss-calc/node_modules/postcss-selector-parser": { + "version": "6.0.13", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", + "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", "dev": true, - "requires": { - "postcss-selector-parser": "^6.0.9", - "postcss-value-parser": "^4.2.0" + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" } }, - "postcss-colormin": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.0.tgz", - "integrity": "sha512-WdDO4gOFG2Z8n4P8TWBpshnL3JpmNmJwdnfP2gbk2qBA8PWwOYcmjmI/t3CmMeL72a7Hkd+x/Mg9O2/0rD54Pg==", + "node_modules/postcss-colormin": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-6.0.0.tgz", + "integrity": "sha512-EuO+bAUmutWoZYgHn2T1dG1pPqHU6L4TjzPlu4t1wZGXQ/fxV16xg2EJmYi0z+6r+MGV1yvpx1BHkUaRrPa2bw==", "dev": true, - "requires": { - "browserslist": "^4.16.6", + "dependencies": { + "browserslist": "^4.21.4", "caniuse-api": "^3.0.0", "colord": "^2.9.1", "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "postcss-convert-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.0.tgz", - "integrity": "sha512-GkyPbZEYJiWtQB0KZ0X6qusqFHUepguBCNFi9t5JJc7I2OTXG7C0twbTLvCfaKOLl3rSXmpAwV7W5txd91V84g==", + "node_modules/postcss-convert-values": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-6.0.0.tgz", + "integrity": "sha512-U5D8QhVwqT++ecmy8rnTb+RL9n/B806UVaS3m60lqle4YDFcpbS3ae5bTQIh3wOGUSDHSEtMYLs/38dNG7EYFw==", "dev": true, - "requires": { + "dependencies": { + "browserslist": "^4.21.4", "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "postcss-discard-comments": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.1.tgz", - "integrity": "sha512-5JscyFmvkUxz/5/+TB3QTTT9Gi9jHkcn8dcmmuN68JQcv3aQg4y88yEHHhwFB52l/NkaJ43O0dbksGMAo49nfQ==", + "node_modules/postcss-discard-comments": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-6.0.0.tgz", + "integrity": "sha512-p2skSGqzPMZkEQvJsgnkBhCn8gI7NzRH2683EEjrIkoMiwRELx68yoUJ3q3DGSGuQ8Ug9Gsn+OuDr46yfO+eFw==", "dev": true, - "requires": {} + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } }, - "postcss-discard-duplicates": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", - "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", + "node_modules/postcss-discard-duplicates": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-6.0.0.tgz", + "integrity": "sha512-bU1SXIizMLtDW4oSsi5C/xHKbhLlhek/0/yCnoMQany9k3nPBq+Ctsv/9oMmyqbR96HYHxZcHyK2HR5P/mqoGA==", "dev": true, - "requires": {} + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } }, - "postcss-discard-empty": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", - "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", + "node_modules/postcss-discard-empty": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-6.0.0.tgz", + "integrity": "sha512-b+h1S1VT6dNhpcg+LpyiUrdnEZfICF0my7HAKgJixJLW7BnNmpRH34+uw/etf5AhOlIhIAuXApSzzDzMI9K/gQ==", + "dev": true, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-overridden": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-6.0.0.tgz", + "integrity": "sha512-4VELwssYXDFigPYAZ8vL4yX4mUepF/oCBeeIT4OXsJPYOtvJumyz9WflmJWTfDwCUcpDR+z0zvCWBXgTx35SVw==", "dev": true, - "requires": {} + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } }, - "postcss-discard-overridden": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", - "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", + "node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", "dev": true, - "requires": {} + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } }, - "postcss-js": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz", - "integrity": "sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==", + "node_modules/postcss-js": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", "dev": true, - "requires": { + "dependencies": { "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.4.21" } }, - "postcss-load-config": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", - "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", + "node_modules/postcss-load-config": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.1.tgz", + "integrity": "sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==", "dev": true, - "requires": { + "dependencies": { "lilconfig": "^2.0.5", - "yaml": "^1.10.2" + "yaml": "^2.1.1" + }, + "engines": { + "node": ">= 14" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } } }, - "postcss-media-query-parser": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", - "integrity": "sha1-J7Ocb02U+Bsac7j3Y1HGCeXO8kQ=", - "dev": true, - "peer": true - }, - "postcss-merge-longhand": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.4.tgz", - "integrity": "sha512-hbqRRqYfmXoGpzYKeW0/NCZhvNyQIlQeWVSao5iKWdyx7skLvCfQFGIUsP9NUs3dSbPac2IC4Go85/zG+7MlmA==", + "node_modules/postcss-merge-longhand": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-6.0.0.tgz", + "integrity": "sha512-4VSfd1lvGkLTLYcxFuISDtWUfFS4zXe0FpF149AyziftPFQIWxjvFSKhA4MIxMe4XM3yTDgQMbSNgzIVxChbIg==", "dev": true, - "requires": { + "dependencies": { "postcss-value-parser": "^4.2.0", - "stylehacks": "^5.1.0" + "stylehacks": "^6.0.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "postcss-merge-rules": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.1.tgz", - "integrity": "sha512-8wv8q2cXjEuCcgpIB1Xx1pIy8/rhMPIQqYKNzEdyx37m6gpq83mQQdCxgIkFgliyEnKvdwJf/C61vN4tQDq4Ww==", + "node_modules/postcss-merge-rules": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-6.0.1.tgz", + "integrity": "sha512-a4tlmJIQo9SCjcfiCcCMg/ZCEe0XTkl/xK0XHBs955GWg9xDX3NwP9pwZ78QUOWB8/0XCjZeJn98Dae0zg6AAw==", "dev": true, - "requires": { - "browserslist": "^4.16.6", + "dependencies": { + "browserslist": "^4.21.4", "caniuse-api": "^3.0.0", - "cssnano-utils": "^3.1.0", + "cssnano-utils": "^4.0.0", "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "postcss-minify-font-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", - "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", + "node_modules/postcss-minify-font-values": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-6.0.0.tgz", + "integrity": "sha512-zNRAVtyh5E8ndZEYXA4WS8ZYsAp798HiIQ1V2UF/C/munLp2r1UGHwf1+6JFu7hdEhJFN+W1WJQKBrtjhFgEnA==", "dev": true, - "requires": { + "dependencies": { "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "postcss-minify-gradients": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", - "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", + "node_modules/postcss-minify-gradients": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-6.0.0.tgz", + "integrity": "sha512-wO0F6YfVAR+K1xVxF53ueZJza3L+R3E6cp0VwuXJQejnNUH0DjcAFe3JEBeTY1dLwGa0NlDWueCA1VlEfiKgAA==", "dev": true, - "requires": { + "dependencies": { "colord": "^2.9.1", - "cssnano-utils": "^3.1.0", + "cssnano-utils": "^4.0.0", "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "postcss-minify-params": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.2.tgz", - "integrity": "sha512-aEP+p71S/urY48HWaRHasyx4WHQJyOYaKpQ6eXl8k0kxg66Wt/30VR6/woh8THgcpRbonJD5IeD+CzNhPi1L8g==", + "node_modules/postcss-minify-params": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-6.0.0.tgz", + "integrity": "sha512-Fz/wMQDveiS0n5JPcvsMeyNXOIMrwF88n7196puSuQSWSa+/Ofc1gDOSY2xi8+A4PqB5dlYCKk/WfqKqsI+ReQ==", "dev": true, - "requires": { - "browserslist": "^4.16.6", - "cssnano-utils": "^3.1.0", + "dependencies": { + "browserslist": "^4.21.4", + "cssnano-utils": "^4.0.0", "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "postcss-minify-selectors": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.0.tgz", - "integrity": "sha512-vYxvHkW+iULstA+ctVNx0VoRAR4THQQRkG77o0oa4/mBS0OzGvvzLIvHDv/nNEM0crzN2WIyFU5X7wZhaUK3RA==", + "node_modules/postcss-minify-selectors": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-6.0.0.tgz", + "integrity": "sha512-ec/q9JNCOC2CRDNnypipGfOhbYPuUkewGwLnbv6omue/PSASbHSU7s6uSQ0tcFRVv731oMIx8k0SP4ZX6be/0g==", "dev": true, - "requires": { + "dependencies": { "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "postcss-nested": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.6.tgz", - "integrity": "sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==", + "node_modules/postcss-nested": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", + "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==", "dev": true, - "requires": { - "postcss-selector-parser": "^6.0.6" + "dependencies": { + "postcss-selector-parser": "^6.0.11" + }, + "engines": { + "node": ">=12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.2.14" } }, - "postcss-normalize-charset": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", - "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", + "node_modules/postcss-nested/node_modules/postcss-selector-parser": { + "version": "6.0.13", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", + "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-normalize-charset": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-6.0.0.tgz", + "integrity": "sha512-cqundwChbu8yO/gSWkuFDmKrCZ2vJzDAocheT2JTd0sFNA4HMGoKMfbk2B+J0OmO0t5GUkiAkSM5yF2rSLUjgQ==", "dev": true, - "requires": {} + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } }, - "postcss-normalize-display-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", - "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", + "node_modules/postcss-normalize-display-values": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-6.0.0.tgz", + "integrity": "sha512-Qyt5kMrvy7dJRO3OjF7zkotGfuYALETZE+4lk66sziWSPzlBEt7FrUshV6VLECkI4EN8Z863O6Nci4NXQGNzYw==", "dev": true, - "requires": { + "dependencies": { "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "postcss-normalize-positions": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.0.tgz", - "integrity": "sha512-8gmItgA4H5xiUxgN/3TVvXRoJxkAWLW6f/KKhdsH03atg0cB8ilXnrB5PpSshwVu/dD2ZsRFQcR1OEmSBDAgcQ==", + "node_modules/postcss-normalize-positions": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-6.0.0.tgz", + "integrity": "sha512-mPCzhSV8+30FZyWhxi6UoVRYd3ZBJgTRly4hOkaSifo0H+pjDYcii/aVT4YE6QpOil15a5uiv6ftnY3rm0igPg==", "dev": true, - "requires": { + "dependencies": { "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "postcss-normalize-repeat-style": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.0.tgz", - "integrity": "sha512-IR3uBjc+7mcWGL6CtniKNQ4Rr5fTxwkaDHwMBDGGs1x9IVRkYIT/M4NelZWkAOBdV6v3Z9S46zqaKGlyzHSchw==", + "node_modules/postcss-normalize-repeat-style": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-6.0.0.tgz", + "integrity": "sha512-50W5JWEBiOOAez2AKBh4kRFm2uhrT3O1Uwdxz7k24aKtbD83vqmcVG7zoIwo6xI2FZ/HDlbrCopXhLeTpQib1A==", "dev": true, - "requires": { + "dependencies": { "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "postcss-normalize-string": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", - "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", + "node_modules/postcss-normalize-string": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-6.0.0.tgz", + "integrity": "sha512-KWkIB7TrPOiqb8ZZz6homet2KWKJwIlysF5ICPZrXAylGe2hzX/HSf4NTX2rRPJMAtlRsj/yfkrWGavFuB+c0w==", "dev": true, - "requires": { + "dependencies": { "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "postcss-normalize-timing-functions": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", - "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", + "node_modules/postcss-normalize-timing-functions": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-6.0.0.tgz", + "integrity": "sha512-tpIXWciXBp5CiFs8sem90IWlw76FV4oi6QEWfQwyeREVwUy39VSeSqjAT7X0Qw650yAimYW5gkl2Gd871N5SQg==", "dev": true, - "requires": { + "dependencies": { "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "postcss-normalize-unicode": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.0.tgz", - "integrity": "sha512-J6M3MizAAZ2dOdSjy2caayJLQT8E8K9XjLce8AUQMwOrCvjCHv24aLC/Lps1R1ylOfol5VIDMaM/Lo9NGlk1SQ==", + "node_modules/postcss-normalize-unicode": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-6.0.0.tgz", + "integrity": "sha512-ui5crYkb5ubEUDugDc786L/Me+DXp2dLg3fVJbqyAl0VPkAeALyAijF2zOsnZyaS1HyfPuMH0DwyY18VMFVNkg==", "dev": true, - "requires": { - "browserslist": "^4.16.6", + "dependencies": { + "browserslist": "^4.21.4", "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "postcss-normalize-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", - "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", + "node_modules/postcss-normalize-url": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-6.0.0.tgz", + "integrity": "sha512-98mvh2QzIPbb02YDIrYvAg4OUzGH7s1ZgHlD3fIdTHLgPLRpv1ZTKJDnSAKr4Rt21ZQFzwhGMXxpXlfrUBKFHw==", "dev": true, - "requires": { - "normalize-url": "^6.0.1", + "dependencies": { "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "postcss-normalize-whitespace": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", - "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", + "node_modules/postcss-normalize-whitespace": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-6.0.0.tgz", + "integrity": "sha512-7cfE1AyLiK0+ZBG6FmLziJzqQCpTQY+8XjMhMAz8WSBSCsCNNUKujgIgjCAmDT3cJ+3zjTXFkoD15ZPsckArVw==", "dev": true, - "requires": { + "dependencies": { "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "postcss-ordered-values": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.1.tgz", - "integrity": "sha512-7lxgXF0NaoMIgyihL/2boNAEZKiW0+HkMhdKMTD93CjW8TdCy2hSdj8lsAo+uwm7EDG16Da2Jdmtqpedl0cMfw==", + "node_modules/postcss-ordered-values": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-6.0.0.tgz", + "integrity": "sha512-K36XzUDpvfG/nWkjs6d1hRBydeIxGpKS2+n+ywlKPzx1nMYDYpoGbcjhj5AwVYJK1qV2/SDoDEnHzlPD6s3nMg==", "dev": true, - "requires": { - "cssnano-utils": "^3.1.0", + "dependencies": { + "cssnano-utils": "^4.0.0", "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "postcss-reduce-initial": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.0.tgz", - "integrity": "sha512-5OgTUviz0aeH6MtBjHfbr57tml13PuedK/Ecg8szzd4XRMbYxH4572JFG067z+FqBIf6Zp/d+0581glkvvWMFw==", + "node_modules/postcss-reduce-initial": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-6.0.0.tgz", + "integrity": "sha512-s2UOnidpVuXu6JiiI5U+fV2jamAw5YNA9Fdi/GRK0zLDLCfXmSGqQtzpUPtfN66RtCbb9fFHoyZdQaxOB3WxVA==", "dev": true, - "requires": { - "browserslist": "^4.16.6", + "dependencies": { + "browserslist": "^4.21.4", "caniuse-api": "^3.0.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "postcss-reduce-transforms": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", - "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", + "node_modules/postcss-reduce-transforms": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-6.0.0.tgz", + "integrity": "sha512-FQ9f6xM1homnuy1wLe9lP1wujzxnwt1EwiigtWwuyf8FsqqXUDUp2Ulxf9A5yjlUOTdCJO6lonYjg1mgqIIi2w==", "dev": true, - "requires": { + "dependencies": { "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "postcss-resolve-nested-selector": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz", - "integrity": "sha1-Kcy8fDfe36wwTp//C/FZaz9qDk4=", + "node_modules/postcss-resolve-nested-selector": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.6.tgz", + "integrity": "sha512-0sglIs9Wmkzbr8lQwEyIzlDOOC9bGmfVKcJTaxv3vMmd3uo4o4DerC3En0bnmgceeql9BfC8hRkp7cg0fjdVqw==", "dev": true, + "license": "MIT", "peer": true }, - "postcss-safe-parser": { + "node_modules/postcss-safe-parser": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz", "integrity": "sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==", "dev": true, - "peer": true, - "requires": {} + "engines": { + "node": ">=12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.3.3" + } }, - "postcss-selector-parser": { + "node_modules/postcss-scss": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.9.tgz", + "integrity": "sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss-scss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "engines": { + "node": ">=12.0" + }, + "peerDependencies": { + "postcss": "^8.4.29" + } + }, + "node_modules/postcss-selector-parser": { "version": "6.0.10", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", "dev": true, - "requires": { + "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" } }, - "postcss-svgo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", - "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", + "node_modules/postcss-svgo": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-6.0.0.tgz", + "integrity": "sha512-r9zvj/wGAoAIodn84dR/kFqwhINp5YsJkLoujybWG59grR/IHx+uQ2Zo+IcOwM0jskfYX3R0mo+1Kip1VSNcvw==", "dev": true, - "requires": { + "dependencies": { "postcss-value-parser": "^4.2.0", - "svgo": "^2.7.0" + "svgo": "^3.0.2" + }, + "engines": { + "node": "^14 || ^16 || >= 18" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "postcss-unique-selectors": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", - "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", + "node_modules/postcss-unique-selectors": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-6.0.0.tgz", + "integrity": "sha512-EPQzpZNxOxP7777t73RQpZE5e9TrnCrkvp7AH7a0l89JmZiPnS82y216JowHXwpBCQitfyxrof9TK3rYbi7/Yw==", "dev": true, - "requires": { + "dependencies": { "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "postcss-value-parser": { + "node_modules/postcss-value-parser": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", "dev": true }, - "prelude-ls": { + "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.8.0" + } }, - "prettier": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.6.2.tgz", - "integrity": "sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew==", - "dev": true + "node_modules/prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } }, - "prettier-plugin-svelte": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/prettier-plugin-svelte/-/prettier-plugin-svelte-2.7.0.tgz", - "integrity": "sha512-fQhhZICprZot2IqEyoiUYLTRdumULGRvw0o4dzl5jt0jfzVWdGqeYW27QTWAeXhoupEZJULmNoH3ueJwUWFLIA==", + "node_modules/prettier-plugin-svelte": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/prettier-plugin-svelte/-/prettier-plugin-svelte-2.10.1.tgz", + "integrity": "sha512-Wlq7Z5v2ueCubWo0TZzKc9XHcm7TDxqcuzRuGd0gcENfzfT4JZ9yDlCbEgxWgiPmLHkBjfOtpAWkcT28MCDpUQ==", + "dev": true, + "peerDependencies": { + "prettier": "^1.16.4 || ^2.0.0", + "svelte": "^3.2.0 || ^4.0.0-next.0" + } + }, + "node_modules/protocol-buffers-schema": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.6.0.tgz", + "integrity": "sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw==" + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", "dev": true, - "requires": {} + "license": "MIT" }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true + "node_modules/prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", + "optional": true }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/quadprog": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/quadprog/-/quadprog-1.6.1.tgz", + "integrity": "sha512-fN5Jkcjlln/b3pJkseDKREf89JkKIyu6cKIVXisgL6ocKPQ0yTp9n6NZUAq3otEPPw78WZMG9K0o9WsfKyMWJw==", + "dev": true, + "engines": { + "node": ">=8.x" + } }, - "queue-microtask": { + "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, - "quick-lru": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", - "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", + "node_modules/quick-lru": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-6.1.2.tgz", + "integrity": "sha512-AAFUA5O1d83pIHEhJwWCq/RQcRukCkn/NSm2QsTEMle5f2hP0ChI2+3Xb051PZCkLryI/Ir1MVKviT2FIloaTQ==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/quickselect": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-2.0.0.tgz", + "integrity": "sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw==" + }, + "node_modules/quill": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/quill/-/quill-1.3.7.tgz", + "integrity": "sha512-hG/DVzh/TiknWtE6QmWAF/pxoZKYxfe3J/d/+ShUWkDvvkZQVTPeVmUJVu1uE6DDooC4fWTiCLh84ul89oNz5g==", + "dependencies": { + "clone": "^2.1.1", + "deep-equal": "^1.0.1", + "eventemitter3": "^2.0.3", + "extend": "^3.0.2", + "parchment": "^1.1.4", + "quill-delta": "^3.6.2" + } + }, + "node_modules/quill-delta": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/quill-delta/-/quill-delta-3.6.3.tgz", + "integrity": "sha512-wdIGBlcX13tCHOXGMVnnTVFtGRLoP0imqxM696fIPwIf5ODIYUHIvHbZcyvGlZFiFhK5XzDC2lpjbxRhnM05Tg==", + "dependencies": { + "deep-equal": "^1.0.1", + "extend": "^3.0.2", + "fast-diff": "1.1.2" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/rbush": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/rbush/-/rbush-3.0.1.tgz", + "integrity": "sha512-XRaVO0YecOpEuIvbhbpTrZgoiI6xBlz6hnlr6EHhd+0x9ase6EmeN+hdwwUaJvLcsFFQ8iWVF1GAK1yB0BWi0w==", + "dependencies": { + "quickselect": "^2.0.0" + } + }, + "node_modules/rc9": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/rc9/-/rc9-2.1.2.tgz", + "integrity": "sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==", "dev": true, - "peer": true + "dependencies": { + "defu": "^6.1.4", + "destr": "^2.0.3" + } }, - "read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dev": true, + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/read-pkg": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-6.0.0.tgz", + "integrity": "sha512-X1Fu3dPuk/8ZLsMhEj5f4wFAF0DWoK7qhGJvgaijocXxBmSToKfbFtqbxMO7bVjNA1dmE5huAzjXj/ey86iw9Q==", "dev": true, + "license": "MIT", "peer": true, - "requires": { + "dependencies": { "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" + "normalize-package-data": "^3.0.2", + "parse-json": "^5.2.0", + "type-fest": "^1.0.1" + }, + "engines": { + "node": ">=12" }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-8.0.0.tgz", + "integrity": "sha512-snVCqPczksT0HS2EC+SxUndvSzn6LRCwpfSvLrIfR5BKDQQZMaI6jPRC9dYvYFDRAuFEAnkwww8kBBNE/3VvzQ==", + "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true, - "peer": true - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "peer": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "peer": true - }, - "type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true, - "peer": true - } + "find-up": "^5.0.0", + "read-pkg": "^6.0.0", + "type-fest": "^1.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/type-fest": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg/node_modules/type-fest": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dev": true, - "peer": true, - "requires": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "dependencies": { - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true, - "peer": true - } + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "optional": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" } }, - "readdirp": { + "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, - "requires": { + "dependencies": { "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" } }, - "redent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", - "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "node_modules/readdirp/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/redent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-4.0.0.tgz", + "integrity": "sha512-tYkDkVVtYkSVhuQ4zBgfvciymHaeuel+zFKXShfDnFP5SyVEP7qo70Rf1jTOTCx3vGNAbnEi/xFkcfQVMIBWag==", "dev": true, + "license": "MIT", "peer": true, - "requires": { - "indent-string": "^4.0.0", - "strip-indent": "^3.0.0" + "dependencies": { + "indent-string": "^5.0.0", + "strip-indent": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true + "node_modules/regenerator-runtime": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", + "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==" + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", + "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "set-function-name": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/remark-gfm": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.0.tgz", + "integrity": "sha512-U92vJgBPkbw4Zfu/IiW2oTZLSL3Zpv+uI7My2eq8JxKgqraFdU8YUGicEJCEgSbeaG+QDFqIcwwfMTOEelPxuA==", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-gfm": "^3.0.0", + "micromark-extension-gfm": "^3.0.0", + "remark-parse": "^11.0.0", + "remark-stringify": "^11.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-parse": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", + "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-rehype": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.0.tgz", + "integrity": "sha512-z3tJrAs2kIs1AqIIy6pzHmAHlF1hWQ+OdY4/hv+Wxe35EhyLKcajL33iUEn3ScxtFox9nUvRufR/Zre8Q08H/g==", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "mdast-util-to-hast": "^13.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-stringify": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz", + "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-to-markdown": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "require-from-string": { + "node_modules/require-from-string": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } }, - "resolve": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", - "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dev": true, - "requires": { - "is-core-module": "^2.8.1", + "dependencies": { + "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "resolve-from": { + "node_modules/resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-protobuf-schema": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/resolve-protobuf-schema/-/resolve-protobuf-schema-2.1.0.tgz", + "integrity": "sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ==", + "dependencies": { + "protocol-buffers-schema": "^3.3.1" + } }, - "reusify": { + "node_modules/reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rfc4648": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/rfc4648/-/rfc4648-1.5.3.tgz", + "integrity": "sha512-MjOWxM065+WswwnmNONOT+bD1nXzY9Km6u3kzvnx8F8/HXGZdz3T6e6vZJ8Q/RIMUSp/nxqjH3GwvJDy8ijeQQ==" }, - "rimraf": { + "node_modules/rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { + "devOptional": true, + "dependencies": { "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "rollup": { - "version": "2.71.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.71.1.tgz", - "integrity": "sha512-lMZk3XfUBGjrrZQpvPSoXcZSfKcJ2Bgn+Z0L1MoW2V8Wh7BVM+LOBJTPo16yul2MwL59cXedzW1ruq3rCjSRgw==", + "node_modules/rollup": { + "version": "4.20.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.20.0.tgz", + "integrity": "sha512-6rbWBChcnSGzIlXeIdNIZTopKYad8ZG8ajhl78lGRLsI2rX8IkaotQhVas2Ma+GPxJav19wrSzvRvuiv0YKzWw==", "dev": true, - "requires": { + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.5" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.20.0", + "@rollup/rollup-android-arm64": "4.20.0", + "@rollup/rollup-darwin-arm64": "4.20.0", + "@rollup/rollup-darwin-x64": "4.20.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.20.0", + "@rollup/rollup-linux-arm-musleabihf": "4.20.0", + "@rollup/rollup-linux-arm64-gnu": "4.20.0", + "@rollup/rollup-linux-arm64-musl": "4.20.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.20.0", + "@rollup/rollup-linux-riscv64-gnu": "4.20.0", + "@rollup/rollup-linux-s390x-gnu": "4.20.0", + "@rollup/rollup-linux-x64-gnu": "4.20.0", + "@rollup/rollup-linux-x64-musl": "4.20.0", + "@rollup/rollup-win32-arm64-msvc": "4.20.0", + "@rollup/rollup-win32-ia32-msvc": "4.20.0", + "@rollup/rollup-win32-x64-msvc": "4.20.0", "fsevents": "~2.3.2" } }, - "run-parallel": { + "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, - "requires": { + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { "queue-microtask": "^1.2.2" } }, - "sade": { + "node_modules/rw": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", + "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==" + }, + "node_modules/sade": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", "dev": true, - "requires": { + "dependencies": { "mri": "^1.1.0" + }, + "engines": { + "node": ">=6" } }, - "sander": { + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "optional": true + }, + "node_modules/sander": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/sander/-/sander-0.5.1.tgz", - "integrity": "sha1-dB4kXiMfB8r7b98PEzrfohalAq0=", + "integrity": "sha512-3lVqBir7WuKDHGrKRDn/1Ye3kwpXaDOMsiRP1wd6wpZW56gJhsbp5RqQpA6JG/P+pkXizygnr1dKR8vzWaVsfA==", "dev": true, - "requires": { + "dependencies": { "es6-promise": "^3.1.2", "graceful-fs": "^4.1.3", "mkdirp": "^0.5.1", "rimraf": "^2.5.2" - }, + } + }, + "node_modules/sander/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, "dependencies": { - "mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "requires": { - "minimist": "^1.2.6" - } - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" } }, - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "requires": { + "node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dependencies": { "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "optional": true + }, + "node_modules/set-cookie-parser": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.6.0.tgz", + "integrity": "sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==", + "dev": true + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", + "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", + "dependencies": { + "define-data-property": "^1.0.1", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" } }, - "shebang-command": { + "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, - "requires": { + "dependencies": { "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "optional": true + }, + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "optional": true + }, + "node_modules/simple-get": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.1.tgz", + "integrity": "sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==", + "optional": true, + "dependencies": { + "decompress-response": "^4.2.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" } }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "node_modules/simple-svelte-autocomplete": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/simple-svelte-autocomplete/-/simple-svelte-autocomplete-2.5.2.tgz", + "integrity": "sha512-6+kZP3XQGb7zs0djTWoFv8tQorBZdv64YfCKrlsYIYBCFsEeikSiNsBSSYw1Om+LYmFeMEOAYSSKoEw+qpnBXQ==", "dev": true }, - "signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "node_modules/sirv": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.4.tgz", + "integrity": "sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==", "dev": true, - "peer": true - }, - "simple-svelte-autocomplete": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/simple-svelte-autocomplete/-/simple-svelte-autocomplete-2.4.0.tgz", - "integrity": "sha512-hiYaT04ZP/zTZxKqwG9MefXP5tCN2MjQojuh1JYMT1rRnXOG4yHK7s5nHy1A+xd5v/PAnyb7ohijTsJk2SyfnQ==", - "dev": true + "dependencies": { + "@polka/url": "^1.0.0-next.24", + "mrmime": "^2.0.0", + "totalist": "^3.0.0" + }, + "engines": { + "node": ">= 10" + } }, - "slash": { + "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true + "dev": true, + "engines": { + "node": ">=8" + } }, - "slice-ansi": { + "node_modules/slice-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "dev": true, - "requires": { + "license": "MIT", + "peer": true, + "dependencies": { "ansi-styles": "^4.0.0", "astral-regex": "^2.0.0", "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, - "sorcery": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/sorcery/-/sorcery-0.10.0.tgz", - "integrity": "sha1-iukK19fLBfxZ8asMY3hF1cFaUrc=", + "node_modules/sorcery": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/sorcery/-/sorcery-0.11.0.tgz", + "integrity": "sha512-J69LQ22xrQB1cIFJhPfgtLuI6BpWRiWu1Y3vSsIwK/eAScqJxd/+CJlUuHQRdX2C9NGFamq+KqNywGgaThwfHw==", "dev": true, - "requires": { + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.14", "buffer-crc32": "^0.2.5", "minimist": "^1.2.0", - "sander": "^0.5.0", - "sourcemap-codec": "^1.3.0" + "sander": "^0.5.0" + }, + "bin": { + "sorcery": "bin/sorcery" + } + }, + "node_modules/sort-asc": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/sort-asc/-/sort-asc-0.1.0.tgz", + "integrity": "sha512-jBgdDd+rQ+HkZF2/OHCmace5dvpos/aWQpcxuyRs9QUbPRnkEJmYVo81PIGpjIdpOcsnJ4rGjStfDHsbn+UVyw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sort-desc": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/sort-desc/-/sort-desc-0.1.1.tgz", + "integrity": "sha512-jfZacW5SKOP97BF5rX5kQfJmRVZP5/adDUTY8fCSPvNcXDVpUEe2pr/iKGlcyZzchRJZrswnp68fgk3qBXgkJw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sort-object": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/sort-object/-/sort-object-0.3.2.tgz", + "integrity": "sha512-aAQiEdqFTTdsvUFxXm3umdo04J7MRljoVGbBlkH7BgNsMvVNAJyGj7C/wV1A8wHWAJj/YikeZbfuCKqhggNWGA==", + "dependencies": { + "sort-asc": "^0.1.0", + "sort-desc": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "source-map": { + "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", - "dev": true + "node_modules/source-map-js": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } }, - "spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", "dev": true, + "license": "Apache-2.0", "peer": true, - "requires": { + "dependencies": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" } }, - "spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "node_modules/spdx-exceptions": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", "dev": true, + "license": "CC-BY-3.0", "peer": true }, - "spdx-expression-parse": { + "node_modules/spdx-expression-parse": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, + "license": "MIT", "peer": true, - "requires": { + "dependencies": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" } }, - "spdx-license-ids": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", - "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", - "dev": true, - "peer": true - }, - "specificity": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/specificity/-/specificity-0.4.1.tgz", - "integrity": "sha512-1klA3Gi5PD1Wv9Q0wUoOQN1IWAuPu0D1U03ThXTr0cJ20+/iq2tHSDnK7Kk/0LXJ1ztUB2/1Os0wKmfyNgUQfg==", + "node_modules/spdx-license-ids": { + "version": "3.0.20", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.20.tgz", + "integrity": "sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw==", "dev": true, + "license": "CC0-1.0", "peer": true }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", - "dev": true + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "optional": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } }, - "string-width": { + "node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { + "devOptional": true, + "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" } }, - "strip-ansi": { + "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { + "devOptional": true, + "dependencies": { "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, - "strip-indent": { + "node_modules/strip-final-newline": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", "dev": true, - "requires": { - "min-indent": "^1.0.0" + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-indent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-4.0.0.tgz", + "integrity": "sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "min-indent": "^1.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "strip-json-comments": { + "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "style-search": { + "node_modules/style-search": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz", - "integrity": "sha1-eVjHk+R+MuB9K1yv5cC/jhLneQI=", + "integrity": "sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==", + "dev": true, + "license": "ISC", + "peer": true + }, + "node_modules/style-to-object": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.4.4.tgz", + "integrity": "sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg==", + "dev": true, + "dependencies": { + "inline-style-parser": "0.1.1" + } + }, + "node_modules/stylehacks": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-6.0.0.tgz", + "integrity": "sha512-+UT589qhHPwz6mTlCLSt/vMNTJx8dopeJlZAlBMJPWA3ORqu6wmQY7FBXf+qD+FsqoBJODyqNxOUP3jdntFRdw==", + "dev": true, + "dependencies": { + "browserslist": "^4.21.4", + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^14 || ^16 || >=18.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/stylelint": { + "version": "15.11.0", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-15.11.0.tgz", + "integrity": "sha512-78O4c6IswZ9TzpcIiQJIN49K3qNoXTM8zEJzhaTE/xRTCZswaovSEVIa/uwbOltZrk16X4jAxjaOhzz/hTm1Kw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@csstools/css-parser-algorithms": "^2.3.1", + "@csstools/css-tokenizer": "^2.2.0", + "@csstools/media-query-list-parser": "^2.1.4", + "@csstools/selector-specificity": "^3.0.0", + "balanced-match": "^2.0.0", + "colord": "^2.9.3", + "cosmiconfig": "^8.2.0", + "css-functions-list": "^3.2.1", + "css-tree": "^2.3.1", + "debug": "^4.3.4", + "fast-glob": "^3.3.1", + "fastest-levenshtein": "^1.0.16", + "file-entry-cache": "^7.0.0", + "global-modules": "^2.0.0", + "globby": "^11.1.0", + "globjoin": "^0.1.4", + "html-tags": "^3.3.1", + "ignore": "^5.2.4", + "import-lazy": "^4.0.0", + "imurmurhash": "^0.1.4", + "is-plain-object": "^5.0.0", + "known-css-properties": "^0.29.0", + "mathml-tag-names": "^2.1.3", + "meow": "^10.1.5", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.28", + "postcss-resolve-nested-selector": "^0.1.1", + "postcss-safe-parser": "^6.0.0", + "postcss-selector-parser": "^6.0.13", + "postcss-value-parser": "^4.2.0", + "resolve-from": "^5.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "style-search": "^0.1.0", + "supports-hyperlinks": "^3.0.0", + "svg-tags": "^1.0.0", + "table": "^6.8.1", + "write-file-atomic": "^5.0.1" + }, + "bin": { + "stylelint": "bin/stylelint.mjs" + }, + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/stylelint" + } + }, + "node_modules/stylelint-config-recommended": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-13.0.0.tgz", + "integrity": "sha512-EH+yRj6h3GAe/fRiyaoO2F9l9Tgg50AOFhaszyfov9v6ayXJ1IkSHwTxd7lB48FmOeSGDPLjatjO11fJpmarkQ==", + "dev": true, + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, + "peerDependencies": { + "stylelint": "^15.10.0" + } + }, + "node_modules/stylelint/node_modules/@csstools/selector-specificity": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.1.1.tgz", + "integrity": "sha512-a7cxGcJ2wIlMFLlh8z2ONm+715QkPHiyJcxwQlKOz/03GPw1COpfhcmC9wm4xlZfp//jWHNNMwzjtqHXVWU9KA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "peer": true, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss-selector-parser": "^6.0.13" + } + }, + "node_modules/stylelint/node_modules/balanced-match": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz", + "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==", "dev": true, + "license": "MIT", "peer": true }, - "stylehacks": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.0.tgz", - "integrity": "sha512-SzLmvHQTrIWfSgljkQCw2++C9+Ne91d/6Sp92I8c5uHTcy/PgeHamwITIbBW9wnFTY/3ZfSXR9HIL6Ikqmcu6Q==", + "node_modules/stylelint/node_modules/file-entry-cache": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-7.0.2.tgz", + "integrity": "sha512-TfW7/1iI4Cy7Y8L6iqNdZQVvdXn0f8B4QcIXmkIbtTIe/Okm/nSlHb4IwGzRVOd3WfSieCgvf5cMzEfySAIl0g==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "flat-cache": "^3.2.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/stylelint/node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/stylelint/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/sucrase": { + "version": "3.34.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.34.0.tgz", + "integrity": "sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "7.1.6", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/sucrase/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/sucrase/node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", "dev": true, - "requires": { - "browserslist": "^4.16.6", - "postcss-selector-parser": "^6.0.4" + "engines": { + "node": ">= 6" } }, - "stylelint": { - "version": "14.8.1", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-14.8.1.tgz", - "integrity": "sha512-0YxTop3wTeEVmQWhS7jjLFaBkvfPmffRiJ6eFIDlK++f3OklaobTYFJu32E5u/cIrFLbcW52pLqrYpihA/y0/w==", + "node_modules/sucrase/node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", "dev": true, - "peer": true, - "requires": { - "balanced-match": "^2.0.0", - "colord": "^2.9.2", - "cosmiconfig": "^7.0.1", - "css-functions-list": "^3.0.1", - "debug": "^4.3.4", - "execall": "^2.0.0", - "fast-glob": "^3.2.11", - "fastest-levenshtein": "^1.0.12", - "file-entry-cache": "^6.0.1", - "get-stdin": "^8.0.0", - "global-modules": "^2.0.0", - "globby": "^11.1.0", - "globjoin": "^0.1.4", - "html-tags": "^3.2.0", - "ignore": "^5.2.0", - "import-lazy": "^4.0.0", - "imurmurhash": "^0.1.4", - "is-plain-object": "^5.0.0", - "known-css-properties": "^0.24.0", - "mathml-tag-names": "^2.1.3", - "meow": "^9.0.0", - "micromatch": "^4.0.5", - "normalize-path": "^3.0.0", - "normalize-selector": "^0.2.0", - "picocolors": "^1.0.0", - "postcss": "^8.4.12", - "postcss-media-query-parser": "^0.2.3", - "postcss-resolve-nested-selector": "^0.1.1", - "postcss-safe-parser": "^6.0.0", - "postcss-selector-parser": "^6.0.10", - "postcss-value-parser": "^4.2.0", - "resolve-from": "^5.0.0", - "specificity": "^0.4.1", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "style-search": "^0.1.0", - "supports-hyperlinks": "^2.2.0", - "svg-tags": "^1.0.0", - "table": "^6.8.0", - "v8-compile-cache": "^2.3.0", - "write-file-atomic": "^4.0.1" - }, "dependencies": { - "balanced-match": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz", - "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==", - "dev": true, - "peer": true - }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "peer": true - } + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "stylelint-config-recommended": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-6.0.0.tgz", - "integrity": "sha512-ZorSSdyMcxWpROYUvLEMm0vSZud2uB7tX1hzBZwvVY9SV/uly4AvvJPPhCcymZL3fcQhEQG5AELmrxWqtmzacw==", + "node_modules/sucrase/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "requires": {} + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } }, - "supports-color": { + "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "requires": { + "dependencies": { "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "supports-hyperlinks": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", - "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", + "node_modules/supports-hyperlinks": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-3.1.0.tgz", + "integrity": "sha512-2rn0BZ+/f7puLOHZm1HOJfwBggfaHXUpPUSSG/SWM4TWp5KCfmNYwnC3hruy2rZlMnmWZ+QAGpZfchu3f3695A==", "dev": true, + "license": "MIT", "peer": true, - "requires": { + "dependencies": { "has-flag": "^4.0.0", "supports-color": "^7.0.0" + }, + "engines": { + "node": ">=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "supports-preserve-symlinks-flag": { + "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "svelte": { - "version": "3.48.0", - "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.48.0.tgz", - "integrity": "sha512-fN2YRm/bGumvjUpu6yI3BpvZnpIm9I6A7HR4oUNYd7ggYyIwSA/BX7DJ+UXXffLp6XNcUijyLvttbPVCYa/3xQ==" + "node_modules/svelte": { + "version": "4.2.19", + "resolved": "https://registry.npmjs.org/svelte/-/svelte-4.2.19.tgz", + "integrity": "sha512-IY1rnGr6izd10B0A8LqsBfmlT5OILVuZ7XsI0vdGPEvuonFV7NYEUK4dAkm9Zg2q0Um92kYjTpS1CAP3Nh/KWw==", + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.1", + "@jridgewell/sourcemap-codec": "^1.4.15", + "@jridgewell/trace-mapping": "^0.3.18", + "@types/estree": "^1.0.1", + "acorn": "^8.9.0", + "aria-query": "^5.3.0", + "axobject-query": "^4.0.0", + "code-red": "^1.0.3", + "css-tree": "^2.3.1", + "estree-walker": "^3.0.3", + "is-reference": "^3.0.1", + "locate-character": "^3.0.0", + "magic-string": "^0.30.4", + "periscopic": "^3.1.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/svelte-awesome-color-picker": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/svelte-awesome-color-picker/-/svelte-awesome-color-picker-3.0.4.tgz", + "integrity": "sha512-nlujXJV7uG2xfyMwjoJDxFqhV+geC9gD/AKs9+wRE3hu4o85nIDE9jjh6lFIMMugzPF5t0M55fCSlENw4kzKOQ==", + "dev": true, + "dependencies": { + "colord": "^2.9.3", + "svelte-awesome-slider": "^1.1.0" + }, + "peerDependencies": { + "svelte": "^3.55.1 || ^4.0.0" + } }, - "svelte-awesome": { - "version": "2.4.6", - "resolved": "https://registry.npmjs.org/svelte-awesome/-/svelte-awesome-2.4.6.tgz", - "integrity": "sha512-l3TUuAvFUT3KOD0NiMi0y2oN+GuTvO/K8muk9nupgITHMXEJCvZ/wsejSH3vJI1pjb3vLkD00upvUQ9QgX9NhA==", + "node_modules/svelte-awesome-slider": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/svelte-awesome-slider/-/svelte-awesome-slider-1.1.0.tgz", + "integrity": "sha512-MgY6ZdBON42HVZqNWNjq2HOgyDlC35q0TNbV/YO1l1/bcb5yhM8EE97h1AJ/7F6t6sLzXhQ3qPf5nGyCdDSnCg==", "dev": true, - "requires": {} + "peerDependencies": { + "svelte": "^3.54.0 || ^4.0.0" + } }, - "svelte-check": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-2.7.0.tgz", - "integrity": "sha512-GrvG24j0+i8AOm0k0KyJ6Dqc+TAR2yzB7rtS4nljHStunVxCTr/1KYlv4EsOeoqtHLzeWMOd5D2O6nDdP/yw4A==", + "node_modules/svelte-carousel": { + "version": "1.0.25", + "resolved": "https://registry.npmjs.org/svelte-carousel/-/svelte-carousel-1.0.25.tgz", + "integrity": "sha512-vR/AbGYwlh3fgWaB5PJg+iqZFvoVCJq4JWdmlXvPtdG9TLlKJWBcoiKlMZt3MnFF7AqNW46tOH/O+uVMWQzyWQ==", + "dependencies": { + "easy-reactive": "1.0.4" + } + }, + "node_modules/svelte-chartjs": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/svelte-chartjs/-/svelte-chartjs-3.1.5.tgz", + "integrity": "sha512-ka2zh7v5FiwfAX1oMflZ0HkNkgjHjFqANgRyC+vNYXfxtx2ku68Zo+2KgbKeBH2nS1ThDqkIACPzGxy4T0UaoA==", + "peerDependencies": { + "chart.js": "^3.5.0 || ^4.0.0", + "svelte": "^4.0.0" + } + }, + "node_modules/svelte-check": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-3.6.0.tgz", + "integrity": "sha512-8VfqhfuRJ1sKW+o8isH2kPi0RhjXH1nNsIbCFGyoUHG+ZxVxHYRKcb+S8eaL/1tyj3VGvWYx3Y5+oCUsJgnzcw==", "dev": true, - "requires": { + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.17", "chokidar": "^3.4.1", "fast-glob": "^3.2.7", "import-fresh": "^3.2.1", "picocolors": "^1.0.0", "sade": "^1.7.4", - "source-map": "^0.7.3", - "svelte-preprocess": "^4.0.0", - "typescript": "*" + "svelte-preprocess": "^5.1.0", + "typescript": "^5.0.3" + }, + "bin": { + "svelte-check": "bin/svelte-check" }, + "peerDependencies": { + "svelte": "^3.55.0 || ^4.0.0-next.0 || ^4.0.0 || ^5.0.0-next.0" + } + }, + "node_modules/svelte-eslint-parser": { + "version": "0.33.1", + "resolved": "https://registry.npmjs.org/svelte-eslint-parser/-/svelte-eslint-parser-0.33.1.tgz", + "integrity": "sha512-vo7xPGTlKBGdLH8T5L64FipvTrqv3OQRx9d2z5X05KKZDlF4rQk8KViZO4flKERY+5BiVdOh7zZ7JGJWo5P0uA==", + "dev": true, "dependencies": { - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true + "eslint-scope": "^7.0.0", + "eslint-visitor-keys": "^3.0.0", + "espree": "^9.0.0", + "postcss": "^8.4.29", + "postcss-scss": "^4.0.8" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ota-meshi" + }, + "peerDependencies": { + "svelte": "^3.37.0 || ^4.0.0" + }, + "peerDependenciesMeta": { + "svelte": { + "optional": true } } }, - "svelte-highlight": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/svelte-highlight/-/svelte-highlight-5.3.2.tgz", - "integrity": "sha512-a9FbXm9oXkoUzLZxGaOpi/UZXxt2tO2+TTRQYtz+UpOFbbRGeZx7zG53QHwv7cpT+/kY10sc6VLZGzjBJviv6w==", + "node_modules/svelte-eslint-parser/node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/svelte-eslint-parser/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, - "requires": { - "highlight.js": "11.5.0" + "engines": { + "node": ">=4.0" + } + }, + "node_modules/svelte-exmarkdown": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/svelte-exmarkdown/-/svelte-exmarkdown-3.0.5.tgz", + "integrity": "sha512-x0ELw7oTziBaJLFsdGZaoursycGK9HPzxRTRZ/rBi2KmseFG29ryyborJxFmeE0X6ORrEW1pRjoi8q41xpIeRQ==", + "dependencies": { + "remark-gfm": "^4.0.0", + "remark-parse": "^11.0.0", + "remark-rehype": "^11.0.0", + "unified": "^11.0.0" }, + "peerDependencies": { + "svelte": "^3.47.0 || ^4.0.0 || >=5.0.0-next.115" + } + }, + "node_modules/svelte-floating-ui": { + "version": "1.5.8", + "resolved": "https://registry.npmjs.org/svelte-floating-ui/-/svelte-floating-ui-1.5.8.tgz", + "integrity": "sha512-dVvJhZ2bT+kQDHlE4Lep8t+sgEc0XD96fXLzAi2DDI2bsaegBbClxXVNMma0C2WsG+n9GJSYx292dTvA8CYRtw==", + "dev": true, "dependencies": { - "highlight.js": { - "version": "11.5.0", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.5.0.tgz", - "integrity": "sha512-SM6WDj5/C+VfIY8pZ6yW6Xa0Fm1tniYVYWYW1Q/DcMnISZFrC3aQAZZZFAAZtybKNrGId3p/DNbFTtcTXXgYBw==", - "dev": true - } + "@floating-ui/core": "^1.5.0", + "@floating-ui/dom": "^1.5.3" + } + }, + "node_modules/svelte-highlight": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/svelte-highlight/-/svelte-highlight-7.6.0.tgz", + "integrity": "sha512-J9X1d07iMIKZMAqNAhlkjLX/FS+7R2lPrqVul7i+EleVZIOYvBhtx7ES62bc661a70nKNOS05yr9JAvyQPPOIA==", + "dev": true, + "dependencies": { + "highlight.js": "11.9.0" + } + }, + "node_modules/svelte-hmr": { + "version": "0.15.3", + "resolved": "https://registry.npmjs.org/svelte-hmr/-/svelte-hmr-0.15.3.tgz", + "integrity": "sha512-41snaPswvSf8TJUhlkoJBekRrABDXDMdpNpT2tfHIv4JuhgvHqLMhEPGtaQn0BmbNSTkuz2Ed20DF2eHw0SmBQ==", + "dev": true, + "engines": { + "node": "^12.20 || ^14.13.1 || >= 16" + }, + "peerDependencies": { + "svelte": "^3.19.0 || ^4.0.0" } }, - "svelte-hmr": { - "version": "0.14.11", - "resolved": "https://registry.npmjs.org/svelte-hmr/-/svelte-hmr-0.14.11.tgz", - "integrity": "sha512-R9CVfX6DXxW1Kn45Jtmx+yUe+sPhrbYSUp7TkzbW0jI5fVPn6lsNG9NEs5dFg5qRhFNAoVdRw5qQDLALNKhwbQ==", + "node_modules/svelte-infinite-loading": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/svelte-infinite-loading/-/svelte-infinite-loading-1.4.0.tgz", + "integrity": "sha512-Jo+f/yr/HmZQuIiiKKzAHVFXdAUWHW2RBbrcQTil8JVk1sCm/riy7KTJVzjBgQvHasrFQYKF84zvtc9/Y4lFYg==", + "license": "MIT" + }, + "node_modules/svelte-multiselect": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/svelte-multiselect/-/svelte-multiselect-10.2.0.tgz", + "integrity": "sha512-nbv0dTgSHGENbwKdiN5seFD4ljtGSAEZGcMkHfcc+Nnk7tVwM2jxvCgkRKp9FdPUKG1M6Zp8ZXLDU+xoZxHyTA==", "dev": true, - "requires": {} + "dependencies": { + "svelte": "^4.2.0" + } }, - "svelte-markdown": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/svelte-markdown/-/svelte-markdown-0.2.2.tgz", - "integrity": "sha512-bNxpG3gRbC2UjAFakIMcLEzVq5db2Md57aeU4wKCuffSfD6f7RkvtYDqbrAk2ycC55t3wykOy0E7KDuvVKyDYA==", - "requires": { - "@types/marked": "^4.0.1", - "marked": "^4.0.10" + "node_modules/svelte-popperjs": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/svelte-popperjs/-/svelte-popperjs-1.3.2.tgz", + "integrity": "sha512-fwrErlkvngL876WXRnL3OLlfk/n9YkZwwLxuKRpZOYCJLt1zrwhoKTXS+/sRgDveD/zd6GQ35hV89EOip+NBGA==", + "dev": true, + "peerDependencies": { + "@popperjs/core": ">=2", + "svelte": ">=3" } }, - "svelte-preprocess": { - "version": "4.10.6", - "resolved": "https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-4.10.6.tgz", - "integrity": "sha512-I2SV1w/AveMvgIQlUF/ZOO3PYVnhxfcpNyGt8pxpUVhPfyfL/CZBkkw/KPfuFix5FJ9TnnNYMhACK3DtSaYVVQ==", + "node_modules/svelte-preprocess": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-5.1.4.tgz", + "integrity": "sha512-IvnbQ6D6Ao3Gg6ftiM5tdbR6aAETwjhHV+UKGf5bHGYR69RQvF1ho0JKPcbUON4vy4R7zom13jPjgdOWCQ5hDA==", "dev": true, - "requires": { - "@types/pug": "^2.0.4", - "@types/sass": "^1.16.0", - "detect-indent": "^6.0.0", - "magic-string": "^0.25.7", - "sorcery": "^0.10.0", + "hasInstallScript": true, + "dependencies": { + "@types/pug": "^2.0.6", + "detect-indent": "^6.1.0", + "magic-string": "^0.30.5", + "sorcery": "^0.11.0", "strip-indent": "^3.0.0" }, - "dependencies": { - "magic-string": { - "version": "0.25.9", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", - "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", - "dev": true, - "requires": { - "sourcemap-codec": "^1.4.8" - } + "engines": { + "node": ">= 16.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.10.2", + "coffeescript": "^2.5.1", + "less": "^3.11.3 || ^4.0.0", + "postcss": "^7 || ^8", + "postcss-load-config": "^2.1.0 || ^3.0.0 || ^4.0.0 || ^5.0.0", + "pug": "^3.0.0", + "sass": "^1.26.8", + "stylus": "^0.55.0", + "sugarss": "^2.0.0 || ^3.0.0 || ^4.0.0", + "svelte": "^3.23.0 || ^4.0.0-next.0 || ^4.0.0 || ^5.0.0-next.0", + "typescript": ">=3.9.5 || ^4.0.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "coffeescript": { + "optional": true + }, + "less": { + "optional": true + }, + "postcss": { + "optional": true + }, + "postcss-load-config": { + "optional": true + }, + "pug": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "typescript": { + "optional": true } } }, - "svelte-split-pane": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/svelte-split-pane/-/svelte-split-pane-0.1.2.tgz", - "integrity": "sha512-JluEydC9v2DetyhlwCF3CdqAkET8XPHP7WeWbl4lVLOg55avDOhoS5U6BRhvWd104HOqhUcCSz+7Nveyjmzjeg==" + "node_modules/svelte-preprocess/node_modules/strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/svelte-range-slider-pips": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/svelte-range-slider-pips/-/svelte-range-slider-pips-2.3.1.tgz", + "integrity": "sha512-P29PNqHld+SiaDuHzf98rLvhSYWXb3TVL9p7U5RG9UX8emUgypZgp9zuIIwpmIXysGQC6JG8duMc5FuaPnSVdg==", + "dev": true + }, + "node_modules/svelte-splitpanes": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/svelte-splitpanes/-/svelte-splitpanes-0.8.0.tgz", + "integrity": "sha512-cdtSUG8GE8eCAY+TiIGJmnEqV0GC1k/7lwWqovN0qTbw7OIAKEA2BWvqnZ/jk7UzSLlzdI2Uxxm4shXgCdN1kQ==", + "dev": true, + "dependencies": { + "esm-env-robust": "0.0.3" + }, + "peerDependencies": { + "svelte": "^4.0.2" + } + }, + "node_modules/svelte-tiny-virtual-list": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/svelte-tiny-virtual-list/-/svelte-tiny-virtual-list-2.0.5.tgz", + "integrity": "sha512-xg9ckb8UeeIme4/5qlwCrl2QNmUZ8SCQYZn3Ji83cUsoASqRNy3KWjpmNmzYvPDqCHSZjruBBsoB7t5hwuzw5g==" + }, + "node_modules/svelte2tsx": { + "version": "0.6.25", + "resolved": "https://registry.npmjs.org/svelte2tsx/-/svelte2tsx-0.6.25.tgz", + "integrity": "sha512-hhBKL5X9gGvKQAZ9xLoHnbE9Yb00HxEZJlxcj2drxWK+Tpqcs/bnodjSfCGbqEhvNaUXYNbVL7s4dEXT+o0f6w==", + "dev": true, + "dependencies": { + "dedent-js": "^1.0.1", + "pascal-case": "^3.1.1" + }, + "peerDependencies": { + "svelte": "^3.55 || ^4.0.0-next.0 || ^4.0 || ^5.0.0-next.0", + "typescript": "^4.9.4 || ^5.0.0" + } }, - "svg-tags": { + "node_modules/svg-tags": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", - "integrity": "sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q=", + "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==", "dev": true, "peer": true }, - "svgo": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", - "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "node_modules/svgo": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.0.3.tgz", + "integrity": "sha512-X4UZvLhOglD5Xrp834HzGHf8RKUW0Ahigg/08yRO1no9t2NxffOkMiQ0WmaMIbaGlVTlSst2zWANsdhz5ybXgA==", "dev": true, - "requires": { + "dependencies": { "@trysound/sax": "0.2.0", "commander": "^7.2.0", - "css-select": "^4.1.3", - "css-tree": "^1.1.3", - "csso": "^4.2.0", - "picocolors": "^1.0.0", - "stable": "^0.1.8" + "css-select": "^5.1.0", + "css-tree": "^2.2.1", + "csso": "5.0.5", + "picocolors": "^1.0.0" }, - "dependencies": { - "commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true - } + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/svgo" + } + }, + "node_modules/svgo/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true, + "engines": { + "node": ">= 10" } }, - "table": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/table/-/table-6.8.0.tgz", - "integrity": "sha512-s/fitrbVeEyHKFa7mFdkuQMWlH1Wgw/yEXMt5xACT4ZpzWFluehAxRtUUQKPuWhaLAWhFcVx6w3oC8VKaUfPGA==", + "node_modules/table": { + "version": "6.8.2", + "resolved": "https://registry.npmjs.org/table/-/table-6.8.2.tgz", + "integrity": "sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA==", "dev": true, - "requires": { + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { "ajv": "^8.0.1", "lodash.truncate": "^4.4.2", "slice-ansi": "^4.0.0", "string-width": "^4.2.3", "strip-ansi": "^6.0.1" }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/table/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - } + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/table/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/tailwind-merge": { + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-1.14.0.tgz", + "integrity": "sha512-3mFKyCo/MBcgyOTlrY8T7odzZFx+w+qKSMAmdFzRvqBfLlSigU6TZnlFHK0lkMwj9Bj8OYU+9yW9lmGuS0QEnQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/dcastil" } }, - "tailwindcss": { - "version": "3.0.24", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.0.24.tgz", - "integrity": "sha512-H3uMmZNWzG6aqmg9q07ZIRNIawoiEcNFKDfL+YzOPuPsXuDXxJxB9icqzLgdzKNwjG3SAro2h9SYav8ewXNgig==", + "node_modules/tailwindcss": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.1.tgz", + "integrity": "sha512-qAYmXRfk3ENzuPBakNK0SRrUDipP8NQnEY6772uDhflcQz5EhRdD7JNZxyrFHVQNCwULPBn6FNPp9brpO7ctcA==", "dev": true, - "requires": { - "arg": "^5.0.1", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", "chokidar": "^3.5.3", - "color-name": "^1.1.4", - "detective": "^5.2.0", "didyoumean": "^1.2.2", "dlv": "^1.1.3", - "fast-glob": "^3.2.11", + "fast-glob": "^3.3.0", "glob-parent": "^6.0.2", "is-glob": "^4.0.3", - "lilconfig": "^2.0.5", + "jiti": "^1.19.1", + "lilconfig": "^2.1.0", + "micromatch": "^4.0.5", "normalize-path": "^3.0.0", "object-hash": "^3.0.0", "picocolors": "^1.0.0", - "postcss": "^8.4.12", - "postcss-js": "^4.0.0", - "postcss-load-config": "^3.1.4", - "postcss-nested": "5.0.6", - "postcss-selector-parser": "^6.0.10", - "postcss-value-parser": "^4.2.0", - "quick-lru": "^5.1.1", - "resolve": "^1.22.0" + "postcss": "^8.4.23", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.1", + "postcss-nested": "^6.0.1", + "postcss-selector-parser": "^6.0.11", + "resolve": "^1.22.2", + "sucrase": "^3.32.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tailwindcss/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/tailwindcss/node_modules/postcss-selector-parser": { + "version": "6.0.13", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", + "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", + "dev": true, "dependencies": { - "glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "requires": { - "is-glob": "^4.0.3" - } - }, - "quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "dev": true - } + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/tar": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.0.tgz", + "integrity": "sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==", + "devOptional": true, + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "devOptional": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" } }, - "text-table": { + "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, - "tiny-glob": { + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/tiny-glob": { "version": "0.2.9", "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz", "integrity": "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==", "dev": true, - "requires": { + "dependencies": { "globalyzer": "0.1.0", "globrex": "^0.1.2" } }, - "to-regex-range": { + "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, - "requires": { + "dependencies": { "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/totalist": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", + "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", + "dev": true, + "engines": { + "node": ">=6" } }, - "tr46": { + "node_modules/tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=", - "dev": true + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, - "trim-newlines": { + "node_modules/trim-lines": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", - "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", + "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", + "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/trim-newlines": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-4.1.1.tgz", + "integrity": "sha512-jRKj0n0jXWo6kh62nA5TEh3+4igKDXLvzBJcPpiizP7oOolUrYIxmVBG9TOtHYFHoddUk6YvAkGeGoSVTXfQXQ==", "dev": true, - "peer": true + "license": "MIT", + "peer": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/trough": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz", + "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, - "tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", "dev": true }, - "tsutils": { + "node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + }, + "node_modules/tsutils": { "version": "3.21.0", "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", "dev": true, - "requires": { + "dependencies": { "tslib": "^1.8.1" }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - } + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" } }, - "type-check": { + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, - "requires": { + "dependencies": { "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" } }, - "type-fest": { + "node_modules/type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typescript": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", + "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } }, - "typescript": { - "version": "4.6.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.4.tgz", - "integrity": "sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg==", + "node_modules/ufo": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.5.3.tgz", + "integrity": "sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw==", "dev": true }, - "uglify-js": { - "version": "3.15.4", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.15.4.tgz", - "integrity": "sha512-vMOPGDuvXecPs34V74qDKk4iJ/SN4vL3Ow/23ixafENYvtrNvtbcgUeugTcUGRGsOF/5fU8/NYSL5Hyb3l1OJA==", + "node_modules/uglify-js": { + "version": "3.17.4", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", + "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", "dev": true, - "optional": true + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" + }, + "node_modules/unified": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz", + "integrity": "sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==", + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unified/node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", + "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/universal-user-agent": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.1.tgz", + "integrity": "sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/update-browserslist-db": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } }, - "uri-js": { + "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, - "requires": { + "dependencies": { "punycode": "^2.1.0" } }, - "util-deprecate": { + "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "devOptional": true }, - "validate-npm-package-license": { + "node_modules/validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, + "license": "Apache-2.0", "peer": true, - "requires": { + "dependencies": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" } }, - "vite": { - "version": "2.9.6", - "resolved": "https://registry.npmjs.org/vite/-/vite-2.9.6.tgz", - "integrity": "sha512-3IffdrByHW95Yjv0a13TQOQfJs7L5dVlSPuTt432XLbRMriWbThqJN2k/IS6kXn5WY4xBLhK9XoaWay1B8VzUw==", + "node_modules/vfile": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz", + "integrity": "sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vite": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.0.tgz", + "integrity": "sha512-5xokfMX0PIiwCMCMb9ZJcMyh5wbBun0zUzKib+L65vAZ8GY9ePZMXxFrHbr/Kyll2+LSCY7xtERPpxkBDKngwg==", "dev": true, - "requires": { - "esbuild": "^0.14.27", - "fsevents": "~2.3.2", - "postcss": "^8.4.12", - "resolve": "^1.22.0", - "rollup": "^2.59.0" + "license": "MIT", + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.40", + "rollup": "^4.13.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } } }, - "vscode-jsonrpc": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz", - "integrity": "sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg==" + "node_modules/vite-plugin-circular-dependency": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/vite-plugin-circular-dependency/-/vite-plugin-circular-dependency-0.2.1.tgz", + "integrity": "sha512-NriKEoxJKn5CaAMw5JT1DYMm4KntsCfqcVeGF7ssOXRQVqoxmtUl6hS8AH+sellIKZf51G53v/CyDNt5LXj1NA==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^5.0.2", + "chalk": "^4.1.2" + } }, - "vscode-languageclient": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-7.0.0.tgz", - "integrity": "sha512-P9AXdAPlsCgslpP9pRxYPqkNYV7Xq8300/aZDpO35j1fJm/ncize8iGswzYlcvFw5DQUx4eVk+KvfXdL0rehNg==", - "requires": { - "minimatch": "^3.0.4", - "semver": "^7.3.4", - "vscode-languageserver-protocol": "3.16.0" + "node_modules/vite-plugin-mkcert": { + "version": "1.17.5", + "resolved": "https://registry.npmjs.org/vite-plugin-mkcert/-/vite-plugin-mkcert-1.17.5.tgz", + "integrity": "sha512-KKGY3iHx/9zb7ow8JJ+nLN2HiNIBuPBwj34fJ+jAJT89/8qfk7msO7G7qipR8VDEm9xMCys0xT11QOJbZcg3/Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/rest": "^20.0.2", + "axios": "^1.6.8", + "debug": "^4.3.4", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=v16.7.0" + }, + "peerDependencies": { + "vite": ">=3" + } + }, + "node_modules/vitefu": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-0.2.5.tgz", + "integrity": "sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==", + "dev": true, + "peerDependencies": { + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "vite": { + "optional": true + } } }, - "vscode-languageserver-protocol": { - "version": "3.16.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.16.0.tgz", - "integrity": "sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A==", - "requires": { - "vscode-jsonrpc": "6.0.0", - "vscode-languageserver-types": "3.16.0" + "node_modules/vscode": { + "name": "@codingame/monaco-vscode-api", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@codingame/monaco-vscode-api/-/monaco-vscode-api-8.0.2.tgz", + "integrity": "sha512-n9UZrJk4u4vwZxzVfLDLG93XceEsGAjs6clkKwFVX/dbVjOvxbyt6O7m2QL6+kbF17SBHBUHiRiOgD3q2FBaJA==", + "license": "MIT", + "dependencies": { + "@codingame/monaco-vscode-base-service-override": "8.0.2", + "@codingame/monaco-vscode-environment-service-override": "8.0.2", + "@codingame/monaco-vscode-extensions-service-override": "8.0.2", + "@codingame/monaco-vscode-files-service-override": "8.0.2", + "@codingame/monaco-vscode-host-service-override": "8.0.2", + "@codingame/monaco-vscode-layout-service-override": "8.0.2", + "@codingame/monaco-vscode-quickaccess-service-override": "8.0.2", + "@vscode/iconv-lite-umd": "0.7.0", + "jschardet": "3.1.3" } }, - "vscode-languageserver-textdocument": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.4.tgz", - "integrity": "sha512-/xhqXP/2A2RSs+J8JNXpiiNVvvNM0oTosNVmQnunlKvq9o4mupHOBAnnzH0lwIPKazXKvAKsVp1kr+H/K4lgoQ==" + "node_modules/vscode-jsonrpc": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.2.0.tgz", + "integrity": "sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==", + "engines": { + "node": ">=14.0.0" + } }, - "vscode-languageserver-types": { - "version": "3.16.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz", - "integrity": "sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==" + "node_modules/vscode-languageclient": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-9.0.1.tgz", + "integrity": "sha512-JZiimVdvimEuHh5olxhxkht09m3JzUGwggb5eRUkzzJhZ2KjCN0nh55VfiED9oez9DyF8/fz1g1iBV3h+0Z2EA==", + "dependencies": { + "minimatch": "^5.1.0", + "semver": "^7.3.7", + "vscode-languageserver-protocol": "3.17.5" + }, + "engines": { + "vscode": "^1.82.0" + } }, - "vscode-uri": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.3.tgz", - "integrity": "sha512-EcswR2S8bpR7fD0YPeS7r2xXExrScVMxg4MedACaWHEtx9ftCF/qHG1xGkolzTPcEmjTavCQgbVzHUIdTMzFGA==" + "node_modules/vscode-languageclient/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/vscode-languageserver-protocol": { + "version": "3.17.5", + "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.5.tgz", + "integrity": "sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==", + "dependencies": { + "vscode-jsonrpc": "8.2.0", + "vscode-languageserver-types": "3.17.5" + } + }, + "node_modules/vscode-languageserver-types": { + "version": "3.17.5", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz", + "integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==" + }, + "node_modules/vscode-oniguruma": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz", + "integrity": "sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==", + "license": "MIT" + }, + "node_modules/vscode-textmate": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-9.0.0.tgz", + "integrity": "sha512-Cl65diFGxz7gpwbav10HqiY/eVYTO1sjQpmRmV991Bj7wAoOAjGQ97PpQcXorDE2Uc4hnGWLY17xme+5t6MlSg==", + "license": "MIT" + }, + "node_modules/vscode-uri": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.8.tgz", + "integrity": "sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==" }, - "webidl-conversions": { + "node_modules/vscode-ws-jsonrpc": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/vscode-ws-jsonrpc/-/vscode-ws-jsonrpc-3.3.2.tgz", + "integrity": "sha512-jxGHxAuow67sNRkkS2svsW00ZACX+Zrbury9Au2A22px6sg4pe858Nnnwvtg0Pm4D0L/W9Yzn7N7X3R/RIMxsQ==", + "license": "MIT", + "dependencies": { + "vscode-jsonrpc": "~8.2.1" + }, + "engines": { + "node": ">=16.11.0", + "npm": ">=8.0.0" + } + }, + "node_modules/vscode-ws-jsonrpc/node_modules/vscode-jsonrpc": { + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.2.1.tgz", + "integrity": "sha512-kdjOSJ2lLIn7r1rtrMbbNCHjyMPfRnowdKjBQ+mGq6NAW5QY2bEZC/khaC5OR8svbbjvLEaIXkOq45e2X9BIbQ==", + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/web-worker": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/web-worker/-/web-worker-1.2.0.tgz", + "integrity": "sha512-PgF341avzqyx60neE9DD+XS26MMNMoUQRz9NOZwW32nPQrF6p77f1htcnjBSEV8BGMKZ16choqUG4hyI0Hx7mA==" + }, + "node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=", - "dev": true + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, - "whatwg-url": { + "node_modules/whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", - "dev": true, - "requires": { + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" } }, - "which": { + "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, - "requires": { + "dependencies": { "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" } }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true + "node_modules/wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "optional": true, + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "node_modules/windmill-parser-wasm-go": { + "version": "1.397.2", + "resolved": "https://registry.npmjs.org/windmill-parser-wasm-go/-/windmill-parser-wasm-go-1.397.2.tgz", + "integrity": "sha512-je5X7nsbudwlZL6QLpA/s1fwTip0Xmcc8c8eciJjK9IY6JZd2s8IRmtgVb3MB1ppQ4poCzypeqpYcvlL4MOGlg==" + }, + "node_modules/windmill-parser-wasm-php": { + "version": "1.397.2", + "resolved": "https://registry.npmjs.org/windmill-parser-wasm-php/-/windmill-parser-wasm-php-1.397.2.tgz", + "integrity": "sha512-+ys3e84UojguDxSJurMT/T2m0XGYUyE59+TbIUteWjxyMnSoynC3GhYvWU3FX0yojwiLOdDaUZkGlkNy8Fl3+w==" + }, + "node_modules/windmill-parser-wasm-py": { + "version": "1.397.2", + "resolved": "https://registry.npmjs.org/windmill-parser-wasm-py/-/windmill-parser-wasm-py-1.397.2.tgz", + "integrity": "sha512-gnqQZTRmQi2s3ok9IyixTHGK3MOfJpW2+nnH4W8vXGj1VQMGoXScaZA1W8Nt6/lFy1l+NkAX48mD+nU5s/xbJA==" + }, + "node_modules/windmill-parser-wasm-regex": { + "version": "1.397.2", + "resolved": "https://registry.npmjs.org/windmill-parser-wasm-regex/-/windmill-parser-wasm-regex-1.397.2.tgz", + "integrity": "sha512-4DhxElRiz9FuwTcMMBhIfk+9cD/oA2+Nf0EBh5BZ1VK4EOD1BVutkTyzWyWP6J+Zqv4m91VyfdVK0Td0qXl+cw==" }, - "wordwrap": { + "node_modules/windmill-parser-wasm-rust": { + "version": "1.397.2", + "resolved": "https://registry.npmjs.org/windmill-parser-wasm-rust/-/windmill-parser-wasm-rust-1.397.2.tgz", + "integrity": "sha512-7tjekDV2yuqqSjpPF/BfRzaXUwT5eckMWCuq4o18UzChOOeeA4U5goY4INBOGFzYR89m9AeMhwT1IM71nOGrIA==" + }, + "node_modules/windmill-parser-wasm-ts": { + "version": "1.397.2", + "resolved": "https://registry.npmjs.org/windmill-parser-wasm-ts/-/windmill-parser-wasm-ts-1.397.2.tgz", + "integrity": "sha512-nspEC1zLfrvvh6ta8YSjKo99lDfFvsXh7rV2mmpTAmc2ZzzyuVDvW5Cm0Wmo8Ww3seO+oDi/v3jy+8QX8pIzwA==" + }, + "node_modules/windmill-parser-wasm-yaml": { + "version": "1.398.1", + "resolved": "https://registry.npmjs.org/windmill-parser-wasm-yaml/-/windmill-parser-wasm-yaml-1.398.1.tgz", + "integrity": "sha512-f5MCJ9PVLrJQBcVuxnTlZNw561HIJkMqX/76HLgOqKehNpO7gboZyaHx0txUJP50MIDv/IMpn0SD6S7DZnynEg==" + }, + "node_modules/windmill-sql-datatype-parser-wasm": { + "version": "1.318.0", + "resolved": "https://registry.npmjs.org/windmill-sql-datatype-parser-wasm/-/windmill-sql-datatype-parser-wasm-1.318.0.tgz", + "integrity": "sha512-jlRw6abUJi4vDm+7xDSjhb7dvm4tC+lBXv0EEwn52Veadwcl5EB1yGHb9XVqQEfcYr9JU62xfJlN6DoGQmYE/g==" + }, + "node_modules/wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", "dev": true }, - "wrappy": { + "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "devOptional": true }, - "write-file-atomic": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.1.tgz", - "integrity": "sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ==", + "node_modules/write-file-atomic": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", + "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", "dev": true, + "license": "ISC", "peer": true, - "requires": { + "dependencies": { "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" + "signal-exit": "^4.0.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/write-file-atomic/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "peer": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/ws": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", + "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", + "optional": true, + "dependencies": { + "async-limiter": "~1.0.0" } }, - "xtend": { + "node_modules/xml-utils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/xml-utils/-/xml-utils-1.7.0.tgz", + "integrity": "sha512-bWB489+RQQclC7A9OW8e5BzbT8Tu//jtAOvkYwewFr+Q9T9KDGvfzC1lp0pYPEQPEoPQLDkmxkepSC/2gIAZGw==" + }, + "node_modules/xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true + "optional": true, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y-leveldb": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/y-leveldb/-/y-leveldb-0.1.2.tgz", + "integrity": "sha512-6ulEn5AXfXJYi89rXPEg2mMHAyyw8+ZfeMMdOtBbV8FJpQ1NOrcgi6DTAcXof0dap84NjHPT2+9d0rb6cFsjEg==", + "optional": true, + "dependencies": { + "level": "^6.0.1", + "lib0": "^0.2.31" + }, + "funding": { + "type": "GitHub Sponsors ❤", + "url": "https://github.com/sponsors/dmonad" + }, + "peerDependencies": { + "yjs": "^13.0.0" + } + }, + "node_modules/y-monaco": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/y-monaco/-/y-monaco-0.1.5.tgz", + "integrity": "sha512-zyTCMXtewIG+jP9JikJ5NN3/jLCqpkDY3titPIGBrmVeZsJr6qVeFVP3hPfmWOPHGlGZ39KCIzXrC7mFZRNFIw==", + "dependencies": { + "lib0": "^0.2.43" + }, + "engines": { + "node": ">=12.0.0", + "npm": ">=6.0.0" + }, + "peerDependencies": { + "monaco-editor": ">=0.20.0", + "yjs": "^13.3.1" + } + }, + "node_modules/y-protocols": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/y-protocols/-/y-protocols-1.0.6.tgz", + "integrity": "sha512-vHRF2L6iT3rwj1jub/K5tYcTT/mEYDUppgNPXwp8fmLpui9f7Yeq3OEtTLVF012j39QnV+KEQpNqoN7CWU7Y9Q==", + "dependencies": { + "lib0": "^0.2.85" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=8.0.0" + }, + "funding": { + "type": "GitHub Sponsors ❤", + "url": "https://github.com/sponsors/dmonad" + }, + "peerDependencies": { + "yjs": "^13.0.0" + } + }, + "node_modules/y-websocket": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/y-websocket/-/y-websocket-1.5.4.tgz", + "integrity": "sha512-Y3021uy0anOIHqAPyAZbNDoR05JuMEGjRNI8c+K9MHzVS8dWoImdJUjccljAznc8H2L7WkIXhRHZ1igWNRSgPw==", + "license": "MIT", + "dependencies": { + "lib0": "^0.2.52", + "lodash.debounce": "^4.0.8", + "y-protocols": "^1.0.5" + }, + "bin": { + "y-websocket": "bin/server.js", + "y-websocket-server": "bin/server.js" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=8.0.0" + }, + "funding": { + "type": "GitHub Sponsors ❤", + "url": "https://github.com/sponsors/dmonad" + }, + "optionalDependencies": { + "ws": "^6.2.1", + "y-leveldb": "^0.1.0" + }, + "peerDependencies": { + "yjs": "^13.5.6" + } }, - "yallist": { + "node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, - "yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true + "node_modules/yaml": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz", + "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==", + "engines": { + "node": ">= 14" + } }, - "yargs-parser": { + "node_modules/yargs-parser": { "version": "20.2.9", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true, - "peer": true + "license": "ISC", + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yjs": { + "version": "13.6.8", + "resolved": "https://registry.npmjs.org/yjs/-/yjs-13.6.8.tgz", + "integrity": "sha512-ZPq0hpJQb6f59B++Ngg4cKexDJTvfOgeiv0sBc4sUm8CaBWH7OQC4kcCgrqbjJ/B2+6vO49exvTmYfdlPtcjbg==", + "dependencies": { + "lib0": "^0.2.74" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=8.0.0" + }, + "funding": { + "type": "GitHub Sponsors ❤", + "url": "https://github.com/sponsors/dmonad" + } + }, + "node_modules/yocto-queue": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.1.1.tgz", + "integrity": "sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==", + "license": "MIT", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yootils": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/yootils/-/yootils-0.3.1.tgz", + "integrity": "sha512-A7AMeJfGefk317I/3tBoUYRcDcNavKEkpiPN/nQsBz/viI2GvT7BtrqdPD6rGqBFN8Ax7v4obf+Cl32JF9DDVw==", + "dev": true + }, + "node_modules/zstddec": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/zstddec/-/zstddec-0.1.0.tgz", + "integrity": "sha512-w2NTI8+3l3eeltKAdK8QpiLo/flRAr2p8AGeakfMZOXBxOg9HIu4LVDxBi81sYgVhFhdJjv1OrB5ssI8uFPoLg==" + }, + "node_modules/zwitch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", + "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } } } } diff --git a/frontend/package.json b/frontend/package.json index efd83e13c4449..c37d6e73ed013 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,58 +1,462 @@ { - "name": "windmill", - "version": "1.5.0", + "name": "windmill-components", + "version": "1.402.1", "scripts": { - "dev": "svelte-kit dev", - "build": "svelte-kit build", - "preview": "svelte-kit preview", - "check": "svelte-check --tsconfig ./tsconfig.json", + "dev": "vite dev", + "build": "vite build", + "preview": "vite preview", + "check": "svelte-check --tsconfig ./tsconfig.json --threshold warning", "check:watch": "svelte-check --tsconfig ./tsconfig.json --watch", "lint": "prettier --ignore-path .gitignore --check --plugin-search-dir=. . && eslint --ignore-path .gitignore .", "format": "prettier --ignore-path .gitignore --write --plugin-search-dir=. .", - "generate-backend-client": "openapi --input ../backend/openapi.yaml --output ./src/gen --useOptions" + "package": "svelte-package -o package", + "generate-backend-client": "openapi-ts --input ../backend/windmill-api/openapi.yaml --output ./src/lib/gen --useOptions --enums javascript --format false", + "generate-backend-client-mac": "openapi-ts --input ../backend/windmill-api/openapi.yaml --output ./src/lib/gen --useOptions --enums javascript", + "pretest": "tsc --incremental -p tests/tsconfig.json", + "test": "playwright test --config=tests-out/playwright.config.js", + "filter-classes": "node filterTailwindClasses.js" }, "devDependencies": { - "@sveltejs/adapter-node": "^1.0.0-next.55", - "@sveltejs/adapter-static": "^1.0.0-next.21", - "@sveltejs/kit": "next", - "@tailwindcss/forms": "^0.4.0", - "@tailwindcss/typography": "^0.5.0", - "@typescript-eslint/eslint-plugin": "^4.31.1", - "@typescript-eslint/parser": "^4.31.1", - "autoprefixer": "^10.4.1", - "cssnano": "^5.0.8", - "eslint": "^7.32.0", - "eslint-config-prettier": "^8.3.0", - "eslint-plugin-svelte3": "^3.2.1", - "openapi-typescript-codegen": "^0.11.8", - "postcss": "^8.4.5", - "postcss-load-config": "^3.1.0", - "prettier": "^2.4.1", - "prettier-plugin-svelte": "^2.4.0", - "simple-svelte-autocomplete": "^2.2.4", - "stylelint-config-recommended": "^6.0.0", - "svelte": "^3.42.6", - "svelte-awesome": "^2.4.2", - "svelte-check": "^2.2.6", - "svelte-highlight": "^5.1.3", - "svelte-preprocess": "^4.9.8", - "tailwindcss": "^3.0.11", - "tslib": "^2.3.1", - "typescript": "^4.4.3" + "@floating-ui/core": "^1.3.1", + "@hey-api/openapi-ts": "^0.43.0", + "@playwright/test": "^1.34.3", + "@rgossiaux/svelte-headlessui": "^2.0.0", + "@sveltejs/adapter-static": "^3.0.0", + "@sveltejs/kit": "^2.0.0", + "@sveltejs/package": "^2.2.2", + "@sveltejs/vite-plugin-svelte": "^3.0.0", + "@tailwindcss/forms": "^0.5.3", + "@tailwindcss/typography": "^0.5.8", + "@types/d3": "^7.4.0", + "@types/d3-zoom": "^3.0.3", + "@types/lodash": "^4.14.195", + "@types/node": "^20.3.3", + "@types/vscode": "^1.83.5", + "@typescript-eslint/eslint-plugin": "^5.59.8", + "@typescript-eslint/parser": "^5.60.0", + "@windmill-labs/esbuild-import-meta-url-plugin": "0.0.0-semantic-release", + "@zerodevx/svelte-toast": "^0.9.5", + "autoprefixer": "^10.4.13", + "cssnano": "^6.0.1", + "d3-dag": "^0.11.5", + "eslint": "^8.47.0", + "eslint-config-prettier": "^8.6.0", + "eslint-plugin-svelte": "^2.33.1", + "path-browserify": "^1.0.1", + "postcss": "^8.4.24", + "postcss-load-config": "^4.0.1", + "prettier": "^2.8.8", + "prettier-plugin-svelte": "^2.10.1", + "simple-svelte-autocomplete": "^2.5.1", + "style-to-object": "^0.4.1", + "stylelint-config-recommended": "^13.0.0", + "svelte": "^4.2.19", + "svelte-awesome-color-picker": "^3.0.4", + "svelte-check": "^3.4.3", + "svelte-floating-ui": "^1.5.8", + "svelte-highlight": "^7.6.0", + "svelte-multiselect": "^10.0.0", + "svelte-popperjs": "^1.3.2", + "svelte-preprocess": "^5.0.1", + "svelte-range-slider-pips": "^2.3.1", + "svelte-splitpanes": "^0.8.0", + "svelte2tsx": "^0.6.16", + "tailwindcss": "^3.4.1", + "tslib": "^2.6.1", + "typescript": "^5.1.3", + "vite": "^5", + "vite-plugin-circular-dependency": "^0.2.1", + "vite-plugin-mkcert": "^1.17.5", + "yootils": "^0.3.1" + }, + "overrides": { + "@rgossiaux/svelte-headlessui": { + "svelte": "$svelte" + }, + "monaco-graphql": { + "monaco-editor": "$monaco-editor" + }, + "svelte-chartjs": { + "svelte": "$svelte" + } }, "type": "module", "dependencies": { - "@codingame/monaco-jsonrpc": "^0.3.1", - "@codingame/monaco-languageclient": "^0.17.0", - "@fortawesome/free-brands-svg-icons": "^5.15.4", - "@fortawesome/free-solid-svg-icons": "^5.15.4", - "@types/vscode": "^1.63.0", - "@zerodevx/svelte-toast": "^0.6.2", - "fuse.js": "^6.4.6", - "highlight.js": "^11.5.1", - "monaco-editor": "^0.30.0", - "svelte-awesome": "^2.4.2", - "svelte-markdown": "^0.2.1", - "svelte-split-pane": "^0.1.2" + "@aws-crypto/sha256-js": "^4.0.0", + "@codingame/monaco-vscode-configuration-service-override": "~8.0.2", + "@codingame/monaco-vscode-files-service-override": "~8.0.2", + "@codingame/monaco-vscode-keybindings-service-override": "~8.0.2", + "@codingame/monaco-vscode-lifecycle-service-override": "~8.0.2", + "@codingame/monaco-vscode-localization-service-override": "~8.0.2", + "@codingame/monaco-vscode-standalone-css-language-features": "~8.0.2", + "@codingame/monaco-vscode-standalone-json-language-features": "~8.0.2", + "@codingame/monaco-vscode-standalone-languages": "~8.0.2", + "@codingame/monaco-vscode-standalone-typescript-language-features": "~8.0.2", + "@json2csv/plainjs": "^7.0.6", + "@leeoniya/ufuzzy": "^1.0.8", + "@popperjs/core": "^2.11.6", + "@redocly/json-to-json-schema": "^0.0.1", + "@tanstack/svelte-table": "^8.9.9", + "@windmill-labs/svelte-dnd-action": "latest", + "@xyflow/svelte": "^0.1.15", + "ag-charts-community": "^9.0.1", + "ag-charts-enterprise": "^9.0.1", + "ag-grid-community": "^31.0.0", + "ag-grid-enterprise": "^31.0.0", + "ansi_up": "^5.2.1", + "chart.js": "^4.3.0", + "chartjs-adapter-date-fns": "^3.0.0", + "chartjs-plugin-zoom": "^2.0.0", + "d3-zoom": "^3.0.0", + "date-fns": "^2.30.0", + "diff": "^5.1.0", + "driver.js": "^1.3.0", + "esm-env": "^1.0.0", + "fast-equals": "^5.0.1", + "graphql": "^16.7.1", + "hash-sum": "^2.0.0", + "highlight.js": "^11.8.0", + "lucide-svelte": "^0.293.0", + "minimatch": "^10.0.1", + "monaco-editor": "npm:@codingame/monaco-vscode-editor-api@~8.0.2", + "monaco-editor-wrapper": "^5.5.2", + "monaco-graphql": "^1.6.0", + "monaco-languageclient": "~8.8.2", + "monaco-vim": "^0.4.1", + "ol": "^7.4.0", + "openai": "^4.57.2", + "p-limit": "^6.1.0", + "pdfjs-dist": "^3.8.162", + "quill": "^1.3.7", + "rfc4648": "^1.5.3", + "svelte-carousel": "^1.0.25", + "svelte-chartjs": "^3.1.5", + "svelte-exmarkdown": "^3.0.5", + "svelte-infinite-loading": "^1.4.0", + "svelte-tiny-virtual-list": "^2.0.5", + "tailwind-merge": "^1.13.2", + "vscode": "npm:@codingame/monaco-vscode-api@~8.0.2", + "vscode-languageclient": "~9.0.1", + "vscode-uri": "~3.0.8", + "vscode-ws-jsonrpc": "~3.3.2", + "windmill-parser-wasm-go": "^1.397.2", + "windmill-parser-wasm-php": "^1.397.2", + "windmill-parser-wasm-py": "^1.397.2", + "windmill-parser-wasm-regex": "^1.397.2", + "windmill-parser-wasm-rust": "^1.397.2", + "windmill-parser-wasm-ts": "^1.397.2", + "windmill-parser-wasm-yaml": "^1.398.1", + "windmill-sql-datatype-parser-wasm": "^1.318.0", + "y-monaco": "^0.1.4", + "y-websocket": "^1.5.4", + "yaml": "^2.3.4", + "yjs": "^13.6.7" + }, + "peerDependencies": { + "svelte": "^4.0.0" + }, + "exports": { + "./package.json": "./package.json", + ".": { + "types": "./dist/index.d.ts", + "svelte": "./dist/index.js" + }, + "./assets/app.css": "./package/assets/app.css", + "./components/TestJobLoader.svelte": { + "types": "./package/components/TestJobLoader.svelte.d.ts", + "svelte": "./package/components/TestJobLoader.svelte", + "default": "./package/components/TestJobLoader.svelte" + }, + "./components/common/kbd/Kbd.svelte": { + "types": "./package/components/common/kbd/Kbd.svelte.d.ts", + "svelte": "./package/components/common/kbd/Kbd.svelte", + "default": "./package/components/common/kbd/Kbd.svelte" + }, + "./components/icons/WindmillIcon.svelte": { + "types": "./package/components/icons/WindmillIcon.d.ts", + "svelte": "./package/components/icons/WindmillIcon.svelte", + "default": "./package/components/icons/WindmillIcon.svelte" + }, + "./components/IconedResourceType.svelte": { + "types": "./package/components/IconedResourceType.svelte.d.ts", + "svelte": "./package/components/IconedResourceType.svelte", + "default": "./package/components/IconedResourceType.svelte" + }, + "./components/common/drawer/Drawer.svelte": { + "types": "./package/components/common/drawer/Drawer.svelte.d.ts", + "svelte": "./package/components/common/drawer/Drawer.svelte", + "default": "./package/components/common/drawer/Drawer.svelte" + }, + "./components/common/drawer/DrawerContent.svelte": { + "types": "./package/components/common/drawer/DrawerContent.svelte.d.ts", + "svelte": "./package/components/common/drawer/DrawerContent.svelte", + "default": "./package/components/common/drawer/DrawerContent.svelte" + }, + "./components/common/button/Button.svelte": { + "types": "./package/components/common/button/Button.svelte.d.ts", + "svelte": "./package/components/common/button/Button.svelte", + "default": "./package/components/common/button/Button.svelte" + }, + "./components/RadioButton.svelte": { + "types": "./package/components/RadioButton.svelte.d.ts", + "svelte": "./package/components/RadioButton.svelte", + "default": "./package/components/RadioButton.svelte" + }, + "./components/Toggle.svelte": { + "types": "./package/components/Toggle.svelte.d.ts", + "svelte": "./package/components/Toggle.svelte", + "default": "./package/components/Toggle.svelte" + }, + "./components/common/tabs/Tabs.svelte": { + "types": "./package/components/common/tabs/Tabs.svelte.d.ts", + "svelte": "./package/components/common/tabs/Tabs.svelte", + "default": "./package/components/common/tabs/Tabs.svelte" + }, + "./components/common/tabs/Tab.svelte": { + "types": "./package/components/common/tabs/Tab.svelte.d.ts", + "svelte": "./package/components/common/tabs/Tab.svelte", + "default": "./package/components/common/tabs/Tab.svelte" + }, + "./components/common/alert/Alert.svelte": { + "types": "./package/components/common/alert/Alert.svelte.d.ts", + "svelte": "./package/components/common/alert/Alert.svelte", + "default": "./package/components/common/alert/Alert.svelte" + }, + "./components/apps/editor/AppPreview.svelte": { + "types": "./package/components/apps/editor/AppPreview.svelte.d.ts", + "svelte": "./package/components/apps/editor/AppPreview.svelte", + "default": "./package/components/apps/editor/AppPreview.svelte" + }, + "./components/FlowViewer.svelte": { + "types": "./package/components/FlowViewer.svelte.d.ts", + "svelte": "./package/components/FlowViewer.svelte", + "default": "./package/components/FlowViewer.svelte" + }, + "./components/FlowStatusViewer.svelte": { + "types": "./package/components/FlowStatusViewer.svelte.d.ts", + "svelte": "./package/components/FlowStatusViewer.svelte", + "default": "./package/components/FlowStatusViewer.svelte" + }, + "./components/FlowBuilder.svelte": { + "types": "./package/components/FlowBuilder.svelte.d.ts", + "svelte": "./package/components/FlowBuilder.svelte", + "default": "./package/components/FlowBuilder.svelte" + }, + "./components/ScriptBuilder.svelte": { + "types": "./package/components/ScriptBuilder.svelte.d.ts", + "svelte": "./package/components/ScriptBuilder.svelte", + "default": "./package/components/ScriptBuilder.svelte" + }, + "./components/FlowEditor.svelte": { + "types": "./package/components/flows/FlowEditor.svelte.d.ts", + "svelte": "./package/components/flows/FlowEditor.svelte", + "default": "./package/components/flows/FlowEditor.svelte" + }, + "./components/SchemaViewer.svelte": { + "types": "./package/components/SchemaViewer.svelte.d.ts", + "svelte": "./package/components/SchemaViewer.svelte", + "default": "./package/components/SchemaViewer.svelte" + }, + "./components/SchemaForm.svelte": { + "types": "./package/components/SchemaForm.svelte.d.ts", + "svelte": "./package/components/SchemaForm.svelte", + "default": "./package/components/SchemaForm.svelte" + }, + "./components/EditableSchemaWrapper.svelte": { + "types": "./package/components/schema/EditableSchemaWrapper.svelte.d.ts", + "svelte": "./package/components/schema/EditableSchemaWrapper.svelte", + "default": "./package/components/schema/EditableSchemaWrapper.svelte" + }, + "./components/ResourceEditor.svelte": { + "types": "./package/components/ResourceEditor.svelte.d.ts", + "svelte": "./package/components/ResourceEditor.svelte", + "default": "./package/components/ResourceEditor.svelte" + }, + "./components/SchemaEditor.svelte": { + "types": "./package/components/EditableSchemaForm.svelte.d.ts", + "svelte": "./package/components/EditableSchemaForm.svelte", + "default": "./package/components/EditableSchemaForm.svelte" + }, + "./components/ScriptEditor.svelte": { + "types": "./package/components/ScriptEditor.svelte.d.ts", + "svelte": "./package/components/ScriptEditor.svelte", + "default": "./package/components/ScriptEditor.svelte" + }, + "./components/scriptEditor/LogPanel.svelte": { + "types": "./package/components/scriptEditor/LogPanel.svelte.d.ts", + "svelte": "./package/components/scriptEditor/LogPanel.svelte", + "default": "./package/components/scriptEditor/LogPanel.svelte" + }, + "./common": { + "types": "./package/common.d.ts", + "default": "./package/common.js" + }, + "./utils": { + "types": "./package/utils.d.ts", + "default": "./package/utils.js" + }, + "./infer": { + "types": "./package/infer.d.ts", + "default": "./package/infer.js" + }, + "./stores": { + "types": "./package/stores.d.ts", + "default": "./package/stores.js" + }, + "./gen": { + "types": "./package/gen/index.d.ts", + "default": "./package/gen/index.js" + }, + "./components/flows/flowStore": { + "types": "./package/components/flows/flowStore.d.ts", + "default": "./package/components/flows/flowStore.js" + }, + "./components/icons": { + "types": "./package/components/icons/index.d.ts", + "svelte": "./package/components/icons/index.js", + "default": "./package/components/icons/index.js" + }, + "./components/apps/inputType": { + "types": "./package/components/apps/inputType.d.ts", + "default": "./package/components/apps/inputType.js" + }, + "./components/apps/types": { + "types": "./package/components/apps/types.d.ts", + "default": "./package/components/apps/types.js" + }, + "./components/apps/editor/inlineScriptsPanel/utils": { + "types": "./package/components/apps/editor/inlineScriptsPanel/utils.d.ts", + "default": "./package/components/apps/editor/inlineScriptsPanel/utils.js" + }, + "./gen/core/OpenAPI": { + "types": "./package/gen/core/OpenAPI.d.ts", + "default": "./package/gen/core/OpenAPI.js" + }, + "./components/DropdownV2.svelte": { + "types": "./package/components/DropdownV2.svelte.d.ts", + "svelte": "./package/components/DropdownV2.svelte", + "default": "./package/components/DropdownV2.svelte" + } + }, + "files": [ + "dist", + "package" + ], + "license": "AGPL-3.0", + "svelte": "./dist/index.js", + "typesVersions": { + ">4.0": { + "components/IconedResourceType.svelte": [ + "./package/components/IconedResourceType.svelte.d.ts" + ], + "components/TestJobLoader.svelte": [ + "./package/components/TestJobLoader.svelte.d.ts" + ], + "components/SchemaForm.svelte": [ + "./package/components/SchemaForm.svelte.d.ts" + ], + "components/icons/WindmillIcon.svelte": [ + "./package/components/icons/WindmillIcon.svelte.d.ts" + ], + "components/scriptEditor/LogPanel.svelte": [ + "./package/components/scriptEditor/LogPanel.svelte.d.ts" + ], + "components/ScriptEditor.svelte": [ + "./package/components/ScriptEditor.svelte.d.ts" + ], + "components/common/kbd/Kbd.svelte": [ + "./package/components/common/kbd/Kbd.svelte.d.ts" + ], + "components/common/drawer/Drawer.svelte": [ + "./package/components/common/drawer/Drawer.svelte.d.ts" + ], + "components/common/drawer/DrawerContent.svelte": [ + "./package/components/common/drawer/DrawerContent.svelte.d.ts" + ], + "components/common/button/Button.svelte": [ + "./package/components/common/button/Button.svelte.d.ts" + ], + "components/RadioButton.svelte": [ + "./package/components/RadioButton.svelte.d.ts" + ], + "components/Toggle.svelte": [ + "./package/components/Toggle.svelte.d.ts" + ], + "components/common/tabs/Tabs.svelte": [ + "./package/components/common/tabs/Tabs.svelte.d.ts" + ], + "components/common/tabs/Tab.svelte": [ + "./package/components/common/tabs/Tab.svelte.d.ts" + ], + "components/common/alert/Alert.svelte": [ + "./package/components/common/alert/Alert.svelte.d.ts" + ], + "components/apps/editor/AppPreview.svelte": [ + "./package/components/apps/editor/AppPreview.svelte.d.ts" + ], + "components/FlowViewer.svelte": [ + "./package/components/FlowViewer.svelte.d.ts" + ], + "components/FlowStatusViewer.svelte": [ + "./package/components/FlowStatusViewer.svelte.d.ts" + ], + "components/FlowBuilder.svelte": [ + "./package/components/FlowBuilder.svelte.d.ts" + ], + "components/ScriptBuilder.svelte": [ + "./package/components/ScriptBuilder.svelte.d.ts" + ], + "components/FlowEditor.svelte": [ + "./package/components/flows/FlowEditor.svelte.d.ts" + ], + "components/SchemaViewer.svelte": [ + "./package/components/SchemaViewer.svelte.d.ts" + ], + "components/SchemaEditor.svelte": [ + "./package/components/SchemaEditor.svelte.d.ts" + ], + "components/EditableSchemaWrapper.svelte": [ + "./package/components/schema/EditableSchemaWrapper.svelte.d.ts" + ], + "utils": [ + "./package/utils.d.ts" + ], + "infer": [ + "./package/infer.d.ts" + ], + "common": [ + "./package/common.d.ts" + ], + "stores": [ + "./package/stores.d.ts" + ], + "gen": [ + "./package/gen/index.d.ts" + ], + "components/flows/flowStore": [ + "./package/components/flows/flowStore.d.ts" + ], + "components/icons": [ + "./package/components/icons/index.d.ts" + ], + "components/apps/inputType": [ + "./package/components/apps/inputType.d.ts" + ], + "components/apps/types": [ + "./package/components/apps/types.d.ts" + ], + "components/apps/editor/inlineScriptsPanel/utils": [ + "./package/components/apps/editor/inlineScriptsPanel/utils.d.ts" + ], + "gen/core/OpenAPI": [ + "./package/gen/core/OpenAPI.d.ts" + ], + "components/DropdownV2.svelte": [ + "./package/components/DropdownV2.svelte.d.ts" + ] + } + }, + "optionalDependencies": { + "fsevents": "^2.3.3" } } diff --git a/frontend/postcss.config.cjs b/frontend/postcss.config.cjs index 796632e09cff5..ef4ca74c136f0 100644 --- a/frontend/postcss.config.cjs +++ b/frontend/postcss.config.cjs @@ -1,9 +1,9 @@ -const tailwindcss = require('tailwindcss'); -const autoprefixer = require('autoprefixer'); -const cssnano = require('cssnano'); +const tailwindcss = require('tailwindcss') +const autoprefixer = require('autoprefixer') +const cssnano = require('cssnano') -const mode = process.env.NODE_ENV; -const dev = mode === 'development'; +const mode = process.env.NODE_ENV +const dev = mode === 'development' const config = { plugins: [ @@ -16,6 +16,6 @@ const config = { preset: 'default' }) ] -}; +} -module.exports = config; +module.exports = config diff --git a/frontend/publish.sh b/frontend/publish.sh new file mode 100755 index 0000000000000..b97332f60fe52 --- /dev/null +++ b/frontend/publish.sh @@ -0,0 +1,4 @@ +npm run package +sed -i -e 's/windmill/windmill-components/g' package.json +npm publish +sed -i -e 's/windmill-components/windmill/g' package.json diff --git a/frontend/res.json b/frontend/res.json new file mode 100644 index 0000000000000..4c89aae894600 --- /dev/null +++ b/frontend/res.json @@ -0,0 +1 @@ +{"started":true,"success":true,"completed":true,"result":""} \ No newline at end of file diff --git a/frontend/src/.d.ts b/frontend/src/.d.ts index a6f7d32d1eedc..aba6221e1c5d4 100644 --- a/frontend/src/.d.ts +++ b/frontend/src/.d.ts @@ -1,5 +1,5 @@ declare namespace svelte.JSX { interface DOMAttributes { - onclick_outside?: CompositionEventHandler; + onclick_outside?: CompositionEventHandler } } diff --git a/frontend/src/app.css b/frontend/src/app.css deleted file mode 100644 index 6f0bd1cddb8e6..0000000000000 --- a/frontend/src/app.css +++ /dev/null @@ -1,146 +0,0 @@ -/* Write your global styles here, in PostCSS syntax */ -@tailwind base; -@tailwind components; -@tailwind utilities; - -@layer base { - h1 { - @apply text-2xl; - @apply sm:pb-4 font-semibold; - } - - h2 { - @apply text-xl; - @apply text-gray-700; - } - - a { - @apply text-blue-500; - } - - #table-custom th { - @apply py-3.5 text-left text-sm font-semibold text-gray-900 capitalize; - } - - #table-custom td { - @apply py-4 text-sm text-gray-700; - } - - #table-custom tbody { - @apply divide-y divide-gray-200; - } - - .dropdown { - @apply rounded-sm; - } - - input[type='text'], - textarea, - select { - @apply text-sm; - } - - .text-2xs { - font-size: 0.7rem; - } - - .commit-hash { - @apply text-2xs; - @apply text-gray-500; - @apply bg-gray-200; - @apply font-mono; - } - - .default-button { - /*this styling does not impact the Dropdown component */ - @apply bg-blue-500; - @apply hover:bg-blue-700; - @apply text-white; - @apply font-bold; - @apply py-1 px-2; - @apply border rounded; - @apply w-min; - @apply min-w-max; - @apply text-sm; - } - - .default-button-disabled { - /*this styling does not impact the Dropdown component */ - @apply bg-gray-100; - @apply text-gray-300; - @apply font-bold; - @apply py-1 px-2; - @apply border rounded; - @apply w-min; - @apply min-w-max; - @apply text-sm; - } - - .default-input { - @apply block; - @apply w-full; - @apply py-1; - @apply px-2; - @apply mt-1; - @apply rounded-md; - @apply border; - @apply border-gray-300; - @apply shadow-sm; - @apply text-sm; - } - - .input-error { - @apply border-red-500 !important; - } - - input[disabled], - input:disabled, - textarea[disabled], - textarea:disabled { - @apply bg-gray-100 !important; - } - - button:disabled, - button[disabled], - a.disabled { - /*this styling does not impact the Dropdown component */ - @apply bg-gray-100 !important; - @apply text-gray-500 !important; - @apply border-none !important; - cursor: not-allowed !important; - pointer-events: none !important; - } - - button:disabled svg, - button[disabled] svg, - a.disabled svg { - /*this styling does not impact the Dropdown component */ - @apply text-gray-500 !important; - } - - .default-button-secondary { - @apply items-center py-1 px-2; - @apply rounded bg-transparent text-blue-500 border border-blue-500 font-normal; - @apply hover:bg-transparent hover:border-blue-700 hover:text-blue-700; - @apply border rounded; - @apply w-min; - @apply min-w-max; - @apply text-sm; - } - - input, - input[type='date'], - input[type='text'], - input[type='number'], - input[type='datetime-local'], - select, - textarea, - textarea[type='text'] { - @apply block; - @apply w-full py-1 px-2; - @apply border rounded-md border-gray-300; - @apply shadow-sm; - @apply focus:ring focus:ring-indigo-100 focus:ring-opacity-50; - @apply text-sm; - } -} diff --git a/frontend/src/app.d.ts b/frontend/src/app.d.ts new file mode 100644 index 0000000000000..1887708a00a7a --- /dev/null +++ b/frontend/src/app.d.ts @@ -0,0 +1,16 @@ +/// + +// See https://kit.svelte.dev/docs/types#app +// for information about these interfaces +declare namespace App { + interface Stuff { + title: string? + } +} + +declare var __pkg__: { version: string } + +declare module 'svelte-highlight/languages/json' +declare module 'svelte-highlight/languages/python' +declare module 'svelte-highlight/languages/typescript' +declare module 'svelte-highlight/styles/github' diff --git a/frontend/src/app.html b/frontend/src/app.html index 0f005a615d5ca..7f93534ddb851 100644 --- a/frontend/src/app.html +++ b/frontend/src/app.html @@ -1,16 +1,90 @@ + + + + + + %sveltekit.head% + + +
+
+
+
+ + + + + + + + + + +
+ Loading... +
+
+ %sveltekit.body% +
+ diff --git a/frontend/src/common.js b/frontend/src/common.js deleted file mode 100644 index e69e2848bde3b..0000000000000 --- a/frontend/src/common.js +++ /dev/null @@ -1,24 +0,0 @@ -export function pathToMeta(path) { - const splitted = path.split('/'); - let ownerKind; - if (splitted[0] == 'g') { - ownerKind = 'group'; - } - else if (splitted[0] == 'u') { - ownerKind = 'user'; - } - else { - console.error('Not recognized owner:' + splitted[0]); - return { - ownerKind: 'user', - owner: '', - name: '' - }; - } - return { - ownerKind, - owner: splitted[1], - name: splitted.slice(2).join('/') - }; -} -//# sourceMappingURL=common.js.map \ No newline at end of file diff --git a/frontend/src/common.js.map b/frontend/src/common.js.map deleted file mode 100644 index 6fb7a3a89d419..0000000000000 --- a/frontend/src/common.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"common.js","sourceRoot":"","sources":["common.ts"],"names":[],"mappings":"AA0BA,MAAM,UAAU,UAAU,CAAC,IAAY;IACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAChC,IAAI,SAAoB,CAAA;IACxB,IAAI,QAAQ,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE;QACvB,SAAS,GAAG,OAAO,CAAA;KACnB;SAAM,IAAI,QAAQ,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE;QAC9B,SAAS,GAAG,MAAM,CAAA;KAClB;SAAM;QACN,OAAO,CAAC,KAAK,CAAC,uBAAuB,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAA;QACpD,OAAO;YACN,SAAS,EAAE,MAAM;YACjB,KAAK,EAAE,EAAE;YACT,IAAI,EAAE,EAAE;SACR,CAAA;KACD;IACD,OAAO;QACN,SAAS;QACT,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;QAClB,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;KACjC,CAAA;AACF,CAAC"} \ No newline at end of file diff --git a/frontend/src/common.ts b/frontend/src/common.ts deleted file mode 100644 index 6a4d2442c3f9c..0000000000000 --- a/frontend/src/common.ts +++ /dev/null @@ -1,47 +0,0 @@ -export type OwnerKind = 'group' | 'user' - -export type ActionKind = 'Create' | 'Update' | 'Delete' | 'Execute' - - -export interface SchemaProperty { - type: string | undefined - description: string - pattern?: string - default?: any - enum?: string[] - contentEncoding?: "base64" | "binary" - format?: string - items?: { type?: "string" | "number" } -} - -export type Schema = { - $schema: string - type: string - properties: { [name: string]: SchemaProperty } - required: string[] -} - -export type Meta = { ownerKind: OwnerKind; owner: string; name: string } - - -export function pathToMeta(path: string): Meta { - const splitted = path.split('/') - let ownerKind: OwnerKind - if (splitted[0] == 'g') { - ownerKind = 'group' - } else if (splitted[0] == 'u') { - ownerKind = 'user' - } else { - console.error('Not recognized owner:' + splitted[0]) - return { - ownerKind: 'user', - owner: '', - name: '' - } - } - return { - ownerKind, - owner: splitted[1], - name: splitted.slice(2).join('/') - } -} diff --git a/frontend/src/global.d.ts b/frontend/src/global.d.ts index 63908c66cfd4a..3cf0168db43ac 100644 --- a/frontend/src/global.d.ts +++ b/frontend/src/global.d.ts @@ -1 +1,10 @@ /// + +declare type Item = import('svelte-dnd-action').Item +declare type DndEvent = import('svelte-dnd-action').DndEvent +declare namespace svelte.JSX { + interface HTMLAttributes { + onconsider?: (event: CustomEvent> & { target: EventTarget & T }) => void + onfinalize?: (event: CustomEvent> & { target: EventTarget & T }) => void + } +} diff --git a/frontend/src/hooks.js b/frontend/src/hooks.js deleted file mode 100644 index 3bac3beb92ce3..0000000000000 --- a/frontend/src/hooks.js +++ /dev/null @@ -1,8 +0,0 @@ -/** @type {import('@sveltejs/kit').Handle} */ -export async function handle({ event, resolve }) { - const response = await resolve(event, { - ssr: false - }); - return response; -} -//# sourceMappingURL=hooks.js.map \ No newline at end of file diff --git a/frontend/src/hooks.js.map b/frontend/src/hooks.js.map deleted file mode 100644 index c15f57165782a..0000000000000 --- a/frontend/src/hooks.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"hooks.js","sourceRoot":"","sources":["hooks.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE;IAC3C,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,KAAK,EAAE;QAClC,GAAG,EAAE,KAAK;KACb,CAAC,CAAA;IAEF,OAAO,QAAQ,CAAA;AACnB,CAAC"} \ No newline at end of file diff --git a/frontend/src/hooks.ts b/frontend/src/hooks.ts index 91d05ba04647c..d473ce744b14a 100644 --- a/frontend/src/hooks.ts +++ b/frontend/src/hooks.ts @@ -1,8 +1,8 @@ /** @type {import('@sveltejs/kit').Handle} */ export async function handle({ event, resolve }) { - const response = await resolve(event, { - ssr: false - }) + const response = await resolve(event, { + ssr: false + }) - return response + return response } diff --git a/frontend/src/infer.js b/frontend/src/infer.js deleted file mode 100644 index 8acaae1bd4141..0000000000000 --- a/frontend/src/infer.js +++ /dev/null @@ -1,66 +0,0 @@ -import { ScriptService } from "./gen"; -import { sendUserToast } from "./utils"; -export async function inferArgs(code, schema) { - try { - const inferedSchema = await ScriptService.toJsonschema({ - requestBody: code - }); - schema.required = []; - const oldProperties = Object.assign({}, schema.properties); - schema.properties = {}; - for (const arg of inferedSchema.args) { - if (!(arg.name in oldProperties)) { - schema.properties[arg.name] = { description: '', type: '' }; - } - else { - schema.properties[arg.name] = oldProperties[arg.name]; - } - pythonToJsonSchemaType(arg.typ, schema.properties[arg.name]); - schema.properties[arg.name].default = arg.default; - if (!arg.has_default) { - schema.required.push(arg.name); - } - } - } - catch (err) { - console.error(err); - sendUserToast(`Could not infer schema: ${err.body ?? err}`, true); - } -} -function array_move(arr, fromIndex, toIndex) { - var element = arr[fromIndex]; - arr.splice(fromIndex, 1); - arr.splice(toIndex, 0, element); -} -function pythonToJsonSchemaType(t, s) { - if (t === 'int') { - s.type = 'integer'; - } - else if (t === 'float') { - s.type = 'number'; - } - else if (t === 'bool') { - s.type = 'boolean'; - } - else if (t === 'str') { - s.type = 'string'; - } - else if (t === 'dict') { - s.type = 'object'; - } - else if (t === 'list') { - s.type = 'array'; - } - else if (t === 'bytes') { - s.type = 'string'; - s.contentEncoding = 'base64'; - } - else if (t === 'datetime') { - s.type = 'string'; - s.format = 'date-time'; - } - else { - s.type = undefined; - } -} -//# sourceMappingURL=infer.js.map \ No newline at end of file diff --git a/frontend/src/infer.js.map b/frontend/src/infer.js.map deleted file mode 100644 index d63346eefb40d..0000000000000 --- a/frontend/src/infer.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"infer.js","sourceRoot":"","sources":["infer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAEvC,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAAY,EAAE,MAAc;IACxD,IAAI;QACA,MAAM,aAAa,GAAG,MAAM,aAAa,CAAC,YAAY,CAAC;YACnD,WAAW,EAAE,IAAI;SACpB,CAAC,CAAA;QACF,MAAM,CAAC,QAAQ,GAAG,EAAE,CAAA;QACpB,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,UAAU,CAAC,CAAA;QAC1D,MAAM,CAAC,UAAU,GAAG,EAAE,CAAA;QAEtB,KAAK,MAAM,GAAG,IAAI,aAAa,CAAC,IAAI,EAAE;YAClC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,aAAa,CAAC,EAAE;gBAC9B,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAA;aAC9D;iBAAM;gBACH,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;aACxD;YACD,sBAAsB,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAA;YAC5D,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,CAAA;YAEjD,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE;gBAClB,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;aACjC;SACJ;KACJ;IAAC,OAAO,GAAG,EAAE;QACV,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QAClB,aAAa,CAAC,2BAA2B,GAAG,CAAC,IAAI,IAAI,GAAG,EAAE,EAAE,IAAI,CAAC,CAAA;KACpE;AACL,CAAC;AAED,SAAS,UAAU,CAAI,GAAQ,EAAE,SAAiB,EAAE,OAAe;IAC/D,IAAI,OAAO,GAAG,GAAG,CAAC,SAAS,CAAC,CAAA;IAC5B,GAAG,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAA;IACxB,GAAG,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,EAAE,OAAO,CAAC,CAAA;AACnC,CAAC;AAED,SAAS,sBAAsB,CAAC,CAAS,EAAE,CAAiB;IACxD,IAAI,CAAC,KAAK,KAAK,EAAE;QACb,CAAC,CAAC,IAAI,GAAG,SAAS,CAAA;KACrB;SAAM,IAAI,CAAC,KAAK,OAAO,EAAE;QACtB,CAAC,CAAC,IAAI,GAAG,QAAQ,CAAA;KACpB;SAAM,IAAI,CAAC,KAAK,MAAM,EAAE;QACrB,CAAC,CAAC,IAAI,GAAG,SAAS,CAAA;KACrB;SAAM,IAAI,CAAC,KAAK,KAAK,EAAE;QACpB,CAAC,CAAC,IAAI,GAAG,QAAQ,CAAA;KACpB;SAAM,IAAI,CAAC,KAAK,MAAM,EAAE;QACrB,CAAC,CAAC,IAAI,GAAG,QAAQ,CAAA;KACpB;SAAM,IAAI,CAAC,KAAK,MAAM,EAAE;QACrB,CAAC,CAAC,IAAI,GAAG,OAAO,CAAA;KACnB;SAAM,IAAI,CAAC,KAAK,OAAO,EAAE;QACtB,CAAC,CAAC,IAAI,GAAG,QAAQ,CAAA;QACjB,CAAC,CAAC,eAAe,GAAG,QAAQ,CAAA;KAC/B;SAAM,IAAI,CAAC,KAAK,UAAU,EAAE;QACzB,CAAC,CAAC,IAAI,GAAG,QAAQ,CAAA;QACjB,CAAC,CAAC,MAAM,GAAG,WAAW,CAAA;KACzB;SAAM;QACH,CAAC,CAAC,IAAI,GAAG,SAAS,CAAA;KACrB;AACL,CAAC"} \ No newline at end of file diff --git a/frontend/src/infer.ts b/frontend/src/infer.ts deleted file mode 100644 index fae186cde2450..0000000000000 --- a/frontend/src/infer.ts +++ /dev/null @@ -1,61 +0,0 @@ -import type { Schema, SchemaProperty } from "./common" -import { ScriptService } from "./gen" -import { sendUserToast } from "./utils" - -export async function inferArgs(code: string, schema: Schema): Promise { - try { - const inferedSchema = await ScriptService.toJsonschema({ - requestBody: code - }) - schema.required = [] - const oldProperties = Object.assign({}, schema.properties) - schema.properties = {} - - for (const arg of inferedSchema.args) { - if (!(arg.name in oldProperties)) { - schema.properties[arg.name] = { description: '', type: '' } - } else { - schema.properties[arg.name] = oldProperties[arg.name] - } - pythonToJsonSchemaType(arg.typ, schema.properties[arg.name]) - schema.properties[arg.name].default = arg.default - - if (!arg.has_default) { - schema.required.push(arg.name) - } - } - } catch (err) { - console.error(err) - sendUserToast(`Could not infer schema: ${err.body ?? err}`, true) - } -} - -function array_move(arr: T[], fromIndex: number, toIndex: number) { - var element = arr[fromIndex] - arr.splice(fromIndex, 1) - arr.splice(toIndex, 0, element) -} - -function pythonToJsonSchemaType(t: string, s: SchemaProperty): void { - if (t === 'int') { - s.type = 'integer' - } else if (t === 'float') { - s.type = 'number' - } else if (t === 'bool') { - s.type = 'boolean' - } else if (t === 'str') { - s.type = 'string' - } else if (t === 'dict') { - s.type = 'object' - } else if (t === 'list') { - s.type = 'array' - } else if (t === 'bytes') { - s.type = 'string' - s.contentEncoding = 'base64' - } else if (t === 'datetime') { - s.type = 'string' - s.format = 'date-time' - } else { - s.type = undefined - } -} diff --git a/frontend/src/lib/assets/app.css b/frontend/src/lib/assets/app.css new file mode 100644 index 0000000000000..99bc17ae8eee8 --- /dev/null +++ b/frontend/src/lib/assets/app.css @@ -0,0 +1,147 @@ +/* Write your global styles here, in PostCSS syntax */ +@tailwind base; +@tailwind components; +@tailwind utilities; + +@layer base { + *, + ::before, + ::after { + @apply dark:border-gray-600; + } + + /* Chrome, Edge, and Safari */ + *::-webkit-scrollbar { + width: 5px; + height: 5px; + } + + /* + *::-webkit-scrollbar-track { + @apply bg-tertiary; + } + */ + + *::-webkit-scrollbar-thumb { + @apply bg-tertiary-inverse dark:bg-tertiary; + border-radius: 3px; + } + + @font-face { + font-family: 'Inter'; + src: url('/Inter-Variable.woff2') format('woff2'); + font-weight: 100 900; + font-display: swap; + } + + .prose-xs ul { + margin-top: 0.5rem; + list-style-type: '- '; + padding-left: 1.5rem; + } + + .prose ul { + margin-top: 1.5rem; + list-style-type: '- '; + padding-left: 3rem; + } + + .autocomplete-list-item-create { + @apply !text-primary-inverse !bg-surface-inverse; + } + + .autocomplete-list-item { + @apply !text-primary !bg-surface text-xs; + } + + .autocomplete-list-item.selected { + @apply !text-primary-inverse !bg-surface-inverse; + } + + .autocomplete-list-item.selected.confirmed { + @apply !text-primary-inverse !bg-surface-inverse; + } + + .autocomplete-list { + @apply !bg-surface; + } +} + +@layer utilities { + @variants responsive { + /* Hide scrollbar for Chrome, Safari and Opera */ + .no-scrollbar::-webkit-scrollbar { + display: none; + } + + /* Hide scrollbar for IE, Edge and Firefox */ + .no-scrollbar { + -ms-overflow-style: none; /* IE and Edge */ + scrollbar-width: none; /* Firefox */ + } + } +} + +.splitpanes--vertical > .splitpanes__pane { + transition: none !important; +} + +.splitpanes--horizontal > .splitpanes__pane { + transition: none !important; +} + +.monaco-workbench > .notifications-toasts.visible { + display: none !important; +} + +.monaco-editor .suggest-widget { + z-index: 10001 !important; +} + +svelte-virtual-list-row { + overflow: visible !important; +} + +svelte-virtual-list-contents > * + * { + border-top-width: 1px !important; + border-bottom-width: 0px !important; +} + +.monaco-editor textarea:focus { + box-shadow: none !important; +} + +.component-wrapper { + @apply rounded-component border overflow-hidden border-gray-300 dark:border-gray-600; +} + +.app-editor-input { + @apply rounded-component border border-gray-300 dark:border-gray-500 focus:border-gray-300 focus:dark:border-gray-500 focus:!ring-1 focus:!ring-blue-300; + @apply placeholder:text-gray-400 dark:placeholder:text-gray-200; + @apply bg-surface; + @apply disabled:placeholder:text-gray-200 disabled:placeholder:dark:text-gray-500 disabled:text-gray-200 disabled:dark:text-gray-500 disabled:border-gray-200 disabled:dark:border-gray-600; +} + +.nonmain-editor .cursor.monaco-mouse-cursor-text { + width: 1px !important; +} + +.bg-locked { + background-image: repeating-linear-gradient( + -45deg, + rgba(128, 128, 128, 0.2), + rgba(128, 128, 128, 0.2) 10px, + rgba(192, 192, 192, 0.2) 10px, + rgba(192, 192, 192, 0.2) 20px + ); +} + +.bg-locked-hover { + background-image: repeating-linear-gradient( + -45deg, + rgba(255, 99, 71, 0.2), + rgba(255, 99, 71, 0.2) 10px, + rgba(255, 69, 58, 0.2), + rgba(255, 69, 58, 0.2) 20px + ); +} diff --git a/frontend/src/lib/ata/apis.ts b/frontend/src/lib/ata/apis.ts new file mode 100644 index 0000000000000..b2a18d3fec698 --- /dev/null +++ b/frontend/src/lib/ata/apis.ts @@ -0,0 +1,96 @@ +// https://github.com/jsdelivr/data.jsdelivr.com + +import pLimit from 'p-limit' + +export const getNPMVersionsForModule = (moduleName: string, resLimit: ResLimit) => { + const url = `https://data.jsdelivr.com/v1/package/npm/${moduleName}` + return api<{ tags: Record; versions: string[] }>(url, resLimit, { + cache: 'no-store' + }) +} + +export const getNPMVersionForModuleReference = ( + moduleName: string, + reference: string, + resLimit: ResLimit +) => { + const url = `https://data.jsdelivr.com/v1/package/resolve/npm/${moduleName}@${reference}` + return api<{ version: string | null }>(url, resLimit) +} + +export type NPMTreeMeta = { + default: string + files: Array<{ name: string }> + moduleName: string + version: string + raw: string +} + +export const getFiletreeForModuleWithVersion = async ( + moduleName: string, + version: string, + raw: string, + resLimit: ResLimit +) => { + const url = `https://data.jsdelivr.com/v1/package/npm/${moduleName}@${version}/flat` + const res = await api(url, resLimit) + if (res instanceof Error) { + return res + } else { + return { + ...res, + moduleName, + version, + raw + } + } +} + +export const getDTSFileForModuleWithVersion = async ( + moduleName: string, + version: string, + file: string +) => { + // file comes with a prefix / + const url = `https://cdn.jsdelivr.net/npm/${moduleName}@${version}${file}` + const res = await limit(() => fetch(url)) + if (res.ok) { + return res.text() + } else { + return new Error('OK') + } +} + +export interface ResLimit { + usage: number +} + +export function isOverlimit(resLimit: ResLimit) { + return resLimit.usage > 5000000 +} + +export const limit = pLimit(6) + +function api(url: string, resLimit: ResLimit, init?: RequestInit): Promise { + if (isOverlimit(resLimit)) { + console.warn( + `Exceeded limit of types downloaded for the needs of the assistant fetching: ${url}, ${resLimit.usage}` + ) + return new Promise(() => new Error('Exceeded limit of 100MB of data downloaded.')) + } + + return limit(() => + fetch(url, init).then((res) => { + if (res.ok) { + return res.text().then((text) => { + resLimit.usage += text.length + console.log('resLimit', url, resLimit.usage) + + return JSON.parse(text) as T + }) as Promise + } else { + return new Error('OK') + } + }) + ) +} diff --git a/frontend/src/lib/ata/edgeCases.ts b/frontend/src/lib/ata/edgeCases.ts new file mode 100644 index 0000000000000..3c948f7c9297d --- /dev/null +++ b/frontend/src/lib/ata/edgeCases.ts @@ -0,0 +1,74 @@ +import { isTypescriptRelativePath } from '$lib/relative_imports' + +/** Converts some of the known global imports to node so that we grab the right info */ +export const mapModuleNameToModule = (moduleSpecifier: string) => { + // in node repl: + // > require("module").builtinModules + const builtInNodeMods = [ + 'assert', + 'assert/strict', + 'async_hooks', + 'buffer', + 'child_process', + 'cluster', + 'console', + 'constants', + 'crypto', + 'dgram', + 'diagnostics_channel', + 'dns', + 'dns/promises', + 'domain', + 'events', + 'fs', + 'fs/promises', + 'http', + 'http2', + 'https', + 'inspector', + 'module', + 'net', + 'os', + 'path', + 'path/posix', + 'path/win32', + 'perf_hooks', + 'process', + 'punycode', + 'querystring', + 'readline', + 'repl', + 'stream', + 'stream/promises', + 'stream/consumers', + 'stream/web', + 'string_decoder', + 'sys', + 'timers', + 'timers/promises', + 'tls', + 'trace_events', + 'tty', + 'url', + 'util', + 'util/types', + 'v8', + 'vm', + 'wasi', + 'worker_threads', + 'zlib' + ] + + if (builtInNodeMods.includes(moduleSpecifier.replace('node:', ''))) { + return 'node' + } + + if (isTypescriptRelativePath(moduleSpecifier)) { + return moduleSpecifier + } + // strip module filepath e.g. lodash/identity => lodash + const [a = '', b = ''] = moduleSpecifier.split('/') + const moduleName = a.startsWith('@') ? `${a}/${b}` : a + + return moduleName +} diff --git a/frontend/src/lib/ata/index.ts b/frontend/src/lib/ata/index.ts new file mode 100644 index 0000000000000..3af147b45c466 --- /dev/null +++ b/frontend/src/lib/ata/index.ts @@ -0,0 +1,331 @@ +import { isTypescriptRelativePath } from '$lib/relative_imports' +import { + getDTSFileForModuleWithVersion, + getFiletreeForModuleWithVersion, + getNPMVersionForModuleReference, + getNPMVersionsForModule, + isOverlimit, + limit, + type NPMTreeMeta, + type ResLimit +} from './apis' +import { mapModuleNameToModule } from './edgeCases' + +export interface ATABootstrapConfig { + root: string + scriptPath?: string + /** A object you pass in to get callbacks */ + delegate: { + /** The callback which gets called when ATA decides a file needs to be written to your VFS */ + receivedFile: (code: string, path: string) => void + localFile: (code: string, path: string) => void + /** A way to display progress */ + progress?: (downloaded: number, estimatedTotal: number) => void + /** Note: An error message does not mean ATA has stopped! */ + errorMessage?: (userFacingMessage: string, error: Error) => void + /** A callback indicating that ATA actually has work to do */ + started?: () => void + /** The callback when all ATA has finished */ + finished?: (files: Map) => void + } + /** Passed to fetch as the user-agent */ + projectName: string + /** code to dependency parser */ + depsParser: (code: string) => string[] + /** If you need a custom logger instead of the console global */ + logger?: Logger +} + +type ModuleMeta = { state: 'loading' } + +/** + * The function which starts up type acquisition, + * returns a function which you then pass the initial + * source code for the app with. + * + * This is effectively the main export, everything else is + * basically exported for tests and should be considered + * implementation details by consumers. + */ +export const setupTypeAcquisition = (config: ATABootstrapConfig) => { + const moduleMap = new Map() + const fsMap = new Map() + + limit.clearQueue() + let estimatedToDownload = 0 + let estimatedDownloaded = 0 + + let resLimit = { usage: 0 } + + return async (initialSourceFile: string) => { + estimatedToDownload = 0 + estimatedDownloaded = 0 + + let todo: string[] = [initialSourceFile] + let next: string[] = [] + let i = 0 + let nb = 0 + let time = new Date().getTime() + while (todo.length && nb < 200 && new Date().getTime() - time < 1000 * 15) { + const current = todo.shift()! + nb += 1 + const deps = await resolveDeps(current, i, resLimit) + if (i <= 0) { + next.push(...deps) + } + if (todo.length === 0) { + i += 1 + todo = next + next = [] + } + } + if (estimatedDownloaded > 0) { + config.delegate.finished?.(fsMap) + } + } + + function getVersion(d: string) { + if (d.lastIndexOf('@') > 0) { + const splitted = d.split('@') + let version = splitted.pop() + if (version?.startsWith('^') || version?.startsWith('~')) { + version = version.slice(1) + } + return version + } + return 'latest' + } + + async function resolveDeps( + initialSourceFile: string, + depth: number, + resLimit: ResLimit + ): Promise { + let depsToGet = config + .depsParser(initialSourceFile) + .map((d: string) => { + let raw = mapModuleNameToModule(d) + return { + raw, + module: raw.lastIndexOf('@') > 0 ? raw.split('@').slice(0, -1).join('@') : raw, + version: getVersion(d) + } + }) + .filter((f) => !moduleMap.has(f.raw)) + + if (depth == 0) { + const relativeDeps = depsToGet.filter((f) => isTypescriptRelativePath(f.raw)) + relativeDeps.forEach(async (f) => { + let path = f.raw.startsWith('/') + ? f.raw + : '/' + config.scriptPath + (f.raw.startsWith('../') ? '/../' : '/.') + f.raw + let url = config.root + path + // console.log('FOO', config.scriptPath, path, f.raw) + console.log('fetching local file', url, f.raw) + const res = await fetch(url) + if (res.ok) { + config.delegate.localFile?.(await res.text(), f.raw) + } + }) + } + depsToGet.forEach((dep) => moduleMap.set(dep.raw, { state: 'loading' })) + + depsToGet = depsToGet.filter((f) => !isTypescriptRelativePath(f.raw)) + if (depsToGet.length === 0) { + return [] + } + console.log( + 'dependencies to fetch for type assistant: ', + depsToGet.map((x) => x.raw) + ) + // Make it so it won't get re-downloaded + + // Grab the module trees which gives us a list of files to download + const trees = await Promise.all( + depsToGet.map((f) => getFileTreeForModuleWithTag(f.module, f.version, f.raw, resLimit)) + ) + const treesOnly = trees.filter((t) => !('error' in t)) as NPMTreeMeta[] + + // These are the modules which we can grab directly + const hasDTS = treesOnly.filter((t) => t.files.find((f) => f.name.endsWith('.d.ts'))) + const dtsFilesFromNPM = hasDTS.map((t) => treeToDTSFiles(t, `/node_modules/${t.raw}`)) + // console.log(dtsFilesFromNPM, 'dtsFilesFromNPM') + // These are ones we need to look on DT for (which may not be there, who knows) + const mightBeOnDT = treesOnly.filter((t) => !hasDTS.includes(t)) + // console.log(mightBeOnDT, 'mightBeOnDT') + // return + + const dtTrees = await Promise.all( + // TODO: Switch from 'latest' to the version from the original tree which is user-controlled + mightBeOnDT.map((f) => + getFileTreeForModuleWithTag( + `@types/${getDTName(f.moduleName)}`, + 'latest', + `@types/${getDTName(f.raw)}`, + resLimit + ) + ) + ) + + const dtTreesOnly = dtTrees.filter((t) => !('error' in t)) as NPMTreeMeta[] + const dtsFilesFromDT = dtTreesOnly.map((t) => + treeToDTSFiles(t, `/node_modules/@types/${getDTName(t.raw).replace('types__', '')}`) + ) + + // Collect all the npm and DT DTS requests and flatten their arrays + const allDTSFiles = dtsFilesFromNPM.concat(dtsFilesFromDT).reduce((p, c) => p.concat(c), []) + + estimatedToDownload += allDTSFiles.length + if (allDTSFiles.length && depth === 0) { + config.delegate.started?.() + } + + // Grab the package.jsons for each dependency + for (const tree of treesOnly) { + const pkgJSON = await getDTSFileForModuleWithVersion( + tree.moduleName, + tree.version, + '/package.json' + ) + let prefix = `/node_modules/${tree.raw}` + if (dtTreesOnly.includes(tree)) + prefix = `/node_modules/@types/${getDTName(tree.raw).replace('types__', '')}` + const path = prefix + '/package.json' + + if (typeof pkgJSON == 'string') { + fsMap.set(path, pkgJSON) + config.delegate.receivedFile?.(pkgJSON, path) + } else { + config.logger?.error(`Could not download package.json for ${tree.moduleName}`) + } + } + + // Grab all dts files + return ( + await Promise.all( + allDTSFiles.map(async (dts) => { + if (isOverlimit(resLimit)) { + console.warn('Exceeded limit of types downloaded for the needs of the assistant') + return + } + const dtsCode = await getDTSFileForModuleWithVersion( + dts.moduleName, + dts.moduleVersion, + dts.path + ) + estimatedDownloaded++ + if (dtsCode instanceof Error) { + // TODO? + config.logger?.error(`Had an issue getting ${dts.path} for ${dts.moduleName}`) + } else { + fsMap.set(dts.vfsPath, dtsCode) + config.delegate.receivedFile?.(dtsCode, dts.vfsPath) + + // Send a progress note every 5 downloads + if (config.delegate.progress && estimatedDownloaded % 5 === 0) { + config.delegate.progress(estimatedDownloaded, estimatedToDownload) + } + + if (dts.moduleName != 'bun-types') { + return dtsCode + // Recurse through deps + } + } + }) + ) + ).filter((f) => f != undefined) as string[] + } +} + +type ATADownload = { + moduleName: string + moduleVersion: string + vfsPath: string + path: string +} + +function treeToDTSFiles(tree: NPMTreeMeta, vfsPrefix: string) { + const dtsRefs: ATADownload[] = [] + + for (const file of tree.files) { + if (file.name.endsWith('.d.ts')) { + dtsRefs.push({ + moduleName: tree.moduleName, + moduleVersion: tree.version, + vfsPath: `${vfsPrefix}${file.name}`, + path: file.name + }) + } + } + return dtsRefs +} + +/** The bulk load of the work in getting the filetree based on how people think about npm names and versions */ +export const getFileTreeForModuleWithTag = async ( + moduleName: string, + tag: string | undefined, + raw: string, + resLimit: ResLimit +) => { + let toDownload = tag || 'latest' + + // I think having at least 2 dots is a reasonable approx for being a semver and not a tag, + // we can skip an API request, TBH this is probably rare + if (toDownload.split('.').length < 2) { + // The jsdelivr API needs a _version_ not a tag. So, we need to switch out + // the tag to the version via an API request. + const response = await getNPMVersionForModuleReference(moduleName, toDownload, resLimit) + if (response instanceof Error) { + return { + error: response, + userFacingMessage: `Could not go from a tag to version on npm for ${moduleName} - possible typo?` + } + } + + const neededVersion = response.version + if (!neededVersion) { + const versions = await getNPMVersionsForModule(moduleName, resLimit) + if (versions instanceof Error) { + return { + error: response, + userFacingMessage: `Could not get versions on npm for ${moduleName} - possible typo?` + } + } + + const tags = Object.entries(versions.tags).join(', ') + return { + error: new Error('Could not find tag for module'), + userFacingMessage: `Could not find a tag for ${moduleName} called ${tag}. Did find ${tags}` + } + } + + toDownload = neededVersion + } + + const res = await getFiletreeForModuleWithVersion(moduleName, toDownload, raw, resLimit) + if (res instanceof Error) { + return { + error: res, + userFacingMessage: `Could not get the files for ${moduleName}@${toDownload}. Is it possibly a typo?` + } + } + + return res +} + +interface Logger { + log: (...args: any[]) => void + error: (...args: any[]) => void + groupCollapsed: (...args: any[]) => void + groupEnd: (...args: any[]) => void +} + +// Taken from dts-gen: https://github.com/microsoft/dts-gen/blob/master/lib/names.ts +function getDTName(s: string) { + if (s.indexOf('@') === 0 && s.indexOf('/') !== -1) { + // we have a scoped module, e.g. @bla/foo + // which should be converted to bla__foo + s = s.substr(1).replace('/', '__') + } + return s +} diff --git a/frontend/src/lib/ata/userFacingTypes.d.ts b/frontend/src/lib/ata/userFacingTypes.d.ts new file mode 100644 index 0000000000000..5f600cb8aa473 --- /dev/null +++ b/frontend/src/lib/ata/userFacingTypes.d.ts @@ -0,0 +1,44 @@ +export interface ATABootstrapConfig { + /** A object you pass in to get callbacks */ + delegate: { + /** The callback which gets called when ATA decides a file needs to be written to your VFS */ + receivedFile?: (code: string, path: string) => void + /** A way to display progress */ + progress?: (downloaded: number, estimatedTotal: number) => void + /** Note: An error message does not mean ATA has stopped! */ + errorMessage?: (userFacingMessage: string, error: Error) => void + /** A callback indicating that ATA actually has work to do */ + started?: () => void + /** The callback when all ATA has finished */ + finished?: (files: Map) => void + } + /** Passed to fetch as the user-agent */ + projectName: string + /** Your local copy of typescript */ + depsParser: (code: string) => string[] + + /** If you need a custom version of fetch */ + fetcher?: typeof fetch + /** If you need a custom logger instead of the console global */ + logger?: Logger +} + +type ModuleMeta = { state: "loading" } + +/** + * The function which starts up type acquisition, + * returns a function which you then pass the initial + * source code for the app with. + * + * This is effectively the main export, everything else is + * basically exported for tests and should be considered + * implementation details by consumers. + */ +export const setupTypeAcquisition: (config: ATABootstrapConfig) => (initialSourceFile: string) => void + +interface Logger { + log: (...args: any[]) => void + error: (...args: any[]) => void + groupCollapsed: (...args: any[]) => void + groupEnd: (...args: any[]) => void +} diff --git a/frontend/src/lib/autosize.ts b/frontend/src/lib/autosize.ts new file mode 100644 index 0000000000000..5273d2e4ac238 --- /dev/null +++ b/frontend/src/lib/autosize.ts @@ -0,0 +1,93 @@ +export const action = (node) => { + /* Constants */ + const update = new Event('update') + + /* Functions */ + const init = () => { + addStyles() + observeElement() + addEventListeners() + setInitialHeight() + } + + const dispatchUpdateEvent = () => { + node.dispatchEvent(update) + } + + const setInitialHeight = () => { + let height = 0 + + const style = window.getComputedStyle(node) + const visible = style?.getPropertyValue('visibility') === 'hidden' + + if (visible === false) { + return + } + + if (node.value) { + height = node.scrollHeight + } else { + if (node.placeholder) { + node.value = node.placeholder + height = node.scrollHeight + node.value = '' + } else { + node.value = '|' + node.style.height = '0px' + height = node.scrollHeight + node.value = '' + } + } + + node.style.height = height + 'px' + } + + const setHeight = () => { + node.style.height = 'auto' + node.style.height = Math.max(node.scrollHeight ?? 0, 30) + 2 + 'px' + } + + const addStyles = () => { + node.style.boxSizing = 'border-box' + } + + const observeElement = () => { + let elementPrototype = Object.getPrototypeOf(node) + let descriptor = Object.getOwnPropertyDescriptor(elementPrototype, 'value') + Object.defineProperty(node, 'value', { + get: function () { + return descriptor?.get?.apply(this, arguments as any) + }, + set: function () { + descriptor?.set?.apply(this, arguments as any) + dispatchUpdateEvent() + } + }) + } + + const addEventListeners = () => { + node.addEventListener('input', (e) => { + dispatchUpdateEvent() + }) + node.addEventListener('update', setHeight) + } + + const removeEventListeners = () => { + node.removeEventListener('input', dispatchUpdateEvent) + node.removeEventListener('update', setHeight) + } + + if (node.tagName.toLowerCase() !== 'textarea') { + throw new Error('svelte-textarea-auto-height can only be used on textarea elements.') + } else { + init() + + return { + destroy() { + removeEventListeners() + } + } + } +} + +export default action diff --git a/frontend/src/lib/base.ts b/frontend/src/lib/base.ts new file mode 100644 index 0000000000000..0e8f2d71f62f8 --- /dev/null +++ b/frontend/src/lib/base.ts @@ -0,0 +1 @@ +export let base: string = import.meta.env.VITE_BASE_URL ?? '' diff --git a/frontend/src/lib/cloud.ts b/frontend/src/lib/cloud.ts new file mode 100644 index 0000000000000..cc6319127aa30 --- /dev/null +++ b/frontend/src/lib/cloud.ts @@ -0,0 +1,5 @@ +import { BROWSER } from 'esm-env' + +export function isCloudHosted(): boolean { + return BROWSER && window.location.hostname == 'app.windmill.dev' +} diff --git a/frontend/src/lib/common.ts b/frontend/src/lib/common.ts new file mode 100644 index 0000000000000..b96af76d03dd7 --- /dev/null +++ b/frontend/src/lib/common.ts @@ -0,0 +1,177 @@ +import type { Script } from './gen' + +export type OwnerKind = 'group' | 'user' | 'folder' + +export type ActionKind = 'Create' | 'Update' | 'Delete' | 'Execute' + +export type SupportedLanguage = Script['language'] + +export interface PropertyDisplayInfo { + property: SchemaProperty + name: string + isRequired: boolean + path: string[] + index: number + propertiesNumber: number +} + +export type EnumType = string[] | undefined + +export interface SchemaProperty { + type: string | undefined + description?: string + pattern?: string + default?: any + enum?: EnumType + contentEncoding?: 'base64' | 'binary' + format?: string + items?: { + type?: 'string' | 'number' | 'bytes' | 'object' | 'resource' + contentEncoding?: 'base64' + enum?: string[] + resourceType?: string + properties?: { [name: string]: SchemaProperty } + } + min?: number + max?: number + currency?: string + currencyLocale?: string + multiselect?: boolean + customErrorMessage?: string + properties?: { [name: string]: SchemaProperty } + required?: string[] + showExpr?: string + password?: boolean + order?: string[] + nullable?: boolean + dateFormat?: string + title?: string + placeholder?: string + oneOf?: SchemaProperty[] + originalType?: string +} + +export interface ModalSchemaProperty { + selectedType?: string + description: string + name: string + required: boolean + min?: number + max?: number + currency?: string + currencyLocale?: string + multiselect?: boolean + format?: string + pattern?: string + enum_?: EnumType + default?: any + items?: { type?: 'string' | 'number'; enum?: string[] } + contentEncoding?: 'base64' | 'binary' + schema?: Schema + customErrorMessage?: string + showExpr?: string + password?: boolean + nullable?: boolean + dateFormat?: string + title?: string + placeholder?: string + oneOf?: SchemaProperty[] +} + +export function modalToSchema(schema: ModalSchemaProperty): SchemaProperty { + return { + type: schema.selectedType, + description: schema.description, + pattern: schema.pattern, + default: schema.default, + enum: schema.enum_, + items: schema.items, + contentEncoding: schema.contentEncoding, + format: schema.format, + customErrorMessage: schema.customErrorMessage, + properties: schema.schema?.properties, + required: schema.schema?.required, + min: schema.min, + max: schema.max, + currency: schema.currency, + currencyLocale: schema.currencyLocale, + multiselect: schema.multiselect, + showExpr: schema.showExpr, + password: schema.password, + nullable: schema.nullable, + dateFormat: schema.dateFormat, + title: schema.title, + placeholder: schema.placeholder, + oneOf: schema.oneOf + } +} +export type Schema = { + $schema: string | undefined + type: string + properties: { [name: string]: SchemaProperty } + order?: string[] + required: string[] +} + +export function mergeSchema( + schema: Schema | Record, + enum_payload: Record = {} +) { + if (!schema.properties || !enum_payload) { + return schema + } + let new_schema: Schema = JSON.parse(JSON.stringify(schema)) + for (let [key, value] of Object.entries(new_schema.properties ?? {})) { + if (enum_payload[key]) { + value.enum = enum_payload[key] + value['disableCreate'] = true + } + } + + return new_schema +} + +export type Meta = { ownerKind: OwnerKind; owner: string; name: string } + +type Enumerate = Acc['length'] extends N + ? Acc[number] + : Enumerate + +/** An inclusive range of integer numbers */ +export type IntRange = + | F + | Exclude, Enumerate> + | T + +export function pathToMeta(path: string, hideUser: boolean): Meta { + const splitted = path.split('/') + let ownerKind: OwnerKind + if (splitted[0] == 'g') { + ownerKind = 'group' + } else if (splitted[0] == 'f') { + ownerKind = 'folder' + } else if (splitted[0] == 'u') { + ownerKind = 'user' + } else { + console.error('Not recognized owner:' + splitted[0]) + return { + ownerKind: hideUser ? 'folder' : 'user', + owner: '', + name: '' + } + } + return { + ownerKind, + owner: splitted[1], + name: splitted.slice(2).join('/') + } +} + +export function prettyLanguage(lang: string) { + switch (lang) { + case 'nativets': + return 'Native TypeScript' + default: + return lang.charAt(0).toUpperCase() + lang.slice(1) + } +} diff --git a/frontend/src/lib/components/AddUser.svelte b/frontend/src/lib/components/AddUser.svelte new file mode 100644 index 0000000000000..90ce1e8d3154a --- /dev/null +++ b/frontend/src/lib/components/AddUser.svelte @@ -0,0 +1,135 @@ + + + + + + +
+ Add a new user + + Email + + + {#if !automateUsernameCreation} + Username + + {/if} + + Role + + + + + + +
+
diff --git a/frontend/src/lib/components/AllFlowLogs.svelte b/frontend/src/lib/components/AllFlowLogs.svelte new file mode 100644 index 0000000000000..270ba2bffaa26 --- /dev/null +++ b/frontend/src/lib/components/AllFlowLogs.svelte @@ -0,0 +1,35 @@ + + +
+ {#if states != undefined} + {#each Object.entries($states ?? {}) as [id, status] (id)} +

Step {id}

+ {#each Object.entries(status.byJob ?? {}) as jobS} + {@const job = jobS[0]} + + {/each} +
+ {/each} + {:else} + + {/if} +
diff --git a/frontend/src/lib/components/ApiConnectForm.svelte b/frontend/src/lib/components/ApiConnectForm.svelte new file mode 100644 index 0000000000000..1155be67baaa6 --- /dev/null +++ b/frontend/src/lib/components/ApiConnectForm.svelte @@ -0,0 +1,229 @@ + + +{#if !notFound} +
+ switchTab(e.detail)} + options={{ + right: 'As JSON' + }} + /> + + {#if resourceType == 'postgresql'} + + + + +
+
+
+ + +
+ {#if !validConnectionString} +

Could not parse connection string

+ {/if} +
+
+
+ {/if} + {#if resourceType == 'postgresql' && supabaseWizard} + + +
Connect Supabase
+
+ {/if} +
+{:else} +

No corresponding resource type found in your workspace for {resourceType}. Define the value in + JSON directly

+{/if} +{#if notFound || viewJsonSchema} + {#if !emptyString(error)}{error}{:else}
{/if} +
+ +
+{:else if resourceTypeInfo?.format_extension} +
+ File content ({resourceTypeInfo.format_extension}) +
+
+
+ +
+{:else} + +{/if} diff --git a/frontend/src/lib/components/AppConnectDrawer.svelte b/frontend/src/lib/components/AppConnectDrawer.svelte new file mode 100644 index 0000000000000..28cb801616177 --- /dev/null +++ b/frontend/src/lib/components/AppConnectDrawer.svelte @@ -0,0 +1,89 @@ + + + + + { + step = 1 + dispatch('close') + }} + size="800px" +> + + +
+ {#if step > 1} + + {/if} + {#if isGoogleSignin} + + {:else} + + {/if} +
+
+
diff --git a/frontend/src/lib/components/AppConnectInner.svelte b/frontend/src/lib/components/AppConnectInner.svelte new file mode 100644 index 0000000000000..dbe162fd6493e --- /dev/null +++ b/frontend/src/lib/components/AppConnectInner.svelte @@ -0,0 +1,580 @@ + + + a.localeCompare(b)) + .map((key) => ({ + key + })) + : undefined} + bind:filteredItems={filteredConnects} + f={(x) => x.key} +/> + a[0].localeCompare(b[0]))} + bind:filteredItems={filteredConnectsManual} + f={(x) => x[0]} +/> +{#if step == 1} +
+ +
+ +

OAuth APIs

+
+ {#if filteredConnects} + {#each filteredConnects as { key }} + + {/each} + {:else} + {#each new Array(3) as _} + + {/each} + {/if} +
+ {#if connects && connects.length == 0} +
No OAuth APIs has been setup on the instance. To add oauth APIs, first sync the resource + types with the hub, then add oauth configuration. See documentation +
+ {/if} + +

Others

+ + {#if connectsManual && connectsManual?.length < 10} +
+ Resource Types have not been synced with the hub. Go to the admins workspace to sync them (and + add a schedule to do daily): +

1. Go to the "admins" workspaces: + sync resource types +

+

+ 2: Run the synchronization script: + sync resource types +

+
+ {/if} + +
+ {#if filteredConnectsManual} + {#each filteredConnectsManual as [key, _]} + {#if nativeLanguagesCategory.includes(key)} + + {/if} + {/each} + {/if} +
+ +
+
+ {#if filteredConnectsManual} + {#each filteredConnectsManual as [key, _]} + {#if !nativeLanguagesCategory.includes(key)} + + + {/if} + {/each} + {:else} + {#each new Array(9) as _} + + {/each} + {/if} +
+{:else if step == 2 && manual} + + + {#if apiTokenApps[resourceType]} +

Instructions

+
+
    + {#each apiTokenApps[resourceType].instructions as step} +
  1. + {@html step} +
  2. + {/each} +
+
+ {#if apiTokenApps[resourceType].img} +
+ connect +
+ {/if} + {:else if !emptyString(resourceTypeInfo?.description)} +

{resourceTypeInfo?.name} description

+
+ +
+ {/if} + {#if resourceType == 'postgresql' || resourceType == 'mysql' || resourceType == 'mongodb'} + + {/if} + +

Resource description +
+ + +
+

+ {#if renderDescription} +
+
GH Markdown
+