diff --git a/.github/boring-cyborg.yml b/.github/boring-cyborg.yml index 77380c7674e83..bab58794cf922 100644 --- a/.github/boring-cyborg.yml +++ b/.github/boring-cyborg.yml @@ -597,6 +597,7 @@ labelPRBasedOnFilePath: - airflow/www/webpack.config.js - airflow/www/yarn.lock - docs/apache-airflow/ui.rst + - airflow/ui/**/* area:CLI: - airflow/cli/**/*.py diff --git a/.github/workflows/basic-tests.yml b/.github/workflows/basic-tests.yml index b59baa6728fda..81b5bec89b3fe 100644 --- a/.github/workflows/basic-tests.yml +++ b/.github/workflows/basic-tests.yml @@ -24,6 +24,10 @@ on: # yamllint disable-line rule:truthy description: "The array of labels (in json form) determining public runners." required: true type: string + run-ui-tests: + description: "Whether to run UI tests (true/false)" + required: true + type: string run-www-tests: description: "Whether to run WWW tests (true/false)" required: true @@ -83,6 +87,36 @@ jobs: - run: python -m pytest -n auto --color=yes working-directory: ./dev/breeze/ + + tests-ui: + timeout-minutes: 10 + name: React UI tests + runs-on: ${{ fromJSON(inputs.runs-on-as-json-public) }} + if: inputs.run-ui-tests == 'true' + steps: + - name: "Cleanup repo" + shell: bash + run: docker run -v "${GITHUB_WORKSPACE}:/workspace" -u 0:0 bash -c "rm -rf /workspace/*" + - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )" + uses: actions/checkout@v4 + with: + persist-credentials: false + - name: "Cleanup docker" + run: ./scripts/ci/cleanup_docker.sh + - name: "Setup node" + uses: actions/setup-node@v4 + with: + node-version: 21 + - name: "Cache eslint" + uses: actions/cache@v4 + with: + path: 'airflow/www/node_modules' + key: ${{ runner.os }}-www-node-modules-${{ hashFiles('airflow/ui/**/pnpm-lock.yaml') }} + - run: cd airflow/ui && pnpm install --frozen-lockfile + - run: cd airflow/ui && pnpm test + env: + FORCE_COLOR: 2 + tests-www: timeout-minutes: 10 name: React WWW tests diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 11cb390d32218..0f9e8086554db 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -89,6 +89,7 @@ jobs: skip-provider-tests: ${{ steps.selective-checks.outputs.skip-provider-tests }} run-tests: ${{ steps.selective-checks.outputs.run-tests }} run-amazon-tests: ${{ steps.selective-checks.outputs.run-amazon-tests }} + run-ui-tests: ${{ steps.selective-checks.outputs.run-ui-tests }} run-www-tests: ${{ steps.selective-checks.outputs.run-www-tests }} run-kubernetes-tests: ${{ steps.selective-checks.outputs.run-kubernetes-tests }} basic-checks-only: ${{ steps.selective-checks.outputs.basic-checks-only }} @@ -168,6 +169,7 @@ jobs: uses: ./.github/workflows/basic-tests.yml with: runs-on-as-json-public: ${{ needs.build-info.outputs.runs-on-as-json-public }} + run-ui-tests: ${{needs.build-info.outputs.run-ui-tests}} run-www-tests: ${{needs.build-info.outputs.run-www-tests}} needs-api-codegen: ${{needs.build-info.outputs.needs-api-codegen}} default-python-version: ${{needs.build-info.outputs.default-python-version}} diff --git a/.gitignore b/.gitignore index 8a1c50454d914..a2c221d257af5 100644 --- a/.gitignore +++ b/.gitignore @@ -165,6 +165,12 @@ node_modules npm-debug.log* derby.log metastore_db +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +.vscode/* +!.vscode/extensions.json # Airflow log files when airflow is run locally airflow-*.err diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index bf8b140198c4e..a83b6ce5e5b4e 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -19,7 +19,7 @@ default_stages: [commit, push] default_language_version: python: python3 node: 22.2.0 -minimum_pre_commit_version: '3.2.0' +minimum_pre_commit_version: "3.2.0" repos: - repo: meta hooks: @@ -32,8 +32,7 @@ repos: hooks: - id: doctoc name: Add TOC for Markdown and RST files - files: - ^README\.md$|^UPDATING.*\.md$|^chart/UPDATING.*\.md$|^dev/.*\.md$|^dev/.*\.rst$|^.github/.*\.md|^tests/system/README.md$ + files: ^README\.md$|^UPDATING.*\.md$|^chart/UPDATING.*\.md$|^dev/.*\.md$|^dev/.*\.rst$|^.github/.*\.md|^tests/system/README.md$ exclude: ^.*/.*_vendor/ args: - "--maxlevel" @@ -67,7 +66,7 @@ repos: - id: insert-license name: Add license for all CSS/JS/JSX/PUML/TS/TSX files files: \.(css|jsx?|puml|tsx?)$ - exclude: ^\.github/.*$|^.*/.*_vendor/|^airflow/www/static/js/types/api-generated.ts$ + exclude: ^\.github/.*$|^.*/.*_vendor/|^airflow/www/static/js/types/api-generated.ts$|ui/openapi-gen/ args: - --comment-style - "/*!| *| */" @@ -172,22 +171,22 @@ repos: entry: ./scripts/ci/pre_commit/update_common_sql_api_stubs.py language: python files: ^scripts/ci/pre_commit/update_common_sql_api\.py|^airflow/providers/common/sql/.*\.pyi?$ - additional_dependencies: ['rich>=12.4.4', 'mypy==1.9.0', 'black==23.10.0', 'jinja2'] + additional_dependencies: ["rich>=12.4.4", "mypy==1.9.0", "black==23.10.0", "jinja2"] pass_filenames: false require_serial: true - id: update-black-version name: Update black versions everywhere (manual) entry: ./scripts/ci/pre_commit/update_black_version.py - stages: ['manual'] + stages: ["manual"] language: python files: ^.pre-commit-config.yaml$ - additional_dependencies: ['pyyaml'] + additional_dependencies: ["pyyaml"] pass_filenames: false require_serial: true - id: update-build-dependencies name: Update build-dependencies to latest (manual) entry: ./scripts/ci/pre_commit/update_build_dependencies.py - stages: ['manual'] + stages: ["manual"] language: python files: ^.pre-commit-config.yaml$|^scripts/ci/pre_commit/update_build_dependencies.py$ pass_filenames: false @@ -195,18 +194,18 @@ repos: - id: update-installers name: Update installers to latest (manual) entry: ./scripts/ci/pre_commit/update_installers.py - stages: ['manual'] + stages: ["manual"] language: python files: ^.pre-commit-config.yaml$|^scripts/ci/pre_commit/update_installers.py$ pass_filenames: false require_serial: true - additional_dependencies: ['pyyaml', 'rich>=12.4.4', 'requests'] + additional_dependencies: ["pyyaml", "rich>=12.4.4", "requests"] - id: update-chart-dependencies name: Update chart dependencies to latest (manual) entry: ./scripts/ci/pre_commit/update_chart_dependencies.py - stages: ['manual'] + stages: ["manual"] language: python - additional_dependencies: ['pyyaml', 'rich>=12.4.4', 'requests'] + additional_dependencies: ["pyyaml", "rich>=12.4.4", "requests"] files: ^.pre-commit-config.yaml$|^scripts/ci/pre_commit/update_build_dependencies.py$ pass_filenames: false require_serial: true @@ -214,7 +213,7 @@ repos: name: Check that TI and TIS have the same attributes entry: ./scripts/ci/pre_commit/check_ti_vs_tis_attributes.py language: python - additional_dependencies: ['rich>=12.4.4'] + additional_dependencies: ["rich>=12.4.4"] files: ^airflow/models/taskinstance.py$|^airflow/models/taskinstancehistory.py$ pass_filenames: false require_serial: true @@ -289,9 +288,9 @@ repos: name: Check YAML files with yamllint entry: yamllint -c yamllint-config.yml --strict types: [yaml] - exclude: ^.*airflow\.template\.yaml$|^.*init_git_sync\.template\.yaml$|^.*/.*_vendor/|^chart/(?:templates|files)/.*\.yaml$|openapi/.*\.yaml$|^\.pre-commit-config\.yaml$|^.*/reproducible_build.yaml$ + exclude: ^.*airflow\.template\.yaml$|^.*init_git_sync\.template\.yaml$|^.*/.*_vendor/|^chart/(?:templates|files)/.*\.yaml$|openapi/.*\.yaml$|^\.pre-commit-config\.yaml$|^.*/reproducible_build.yaml$|^.*pnpm-lock\.yaml$ - repo: https://github.com/ikamensh/flynt - rev: '1.0.1' + rev: "1.0.1" hooks: - id: flynt name: Run flynt string format converter for Python @@ -299,11 +298,11 @@ repos: (?x) ^.*/.*_vendor/ args: - # If flynt detects too long text it ignores it. So we set a very large limit to make it easy - # to split the text by hand. Too long lines are detected by flake8 (below), - # so the user is informed to take action. - - --line-length - - '99999' + # If flynt detects too long text it ignores it. So we set a very large limit to make it easy + # to split the text by hand. Too long lines are detected by flake8 (below), + # so the user is informed to take action. + - --line-length + - "99999" - repo: https://github.com/codespell-project/codespell rev: v2.3.0 hooks: @@ -314,7 +313,7 @@ repos: The word(s) should be in lowercase." && exec codespell "$@"' -- language: python types: [text] - exclude: ^.*/.*_vendor/|^airflow/www/static/css/material-icons\.css$|^images/.*$|^RELEASE_NOTES\.txt$|^.*package-lock\.json$|^.*/kinglear\.txt$ + exclude: ^.*/.*_vendor/|^airflow/www/static/css/material-icons\.css$|^images/.*$|^RELEASE_NOTES\.txt$|^.*package-lock\.json$|^.*/kinglear\.txt$|^.*pnpm-lock\.yaml$ args: - --ignore-words=docs/spelling_wordlist.txt - --skip=airflow/providers/*/*.rst,airflow/www/*.log,docs/*/commits.rst,docs/apache-airflow/tutorial/pipeline_example.csv,*.min.js,*.lock,INTHEWILD.md @@ -334,7 +333,7 @@ repos: entry: ./scripts/ci/pre_commit/validate_operators_init.py pass_filenames: true files: ^airflow/providers/.*/(operators|transfers|sensors)/.*\.py$ - additional_dependencies: [ 'rich>=12.4.4' ] + additional_dependencies: ["rich>=12.4.4"] - id: ruff name: Run 'ruff' for extremely fast Python linting description: "Run 'ruff' for extremely fast Python linting" @@ -361,7 +360,7 @@ repos: language: python types: [file, text] exclude: ^.*/.*_vendor/|^clients/gen/go\.sh$|^\.gitmodules$ - additional_dependencies: ['rich>=12.4.4'] + additional_dependencies: ["rich>=12.4.4"] - id: lint-openapi name: Lint OpenAPI using spectral language: docker_image @@ -371,7 +370,7 @@ repos: name: Lint OpenAPI using openapi-spec-validator entry: openapi-spec-validator --schema 3.0.0 language: python - additional_dependencies: ['openapi-spec-validator>=0.7.1', 'openapi-schema-validator>=0.6.2'] + additional_dependencies: ["openapi-spec-validator>=0.7.1", "openapi-schema-validator>=0.6.2"] files: ^airflow/api_connexion/openapi/ - id: lint-dockerfile name: Lint Dockerfile @@ -387,7 +386,7 @@ repos: require_serial: true exclude: ^airflow/kubernetes/ entry: ./scripts/ci/pre_commit/check_airflow_k8s_not_used.py - additional_dependencies: ['rich>=12.4.4'] + additional_dependencies: ["rich>=12.4.4"] - id: check-common-compat-used-for-openlineage name: Check common.compat is used for OL deprecated classes language: python @@ -395,14 +394,14 @@ repos: require_serial: true exclude: ^airflow/openlineage/ entry: ./scripts/ci/pre_commit/check_common_compat_used_for_openlineage.py - additional_dependencies: ['rich>=12.4.4'] + additional_dependencies: ["rich>=12.4.4"] - id: check-airflow-providers-bug-report-template name: Check airflow-bug-report provider list is sorted/unique language: python files: ^.github/ISSUE_TEMPLATE/airflow_providers_bug_report\.yml$ require_serial: true entry: ./scripts/ci/pre_commit/check_airflow_bug_report_template.py - additional_dependencies: ['rich>=12.4.4', 'pyyaml'] + additional_dependencies: ["rich>=12.4.4", "pyyaml"] - id: check-cncf-k8s-only-for-executors name: Check cncf.kubernetes imports used for executors only language: python @@ -410,14 +409,14 @@ repos: require_serial: true exclude: ^airflow/kubernetes/|^airflow/providers/ entry: ./scripts/ci/pre_commit/check_cncf_k8s_used_for_k8s_executor_only.py - additional_dependencies: ['rich>=12.4.4'] + additional_dependencies: ["rich>=12.4.4"] - id: check-airflow-provider-compatibility name: Check compatibility of Providers with Airflow entry: ./scripts/ci/pre_commit/check_provider_airflow_compatibility.py language: python pass_filenames: true files: ^airflow/providers/.*\.py$ - additional_dependencies: ['rich>=12.4.4'] + additional_dependencies: ["rich>=12.4.4"] - id: check-google-re2-as-dependency name: Check google-re2 is declared as dependency when needed entry: ./scripts/ci/pre_commit/check_google_re2_imports.py @@ -425,27 +424,27 @@ repos: pass_filenames: true require_serial: true files: ^airflow/providers/.*\.py$ - additional_dependencies: ['rich>=12.4.4'] + additional_dependencies: ["rich>=12.4.4"] - id: update-local-yml-file name: Update mounts in the local yml file entry: ./scripts/ci/pre_commit/local_yml_mounts.py language: python files: ^dev/breeze/src/airflow_breeze/utils/docker_command_utils\.py$|^scripts/ci/docker_compose/local\.yml$ pass_filenames: false - additional_dependencies: ['rich>=12.4.4'] + additional_dependencies: ["rich>=12.4.4"] - id: check-sql-dependency-common-data-structure name: Check dependency of SQL Providers with common data structure entry: ./scripts/ci/pre_commit/check_common_sql_dependency.py language: python files: ^airflow/providers/.*/hooks/.*\.py$ - additional_dependencies: ['rich>=12.4.4', 'pyyaml', 'packaging'] + additional_dependencies: ["rich>=12.4.4", "pyyaml", "packaging"] - id: update-providers-dependencies name: Update dependencies for provider packages entry: ./scripts/ci/pre_commit/update_providers_dependencies.py language: python files: ^airflow/providers/.*\.py$|^airflow/providers/.*/provider\.yaml$|^tests/providers/.*\.py$|^tests/system/providers/.*\.py$|^scripts/ci/pre_commit/update_providers_dependencies\.py$ pass_filenames: false - additional_dependencies: ['setuptools', 'rich>=12.4.4', 'pyyaml', 'tomli'] + additional_dependencies: ["setuptools", "rich>=12.4.4", "pyyaml", "tomli"] - id: check-extra-packages-references name: Checks setup extra packages description: Checks if all the extras defined in hatch_build.py are listed in extra-packages-ref.rst file @@ -453,42 +452,42 @@ repos: files: ^docs/apache-airflow/extra-packages-ref\.rst$|^hatch_build.py pass_filenames: false entry: ./scripts/ci/pre_commit/check_extra_packages_ref.py - additional_dependencies: ['rich>=12.4.4', 'hatchling==1.25.0', 'tabulate'] + additional_dependencies: ["rich>=12.4.4", "hatchling==1.25.0", "tabulate"] - id: check-hatch-build-order name: Check order of dependencies in hatch_build.py language: python files: ^hatch_build.py$ pass_filenames: false entry: ./scripts/ci/pre_commit/check_order_hatch_build.py - additional_dependencies: ['rich>=12.4.4', 'hatchling==1.25.0'] + additional_dependencies: ["rich>=12.4.4", "hatchling==1.25.0"] - id: update-extras name: Update extras in documentation entry: ./scripts/ci/pre_commit/insert_extras.py language: python files: ^contributing-docs/12_airflow_dependencies_and_extras.rst$|^INSTALL$|^airflow/providers/.*/provider\.yaml$|^Dockerfile.* pass_filenames: false - additional_dependencies: ['rich>=12.4.4', 'hatchling==1.25.0'] + additional_dependencies: ["rich>=12.4.4", "hatchling==1.25.0"] - id: check-extras-order name: Check order of extras in Dockerfile entry: ./scripts/ci/pre_commit/check_order_dockerfile_extras.py language: python files: ^Dockerfile$ pass_filenames: false - additional_dependencies: ['rich>=12.4.4'] + additional_dependencies: ["rich>=12.4.4"] - id: generate-airflow-diagrams name: Generate airflow diagrams entry: ./scripts/ci/pre_commit/generate_airflow_diagrams.py language: python files: ^docs/.*/diagram_[^/]*\.py$ pass_filenames: true - additional_dependencies: ['rich>=12.4.4', "diagrams>=0.23.4"] + additional_dependencies: ["rich>=12.4.4", "diagrams>=0.23.4"] - id: update-supported-versions name: Updates supported versions in documentation entry: ./scripts/ci/pre_commit/supported_versions.py language: python files: ^docs/apache-airflow/installation/supported-versions\.rst$|^scripts/ci/pre_commit/supported_versions\.py$|^README\.md$ pass_filenames: false - additional_dependencies: ['tabulate'] + additional_dependencies: ["tabulate"] - id: check-revision-heads-map name: Check that the REVISION_HEADS_MAP is up-to-date language: python @@ -499,14 +498,14 @@ repos: ^scripts/ci/pre_commit/version_heads_map\.py$| ^airflow/migrations/versions/.*$|^airflow/migrations/versions| ^airflow/utils/db.py$ - additional_dependencies: ['packaging','google-re2'] + additional_dependencies: ["packaging", "google-re2"] - id: update-version name: Update version to the latest version in the documentation entry: ./scripts/ci/pre_commit/update_versions.py language: python files: ^docs|^airflow/__init__.py$ pass_filenames: false - additional_dependencies: ['rich>=12.4.4'] + additional_dependencies: ["rich>=12.4.4"] - id: check-pydevd-left-in-code language: pygrep name: Check for pydevd debug statements accidentally left @@ -580,6 +579,7 @@ repos: exclude: > (?x) ^airflow/api_connexion/openapi/v1.yaml$| + ^airflow/ui/openapi-gen/| ^airflow/cli/commands/webserver_command.py$| ^airflow/cli/commands/internal_api_command.py$| ^airflow/config_templates/| @@ -608,6 +608,7 @@ repos: ^airflow/providers/opsgenie/hooks/opsgenie.py$| ^airflow/providers/redis/provider.yaml$| ^airflow/serialization/serialized_objects.py$| + ^airflow/ui/pnpm-lock.yaml$| ^airflow/utils/db.py$| ^airflow/utils/trigger_rule.py$| ^airflow/www/static/css/bootstrap-theme.css$| @@ -627,6 +628,7 @@ repos: ^docs/apache-airflow-providers-cncf-kubernetes/operators.rst$| ^docs/conf.py$| ^docs/exts/removemarktransform.py$| + ^newsfragments/41761.significant.rst$| ^scripts/ci/pre_commit/vendor_k8s_json_schema.py$| ^tests/| ^.pre-commit-config\.yaml$| @@ -700,7 +702,7 @@ repos: entry: ./scripts/ci/pre_commit/check_get_lineage_collector_providers.py files: ^airflow/providers/.*\.py$ exclude: ^airflow/providers/common/compat/.*\.py$ - additional_dependencies: [ 'rich>=12.4.4' ] + additional_dependencies: ["rich>=12.4.4"] - id: check-decorated-operator-implements-custom-name name: Check @task decorator implements custom_operator_name language: python @@ -756,7 +758,7 @@ repos: language: python files: ^airflow/providers/.*/provider\.yaml$ pass_filenames: true - additional_dependencies: ['click', 'rich>=12.4.4', 'pyyaml'] + additional_dependencies: ["click", "rich>=12.4.4", "pyyaml"] require_serial: true - id: check-boring-cyborg-configuration name: Checks for Boring Cyborg configuration consistency @@ -764,7 +766,7 @@ repos: entry: ./scripts/ci/pre_commit/boring_cyborg.py pass_filenames: false require_serial: true - additional_dependencies: ['pyyaml', 'termcolor==1.1.0', 'wcmatch==8.2'] + additional_dependencies: ["pyyaml", "termcolor==1.1.0", "wcmatch==8.2"] - id: update-in-the-wild-to-be-sorted name: Sort INTHEWILD.md alphabetically entry: ./scripts/ci/pre_commit/sort_in_the_wild.py @@ -801,7 +803,7 @@ repos: pass_filenames: false files: ^chart require_serial: true - additional_dependencies: ['rich>=12.4.4','requests'] + additional_dependencies: ["rich>=12.4.4", "requests"] - id: kubeconform name: Kubeconform check on our helm chart entry: ./scripts/ci/pre_commit/kubeconform.py @@ -809,7 +811,7 @@ repos: pass_filenames: false files: ^chart require_serial: true - additional_dependencies: ['rich>=12.4.4','requests'] + additional_dependencies: ["rich>=12.4.4", "requests"] - id: shellcheck name: Check Shell scripts syntax correctness language: docker_image @@ -822,25 +824,44 @@ repos: language: node files: ^airflow/www/.*\.(css|sass|scss)$ # Keep dependency versions in sync w/ airflow/www/package.json - additional_dependencies: ['stylelint@13.3.1', 'stylelint-config-standard@20.0.0', 'stylelint-config-prettier@9.0.5'] + additional_dependencies: + ["stylelint@13.3.1", "stylelint-config-standard@20.0.0", "stylelint-config-prettier@9.0.5"] - id: compile-www-assets name: Compile www assets (manual) language: node - stages: ['manual'] - 'types_or': [javascript, ts, tsx] + stages: ["manual"] + types_or: [javascript, ts, tsx] files: ^airflow/www/ entry: ./scripts/ci/pre_commit/compile_www_assets.py pass_filenames: false - additional_dependencies: ['yarn@1.22.21'] + additional_dependencies: ["yarn@1.22.21"] - id: compile-www-assets-dev name: Compile www assets in dev mode (manual) language: node - stages: ['manual'] - 'types_or': [javascript, ts, tsx] + stages: ["manual"] + types_or: [javascript, ts, tsx] files: ^airflow/www/ entry: ./scripts/ci/pre_commit/compile_www_assets_dev.py pass_filenames: false - additional_dependencies: ['yarn@1.22.21'] + additional_dependencies: ["yarn@1.22.21"] + - id: compile-ui-assets + name: Compile ui assets (manual) + language: node + stages: ["manual"] + types_or: [javascript, ts, tsx] + files: ^airflow/ui/ + entry: ./scripts/ci/pre_commit/compile_ui_assets.py + pass_filenames: false + additional_dependencies: ["pnpm@9.7.1"] + - id: compile-ui-assets-dev + name: Compile ui assets in dev mode (manual) + language: node + stages: ["manual"] + types_or: [javascript, ts, tsx] + files: ^airflow/ui/ + entry: ./scripts/ci/pre_commit/compile_ui_assets_dev.py + pass_filenames: false + additional_dependencies: ["pnpm@9.7.1"] - id: check-providers-init-file-missing name: Provider init file is missing pass_filenames: false @@ -861,7 +882,7 @@ repos: - --max-length=60 language: python files: ^\.pre-commit-config\.yaml$|^scripts/ci/pre_commit/check_pre_commit_hooks\.py$ - additional_dependencies: ['pyyaml', 'jinja2', 'black==23.10.0', 'tabulate', 'rich>=12.4.4'] + additional_dependencies: ["pyyaml", "jinja2", "black==23.10.0", "tabulate", "rich>=12.4.4"] require_serial: true pass_filenames: false - id: check-integrations-list-consistent @@ -869,7 +890,7 @@ repos: entry: ./scripts/ci/pre_commit/check_integrations_list.py language: python files: ^scripts/ci/docker-compose/integration-.*\.yml$|^contributing-docs/testing/integration_tests.rst$ - additional_dependencies: ['black==23.10.0', 'tabulate', 'rich>=12.4.4', 'pyyaml'] + additional_dependencies: ["black==23.10.0", "tabulate", "rich>=12.4.4", "pyyaml"] require_serial: true pass_filenames: false - id: update-breeze-readme-config-hash @@ -884,7 +905,7 @@ repos: language: python entry: ./scripts/ci/pre_commit/update_source_date_epoch.py files: ^RELEASE_NOTES.rst$|^chart/RELEASE_NOTES.rst$ - additional_dependencies: ['rich>=12.4.4', 'pyyaml'] + additional_dependencies: ["rich>=12.4.4", "pyyaml"] pass_filenames: false require_serial: true - id: check-breeze-top-dependencies-limited @@ -894,7 +915,7 @@ repos: files: ^dev/breeze/.*$ pass_filenames: false require_serial: true - additional_dependencies: ['click', 'rich>=12.4.4', 'pyyaml'] + additional_dependencies: ["click", "rich>=12.4.4", "pyyaml"] - id: check-tests-in-the-right-folders name: Check if tests are in the right folders entry: ./scripts/ci/pre_commit/check_tests_in_right_folders.py @@ -902,7 +923,7 @@ repos: files: ^tests/.*\.py pass_filenames: true require_serial: true - additional_dependencies: ['rich>=12.4.4'] + additional_dependencies: ["rich>=12.4.4"] - id: check-system-tests-present name: Check if system tests have required segments of code entry: ./scripts/ci/pre_commit/check_system_tests.py @@ -910,7 +931,7 @@ repos: files: ^tests/system/.*/example_[^/]*\.py$ exclude: ^tests/system/providers/google/cloud/bigquery/example_bigquery_queries\.py$ pass_filenames: true - additional_dependencies: ['rich>=12.4.4'] + additional_dependencies: ["rich>=12.4.4"] - id: generate-pypi-readme name: Generate PyPI README entry: ./scripts/ci/pre_commit/generate_pypi_readme.py @@ -924,7 +945,7 @@ repos: language: node types: [markdown] files: \.(md|mdown|markdown)$ - additional_dependencies: ['markdownlint-cli@0.38.0'] + additional_dependencies: ["markdownlint-cli@0.38.0"] - id: lint-json-schema name: Lint JSON Schema files with JSON Schema entry: ./scripts/ci/pre_commit/json_schema.py @@ -936,7 +957,7 @@ repos: files: .*\.schema\.json$ exclude: ^.*/.*_vendor/ require_serial: true - additional_dependencies: ['jsonschema>=3.2.0,<5.0', 'PyYAML==5.3.1', 'requests==2.25.0'] + additional_dependencies: ["jsonschema>=3.2.0,<5.0", "PyYAML==5.3.1", "requests==2.25.0"] - id: lint-json-schema name: Lint NodePort Service with JSON Schema entry: ./scripts/ci/pre_commit/json_schema.py @@ -947,7 +968,7 @@ repos: pass_filenames: true files: ^scripts/ci/kubernetes/nodeport\.yaml$ require_serial: true - additional_dependencies: ['jsonschema>=3.2.0,<5.0', 'PyYAML==5.3.1', 'requests==2.25.0'] + additional_dependencies: ["jsonschema>=3.2.0,<5.0", "PyYAML==5.3.1", "requests==2.25.0"] - id: lint-json-schema name: Lint Docker compose files with JSON Schema entry: ./scripts/ci/pre_commit/json_schema.py @@ -962,7 +983,7 @@ repos: ^scripts/ci/docker-compose/grafana/.| ^scripts/ci/docker-compose/.+-config\.ya?ml require_serial: true - additional_dependencies: ['jsonschema>=3.2.0,<5.0', 'PyYAML==5.3.1', 'requests==2.25.0'] + additional_dependencies: ["jsonschema>=3.2.0,<5.0", "PyYAML==5.3.1", "requests==2.25.0"] - id: lint-json-schema name: Lint chart/values.schema.json file with JSON Schema entry: ./scripts/ci/pre_commit/json_schema.py @@ -974,13 +995,13 @@ repos: pass_filenames: false files: ^chart/values\.schema\.json$|^chart/values_schema\.schema\.json$ require_serial: true - additional_dependencies: ['jsonschema>=3.2.0,<5.0', 'PyYAML==5.3.1', 'requests==2.25.0'] + additional_dependencies: ["jsonschema>=3.2.0,<5.0", "PyYAML==5.3.1", "requests==2.25.0"] - id: update-vendored-in-k8s-json-schema name: Vendor k8s definitions into values.schema.json entry: ./scripts/ci/pre_commit/vendor_k8s_json_schema.py language: python files: ^chart/values\.schema\.json$ - additional_dependencies: ['requests==2.25.0'] + additional_dependencies: ["requests==2.25.0"] - id: lint-json-schema name: Lint chart/values.yaml file with JSON Schema entry: ./scripts/ci/pre_commit/json_schema.py @@ -993,7 +1014,7 @@ repos: pass_filenames: false files: ^chart/values\.yaml$|^chart/values\.schema\.json$ require_serial: true - additional_dependencies: ['jsonschema>=3.2.0,<5.0', 'PyYAML==5.3.1', 'requests==2.25.0'] + additional_dependencies: ["jsonschema>=3.2.0,<5.0", "PyYAML==5.3.1", "requests==2.25.0"] - id: lint-json-schema name: Lint config_templates/config.yml file with JSON Schema entry: ./scripts/ci/pre_commit/json_schema.py @@ -1004,14 +1025,14 @@ repos: pass_filenames: true files: ^airflow/config_templates/config\.yml$ require_serial: true - additional_dependencies: ['jsonschema>=3.2.0,<5.0', 'PyYAML==5.3.1', 'requests==2.25.0'] + additional_dependencies: ["jsonschema>=3.2.0,<5.0", "PyYAML==5.3.1", "requests==2.25.0"] - id: check-persist-credentials-disabled-in-github-workflows name: Check that workflow files have persist-credentials disabled entry: ./scripts/ci/pre_commit/checkout_no_credentials.py language: python pass_filenames: true files: ^\.github/workflows/.*\.yml$ - additional_dependencies: ['PyYAML', 'rich>=12.4.4'] + additional_dependencies: ["PyYAML", "rich>=12.4.4"] - id: check-docstring-param-types name: Check that docstrings do not specify param types entry: ./scripts/ci/pre_commit/docstring_param_type.py @@ -1019,7 +1040,7 @@ repos: pass_filenames: true files: \.py$ exclude: ^.*/.*_vendor/ - additional_dependencies: ['rich>=12.4.4'] + additional_dependencies: ["rich>=12.4.4"] - id: check-compat-cache-on-methods name: Check that compat cache do not use on class methods entry: ./scripts/ci/pre_commit/compat_cache_on_methods.py @@ -1081,14 +1102,14 @@ repos: ^generated/provider_dependencies.json$ require_serial: true pass_filenames: false - additional_dependencies: ['rich>=12.4.4'] + additional_dependencies: ["rich>=12.4.4"] - id: check-example-dags-urls name: Check that example dags url include provider versions entry: ./scripts/ci/pre_commit/update_example_dags_paths.py language: python pass_filenames: true files: ^docs/.*example-dags\.rst$|^docs/.*index\.rst$ - additional_dependencies: ['rich>=12.4.4', 'pyyaml'] + additional_dependencies: ["rich>=12.4.4", "pyyaml"] always_run: true - id: check-system-tests-tocs name: Check that system tests is properly added @@ -1096,7 +1117,7 @@ repos: language: python pass_filenames: true files: ^docs/apache-airflow-providers-[^/]*/index\.rst$ - additional_dependencies: ['rich>=12.4.4', 'pyyaml'] + additional_dependencies: ["rich>=12.4.4", "pyyaml"] - id: check-lazy-logging name: Check that all logging methods are lazy entry: ./scripts/ci/pre_commit/check_lazy_logging.py @@ -1104,21 +1125,29 @@ repos: pass_filenames: true files: \.py$ exclude: ^.*/.*_vendor/ - additional_dependencies: ['rich>=12.4.4', 'astor'] + additional_dependencies: ["rich>=12.4.4", "astor"] - id: create-missing-init-py-files-tests name: Create missing init.py files in tests entry: ./scripts/ci/pre_commit/check_init_in_tests.py language: python - additional_dependencies: ['rich>=12.4.4'] + additional_dependencies: ["rich>=12.4.4"] pass_filenames: false files: ^tests/.*\.py$ - id: ts-compile-format-lint-www - name: TS types generation / ESLint / Prettier against UI files + name: TS types generation / ESLint / Prettier legacy UI files language: node - 'types_or': [javascript, ts, tsx, yaml, css, json] + types_or: [javascript, ts, tsx, yaml, css, json] files: ^airflow/www/static/(js|css)/|^airflow/api_connexion/openapi/v1\.yaml$ - entry: ./scripts/ci/pre_commit/www_lint.py - additional_dependencies: ['yarn@1.22.21', "openapi-typescript@>=6.7.4"] + entry: ./scripts/ci/pre_commit/lint_www.py + additional_dependencies: ["yarn@1.22.21", "openapi-typescript@>=6.7.4"] + pass_filenames: false + - id: ts-compile-format-lint-ui + name: TS types generation / ESLint / Prettier new UI files + language: node + types_or: [javascript, ts, tsx, yaml, css, json] + files: ^airflow/ui/|^airflow/api_connexion/openapi/v1\.yaml$ + entry: ./scripts/ci/pre_commit/lint_ui.py + additional_dependencies: ["pnpm@9.7.1"] pass_filenames: false - id: check-tests-unittest-testcase name: Check that unit tests do not inherit from unittest.TestCase @@ -1145,7 +1174,7 @@ repos: entry: ./scripts/ci/pre_commit/check_provider_docs.py language: python files: ^airflow/providers/.*/provider\.yaml|^docs/.* - additional_dependencies: ['rich>=12.4.4', 'pyyaml', 'jinja2'] + additional_dependencies: ["rich>=12.4.4", "pyyaml", "jinja2"] require_serial: true - id: bandit name: bandit @@ -1153,29 +1182,27 @@ repos: entry: bandit language: python language_version: python3 - types: [ python ] - additional_dependencies: ['bandit==1.7.6'] + types: [python] + additional_dependencies: ["bandit==1.7.6"] require_serial: true files: ^airflow/.* - exclude: - airflow/example_dags/.* + exclude: airflow/example_dags/.* args: - "--skip" - "B101,B301,B324,B403,B404,B603" - "--severity-level" - - "high" # TODO: remove this line when we fix all the issues + - "high" # TODO: remove this line when we fix all the issues - id: pylint name: pylint description: "Pylint is a static code analyser for Python 2 or 3." entry: pylint language: python language_version: python3 - types: [ python ] - additional_dependencies: ['pylint==3.1.0'] + types: [python] + additional_dependencies: ["pylint==3.1.0"] require_serial: true files: ^airflow/.* - exclude: - airflow/example_dags/.* + exclude: airflow/example_dags/.* args: # Use pylint only for the specific check, which are not available into the ruff - "--disable=all" @@ -1222,16 +1249,16 @@ repos: entry: ./scripts/ci/pre_commit/mypy.py files: ^dev/.*\.py$|^scripts/.*\.py$ require_serial: true - additional_dependencies: ['rich>=12.4.4'] + additional_dependencies: ["rich>=12.4.4"] - id: mypy-dev - stages: [ 'manual' ] + stages: ["manual"] name: Run mypy for dev (manual) language: python entry: ./scripts/ci/pre_commit/mypy_folder.py dev pass_filenames: false files: ^.*\.py$ require_serial: true - additional_dependencies: [ 'rich>=12.4.4' ] + additional_dependencies: ["rich>=12.4.4"] - id: mypy-airflow name: Run mypy for airflow language: python @@ -1239,16 +1266,16 @@ repos: files: \.py$ exclude: ^.*/.*_vendor/|^airflow/migrations|^airflow/providers|^dev|^scripts|^docs|^provider_packages|^tests/providers|^tests/system/providers|^tests/dags/test_imports.py|^clients/python/test_.*\.py require_serial: true - additional_dependencies: ['rich>=12.4.4'] + additional_dependencies: ["rich>=12.4.4"] - id: mypy-airflow - stages: [ 'manual' ] + stages: ["manual"] name: Run mypy for airflow (manual) language: python entry: ./scripts/ci/pre_commit/mypy_folder.py airflow pass_filenames: false files: ^.*\.py$ require_serial: true - additional_dependencies: [ 'rich>=12.4.4' ] + additional_dependencies: ["rich>=12.4.4"] - id: mypy-providers name: Run mypy for providers language: python @@ -1256,16 +1283,16 @@ repos: files: ^airflow/providers/.*\.py$|^tests/providers/.*\.py$|^tests/system/providers/.*\.py$ exclude: ^.*/.*_vendor/ require_serial: true - additional_dependencies: ['rich>=12.4.4'] + additional_dependencies: ["rich>=12.4.4"] - id: mypy-providers - stages: ['manual'] + stages: ["manual"] name: Run mypy for providers (manual) language: python entry: ./scripts/ci/pre_commit/mypy_folder.py airflow/providers pass_filenames: false files: ^.*\.py$ require_serial: true - additional_dependencies: ['rich>=12.4.4'] + additional_dependencies: ["rich>=12.4.4"] - id: mypy-docs name: Run mypy for /docs/ folder language: python @@ -1273,22 +1300,22 @@ repos: files: ^docs/.*\.py$ exclude: ^docs/rtd-deprecation require_serial: true - additional_dependencies: ['rich>=12.4.4'] + additional_dependencies: ["rich>=12.4.4"] - id: mypy-docs - stages: ['manual'] + stages: ["manual"] name: Run mypy for /docs/ folder (manual) language: python entry: ./scripts/ci/pre_commit/mypy_folder.py docs pass_filenames: false files: ^.*\.py$ require_serial: true - additional_dependencies: ['rich>=12.4.4'] + additional_dependencies: ["rich>=12.4.4"] - id: check-provider-yaml-valid name: Validate provider.yaml files entry: ./scripts/ci/pre_commit/check_provider_yaml_files.py language: python files: ^airflow/providers/.*/provider\.yaml$ - additional_dependencies: ['rich>=12.4.4'] + additional_dependencies: ["rich>=12.4.4"] require_serial: true - id: update-migration-references name: Update migration ref doc @@ -1297,12 +1324,12 @@ repos: pass_filenames: false files: | ^airflow/migrations/versions/.*\.py$|^docs/apache-airflow/migrations-ref\.rst$|^airflow/providers/fab/alembic/versions/.*\.py$ - additional_dependencies: ['rich>=12.4.4'] + additional_dependencies: ["rich>=12.4.4"] - id: update-er-diagram name: Update ER diagram language: python entry: ./scripts/ci/pre_commit/update_er_diagram.py pass_filenames: false files: ^airflow/migrations/versions/.*\.py$|^docs/apache-airflow/migrations-ref\.rst$ - additional_dependencies: ['rich>=12.4.4'] + additional_dependencies: ["rich>=12.4.4"] ## ONLY ADD PRE-COMMITS HERE THAT REQUIRE CI IMAGE diff --git a/.rat-excludes b/.rat-excludes index 864301b7a273b..1f13a237337fb 100644 --- a/.rat-excludes +++ b/.rat-excludes @@ -19,6 +19,7 @@ .rat-excludes .stylelintignore .stylelintrc +.venv requirements requirements.txt .*log @@ -165,3 +166,4 @@ version.txt # Front end generated files api-generated.ts +openapi-gen diff --git a/PROVIDERS.rst b/PROVIDERS.rst index e0799e0a120ca..b874f70f0cf46 100644 --- a/PROVIDERS.rst +++ b/PROVIDERS.rst @@ -123,6 +123,15 @@ the community. Also it is often easier to advertise and promote usage of the pro themselves when they own, manage and release their provider, especially when they can synchronize releases of their provider with new feature, the service might get added. +Examples: + +Huawei Cloud provider - `Discussion `_ +Cloudera provider - `Discussion `_, `Vote `_ +PgVector / Weaviate/ OpenAI provider - `Discussion `_, `Lazy Consensus vote `_ +Pinecone / OpenAI / Cohere provider - `Discussion `_, `Vote `_, `VOTE Result `_ + +Note that some providers have regular vote and some lazy consensus, please refer to the above sections for explanation why it's not the same for all providers + Community providers release process ----------------------------------- diff --git a/airflow/cli/cli_config.py b/airflow/cli/cli_config.py index 43c853a060d94..508a18263d48e 100644 --- a/airflow/cli/cli_config.py +++ b/airflow/cli/cli_config.py @@ -321,15 +321,6 @@ def string_lower_type(val): ), action="store_true", ) -ARG_BF_IGNORE_FIRST_DEPENDS_ON_PAST = Arg( - ("-I", "--ignore-first-depends-on-past"), - help=( - "Ignores depends_on_past dependencies for the first " - "set of tasks only (subsequent executions in the backfill " - "DO respect depends_on_past)" - ), - action="store_true", -) ARG_POOL = Arg(("--pool",), "Resource pool to use") ARG_DELAY_ON_LIMIT = Arg( ("--delay-on-limit",), @@ -383,11 +374,6 @@ def string_lower_type(val): action="store_true", ) -ARG_TREAT_DAG_AS_REGEX = Arg( - ("--treat-dag-as-regex",), - help=("Deprecated -- use `--treat-dag-id-as-regex` instead"), - action="store_true", -) ARG_TREAT_DAG_ID_AS_REGEX = Arg( ("--treat-dag-id-as-regex",), @@ -1230,7 +1216,6 @@ class GroupCommand(NamedTuple): ARG_CONTINUE_ON_FAILURES, ARG_DISABLE_RETRY, ARG_BF_IGNORE_DEPENDENCIES, - ARG_BF_IGNORE_FIRST_DEPENDS_ON_PAST, ARG_SUBDIR, ARG_POOL, ARG_DELAY_ON_LIMIT, @@ -1240,7 +1225,6 @@ class GroupCommand(NamedTuple): ARG_RESET_DAG_RUN, ARG_RERUN_FAILED_TASKS, ARG_RUN_BACKWARDS, - ARG_TREAT_DAG_AS_REGEX, ARG_TREAT_DAG_ID_AS_REGEX, ), ), diff --git a/airflow/cli/commands/dag_command.py b/airflow/cli/commands/dag_command.py index d89be8b589f73..1796f6cab15e3 100644 --- a/airflow/cli/commands/dag_command.py +++ b/airflow/cli/commands/dag_command.py @@ -26,7 +26,6 @@ import signal import subprocess import sys -import warnings from typing import TYPE_CHECKING import re2 @@ -37,7 +36,7 @@ from airflow.api_connexion.schemas.dag_schema import dag_schema from airflow.cli.simple_table import AirflowConsole from airflow.configuration import conf -from airflow.exceptions import AirflowException, RemovedInAirflow3Warning +from airflow.exceptions import AirflowException from airflow.jobs.job import Job from airflow.models import DagBag, DagModel, DagRun, TaskInstance from airflow.models.dag import DAG @@ -133,22 +132,8 @@ def dag_backfill(args, dag: list[DAG] | DAG | None = None) -> None: """Create backfill job or dry run for a DAG or list of DAGs using regex.""" logging.basicConfig(level=settings.LOGGING_LEVEL, format=settings.SIMPLE_LOG_FORMAT) signal.signal(signal.SIGTERM, sigint_handler) - if args.ignore_first_depends_on_past: - warnings.warn( - "--ignore-first-depends-on-past is deprecated as the value is always set to True", - category=RemovedInAirflow3Warning, - stacklevel=4, - ) args.ignore_first_depends_on_past = True - if not args.treat_dag_id_as_regex and args.treat_dag_as_regex: - warnings.warn( - "--treat-dag-as-regex is deprecated, use --treat-dag-id-as-regex instead", - category=RemovedInAirflow3Warning, - stacklevel=4, - ) - args.treat_dag_id_as_regex = args.treat_dag_as_regex - if not args.start_date and not args.end_date: raise AirflowException("Provide a start_date and/or end_date") diff --git a/airflow/config_templates/config.yml b/airflow/config_templates/config.yml index a458105d28798..2e624db827360 100644 --- a/airflow/config_templates/config.yml +++ b/airflow/config_templates/config.yml @@ -1090,7 +1090,7 @@ metrics: version_added: 2.6.0 type: string example: "\"scheduler,executor,dagrun,pool,triggerer,celery\" - or \"^scheduler,^executor,heartbeat|timeout\"" + or \"^scheduler,^executor,heartbeat|timeout\"" default: "" metrics_block_list: description: | @@ -1104,7 +1104,7 @@ metrics: version_added: 2.6.0 type: string example: "\"scheduler,executor,dagrun,pool,triggerer,celery\" - or \"^scheduler,^executor,heartbeat|timeout\"" + or \"^scheduler,^executor,heartbeat|timeout\"" default: "" statsd_on: description: | @@ -1517,15 +1517,6 @@ operators: type: string example: ~ default: "default" - allow_illegal_arguments: - description: | - Is allowed to pass additional/unused arguments (args, kwargs) to the BaseOperator operator. - If set to ``False``, an exception will be thrown, - otherwise only the console message will be displayed. - version_added: 2.0.0 - type: string - example: ~ - default: "False" webserver: description: ~ options: @@ -1910,7 +1901,9 @@ webserver: default: "False" cookie_samesite: description: | - Set samesite policy on session cookie + Set samesite policy on session cookies. + As `recommended `_ + by Flask, the default is set to ``Lax`` and not a empty string. version_added: 1.10.3 type: string example: ~ diff --git a/airflow/dag_processing/manager.py b/airflow/dag_processing/manager.py index 1f12f3cb033ba..37b4323ac4d9e 100644 --- a/airflow/dag_processing/manager.py +++ b/airflow/dag_processing/manager.py @@ -526,14 +526,20 @@ def deactivate_stale_dags( dags_parsed = session.execute(query) for dag in dags_parsed: + # When the DAG processor runs as part of the scheduler, and the user changes the DAGs folder, + # DAGs from the previous DAGs folder will be marked as stale. Note that this change has no impact + # on standalone DAG processors. + dag_not_in_current_dag_folder = os.path.commonpath([dag.fileloc, dag_directory]) != dag_directory # The largest valid difference between a DagFileStat's last_finished_time and a DAG's # last_parsed_time is the processor_timeout. Longer than that indicates that the DAG is # no longer present in the file. We have a stale_dag_threshold configured to prevent a # significant delay in deactivation of stale dags when a large timeout is configured - if ( + dag_removed_from_dag_folder_or_file = ( dag.fileloc in last_parsed and (dag.last_parsed_time + timedelta(seconds=stale_dag_threshold)) < last_parsed[dag.fileloc] - ): + ) + + if dag_not_in_current_dag_folder or dag_removed_from_dag_folder_or_file: cls.logger().info("DAG %s is missing and will be deactivated.", dag.dag_id) to_deactivate.add(dag.dag_id) diff --git a/airflow/hooks/base.py b/airflow/hooks/base.py index d2a47e321ce6d..e82c838c8c331 100644 --- a/airflow/hooks/base.py +++ b/airflow/hooks/base.py @@ -20,10 +20,8 @@ from __future__ import annotations import logging -import warnings from typing import TYPE_CHECKING, Any -from airflow.exceptions import RemovedInAirflow3Warning from airflow.typing_compat import Protocol from airflow.utils.log.logging_mixin import LoggingMixin @@ -54,22 +52,6 @@ def __init__(self, logger_name: str | None = None): self._log_config_logger_name = "airflow.task.hooks" self._logger_name = logger_name - @classmethod - def get_connections(cls, conn_id: str) -> list[Connection]: - """ - Get all connections as an iterable, given the connection id. - - :param conn_id: connection id - :return: array of connections - """ - warnings.warn( - "`BaseHook.get_connections` method will be deprecated in the future." - "Please use `BaseHook.get_connection` instead.", - RemovedInAirflow3Warning, - stacklevel=2, - ) - return [cls.get_connection(conn_id)] - @classmethod def get_connection(cls, conn_id: str) -> Connection: """ diff --git a/airflow/kubernetes/__init__.py b/airflow/kubernetes/__init__.py deleted file mode 100644 index 4cea2a1877607..0000000000000 --- a/airflow/kubernetes/__init__.py +++ /dev/null @@ -1,154 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -from __future__ import annotations - -from airflow.utils.deprecation_tools import add_deprecated_classes - -__deprecated_classes: dict[str, dict[str, str]] = { - "kubernetes_helper_functions": { - "add_pod_suffix": "airflow.providers.cncf.kubernetes.kubernetes_helper_functions.add_pod_suffix.", - "annotations_for_logging_task_metadata": "airflow.providers.cncf.kubernetes." - "kubernetes_helper_functions." - "annotations_for_logging_task_metadata.", - "annotations_to_key": "airflow.providers.cncf.kubernetes." - "kubernetes_helper_functions.annotations_to_key", - "create_pod_id": "airflow.providers.cncf.kubernetes.kubernetes_helper_functions.create_pod_id", - "get_logs_task_metadata": "airflow.providers.cncf.kubernetes." - "kubernetes_helper_functions.get_logs_task_metadata", - "rand_str": "airflow.providers.cncf.kubernetes.kubernetes_helper_functions.rand_str", - }, - "pod": { - "Port": "airflow.providers.cncf.kubernetes.backcompat.pod.Port", - "Resources": "airflow.providers.cncf.kubernetes.backcompat.pod.Resources", - }, - "pod_launcher": { - "PodLauncher": "airflow.providers.cncf.kubernetes.pod_launcher.PodLauncher", - "PodStatus": "airflow.providers.cncf.kubernetes.pod_launcher.PodStatus", - }, - "pod_launcher_deprecated": { - "PodLauncher": "airflow.providers.cncf.kubernetes.pod_launcher_deprecated.PodLauncher", - "PodStatus": "airflow.providers.cncf.kubernetes.pod_launcher_deprecated.PodStatus", - # imports of imports from other kubernetes modules (in case they are imported from here) - "get_kube_client": "airflow.providers.cncf.kubernetes.kube_client.get_kube_client", - "PodDefaults": "airflow.providers.cncf.kubernetes.pod_generator_deprecated.PodDefaults", - }, - "pod_runtime_info_env": { - "PodRuntimeInfoEnv": "airflow.providers.cncf.kubernetes.backcompat." - "pod_runtime_info_env.PodRuntimeInfoEnv", - }, - "volume": { - "Volume": "airflow.providers.cncf.kubernetes.backcompat.volume.Volume", - }, - "volume_mount": { - "VolumeMount": "airflow.providers.cncf.kubernetes.backcompat.volume_mount.VolumeMount", - }, - # the below classes are not served from provider but from internal pre_7_4_0_compatibility package - "k8s_model": { - "K8SModel": "airflow.kubernetes.pre_7_4_0_compatibility.k8s_model.K8SModel", - "append_to_pod": "airflow.kubernetes.pre_7_4_0_compatibility.k8s_model.append_to_pod", - }, - "kube_client": { - "_disable_verify_ssl": "airflow.kubernetes.pre_7_4_0_compatibility.kube_client._disable_verify_ssl", - "_enable_tcp_keepalive": "airflow.kubernetes.pre_7_4_0_compatibility.kube_client." - "_enable_tcp_keepalive", - "get_kube_client": "airflow.kubernetes.pre_7_4_0_compatibility.kube_client.get_kube_client", - }, - "pod_generator": { - "datetime_to_label_safe_datestring": "airflow.kubernetes.pre_7_4_0_compatibility.pod_generator" - ".datetime_to_label_safe_datestring", - "extend_object_field": "airflow.kubernetes.pre_7_4_0_compatibility.pod_generator." - "extend_object_field", - "label_safe_datestring_to_datetime": "airflow.kubernetes.pre_7_4_0_compatibility.pod_generator." - "label_safe_datestring_to_datetime", - "make_safe_label_value": "airflow.kubernetes.pre_7_4_0_compatibility.pod_generator." - "make_safe_label_value", - "merge_objects": "airflow.kubernetes.pre_7_4_0_compatibility.pod_generator.merge_objects", - "PodGenerator": "airflow.kubernetes.pre_7_4_0_compatibility.pod_generator.PodGenerator", - # imports of imports from other kubernetes modules (in case they are imported from here) - "PodGeneratorDeprecated": "airflow.kubernetes.pre_7_4_0_compatibility." - "pod_generator_deprecated.PodGenerator", - "PodDefaults": "airflow.kubernetes.pre_7_4_0_compatibility.pod_generator_deprecated.PodDefaults", - # those two are inlined in kubernetes.pre_7_4_0_compatibility.pod_generator even if - # originally they were imported in airflow.kubernetes.pod_generator - "add_pod_suffix": "airflow.kubernetes.pre_7_4_0_compatibility.pod_generator.add_pod_suffix", - "rand_str": "airflow.kubernetes.pre_7_4_0_compatibility.pod_generator.rand_str", - }, - "pod_generator_deprecated": { - "make_safe_label_value": "airflow.kubernetes.pre_7_4_0_compatibility.pod_generator_deprecated." - "make_safe_label_value", - "PodDefaults": "airflow.kubernetes.pre_7_4_0_compatibility.pod_generator_deprecated.PodDefaults", - "PodGenerator": "airflow.kubernetes.pre_7_4_0_compatibility.pod_generator_deprecated.PodGenerator", - }, - "secret": { - "Secret": "airflow.kubernetes.pre_7_4_0_compatibility.secret.Secret", - # imports of imports from other kubernetes modules (in case they are imported from here) - "K8SModel": "airflow.kubernetes.pre_7_4_0_compatibility.k8s_model.K8SModel", - }, -} - -__override_deprecated_names: dict[str, dict[str, str]] = { - "pod": { - "Port": "kubernetes.client.models.V1ContainerPort", - "Resources": "kubernetes.client.models.V1ResourceRequirements", - }, - "pod_runtime_info_env": { - "PodRuntimeInfoEnv": "kubernetes.client.models.V1EnvVar", - }, - "volume": { - "Volume": "kubernetes.client.models.V1Volume", - }, - "volume_mount": { - "VolumeMount": "kubernetes.client.models.V1VolumeMount", - }, - "k8s_model": { - "K8SModel": "airflow.airflow.providers.cncf.kubernetes.k8s_model.K8SModel", - "append_to_pod": "airflow.airflow.providers.cncf.kubernetes.k8s_model.append_to_pod", - }, - "kube_client": { - "_disable_verify_ssl": "airflow.kubernetes.airflow.providers.cncf.kubernetes." - "kube_client._disable_verify_ssl", - "_enable_tcp_keepalive": "airflow.kubernetes.airflow.providers.cncf.kubernetes.kube_client." - "_enable_tcp_keepalive", - "get_kube_client": "airflow.kubernetes.airflow.providers.cncf.kubernetes.kube_client.get_kube_client", - }, - "pod_generator": { - "datetime_to_label_safe_datestring": "airflow.providers.cncf.kubernetes.pod_generator" - ".datetime_to_label_safe_datestring", - "extend_object_field": "airflow.kubernetes.airflow.providers.cncf.kubernetes.pod_generator." - "extend_object_field", - "label_safe_datestring_to_datetime": "airflow.providers.cncf.kubernetes.pod_generator." - "label_safe_datestring_to_datetime", - "make_safe_label_value": "airflow.providers.cncf.kubernetes.pod_generator.make_safe_label_value", - "merge_objects": "airflow.providers.cncf.kubernetes.pod_generator.merge_objects", - "PodGenerator": "airflow.providers.cncf.kubernetes.pod_generator.PodGenerator", - }, - "pod_generator_deprecated": { - "make_safe_label_value": "airflow.providers.cncf.kubernetes.pod_generator_deprecated." - "make_safe_label_value", - "PodDefaults": "airflow.providers.cncf.kubernetes.pod_generator_deprecated.PodDefaults", - "PodGenerator": "airflow.providers.cncf.kubernetes.pod_generator_deprecated.PodGenerator", - }, - "secret": { - "Secret": "airflow.providers.cncf.kubernetes.secret.Secret", - }, -} -add_deprecated_classes( - __deprecated_classes, - __name__, - __override_deprecated_names, - "The `cncf.kubernetes` provider must be >= 7.4.0 for that.", -) diff --git a/airflow/kubernetes/pre_7_4_0_compatibility/__init__.py b/airflow/kubernetes/pre_7_4_0_compatibility/__init__.py deleted file mode 100644 index 18c84b6d03e51..0000000000000 --- a/airflow/kubernetes/pre_7_4_0_compatibility/__init__.py +++ /dev/null @@ -1,31 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -from __future__ import annotations - -# All the classes in this module should only be kept for backwards-compatibility reasons. -# old cncf.kubernetes providers will use those in their frozen version for pre-7.4.0 release -import warnings - -warnings.warn( - "This module is deprecated. The `cncf.kubernetes` provider before version 7.4.0 uses this module - " - "you should migrate to a newer version of `cncf.kubernetes` to get rid of this warning. If you " - "import the module via `airflow.kubernetes` import, please use `cncf.kubernetes' " - "provider 7.4.0+ and switch all your imports to use `apache.airflow.providers.cncf.kubernetes` " - "to get rid of the warning.", - DeprecationWarning, - stacklevel=2, -) diff --git a/airflow/kubernetes/pre_7_4_0_compatibility/k8s_model.py b/airflow/kubernetes/pre_7_4_0_compatibility/k8s_model.py deleted file mode 100644 index 930b194a2dbea..0000000000000 --- a/airflow/kubernetes/pre_7_4_0_compatibility/k8s_model.py +++ /dev/null @@ -1,62 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -"""Classes for interacting with Kubernetes API.""" - -from __future__ import annotations - -from abc import ABC, abstractmethod -from functools import reduce -from typing import TYPE_CHECKING - -if TYPE_CHECKING: - from kubernetes.client import models as k8s - - -class K8SModel(ABC): - """ - Airflow Kubernetes models are here for backwards compatibility reasons only. - - Ideally clients should use the kubernetes API - and the process of - - client input -> Airflow k8s models -> k8s models - - can be avoided. All of these models implement the - `attach_to_pod` method so that they integrate with the kubernetes client. - """ - - @abstractmethod - def attach_to_pod(self, pod: k8s.V1Pod) -> k8s.V1Pod: - """ - Attaches to pod. - - :param pod: A pod to attach this Kubernetes object to - :return: The pod with the object attached - """ - - -def append_to_pod(pod: k8s.V1Pod, k8s_objects: list[K8SModel] | None): - """ - Attach additional specs to an existing pod object. - - :param pod: A pod to attach a list of Kubernetes objects to - :param k8s_objects: a potential None list of K8SModels - :return: pod with the objects attached if they exist - """ - if not k8s_objects: - return pod - return reduce(lambda p, o: o.attach_to_pod(p), k8s_objects, pod) diff --git a/airflow/kubernetes/pre_7_4_0_compatibility/kube_client.py b/airflow/kubernetes/pre_7_4_0_compatibility/kube_client.py deleted file mode 100644 index 982f0da439bc5..0000000000000 --- a/airflow/kubernetes/pre_7_4_0_compatibility/kube_client.py +++ /dev/null @@ -1,145 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -"""Client for kubernetes communication.""" - -from __future__ import annotations - -import logging - -import urllib3.util - -from airflow.configuration import conf - -log = logging.getLogger(__name__) - -try: - from kubernetes import client, config - from kubernetes.client import Configuration - from kubernetes.client.rest import ApiException - - has_kubernetes = True - - def _get_default_configuration() -> Configuration: - if hasattr(Configuration, "get_default_copy"): - return Configuration.get_default_copy() - return Configuration() - - def _disable_verify_ssl() -> None: - configuration = _get_default_configuration() - configuration.verify_ssl = False - Configuration.set_default(configuration) - -except ImportError as e: - # We need an exception class to be able to use it in ``except`` elsewhere - # in the code base - ApiException = BaseException - has_kubernetes = False - _import_err = e - - -def _enable_tcp_keepalive() -> None: - """ - Enable TCP keepalive mechanism. - - This prevents urllib3 connection to hang indefinitely when idle connection - is time-outed on services like cloud load balancers or firewalls. - - See https://github.com/apache/airflow/pull/11406 for detailed explanation. - Please ping @michalmisiewicz or @dimberman in the PR if you want to modify this function. - """ - import socket - - from urllib3.connection import HTTPConnection, HTTPSConnection - - tcp_keep_idle = conf.getint("kubernetes_executor", "tcp_keep_idle") - tcp_keep_intvl = conf.getint("kubernetes_executor", "tcp_keep_intvl") - tcp_keep_cnt = conf.getint("kubernetes_executor", "tcp_keep_cnt") - - socket_options = [(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)] - - if hasattr(socket, "TCP_KEEPIDLE"): - socket_options.append((socket.IPPROTO_TCP, socket.TCP_KEEPIDLE, tcp_keep_idle)) - else: - log.debug("Unable to set TCP_KEEPIDLE on this platform") - - if hasattr(socket, "TCP_KEEPINTVL"): - socket_options.append((socket.IPPROTO_TCP, socket.TCP_KEEPINTVL, tcp_keep_intvl)) - else: - log.debug("Unable to set TCP_KEEPINTVL on this platform") - - if hasattr(socket, "TCP_KEEPCNT"): - socket_options.append((socket.IPPROTO_TCP, socket.TCP_KEEPCNT, tcp_keep_cnt)) - else: - log.debug("Unable to set TCP_KEEPCNT on this platform") - - HTTPSConnection.default_socket_options = HTTPSConnection.default_socket_options + socket_options - HTTPConnection.default_socket_options = HTTPConnection.default_socket_options + socket_options - - -def get_kube_client( - in_cluster: bool = conf.getboolean("kubernetes_executor", "in_cluster"), - cluster_context: str | None = None, - config_file: str | None = None, -) -> client.CoreV1Api: - """ - Retrieve Kubernetes client. - - :param in_cluster: whether we are in cluster - :param cluster_context: context of the cluster - :param config_file: configuration file - :return kubernetes client - :rtype client.CoreV1Api - """ - if not has_kubernetes: - raise _import_err - - if conf.getboolean("kubernetes_executor", "enable_tcp_keepalive"): - _enable_tcp_keepalive() - - configuration = _get_default_configuration() - api_client_retry_configuration = conf.getjson( - "kubernetes_executor", "api_client_retry_configuration", fallback={} - ) - - if not conf.getboolean("kubernetes_executor", "verify_ssl"): - _disable_verify_ssl() - - if isinstance(api_client_retry_configuration, dict): - configuration.retries = urllib3.util.Retry(**api_client_retry_configuration) - else: - raise ValueError("api_client_retry_configuration should be a dictionary") - - if in_cluster: - config.load_incluster_config(client_configuration=configuration) - else: - if cluster_context is None: - cluster_context = conf.get("kubernetes_executor", "cluster_context", fallback=None) - if config_file is None: - config_file = conf.get("kubernetes_executor", "config_file", fallback=None) - config.load_kube_config( - config_file=config_file, context=cluster_context, client_configuration=configuration - ) - - if not conf.getboolean("kubernetes_executor", "verify_ssl"): - configuration.verify_ssl = False - - ssl_ca_cert = conf.get("kubernetes_executor", "ssl_ca_cert") - if ssl_ca_cert: - configuration.ssl_ca_cert = ssl_ca_cert - - api_client = client.ApiClient(configuration=configuration) - return client.CoreV1Api(api_client) diff --git a/airflow/kubernetes/pre_7_4_0_compatibility/pod_generator.py b/airflow/kubernetes/pre_7_4_0_compatibility/pod_generator.py deleted file mode 100644 index aec5602744a25..0000000000000 --- a/airflow/kubernetes/pre_7_4_0_compatibility/pod_generator.py +++ /dev/null @@ -1,680 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -""" -Pod generator compatible with cncf-providers released before 2.7.0 of airflow. - -Compatible with pre-7.4.0 of the cncf.kubernetes provider. - -This module provides an interface between the previous Pod -API and outputs a kubernetes.client.models.V1Pod. -The advantage being that the full Kubernetes API -is supported and no serialization need be written. -""" - -from __future__ import annotations - -import copy -import logging -import os -import secrets -import string -import warnings -from functools import reduce -from typing import TYPE_CHECKING - -import re2 -from dateutil import parser -from kubernetes.client import models as k8s -from kubernetes.client.api_client import ApiClient - -from airflow.exceptions import ( - AirflowConfigException, - PodMutationHookException, - PodReconciliationError, - RemovedInAirflow3Warning, -) -from airflow.kubernetes.pre_7_4_0_compatibility.pod_generator_deprecated import ( - PodDefaults, - PodGenerator as PodGeneratorDeprecated, -) -from airflow.utils import yaml -from airflow.utils.hashlib_wrapper import md5 -from airflow.version import version as airflow_version - -if TYPE_CHECKING: - import datetime - -log = logging.getLogger(__name__) - -MAX_LABEL_LEN = 63 - -alphanum_lower = string.ascii_lowercase + string.digits - - -def rand_str(num): - """ - Generate random lowercase alphanumeric string of length num. - - :meta private: - """ - return "".join(secrets.choice(alphanum_lower) for _ in range(num)) - - -def add_pod_suffix(pod_name: str, rand_len: int = 8, max_len: int = 80) -> str: - """ - Add random string to pod name while staying under max length. - - :param pod_name: name of the pod - :param rand_len: length of the random string to append - :max_len: maximum length of the pod name - :meta private: - """ - suffix = "-" + rand_str(rand_len) - return pod_name[: max_len - len(suffix)].strip("-.") + suffix - - -def make_safe_label_value(string: str) -> str: - """ - Normalize a provided label to be of valid length and characters. - - Valid label values must be 63 characters or less and must be empty or begin and - end with an alphanumeric character ([a-z0-9A-Z]) with dashes (-), underscores (_), - dots (.), and alphanumerics between. - - If the label value is greater than 63 chars once made safe, or differs in any - way from the original value sent to this function, then we need to truncate to - 53 chars, and append it with a unique hash. - """ - safe_label = re2.sub(r"^[^a-z0-9A-Z]*|[^a-zA-Z0-9_\-\.]|[^a-z0-9A-Z]*$", "", string) - - if len(safe_label) > MAX_LABEL_LEN or string != safe_label: - safe_hash = md5(string.encode()).hexdigest()[:9] - safe_label = safe_label[: MAX_LABEL_LEN - len(safe_hash) - 1] + "-" + safe_hash - - return safe_label - - -def datetime_to_label_safe_datestring(datetime_obj: datetime.datetime) -> str: - """ - Transform a datetime string to use as a label. - - Kubernetes doesn't like ":" in labels, since ISO datetime format uses ":" but - not "_" let's - replace ":" with "_" - - :param datetime_obj: datetime.datetime object - :return: ISO-like string representing the datetime - """ - return datetime_obj.isoformat().replace(":", "_").replace("+", "_plus_") - - -def label_safe_datestring_to_datetime(string: str) -> datetime.datetime: - """ - Transform a label back to a datetime object. - - Kubernetes doesn't permit ":" in labels. ISO datetime format uses ":" but not - "_", let's - replace ":" with "_" - - :param string: str - :return: datetime.datetime object - """ - return parser.parse(string.replace("_plus_", "+").replace("_", ":")) - - -class PodGenerator: - """ - Contains Kubernetes Airflow Worker configuration logic. - - Represents a kubernetes pod and manages execution of a single pod. - Any configuration that is container specific gets applied to - the first container in the list of containers. - - :param pod: The fully specified pod. Mutually exclusive with `pod_template_file` - :param pod_template_file: Path to YAML file. Mutually exclusive with `pod` - :param extract_xcom: Whether to bring up a container for xcom - """ - - def __init__( - self, - pod: k8s.V1Pod | None = None, - pod_template_file: str | None = None, - extract_xcom: bool = True, - ): - if not pod_template_file and not pod: - raise AirflowConfigException( - "Podgenerator requires either a `pod` or a `pod_template_file` argument" - ) - if pod_template_file and pod: - raise AirflowConfigException("Cannot pass both `pod` and `pod_template_file` arguments") - - if pod_template_file: - self.ud_pod = self.deserialize_model_file(pod_template_file) - else: - self.ud_pod = pod - - # Attach sidecar - self.extract_xcom = extract_xcom - - def gen_pod(self) -> k8s.V1Pod: - """Generate pod.""" - warnings.warn("This function is deprecated. ", RemovedInAirflow3Warning, stacklevel=2) - result = self.ud_pod - - result.metadata.name = add_pod_suffix(pod_name=result.metadata.name) - - if self.extract_xcom: - result = self.add_xcom_sidecar(result) - - return result - - @staticmethod - def add_xcom_sidecar(pod: k8s.V1Pod) -> k8s.V1Pod: - """Add sidecar.""" - warnings.warn( - "This function is deprecated. " - "Please use airflow.providers.cncf.kubernetes.utils.xcom_sidecar.add_xcom_sidecar instead", - RemovedInAirflow3Warning, - stacklevel=2, - ) - pod_cp = copy.deepcopy(pod) - pod_cp.spec.volumes = pod.spec.volumes or [] - pod_cp.spec.volumes.insert(0, PodDefaults.VOLUME) - pod_cp.spec.containers[0].volume_mounts = pod_cp.spec.containers[0].volume_mounts or [] - pod_cp.spec.containers[0].volume_mounts.insert(0, PodDefaults.VOLUME_MOUNT) - pod_cp.spec.containers.append(PodDefaults.SIDECAR_CONTAINER) - - return pod_cp - - @staticmethod - def from_obj(obj) -> dict | k8s.V1Pod | None: - """Convert to pod from obj.""" - if obj is None: - return None - - k8s_legacy_object = obj.get("KubernetesExecutor", None) - k8s_object = obj.get("pod_override", None) - - if k8s_legacy_object and k8s_object: - raise AirflowConfigException( - "Can not have both a legacy and new" - "executor_config object. Please delete the KubernetesExecutor" - "dict and only use the pod_override kubernetes.client.models.V1Pod" - "object." - ) - if not k8s_object and not k8s_legacy_object: - return None - - if isinstance(k8s_object, k8s.V1Pod): - return k8s_object - elif isinstance(k8s_legacy_object, dict): - warnings.warn( - "Using a dictionary for the executor_config is deprecated and will soon be removed." - 'please use a `kubernetes.client.models.V1Pod` class with a "pod_override" key' - " instead. ", - category=RemovedInAirflow3Warning, - stacklevel=2, - ) - return PodGenerator.from_legacy_obj(obj) - else: - raise TypeError( - "Cannot convert a non-kubernetes.client.models.V1Pod object into a KubernetesExecutorConfig" - ) - - @staticmethod - def from_legacy_obj(obj) -> k8s.V1Pod | None: - """Convert to pod from obj.""" - if obj is None: - return None - - # We do not want to extract constant here from ExecutorLoader because it is just - # A name in dictionary rather than executor selection mechanism and it causes cyclic import - namespaced = obj.get("KubernetesExecutor", {}) - - if not namespaced: - return None - - resources = namespaced.get("resources") - - if resources is None: - requests = { - "cpu": namespaced.pop("request_cpu", None), - "memory": namespaced.pop("request_memory", None), - "ephemeral-storage": namespaced.get("ephemeral-storage"), # We pop this one in limits - } - limits = { - "cpu": namespaced.pop("limit_cpu", None), - "memory": namespaced.pop("limit_memory", None), - "ephemeral-storage": namespaced.pop("ephemeral-storage", None), - } - all_resources = list(requests.values()) + list(limits.values()) - if all(r is None for r in all_resources): - resources = None - else: - # remove None's so they don't become 0's - requests = {k: v for k, v in requests.items() if v is not None} - limits = {k: v for k, v in limits.items() if v is not None} - resources = k8s.V1ResourceRequirements(requests=requests, limits=limits) - namespaced["resources"] = resources - return PodGeneratorDeprecated(**namespaced).gen_pod() - - @staticmethod - def reconcile_pods(base_pod: k8s.V1Pod, client_pod: k8s.V1Pod | None) -> k8s.V1Pod: - """ - Merge Kubernetes Pod objects. - - :param base_pod: has the base attributes which are overwritten if they exist - in the client pod and remain if they do not exist in the client_pod - :param client_pod: the pod that the client wants to create. - :return: the merged pods - - This can't be done recursively as certain fields are overwritten and some are concatenated. - """ - if client_pod is None: - return base_pod - - client_pod_cp = copy.deepcopy(client_pod) - client_pod_cp.spec = PodGenerator.reconcile_specs(base_pod.spec, client_pod_cp.spec) - client_pod_cp.metadata = PodGenerator.reconcile_metadata(base_pod.metadata, client_pod_cp.metadata) - client_pod_cp = merge_objects(base_pod, client_pod_cp) - - return client_pod_cp - - @staticmethod - def reconcile_metadata(base_meta, client_meta): - """ - Merge Kubernetes Metadata objects. - - :param base_meta: has the base attributes which are overwritten if they exist - in the client_meta and remain if they do not exist in the client_meta - :param client_meta: the spec that the client wants to create. - :return: the merged specs - """ - if base_meta and not client_meta: - return base_meta - if not base_meta and client_meta: - return client_meta - elif client_meta and base_meta: - client_meta.labels = merge_objects(base_meta.labels, client_meta.labels) - client_meta.annotations = merge_objects(base_meta.annotations, client_meta.annotations) - extend_object_field(base_meta, client_meta, "managed_fields") - extend_object_field(base_meta, client_meta, "finalizers") - extend_object_field(base_meta, client_meta, "owner_references") - return merge_objects(base_meta, client_meta) - - return None - - @staticmethod - def reconcile_specs( - base_spec: k8s.V1PodSpec | None, client_spec: k8s.V1PodSpec | None - ) -> k8s.V1PodSpec | None: - """ - Merge Kubernetes PodSpec objects. - - :param base_spec: has the base attributes which are overwritten if they exist - in the client_spec and remain if they do not exist in the client_spec - :param client_spec: the spec that the client wants to create. - :return: the merged specs - """ - if base_spec and not client_spec: - return base_spec - if not base_spec and client_spec: - return client_spec - elif client_spec and base_spec: - client_spec.containers = PodGenerator.reconcile_containers( - base_spec.containers, client_spec.containers - ) - merged_spec = extend_object_field(base_spec, client_spec, "init_containers") - merged_spec = extend_object_field(base_spec, merged_spec, "volumes") - return merge_objects(base_spec, merged_spec) - - return None - - @staticmethod - def reconcile_containers( - base_containers: list[k8s.V1Container], client_containers: list[k8s.V1Container] - ) -> list[k8s.V1Container]: - """ - Merge Kubernetes Container objects. - - :param base_containers: has the base attributes which are overwritten if they exist - in the client_containers and remain if they do not exist in the client_containers - :param client_containers: the containers that the client wants to create. - :return: the merged containers - - The runs recursively over the list of containers. - """ - if not base_containers: - return client_containers - if not client_containers: - return base_containers - - client_container = client_containers[0] - base_container = base_containers[0] - client_container = extend_object_field(base_container, client_container, "volume_mounts") - client_container = extend_object_field(base_container, client_container, "env") - client_container = extend_object_field(base_container, client_container, "env_from") - client_container = extend_object_field(base_container, client_container, "ports") - client_container = extend_object_field(base_container, client_container, "volume_devices") - client_container = merge_objects(base_container, client_container) - - return [ - client_container, - *PodGenerator.reconcile_containers(base_containers[1:], client_containers[1:]), - ] - - @classmethod - def construct_pod( - cls, - dag_id: str, - task_id: str, - pod_id: str, - try_number: int, - kube_image: str, - date: datetime.datetime | None, - args: list[str], - pod_override_object: k8s.V1Pod | None, - base_worker_pod: k8s.V1Pod, - namespace: str, - scheduler_job_id: str, - run_id: str | None = None, - map_index: int = -1, - *, - with_mutation_hook: bool = False, - ) -> k8s.V1Pod: - """ - Create a Pod. - - Construct a pod by gathering and consolidating the configuration from 3 places: - - airflow.cfg - - executor_config - - dynamic arguments - """ - if len(pod_id) > 253: - warnings.warn( - "pod_id supplied is longer than 253 characters; truncating and adding unique suffix.", - category=UserWarning, - stacklevel=2, - ) - pod_id = add_pod_suffix(pod_name=pod_id, max_len=253) - try: - image = pod_override_object.spec.containers[0].image # type: ignore - if not image: - image = kube_image - except Exception: - image = kube_image - - annotations = { - "dag_id": dag_id, - "task_id": task_id, - "try_number": str(try_number), - } - if map_index >= 0: - annotations["map_index"] = str(map_index) - if date: - annotations["execution_date"] = date.isoformat() - if run_id: - annotations["run_id"] = run_id - - dynamic_pod = k8s.V1Pod( - metadata=k8s.V1ObjectMeta( - namespace=namespace, - annotations=annotations, - name=pod_id, - labels=cls.build_labels_for_k8s_executor_pod( - dag_id=dag_id, - task_id=task_id, - try_number=try_number, - airflow_worker=scheduler_job_id, - map_index=map_index, - execution_date=date, - run_id=run_id, - ), - ), - spec=k8s.V1PodSpec( - containers=[ - k8s.V1Container( - name="base", - args=args, - image=image, - env=[k8s.V1EnvVar(name="AIRFLOW_IS_K8S_EXECUTOR_POD", value="True")], - ) - ] - ), - ) - - # Reconcile the pods starting with the first chronologically, - # Pod from the pod_template_File -> Pod from executor_config arg -> Pod from the K8s executor - pod_list = [base_worker_pod, pod_override_object, dynamic_pod] - - try: - pod = reduce(PodGenerator.reconcile_pods, pod_list) - except Exception as e: - raise PodReconciliationError from e - - if with_mutation_hook: - from airflow.settings import pod_mutation_hook - - try: - pod_mutation_hook(pod) - except Exception as e: - raise PodMutationHookException from e - - return pod - - @classmethod - def build_selector_for_k8s_executor_pod( - cls, - *, - dag_id, - task_id, - try_number, - map_index=None, - execution_date=None, - run_id=None, - airflow_worker=None, - ): - """ - Generate selector for kubernetes executor pod. - - :meta private: - """ - labels = cls.build_labels_for_k8s_executor_pod( - dag_id=dag_id, - task_id=task_id, - try_number=try_number, - map_index=map_index, - execution_date=execution_date, - run_id=run_id, - airflow_worker=airflow_worker, - ) - label_strings = [f"{label_id}={label}" for label_id, label in sorted(labels.items())] - if not airflow_worker: # this filters out KPO pods even when we don't know the scheduler job id - label_strings.append("airflow-worker") - selector = ",".join(label_strings) - return selector - - @classmethod - def build_labels_for_k8s_executor_pod( - cls, - *, - dag_id, - task_id, - try_number, - airflow_worker=None, - map_index=None, - execution_date=None, - run_id=None, - ): - """ - Generate labels for kubernetes executor pod. - - :meta private: - """ - labels = { - "dag_id": make_safe_label_value(dag_id), - "task_id": make_safe_label_value(task_id), - "try_number": str(try_number), - "kubernetes_executor": "True", - "airflow_version": airflow_version.replace("+", "-"), - } - if airflow_worker is not None: - labels["airflow-worker"] = make_safe_label_value(str(airflow_worker)) - if map_index is not None and map_index >= 0: - labels["map_index"] = str(map_index) - if execution_date: - labels["execution_date"] = datetime_to_label_safe_datestring(execution_date) - if run_id: - labels["run_id"] = make_safe_label_value(run_id) - return labels - - @staticmethod - def serialize_pod(pod: k8s.V1Pod) -> dict: - """ - Convert a k8s.V1Pod into a json serializable dictionary. - - :param pod: k8s.V1Pod object - :return: Serialized version of the pod returned as dict - """ - api_client = ApiClient() - return api_client.sanitize_for_serialization(pod) - - @staticmethod - def deserialize_model_file(path: str) -> k8s.V1Pod: - """ - Generate a Pod from a file. - - :param path: Path to the file - :return: a kubernetes.client.models.V1Pod - """ - if os.path.exists(path): - with open(path) as stream: - pod = yaml.safe_load(stream) - else: - pod = None - log.warning("Model file %s does not exist", path) - - return PodGenerator.deserialize_model_dict(pod) - - @staticmethod - def deserialize_model_dict(pod_dict: dict | None) -> k8s.V1Pod: - """ - Deserializes a Python dictionary to k8s.V1Pod. - - Unfortunately we need access to the private method - ``_ApiClient__deserialize_model`` from the kubernetes client. - This issue is tracked here; https://github.com/kubernetes-client/python/issues/977. - - :param pod_dict: Serialized dict of k8s.V1Pod object - :return: De-serialized k8s.V1Pod - """ - api_client = ApiClient() - return api_client._ApiClient__deserialize_model(pod_dict, k8s.V1Pod) - - @staticmethod - def make_unique_pod_id(pod_id: str) -> str | None: - r""" - Generate a unique Pod name. - - Kubernetes pod names must consist of one or more lowercase - rfc1035/rfc1123 labels separated by '.' with a maximum length of 253 - characters. - - Name must pass the following regex for validation - ``^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$`` - - For more details, see: - https://github.com/kubernetes/kubernetes/blob/release-1.1/docs/design/identifiers.md - - :param pod_id: requested pod name - :return: ``str`` valid Pod name of appropriate length - """ - warnings.warn( - "This function is deprecated. Use `add_pod_suffix` in `kubernetes_helper_functions`.", - RemovedInAirflow3Warning, - stacklevel=2, - ) - - if not pod_id: - return None - - max_pod_id_len = 100 # arbitrarily chosen - suffix = rand_str(8) # 8 seems good enough - base_pod_id_len = max_pod_id_len - len(suffix) - 1 # -1 for separator - trimmed_pod_id = pod_id[:base_pod_id_len].rstrip("-.") - return f"{trimmed_pod_id}-{suffix}" - - -def merge_objects(base_obj, client_obj): - """ - Merge objects. - - :param base_obj: has the base attributes which are overwritten if they exist - in the client_obj and remain if they do not exist in the client_obj - :param client_obj: the object that the client wants to create. - :return: the merged objects - """ - if not base_obj: - return client_obj - if not client_obj: - return base_obj - - client_obj_cp = copy.deepcopy(client_obj) - - if isinstance(base_obj, dict) and isinstance(client_obj_cp, dict): - base_obj_cp = copy.deepcopy(base_obj) - base_obj_cp.update(client_obj_cp) - return base_obj_cp - - for base_key in base_obj.to_dict().keys(): - base_val = getattr(base_obj, base_key, None) - if not getattr(client_obj, base_key, None) and base_val: - if not isinstance(client_obj_cp, dict): - setattr(client_obj_cp, base_key, base_val) - else: - client_obj_cp[base_key] = base_val - return client_obj_cp - - -def extend_object_field(base_obj, client_obj, field_name): - """ - Add field values to existing objects. - - :param base_obj: an object which has a property `field_name` that is a list - :param client_obj: an object which has a property `field_name` that is a list. - A copy of this object is returned with `field_name` modified - :param field_name: the name of the list field - :return: the client_obj with the property `field_name` being the two properties appended - """ - client_obj_cp = copy.deepcopy(client_obj) - base_obj_field = getattr(base_obj, field_name, None) - client_obj_field = getattr(client_obj, field_name, None) - - if (not isinstance(base_obj_field, list) and base_obj_field is not None) or ( - not isinstance(client_obj_field, list) and client_obj_field is not None - ): - raise ValueError("The chosen field must be a list.") - - if not base_obj_field: - return client_obj_cp - if not client_obj_field: - setattr(client_obj_cp, field_name, base_obj_field) - return client_obj_cp - - appended_fields = base_obj_field + client_obj_field - setattr(client_obj_cp, field_name, appended_fields) - return client_obj_cp diff --git a/airflow/kubernetes/pre_7_4_0_compatibility/pod_generator_deprecated.py b/airflow/kubernetes/pre_7_4_0_compatibility/pod_generator_deprecated.py deleted file mode 100644 index 8dc56331b5bb6..0000000000000 --- a/airflow/kubernetes/pre_7_4_0_compatibility/pod_generator_deprecated.py +++ /dev/null @@ -1,309 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -""" -Backwards compatibility for Pod generation. - -This module provides an interface between the previous Pod -API and outputs a kubernetes.client.models.V1Pod. -The advantage being that the full Kubernetes API -is supported and no serialization need be written. -""" - -from __future__ import annotations - -import copy -import uuid - -import re2 -from kubernetes.client import models as k8s - -from airflow.utils.hashlib_wrapper import md5 - -MAX_POD_ID_LEN = 253 - -MAX_LABEL_LEN = 63 - - -class PodDefaults: - """Static defaults for Pods.""" - - XCOM_MOUNT_PATH = "/airflow/xcom" - SIDECAR_CONTAINER_NAME = "airflow-xcom-sidecar" - XCOM_CMD = 'trap "exit 0" INT; while true; do sleep 30; done;' - VOLUME_MOUNT = k8s.V1VolumeMount(name="xcom", mount_path=XCOM_MOUNT_PATH) - VOLUME = k8s.V1Volume(name="xcom", empty_dir=k8s.V1EmptyDirVolumeSource()) - SIDECAR_CONTAINER = k8s.V1Container( - name=SIDECAR_CONTAINER_NAME, - command=["sh", "-c", XCOM_CMD], - image="alpine", - volume_mounts=[VOLUME_MOUNT], - resources=k8s.V1ResourceRequirements( - requests={ - "cpu": "1m", - } - ), - ) - - -def make_safe_label_value(string): - """ - Normalize a provided label to be of valid length and characters. - - Valid label values must be 63 characters or less and must be empty or begin and - end with an alphanumeric character ([a-z0-9A-Z]) with dashes (-), underscores (_), - dots (.), and alphanumerics between. - - If the label value is greater than 63 chars once made safe, or differs in any - way from the original value sent to this function, then we need to truncate to - 53 chars, and append it with a unique hash. - """ - safe_label = re2.sub(r"^[^a-z0-9A-Z]*|[^a-zA-Z0-9_\-\.]|[^a-z0-9A-Z]*$", "", string) - - if len(safe_label) > MAX_LABEL_LEN or string != safe_label: - safe_hash = md5(string.encode()).hexdigest()[:9] - safe_label = safe_label[: MAX_LABEL_LEN - len(safe_hash) - 1] + "-" + safe_hash - - return safe_label - - -class PodGenerator: - """ - Contains Kubernetes Airflow Worker configuration logic. - - Represents a kubernetes pod and manages execution of a single pod. - Any configuration that is container specific gets applied to - the first container in the list of containers. - - :param image: The docker image - :param name: name in the metadata section (not the container name) - :param namespace: pod namespace - :param volume_mounts: list of kubernetes volumes mounts - :param envs: A dict containing the environment variables - :param cmds: The command to be run on the first container - :param args: The arguments to be run on the pod - :param labels: labels for the pod metadata - :param node_selectors: node selectors for the pod - :param ports: list of ports. Applies to the first container. - :param volumes: Volumes to be attached to the first container - :param image_pull_policy: Specify a policy to cache or always pull an image - :param restart_policy: The restart policy of the pod - :param image_pull_secrets: Any image pull secrets to be given to the pod. - If more than one secret is required, provide a comma separated list: - secret_a,secret_b - :param init_containers: A list of init containers - :param service_account_name: Identity for processes that run in a Pod - :param resources: Resource requirements for the first containers - :param annotations: annotations for the pod - :param affinity: A dict containing a group of affinity scheduling rules - :param hostnetwork: If True enable host networking on the pod - :param tolerations: A list of kubernetes tolerations - :param security_context: A dict containing the security context for the pod - :param configmaps: Any configmap refs to envfrom. - If more than one configmap is required, provide a comma separated list - configmap_a,configmap_b - :param dnspolicy: Specify a dnspolicy for the pod - :param schedulername: Specify a schedulername for the pod - :param pod: The fully specified pod. Mutually exclusive with `path_or_string` - :param extract_xcom: Whether to bring up a container for xcom - :param priority_class_name: priority class name for the launched Pod - """ - - def __init__( - self, - image: str | None = None, - name: str | None = None, - namespace: str | None = None, - volume_mounts: list[k8s.V1VolumeMount | dict] | None = None, - envs: dict[str, str] | None = None, - cmds: list[str] | None = None, - args: list[str] | None = None, - labels: dict[str, str] | None = None, - node_selectors: dict[str, str] | None = None, - ports: list[k8s.V1ContainerPort | dict] | None = None, - volumes: list[k8s.V1Volume | dict] | None = None, - image_pull_policy: str | None = None, - restart_policy: str | None = None, - image_pull_secrets: str | None = None, - init_containers: list[k8s.V1Container] | None = None, - service_account_name: str | None = None, - resources: k8s.V1ResourceRequirements | dict | None = None, - annotations: dict[str, str] | None = None, - affinity: dict | None = None, - hostnetwork: bool = False, - tolerations: list | None = None, - security_context: k8s.V1PodSecurityContext | dict | None = None, - configmaps: list[str] | None = None, - dnspolicy: str | None = None, - schedulername: str | None = None, - extract_xcom: bool = False, - priority_class_name: str | None = None, - ): - self.pod = k8s.V1Pod() - self.pod.api_version = "v1" - self.pod.kind = "Pod" - - # Pod Metadata - self.metadata = k8s.V1ObjectMeta() - self.metadata.labels = labels - self.metadata.name = name - self.metadata.namespace = namespace - self.metadata.annotations = annotations - - # Pod Container - self.container = k8s.V1Container(name="base") - self.container.image = image - self.container.env = [] - - if envs: - if isinstance(envs, dict): - for key, val in envs.items(): - self.container.env.append(k8s.V1EnvVar(name=key, value=val)) - elif isinstance(envs, list): - self.container.env.extend(envs) - - configmaps = configmaps or [] - self.container.env_from = [] - for configmap in configmaps: - self.container.env_from.append( - k8s.V1EnvFromSource(config_map_ref=k8s.V1ConfigMapEnvSource(name=configmap)) - ) - - self.container.command = cmds or [] - self.container.args = args or [] - if image_pull_policy: - self.container.image_pull_policy = image_pull_policy - self.container.ports = ports or [] - self.container.resources = resources - self.container.volume_mounts = volume_mounts or [] - - # Pod Spec - self.spec = k8s.V1PodSpec(containers=[]) - self.spec.security_context = security_context - self.spec.tolerations = tolerations - if dnspolicy: - self.spec.dns_policy = dnspolicy - self.spec.scheduler_name = schedulername - self.spec.host_network = hostnetwork - self.spec.affinity = affinity - self.spec.service_account_name = service_account_name - self.spec.init_containers = init_containers - self.spec.volumes = volumes or [] - self.spec.node_selector = node_selectors - if restart_policy: - self.spec.restart_policy = restart_policy - self.spec.priority_class_name = priority_class_name - - self.spec.image_pull_secrets = [] - - if image_pull_secrets: - for image_pull_secret in image_pull_secrets.split(","): - self.spec.image_pull_secrets.append(k8s.V1LocalObjectReference(name=image_pull_secret)) - - # Attach sidecar - self.extract_xcom = extract_xcom - - def gen_pod(self) -> k8s.V1Pod: - """Generate pod.""" - result = None - - if result is None: - result = self.pod - result.spec = self.spec - result.metadata = self.metadata - result.spec.containers = [self.container] - - result.metadata.name = self.make_unique_pod_id(result.metadata.name) - - if self.extract_xcom: - result = self.add_sidecar(result) - - return result - - @staticmethod - def add_sidecar(pod: k8s.V1Pod) -> k8s.V1Pod: - """Add sidecar.""" - pod_cp = copy.deepcopy(pod) - pod_cp.spec.volumes = pod.spec.volumes or [] - pod_cp.spec.volumes.insert(0, PodDefaults.VOLUME) - pod_cp.spec.containers[0].volume_mounts = pod_cp.spec.containers[0].volume_mounts or [] - pod_cp.spec.containers[0].volume_mounts.insert(0, PodDefaults.VOLUME_MOUNT) - pod_cp.spec.containers.append(PodDefaults.SIDECAR_CONTAINER) - - return pod_cp - - @staticmethod - def from_obj(obj) -> k8s.V1Pod | None: - """Convert to pod from obj.""" - if obj is None: - return None - - if isinstance(obj, PodGenerator): - return obj.gen_pod() - - if not isinstance(obj, dict): - raise TypeError( - "Cannot convert a non-dictionary or non-PodGenerator " - "object into a KubernetesExecutorConfig" - ) - - # We do not want to extract constant here from ExecutorLoader because it is just - # A name in dictionary rather than executor selection mechanism and it causes cyclic import - namespaced = obj.get("KubernetesExecutor", {}) - - if not namespaced: - return None - - resources = namespaced.get("resources") - - if resources is None: - requests = { - "cpu": namespaced.get("request_cpu"), - "memory": namespaced.get("request_memory"), - "ephemeral-storage": namespaced.get("ephemeral-storage"), - } - limits = { - "cpu": namespaced.get("limit_cpu"), - "memory": namespaced.get("limit_memory"), - "ephemeral-storage": namespaced.get("ephemeral-storage"), - } - all_resources = list(requests.values()) + list(limits.values()) - if all(r is None for r in all_resources): - resources = None - else: - resources = k8s.V1ResourceRequirements(requests=requests, limits=limits) - namespaced["resources"] = resources - return PodGenerator(**namespaced).gen_pod() - - @staticmethod - def make_unique_pod_id(dag_id): - r""" - Generate a unique Pod name. - - Kubernetes pod names must be <= 253 chars and must pass the following regex for - validation - ``^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$`` - - :param dag_id: a dag_id with only alphanumeric characters - :return: ``str`` valid Pod name of appropriate length - """ - if not dag_id: - return None - - safe_uuid = uuid.uuid4().hex - safe_pod_id = dag_id[: MAX_POD_ID_LEN - len(safe_uuid) - 1] + "-" + safe_uuid - - return safe_pod_id diff --git a/airflow/kubernetes/pre_7_4_0_compatibility/secret.py b/airflow/kubernetes/pre_7_4_0_compatibility/secret.py deleted file mode 100644 index d4d6a8aa044c5..0000000000000 --- a/airflow/kubernetes/pre_7_4_0_compatibility/secret.py +++ /dev/null @@ -1,125 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -"""Classes for interacting with Kubernetes API.""" - -from __future__ import annotations - -import copy -import uuid - -from kubernetes.client import models as k8s - -from airflow.exceptions import AirflowConfigException -from airflow.kubernetes.pre_7_4_0_compatibility.k8s_model import K8SModel - - -class Secret(K8SModel): - """Defines Kubernetes Secret Volume.""" - - def __init__(self, deploy_type, deploy_target, secret, key=None, items=None): - """ - Initialize a Kubernetes Secret Object. - - Used to track requested secrets from the user. - - :param deploy_type: The type of secret deploy in Kubernetes, either `env` or - `volume` - :param deploy_target: (Optional) The environment variable when - `deploy_type` `env` or file path when `deploy_type` `volume` where - expose secret. If `key` is not provided deploy target should be None. - :param secret: Name of the secrets object in Kubernetes - :param key: (Optional) Key of the secret within the Kubernetes Secret - if not provided in `deploy_type` `env` it will mount all secrets in object - :param items: (Optional) items that can be added to a volume secret for specifying projects of - secret keys to paths - https://kubernetes.io/docs/concepts/configuration/secret/#projection-of-secret-keys-to-specific-paths - """ - if deploy_type not in ("env", "volume"): - raise AirflowConfigException("deploy_type must be env or volume") - - self.deploy_type = deploy_type - self.deploy_target = deploy_target - self.items = items or [] - - if deploy_target is not None and deploy_type == "env": - # if deploying to env, capitalize the deploy target - self.deploy_target = deploy_target.upper() - - if key is not None and deploy_target is None: - raise AirflowConfigException("If `key` is set, `deploy_target` should not be None") - - self.secret = secret - self.key = key - - def to_env_secret(self) -> k8s.V1EnvVar: - """Store es environment secret.""" - return k8s.V1EnvVar( - name=self.deploy_target, - value_from=k8s.V1EnvVarSource( - secret_key_ref=k8s.V1SecretKeySelector(name=self.secret, key=self.key) - ), - ) - - def to_env_from_secret(self) -> k8s.V1EnvFromSource: - """Read from environment to secret.""" - return k8s.V1EnvFromSource(secret_ref=k8s.V1SecretEnvSource(name=self.secret)) - - def to_volume_secret(self) -> tuple[k8s.V1Volume, k8s.V1VolumeMount]: - """Convert to volume secret.""" - vol_id = f"secretvol{uuid.uuid4()}" - volume = k8s.V1Volume(name=vol_id, secret=k8s.V1SecretVolumeSource(secret_name=self.secret)) - if self.items: - volume.secret.items = self.items - return (volume, k8s.V1VolumeMount(mount_path=self.deploy_target, name=vol_id, read_only=True)) - - def attach_to_pod(self, pod: k8s.V1Pod) -> k8s.V1Pod: - """Attaches to pod.""" - cp_pod = copy.deepcopy(pod) - - if self.deploy_type == "volume": - volume, volume_mount = self.to_volume_secret() - if cp_pod.spec.volumes is None: - cp_pod.spec.volumes = [] - cp_pod.spec.volumes.append(volume) - if cp_pod.spec.containers[0].volume_mounts is None: - cp_pod.spec.containers[0].volume_mounts = [] - cp_pod.spec.containers[0].volume_mounts.append(volume_mount) - - if self.deploy_type == "env" and self.key is not None: - env = self.to_env_secret() - if cp_pod.spec.containers[0].env is None: - cp_pod.spec.containers[0].env = [] - cp_pod.spec.containers[0].env.append(env) - - if self.deploy_type == "env" and self.key is None: - env_from = self.to_env_from_secret() - if cp_pod.spec.containers[0].env_from is None: - cp_pod.spec.containers[0].env_from = [] - cp_pod.spec.containers[0].env_from.append(env_from) - - return cp_pod - - def __eq__(self, other): - return ( - self.deploy_type == other.deploy_type - and self.deploy_target == other.deploy_target - and self.secret == other.secret - and self.key == other.key - ) - - def __repr__(self): - return f"Secret({self.deploy_type}, {self.deploy_target}, {self.secret}, {self.key})" diff --git a/airflow/models/baseoperator.py b/airflow/models/baseoperator.py index 99ea294e1ec55..7d18aa1474451 100644 --- a/airflow/models/baseoperator.py +++ b/airflow/models/baseoperator.py @@ -57,7 +57,6 @@ from airflow.exceptions import ( AirflowException, FailStopDagInvalidTriggerRule, - RemovedInAirflow3Warning, TaskDeferralError, TaskDeferred, ) @@ -897,7 +896,6 @@ def __init__( trigger_rule: str = DEFAULT_TRIGGER_RULE, resources: dict[str, Any] | None = None, run_as_user: str | None = None, - task_concurrency: int | None = None, map_index_template: str | None = None, max_active_tis_per_dag: int | None = None, max_active_tis_per_dagrun: int | None = None, @@ -927,17 +925,9 @@ def __init__( kwargs.pop("_airflow_mapped_validation_only", None) if kwargs: - if not conf.getboolean("operators", "ALLOW_ILLEGAL_ARGUMENTS"): - raise AirflowException( - f"Invalid arguments were passed to {self.__class__.__name__} (task_id: {task_id}). " - f"Invalid arguments were:\n**kwargs: {kwargs}", - ) - warnings.warn( + raise AirflowException( f"Invalid arguments were passed to {self.__class__.__name__} (task_id: {task_id}). " - "Support for passing such arguments will be dropped in future. " f"Invalid arguments were:\n**kwargs: {kwargs}", - category=RemovedInAirflow3Warning, - stacklevel=3, ) validate_key(task_id) @@ -987,23 +977,6 @@ def __init__( raise ValueError(f"pool slots for {self.task_id}{dag_str} cannot be less than 1") self.sla = sla - if trigger_rule == "dummy": - warnings.warn( - "dummy Trigger Rule is deprecated. Please use `TriggerRule.ALWAYS`.", - RemovedInAirflow3Warning, - stacklevel=2, - ) - trigger_rule = TriggerRule.ALWAYS - - if trigger_rule == "none_failed_or_skipped": - warnings.warn( - "none_failed_or_skipped Trigger Rule is deprecated. " - "Please use `none_failed_min_one_success`.", - RemovedInAirflow3Warning, - stacklevel=2, - ) - trigger_rule = TriggerRule.NONE_FAILED_MIN_ONE_SUCCESS - if not TriggerRule.is_valid(trigger_rule): raise AirflowException( f"The trigger_rule must be one of {TriggerRule.all_triggers()}," @@ -1038,14 +1011,6 @@ def __init__( self.priority_weight = priority_weight self.weight_rule = validate_and_load_priority_weight_strategy(weight_rule) self.resources = coerce_resources(resources) - if task_concurrency and not max_active_tis_per_dag: - # TODO: Remove in Airflow 3.0 - warnings.warn( - "The 'task_concurrency' parameter is deprecated. Please use 'max_active_tis_per_dag'.", - RemovedInAirflow3Warning, - stacklevel=2, - ) - max_active_tis_per_dag = task_concurrency self.max_active_tis_per_dag: int | None = max_active_tis_per_dag self.max_active_tis_per_dagrun: int | None = max_active_tis_per_dagrun self.do_xcom_push: bool = do_xcom_push @@ -2081,32 +2046,3 @@ def chain_linear(*elements: DependencyMixin | Sequence[DependencyMixin]): prev_elem = [curr_elem] if isinstance(curr_elem, DependencyMixin) else curr_elem if not deps_set: raise ValueError("No dependencies were set. Did you forget to expand with `*`?") - - -def __getattr__(name): - """ - PEP-562: Lazy loaded attributes on python modules. - - :meta private: - """ - path = __deprecated_imports.get(name) - if not path: - raise AttributeError(f"module {__name__!r} has no attribute {name!r}") - - from airflow.utils.module_loading import import_string - - warnings.warn( - f"Import `{__name__}.{name}` is deprecated. Please use `{path}.{name}`.", - RemovedInAirflow3Warning, - stacklevel=2, - ) - val = import_string(f"{path}.{name}") - - # Store for next time - globals()[name] = val - return val - - -__deprecated_imports = { - "BaseOperatorLink": "airflow.models.baseoperatorlink", -} diff --git a/airflow/models/connection.py b/airflow/models/connection.py index 65db6d76dfa11..01df1626657da 100644 --- a/airflow/models/connection.py +++ b/airflow/models/connection.py @@ -19,7 +19,6 @@ import json import logging -import warnings from contextlib import suppress from json import JSONDecodeError from typing import Any @@ -30,7 +29,7 @@ from sqlalchemy.orm import declared_attr, reconstructor, synonym from airflow.configuration import ensure_secrets_loaded -from airflow.exceptions import AirflowException, AirflowNotFoundException, RemovedInAirflow3Warning +from airflow.exceptions import AirflowException, AirflowNotFoundException from airflow.models.base import ID_LEN, Base from airflow.models.crypto import get_fernet from airflow.secrets.cache import SecretCache @@ -49,12 +48,6 @@ CONN_ID_MAX_LEN: int = 250 -def parse_netloc_to_hostname(*args, **kwargs): - """Do not use, this method is deprecated.""" - warnings.warn("This method is deprecated.", RemovedInAirflow3Warning, stacklevel=2) - return _parse_netloc_to_hostname(*args, **kwargs) - - def sanitize_conn_id(conn_id: str | None, max_length=CONN_ID_MAX_LEN) -> str | None: r""" Sanitizes the connection id and allows only specific characters to be within. @@ -184,30 +177,19 @@ def __init__( @staticmethod def _validate_extra(extra, conn_id) -> None: - """ - Verify that ``extra`` is a JSON-encoded Python dict. - - From Airflow 3.0, we should no longer suppress these errors but raise instead. - """ + """Verify that ``extra`` is a JSON-encoded Python dict.""" if extra is None: return None try: extra_parsed = json.loads(extra) if not isinstance(extra_parsed, dict): - warnings.warn( + raise ValueError( "Encountered JSON value in `extra` which does not parse as a dictionary in " - f"connection {conn_id!r}. From Airflow 3.0, the `extra` field must contain a JSON " - "representation of a Python dict.", - RemovedInAirflow3Warning, - stacklevel=3, + f"connection {conn_id!r}. The `extra` field must contain a JSON " + "representation of a Python dict." ) except json.JSONDecodeError: - warnings.warn( - f"Encountered non-JSON in `extra` field for connection {conn_id!r}. Support for " - "non-JSON `extra` will be removed in Airflow 3.0", - RemovedInAirflow3Warning, - stacklevel=2, - ) + raise ValueError(f"Encountered non-JSON in `extra` field for connection {conn_id!r}.") return None @reconstructor @@ -216,15 +198,6 @@ def on_db_load(self): mask_secret(self.password) mask_secret(quote(self.password)) - def parse_from_uri(self, **uri): - """Use uri parameter in constructor, this method is deprecated.""" - warnings.warn( - "This method is deprecated. Please use uri parameter in constructor.", - RemovedInAirflow3Warning, - stacklevel=2, - ) - self._parse_from_uri(**uri) - @staticmethod def _normalize_conn_type(conn_type): if conn_type == "postgresql": @@ -421,42 +394,6 @@ def get_hook(self, *, hook_params=None): def __repr__(self): return self.conn_id or "" - def log_info(self): - """ - Read each field individually or use the default representation (`__repr__`). - - This method is deprecated. - """ - warnings.warn( - "This method is deprecated. You can read each field individually or " - "use the default representation (__repr__).", - RemovedInAirflow3Warning, - stacklevel=2, - ) - return ( - f"id: {self.conn_id}. Host: {self.host}, Port: {self.port}, Schema: {self.schema}, " - f"Login: {self.login}, Password: {'XXXXXXXX' if self.password else None}, " - f"extra: {'XXXXXXXX' if self.extra_dejson else None}" - ) - - def debug_info(self): - """ - Read each field individually or use the default representation (`__repr__`). - - This method is deprecated. - """ - warnings.warn( - "This method is deprecated. You can read each field individually or " - "use the default representation (__repr__).", - RemovedInAirflow3Warning, - stacklevel=2, - ) - return ( - f"id: {self.conn_id}. Host: {self.host}, Port: {self.port}, Schema: {self.schema}, " - f"Login: {self.login}, Password: {'XXXXXXXX' if self.password else None}, " - f"extra: {self.extra_dejson}" - ) - def test_connection(self): """Calls out get_hook method and executes test_connection method on that.""" status, message = False, "" diff --git a/airflow/models/dagrun.py b/airflow/models/dagrun.py index 1ff2f6316a5a7..eefcd380af3ca 100644 --- a/airflow/models/dagrun.py +++ b/airflow/models/dagrun.py @@ -19,7 +19,6 @@ import itertools import os -import warnings from collections import defaultdict from typing import TYPE_CHECKING, Any, Callable, Iterable, Iterator, NamedTuple, Sequence, TypeVar, overload @@ -51,7 +50,7 @@ from airflow.api_internal.internal_api_call import internal_api_call from airflow.callbacks.callback_requests import DagCallbackRequest from airflow.configuration import conf as airflow_conf -from airflow.exceptions import AirflowException, RemovedInAirflow3Warning, TaskNotFound +from airflow.exceptions import AirflowException, TaskNotFound from airflow.listeners.listener import get_listener_manager from airflow.models import Log from airflow.models.abstractoperator import NotMapped @@ -1500,31 +1499,6 @@ def _revise_map_indexes_if_mapped(self, task: Operator, *, session: Session) -> session.flush() yield ti - @staticmethod - def get_run(session: Session, dag_id: str, execution_date: datetime) -> DagRun | None: - """ - Get a single DAG Run. - - :meta private: - :param session: Sqlalchemy ORM Session - :param dag_id: DAG ID - :param execution_date: execution date - :return: DagRun corresponding to the given dag_id and execution date - if one exists. None otherwise. - """ - warnings.warn( - "This method is deprecated. Please use SQLAlchemy directly", - RemovedInAirflow3Warning, - stacklevel=2, - ) - return session.scalar( - select(DagRun).where( - DagRun.dag_id == dag_id, - DagRun.external_trigger == False, # noqa: E712 - DagRun.execution_date == execution_date, - ) - ) - @property def is_backfill(self) -> bool: return self.run_type == DagRunType.BACKFILL_JOB @@ -1668,15 +1642,6 @@ def _get_log_template( ) return template - @provide_session - def get_log_filename_template(self, *, session: Session = NEW_SESSION) -> str: - warnings.warn( - "This method is deprecated. Please use get_log_template instead.", - RemovedInAirflow3Warning, - stacklevel=2, - ) - return self.get_log_template(session=session).filename - @staticmethod def _get_partial_task_ids(dag: DAG | None) -> list[str] | None: return dag.task_ids if dag and dag.partial else None diff --git a/airflow/models/errors.py b/airflow/models/errors.py index f891b03d67a15..403b0cd018a42 100644 --- a/airflow/models/errors.py +++ b/airflow/models/errors.py @@ -17,11 +17,8 @@ # under the License. from __future__ import annotations -import warnings - from sqlalchemy import Column, Integer, String, Text -from airflow.exceptions import RemovedInAirflow3Warning from airflow.models.base import Base from airflow.utils.sqlalchemy import UtcDateTime @@ -35,17 +32,3 @@ class ParseImportError(Base): filename = Column(String(1024)) stacktrace = Column(Text) processor_subdir = Column(String(2000), nullable=True) - - -def __getattr__(name: str): - # PEP-562: Lazy loaded attributes on python modules - if name == "ImportError": - warnings.warn( - f"Model class '{__name__}.ImportError' is deprecated due to shadowing with builtin exception " - f"ImportError and will be removed in the future. " - f"Please consider to use '{__name__}.ParseImportError' instead.", - RemovedInAirflow3Warning, - stacklevel=2, - ) - return ParseImportError - raise AttributeError(f"module {__name__} has no attribute {name}") diff --git a/airflow/models/param.py b/airflow/models/param.py index b5c9b5c4c2a5c..a4bbce2b768c6 100644 --- a/airflow/models/param.py +++ b/airflow/models/param.py @@ -18,16 +18,11 @@ import contextlib import copy -import datetime import json import logging -import warnings from typing import TYPE_CHECKING, Any, ClassVar, ItemsView, Iterable, MutableMapping, ValuesView -from pendulum.parsing import parse_iso8601 - -from airflow.exceptions import AirflowException, ParamValidationError, RemovedInAirflow3Warning -from airflow.utils import timezone +from airflow.exceptions import AirflowException, ParamValidationError from airflow.utils.mixins import ResolveMixin from airflow.utils.types import NOTSET, ArgNotSet @@ -59,7 +54,7 @@ class Param: def __init__(self, default: Any = NOTSET, description: str | None = None, **kwargs): if default is not NOTSET: - self._warn_if_not_json(default) + self._check_json(default) self.value = default self.description = description self.schema = kwargs.pop("schema") if "schema" in kwargs else kwargs @@ -68,39 +63,14 @@ def __copy__(self) -> Param: return Param(self.value, self.description, schema=self.schema) @staticmethod - def _warn_if_not_json(value): + def _check_json(value): try: json.dumps(value) except Exception: - warnings.warn( - "The use of non-json-serializable params is deprecated and will be removed in " - "a future release", - RemovedInAirflow3Warning, - stacklevel=1, - ) - - @staticmethod - def _warn_if_not_rfc3339_dt(value): - """Fallback to iso8601 datetime validation if rfc3339 failed.""" - try: - iso8601_value = parse_iso8601(value) - except Exception: - return None - if not isinstance(iso8601_value, datetime.datetime): - return None - warnings.warn( - f"The use of non-RFC3339 datetime: {value!r} is deprecated " - "and will be removed in a future release", - RemovedInAirflow3Warning, - stacklevel=1, - ) - if timezone.is_naive(iso8601_value): - warnings.warn( - "The use naive datetime is deprecated and will be removed in a future release", - RemovedInAirflow3Warning, - stacklevel=1, + raise ParamValidationError( + "All provided parameters must be json-serializable. " + f"The value '{value}' is not serializable." ) - return value def resolve(self, value: Any = NOTSET, suppress_exception: bool = False) -> Any: """ @@ -120,7 +90,7 @@ def resolve(self, value: Any = NOTSET, suppress_exception: bool = False) -> Any: from jsonschema.exceptions import ValidationError if value is not NOTSET: - self._warn_if_not_json(value) + self._check_json(value) final_val = self.value if value is NOTSET else value if isinstance(final_val, ArgNotSet): if suppress_exception: @@ -129,11 +99,6 @@ def resolve(self, value: Any = NOTSET, suppress_exception: bool = False) -> Any: try: jsonschema.validate(final_val, self.schema, format_checker=FormatChecker()) except ValidationError as err: - if err.schema.get("format") == "date-time": - rfc3339_value = self._warn_if_not_rfc3339_dt(final_val) - if rfc3339_value: - self.value = rfc3339_value - return rfc3339_value if suppress_exception: return None raise ParamValidationError(err) from None diff --git a/airflow/models/skipmixin.py b/airflow/models/skipmixin.py index 1ed56a43bff2a..12cbdb380b920 100644 --- a/airflow/models/skipmixin.py +++ b/airflow/models/skipmixin.py @@ -17,14 +17,13 @@ # under the License. from __future__ import annotations -import warnings from types import GeneratorType from typing import TYPE_CHECKING, Iterable, Sequence -from sqlalchemy import select, update +from sqlalchemy import update from airflow.api_internal.internal_api_call import internal_api_call -from airflow.exceptions import AirflowException, RemovedInAirflow3Warning +from airflow.exceptions import AirflowException from airflow.models.taskinstance import TaskInstance from airflow.utils import timezone from airflow.utils.log.logging_mixin import LoggingMixin @@ -33,7 +32,6 @@ from airflow.utils.state import TaskInstanceState if TYPE_CHECKING: - from pendulum import DateTime from sqlalchemy import Session from airflow.models.dagrun import DagRun @@ -98,16 +96,13 @@ def _set_state_to_skipped( def skip( self, dag_run: DagRun | DagRunPydantic, - execution_date: DateTime, tasks: Iterable[DAGNode], map_index: int = -1, ): """Facade for compatibility for call to internal API.""" # SkipMixin may not necessarily have a task_id attribute. Only store to XCom if one is available. task_id: str | None = getattr(self, "task_id", None) - SkipMixin._skip( - dag_run=dag_run, task_id=task_id, execution_date=execution_date, tasks=tasks, map_index=map_index - ) + SkipMixin._skip(dag_run=dag_run, task_id=task_id, tasks=tasks, map_index=map_index) @staticmethod @internal_api_call @@ -115,7 +110,6 @@ def skip( def _skip( dag_run: DagRun | DagRunPydantic, task_id: str | None, - execution_date: DateTime, tasks: Iterable[DAGNode], session: Session = NEW_SESSION, map_index: int = -1, @@ -128,7 +122,6 @@ def _skip( are cleared. :param dag_run: the DagRun for which to set the tasks to skipped - :param execution_date: execution_date :param tasks: tasks to skip (not task_ids) :param session: db session to use :param map_index: map_index of the current task instance @@ -137,26 +130,6 @@ def _skip( if not task_list: return - if execution_date and not dag_run: - from airflow.models.dagrun import DagRun - - warnings.warn( - "Passing an execution_date to `skip()` is deprecated in favour of passing a dag_run", - RemovedInAirflow3Warning, - stacklevel=2, - ) - - dag_run = session.scalars( - select(DagRun).where( - DagRun.dag_id == task_list[0].dag_id, DagRun.execution_date == execution_date - ) - ).one() - - elif execution_date and dag_run and execution_date != dag_run.execution_date: - raise ValueError( - "execution_date has a different value to dag_run.execution_date -- please only pass dag_run" - ) - if dag_run is None: raise ValueError("dag_run is required") diff --git a/airflow/models/taskinstance.py b/airflow/models/taskinstance.py index e2b59ebbab472..1d3909aed4a9e 100644 --- a/airflow/models/taskinstance.py +++ b/airflow/models/taskinstance.py @@ -38,7 +38,6 @@ import jinja2 import lazy_object_proxy import pendulum -from deprecated import deprecated from jinja2 import TemplateAssertionError, UndefinedError from sqlalchemy import ( Column, @@ -80,7 +79,6 @@ AirflowSkipException, AirflowTaskTerminated, AirflowTaskTimeout, - DagRunNotFound, RemovedInAirflow3Warning, TaskDeferralError, TaskDeferred, @@ -425,7 +423,6 @@ def _stop_remaining_tasks(*, task_instance: TaskInstance | TaskInstancePydantic, def clear_task_instances( tis: list[TaskInstance], session: Session, - activate_dag_runs: None = None, dag: DAG | None = None, dag_run_state: DagRunState | Literal[False] = DagRunState.QUEUED, ) -> None: @@ -443,7 +440,6 @@ def clear_task_instances( :param dag_run_state: state to set finished DagRuns to. If set to False, DagRuns state will not be changed. :param dag: DAG object - :param activate_dag_runs: Deprecated parameter, do not pass """ job_ids = [] # Keys: dag_id -> run_id -> map_indexes -> try_numbers -> task_id @@ -521,16 +517,6 @@ def clear_task_instances( session.execute(update(Job).where(Job.id.in_(job_ids)).values(state=JobState.RESTARTING)) - if activate_dag_runs is not None: - warnings.warn( - "`activate_dag_runs` parameter to clear_task_instances function is deprecated. " - "Please use `dag_run_state`", - RemovedInAirflow3Warning, - stacklevel=2, - ) - if not activate_dag_runs: - dag_run_state = False - if dag_run_state is not False and tis: from airflow.models.dagrun import DagRun # Avoid circular import @@ -1922,7 +1908,6 @@ class TaskInstance(Base, LoggingMixin): def __init__( self, task: Operator, - execution_date: datetime | None = None, run_id: str | None = None, state: str | None = None, map_index: int = -1, @@ -1938,42 +1923,7 @@ def __init__( # init_on_load will config the log self.init_on_load() - if run_id is None and execution_date is not None: - from airflow.models.dagrun import DagRun # Avoid circular import - - warnings.warn( - "Passing an execution_date to `TaskInstance()` is deprecated in favour of passing a run_id", - RemovedInAirflow3Warning, - # Stack level is 4 because SQLA adds some wrappers around the constructor - stacklevel=4, - ) - # make sure we have a localized execution_date stored in UTC - if execution_date and not timezone.is_localized(execution_date): - self.log.warning( - "execution date %s has no timezone information. Using default from dag or system", - execution_date, - ) - if self.task.has_dag(): - if TYPE_CHECKING: - assert self.task.dag - execution_date = timezone.make_aware(execution_date, self.task.dag.timezone) - else: - execution_date = timezone.make_aware(execution_date) - - execution_date = timezone.convert_to_utc(execution_date) - with create_session() as session: - run_id = ( - session.query(DagRun.run_id) - .filter_by(dag_id=self.dag_id, execution_date=execution_date) - .scalar() - ) - if run_id is None: - raise DagRunNotFound( - f"DagRun for {self.dag_id!r} with date {execution_date} not found" - ) from None - self.run_id = run_id - self.try_number = 0 self.max_tries = self.task.retries self.unixname = getuser() @@ -1989,26 +1939,6 @@ def __init__( def __hash__(self): return hash((self.task_id, self.dag_id, self.run_id, self.map_index)) - @property - @deprecated(reason="Use try_number instead.", version="2.10.0", category=RemovedInAirflow3Warning) - def _try_number(self): - """ - Do not use. For semblance of backcompat. - - :meta private: - """ - return self.try_number - - @_try_number.setter - @deprecated(reason="Use try_number instead.", version="2.10.0", category=RemovedInAirflow3Warning) - def _try_number(self, val): - """ - Do not use. For semblance of backcompat. - - :meta private: - """ - self.try_number = val - @property def stats_tags(self) -> dict[str, str]: """Returns task instance tags.""" @@ -2051,23 +1981,6 @@ def init_on_load(self) -> None: """Initialize the attributes that aren't stored in the DB.""" self.test_mode = False # can be changed when calling 'run' - @property - @deprecated(reason="Use try_number instead.", version="2.10.0", category=RemovedInAirflow3Warning) - def prev_attempted_tries(self) -> int: - """ - Calculate the total number of attempted tries, defaulting to 0. - - This used to be necessary because try_number did not always tell the truth. - - :meta private: - """ - return self.try_number - - @property - def next_try_number(self) -> int: - # todo (dstandish): deprecate this property; we don't need a property that is just + 1 - return self.try_number + 1 - @property def operator_name(self) -> str | None: """@property: use a more friendly display name for the operator, if set.""" @@ -2498,40 +2411,6 @@ def get_previous_ti( """ return _get_previous_ti(task_instance=self, state=state, session=session) - @property - def previous_ti(self) -> TaskInstance | TaskInstancePydantic | None: - """ - This attribute is deprecated. - - Please use :class:`airflow.models.taskinstance.TaskInstance.get_previous_ti`. - """ - warnings.warn( - """ - This attribute is deprecated. - Please use `airflow.models.taskinstance.TaskInstance.get_previous_ti` method. - """, - RemovedInAirflow3Warning, - stacklevel=2, - ) - return self.get_previous_ti() - - @property - def previous_ti_success(self) -> TaskInstance | TaskInstancePydantic | None: - """ - This attribute is deprecated. - - Please use :class:`airflow.models.taskinstance.TaskInstance.get_previous_ti`. - """ - warnings.warn( - """ - This attribute is deprecated. - Please use `airflow.models.taskinstance.TaskInstance.get_previous_ti` method. - """, - RemovedInAirflow3Warning, - stacklevel=2, - ) - return self.get_previous_ti(state=DagRunState.SUCCESS) - @provide_session def get_previous_execution_date( self, @@ -2558,23 +2437,6 @@ def get_previous_start_date( """ return _get_previous_start_date(task_instance=self, state=state, session=session) - @property - def previous_start_date_success(self) -> pendulum.DateTime | None: - """ - This attribute is deprecated. - - Please use :class:`airflow.models.taskinstance.TaskInstance.get_previous_start_date`. - """ - warnings.warn( - """ - This attribute is deprecated. - Please use `airflow.models.taskinstance.TaskInstance.get_previous_start_date` method. - """, - RemovedInAirflow3Warning, - stacklevel=2, - ) - return self.get_previous_start_date(state=DagRunState.SUCCESS) - @provide_session def are_dependencies_met( self, dep_context: DepContext | None = None, session: Session = NEW_SESSION, verbose: bool = False @@ -4115,21 +3977,6 @@ def __eq__(self, other): return self.__dict__ == other.__dict__ return NotImplemented - def as_dict(self): - warnings.warn( - "This method is deprecated. Use BaseSerialization.serialize.", - RemovedInAirflow3Warning, - stacklevel=2, - ) - new_dict = dict(self.__dict__) - for key in new_dict: - if key in ["start_date", "end_date"]: - val = new_dict[key] - if not val or isinstance(val, str): - continue - new_dict.update({key: val.isoformat()}) - return new_dict - @classmethod def from_ti(cls, ti: TaskInstance) -> SimpleTaskInstance: return cls( @@ -4150,24 +3997,6 @@ def from_ti(cls, ti: TaskInstance) -> SimpleTaskInstance: priority_weight=ti.priority_weight if hasattr(ti, "priority_weight") else None, ) - @classmethod - def from_dict(cls, obj_dict: dict) -> SimpleTaskInstance: - warnings.warn( - "This method is deprecated. Use BaseSerialization.deserialize.", - RemovedInAirflow3Warning, - stacklevel=2, - ) - ti_key = TaskInstanceKey(*obj_dict.pop("key")) - start_date = None - end_date = None - start_date_str: str | None = obj_dict.pop("start_date") - end_date_str: str | None = obj_dict.pop("end_date") - if start_date_str: - start_date = timezone.parse(start_date_str) - if end_date_str: - end_date = timezone.parse(end_date_str) - return cls(**obj_dict, start_date=start_date, end_date=end_date, key=ti_key) - class TaskInstanceNote(TaskInstanceDependencies): """For storage of arbitrary notes concerning the task instance.""" diff --git a/airflow/operators/datetime.py b/airflow/operators/datetime.py index 732b380077907..4455b84dd3bb9 100644 --- a/airflow/operators/datetime.py +++ b/airflow/operators/datetime.py @@ -17,10 +17,9 @@ from __future__ import annotations import datetime -import warnings from typing import TYPE_CHECKING, Iterable -from airflow.exceptions import AirflowException, RemovedInAirflow3Warning +from airflow.exceptions import AirflowException from airflow.operators.branch import BaseBranchOperator from airflow.utils import timezone @@ -56,7 +55,6 @@ def __init__( target_lower: datetime.datetime | datetime.time | None, target_upper: datetime.datetime | datetime.time | None, use_task_logical_date: bool = False, - use_task_execution_date: bool = False, **kwargs, ) -> None: super().__init__(**kwargs) @@ -71,13 +69,6 @@ def __init__( self.follow_task_ids_if_true = follow_task_ids_if_true self.follow_task_ids_if_false = follow_task_ids_if_false self.use_task_logical_date = use_task_logical_date - if use_task_execution_date: - self.use_task_logical_date = use_task_execution_date - warnings.warn( - "Parameter ``use_task_execution_date`` is deprecated. Use ``use_task_logical_date``.", - RemovedInAirflow3Warning, - stacklevel=2, - ) def choose_branch(self, context: Context) -> str | Iterable[str]: if self.use_task_logical_date: diff --git a/airflow/operators/python.py b/airflow/operators/python.py index 09b2644beeee9..47e0cf3193352 100644 --- a/airflow/operators/python.py +++ b/airflow/operators/python.py @@ -32,7 +32,7 @@ from collections.abc import Container from pathlib import Path from tempfile import TemporaryDirectory -from typing import TYPE_CHECKING, Any, Callable, Collection, Iterable, Mapping, NamedTuple, Sequence, cast +from typing import TYPE_CHECKING, Any, Callable, Collection, Iterable, Mapping, NamedTuple, Sequence import lazy_object_proxy @@ -63,8 +63,6 @@ log = logging.getLogger(__name__) if TYPE_CHECKING: - from pendulum.datetime import DateTime - from airflow.serialization.enums import Encoding from airflow.utils.context import Context @@ -341,7 +339,6 @@ def get_tasks_to_skip(): self.skip( dag_run=dag_run, - execution_date=cast("DateTime", dag_run.execution_date), tasks=to_skip, map_index=context["ti"].map_index, ) diff --git a/airflow/operators/trigger_dagrun.py b/airflow/operators/trigger_dagrun.py index 2521297dcf936..539506ff9b0b1 100644 --- a/airflow/operators/trigger_dagrun.py +++ b/airflow/operators/trigger_dagrun.py @@ -20,7 +20,6 @@ import datetime import json import time -import warnings from typing import TYPE_CHECKING, Any, Sequence, cast from sqlalchemy import select @@ -34,7 +33,6 @@ AirflowSkipException, DagNotFound, DagRunAlreadyExists, - RemovedInAirflow3Warning, ) from airflow.models.baseoperator import BaseOperator from airflow.models.baseoperatorlink import BaseOperatorLink @@ -110,7 +108,6 @@ class TriggerDagRunOperator(BaseOperator): DAG for the same logical date already exists. :param deferrable: If waiting for completion, whether or not to defer the task until done, default is ``False``. - :param execution_date: Deprecated parameter; same as ``logical_date``. """ template_fields: Sequence[str] = ( @@ -139,7 +136,6 @@ def __init__( failed_states: list[str | DagRunState] | None = None, skip_when_already_exists: bool = False, deferrable: bool = conf.getboolean("operators", "default_deferrable", fallback=False), - execution_date: str | datetime.datetime | None = None, **kwargs, ) -> None: super().__init__(**kwargs) @@ -160,14 +156,6 @@ def __init__( self.skip_when_already_exists = skip_when_already_exists self._defer = deferrable - if execution_date is not None: - warnings.warn( - "Parameter 'execution_date' is deprecated. Use 'logical_date' instead.", - RemovedInAirflow3Warning, - stacklevel=2, - ) - logical_date = execution_date - if logical_date is not None and not isinstance(logical_date, (str, datetime.datetime)): type_name = type(logical_date).__name__ raise TypeError( diff --git a/airflow/operators/weekday.py b/airflow/operators/weekday.py index af3e332899bf9..f59a1da134888 100644 --- a/airflow/operators/weekday.py +++ b/airflow/operators/weekday.py @@ -17,10 +17,8 @@ # under the License. from __future__ import annotations -import warnings from typing import TYPE_CHECKING, Iterable -from airflow.exceptions import RemovedInAirflow3Warning from airflow.operators.branch import BaseBranchOperator from airflow.utils import timezone from airflow.utils.weekday import WeekDay @@ -91,7 +89,6 @@ class BranchDayOfWeekOperator(BaseBranchOperator): :param use_task_logical_date: If ``True``, uses task's logical date to compare with is_today. Execution Date is Useful for backfilling. If ``False``, uses system's day of the week. - :param use_task_execution_day: deprecated parameter, same effect as `use_task_logical_date` """ def __init__( @@ -101,7 +98,6 @@ def __init__( follow_task_ids_if_false: str | Iterable[str], week_day: str | Iterable[str] | WeekDay | Iterable[WeekDay], use_task_logical_date: bool = False, - use_task_execution_day: bool = False, **kwargs, ) -> None: super().__init__(**kwargs) @@ -109,13 +105,6 @@ def __init__( self.follow_task_ids_if_false = follow_task_ids_if_false self.week_day = week_day self.use_task_logical_date = use_task_logical_date - if use_task_execution_day: - self.use_task_logical_date = use_task_execution_day - warnings.warn( - "Parameter ``use_task_execution_day`` is deprecated. Use ``use_task_logical_date``.", - RemovedInAirflow3Warning, - stacklevel=2, - ) self._week_day_num = WeekDay.validate_week_day(week_day) def choose_branch(self, context: Context) -> str | Iterable[str]: diff --git a/airflow/plugins_manager.py b/airflow/plugins_manager.py index 76d72a4585009..8ccdef2c6390c 100644 --- a/airflow/plugins_manager.py +++ b/airflow/plugins_manager.py @@ -27,7 +27,6 @@ import os import sys import types -from cgitb import Hook from pathlib import Path from typing import TYPE_CHECKING, Any, Iterable @@ -78,7 +77,7 @@ registered_operator_link_classes: dict[str, type] | None = None registered_ti_dep_classes: dict[str, type] | None = None timetable_classes: dict[str, type[Timetable]] | None = None -hook_lineage_reader_classes: list[type[Hook]] | None = None +hook_lineage_reader_classes: list[type[HookLineageReader]] | None = None priority_weight_strategy_classes: dict[str, type[PriorityWeightStrategy]] | None = None """ Mapping of class names to class of OperatorLinks registered by plugins. diff --git a/airflow/providers/amazon/aws/executors/batch/batch_executor.py b/airflow/providers/amazon/aws/executors/batch/batch_executor.py index 92790eb6c2e32..b38688defbba7 100644 --- a/airflow/providers/amazon/aws/executors/batch/batch_executor.py +++ b/airflow/providers/amazon/aws/executors/batch/batch_executor.py @@ -448,7 +448,7 @@ def try_adopt_task_instances(self, tis: Sequence[TaskInstance]) -> Sequence[Task airflow_cmd=ti.command_as_list(), queue=ti.queue, exec_config=ti.executor_config, - attempt_number=ti.prev_attempted_tries, + attempt_number=ti.try_number, ) adopted_tis.append(ti) diff --git a/airflow/providers/databricks/plugins/databricks_workflow.py b/airflow/providers/databricks/plugins/databricks_workflow.py index be2eaecfe3baf..265e93b77867c 100644 --- a/airflow/providers/databricks/plugins/databricks_workflow.py +++ b/airflow/providers/databricks/plugins/databricks_workflow.py @@ -24,7 +24,6 @@ from flask import current_app, flash, redirect, request, url_for from flask_appbuilder.api import expose -from packaging.version import Version from airflow.exceptions import AirflowException, TaskInstanceNotFound from airflow.models import BaseOperator, BaseOperatorLink @@ -34,13 +33,11 @@ from airflow.models.xcom import XCom from airflow.plugins_manager import AirflowPlugin from airflow.providers.databricks.hooks.databricks import DatabricksHook -from airflow.security import permissions from airflow.utils.airflow_flask_app import AirflowApp from airflow.utils.log.logging_mixin import LoggingMixin from airflow.utils.session import NEW_SESSION, provide_session from airflow.utils.state import TaskInstanceState from airflow.utils.task_group import TaskGroup -from airflow.version import version from airflow.www import auth from airflow.www.views import AirflowBaseView @@ -55,15 +52,6 @@ def get_auth_decorator(): - # TODO: remove this if block when min_airflow_version is set to higher than 2.8.0 - if Version(version) < Version("2.8"): - return auth.has_access( - [ - (permissions.ACTION_CAN_EDIT, permissions.RESOURCE_DAG), - (permissions.ACTION_CAN_CREATE, permissions.RESOURCE_DAG_RUN), - ] - ) - from airflow.auth.managers.models.resource_details import DagAccessEntity return auth.has_access_dag("POST", DagAccessEntity.RUN) diff --git a/airflow/providers/docker/operators/docker_swarm.py b/airflow/providers/docker/operators/docker_swarm.py index 452d8e531a137..6b2d99fb034c8 100644 --- a/airflow/providers/docker/operators/docker_swarm.py +++ b/airflow/providers/docker/operators/docker_swarm.py @@ -22,7 +22,7 @@ import shlex from datetime import datetime from time import sleep -from typing import TYPE_CHECKING +from typing import TYPE_CHECKING, Literal from docker import types from docker.errors import APIError @@ -107,6 +107,16 @@ class DockerSwarmOperator(DockerOperator): The resources are Resources as per the docker api [https://docker-py.readthedocs.io/en/stable/api.html#docker.types.Resources]_ This parameter has precedence on the mem_limit parameter. + :param logging_driver: The logging driver to use for container logs. Docker by default uses 'json-file'. + For more information on Docker logging drivers: https://docs.docker.com/engine/logging/configure/ + NOTE: Only drivers 'json-file' and 'gelf' are currently supported. If left empty, 'json-file' will be used. + :param logging_driver_opts: Dictionary of logging options to use with the associated logging driver chosen. + Depending on the logging driver, some options are required. + Failure to include them, will result in the operator failing. + All option values must be strings and wrapped in double quotes. + For information on 'json-file' options: https://docs.docker.com/engine/logging/drivers/json-file/ + For information on 'gelf' options: https://docs.docker.com/engine/logging/drivers/gelf/ + NOTE: 'gelf' driver requires the 'gelf-address' option to be set. """ def __init__( @@ -121,6 +131,8 @@ def __init__( networks: list[str | types.NetworkAttachmentConfig] | None = None, placement: types.Placement | list[types.Placement] | None = None, container_resources: types.Resources | None = None, + logging_driver: Literal["json-path", "gelf"] | None = None, + logging_driver_opts: dict | None = None, **kwargs, ) -> None: super().__init__(image=image, **kwargs) @@ -135,6 +147,18 @@ def __init__( self.networks = networks self.placement = placement self.container_resources = container_resources or types.Resources(mem_limit=self.mem_limit) + self.logging_driver = logging_driver + self.logging_driver_opts = logging_driver_opts + + if self.logging_driver: + supported_logging_drivers = ("json-file", "gelf") + if self.logging_driver not in supported_logging_drivers: + raise AirflowException( + f"Invalid logging driver provided: {self.logging_driver}. Must be one of: [{', '.join(supported_logging_drivers)}]" + ) + self.log_driver_config = types.DriverConfig(self.logging_driver, self.logging_driver_opts) + else: + self.log_driver_config = None def execute(self, context: Context) -> None: self.environment["AIRFLOW_TMP_DIR"] = self.tmp_dir @@ -159,6 +183,7 @@ def _run_service(self) -> None: resources=self.container_resources, networks=self.networks, placement=self.placement, + log_driver=self.log_driver_config, ), name=f"airflow-{get_random_string()}", labels={"name": f"airflow__{self.dag_id}__{self.task_id}"}, diff --git a/airflow/providers/google/cloud/operators/gcs.py b/airflow/providers/google/cloud/operators/gcs.py index c396e173eaad1..561de4c46edd4 100644 --- a/airflow/providers/google/cloud/operators/gcs.py +++ b/airflow/providers/google/cloud/operators/gcs.py @@ -795,11 +795,11 @@ def execute(self, context: Context) -> list[str]: orig_end = context["data_interval_end"] except KeyError: orig_start = pendulum.instance(context["execution_date"]) - following_execution_date = context["dag"].following_schedule(context["execution_date"]) - if following_execution_date is None: - orig_end = None + next_dagrun = context["dag"].next_dagrun_info(last_automated_dagrun=None, restricted=False) + if next_dagrun and next_dagrun.data_interval and next_dagrun.data_interval.end: + orig_end = next_dagrun.data_interval.end else: - orig_end = pendulum.instance(following_execution_date) + orig_end = None timespan_start = orig_start if orig_end is None: # Only possible in Airflow before 2.2. diff --git a/airflow/providers/snowflake/utils/openlineage.py b/airflow/providers/snowflake/utils/openlineage.py index bbf1a903875ab..12821d49f35c3 100644 --- a/airflow/providers/snowflake/utils/openlineage.py +++ b/airflow/providers/snowflake/utils/openlineage.py @@ -21,16 +21,34 @@ def fix_account_name(name: str) -> str: """Fix account name to have the following format: ...""" - spl = name.split(".") - if len(spl) == 1: - account = spl[0] - region, cloud = "us-west-1", "aws" - elif len(spl) == 2: - account, region = spl - cloud = "aws" - else: - account, region, cloud = spl - return f"{account}.{region}.{cloud}" + if not any(word in name for word in ["-", "_"]): + # If there is neither '-' nor '_' in the name, we append `.us-west-1.aws` + return f"{name}.us-west-1.aws" + + if "." in name: + # Logic for account locator with dots remains unchanged + spl = name.split(".") + if len(spl) == 1: + account = spl[0] + region, cloud = "us-west-1", "aws" + elif len(spl) == 2: + account, region = spl + cloud = "aws" + else: + account, region, cloud = spl + return f"{account}.{region}.{cloud}" + + # Check for existing accounts with cloud names + if cloud := next((c for c in ["aws", "gcp", "azure"] if c in name), ""): + parts = name.split(cloud) + account = parts[0].strip("-_.") + + if not (region := parts[1].strip("-_.").replace("_", "-")): + return name + return f"{account}.{region}.{cloud}" + + # Default case, return the original name + return name def fix_snowflake_sqlalchemy_uri(uri: str) -> str: @@ -57,8 +75,6 @@ def fix_snowflake_sqlalchemy_uri(uri: str) -> str: if not hostname: return uri - # old account identifier like xy123456 - if "." in hostname or not any(word in hostname for word in ["-", "_"]): - hostname = fix_account_name(hostname) + hostname = fix_account_name(hostname) # else - its new hostname, just return it return urlunparse((parts.scheme, hostname, parts.path, parts.params, parts.query, parts.fragment)) diff --git a/airflow/serialization/serialized_objects.py b/airflow/serialization/serialized_objects.py index 54542a79c6a9c..71bc64c61aea6 100644 --- a/airflow/serialization/serialized_objects.py +++ b/airflow/serialization/serialized_objects.py @@ -1822,12 +1822,7 @@ def _has_kubernetes() -> bool: try: from kubernetes.client import models as k8s - try: - from airflow.providers.cncf.kubernetes.pod_generator import PodGenerator - except ImportError: - from airflow.kubernetes.pre_7_4_0_compatibility.pod_generator import ( # type: ignore[assignment] - PodGenerator, - ) + from airflow.providers.cncf.kubernetes.pod_generator import PodGenerator globals()["k8s"] = k8s globals()["PodGenerator"] = PodGenerator diff --git a/airflow/serialization/serializers/kubernetes.py b/airflow/serialization/serializers/kubernetes.py index f095400ee926a..faa2312ac7a81 100644 --- a/airflow/serialization/serializers/kubernetes.py +++ b/airflow/serialization/serializers/kubernetes.py @@ -44,12 +44,7 @@ def serialize(o: object) -> tuple[U, str, int, bool]: return "", "", 0, False if isinstance(o, (k8s.V1Pod, k8s.V1ResourceRequirements)): - try: - from airflow.providers.cncf.kubernetes.pod_generator import PodGenerator - except ImportError: - from airflow.kubernetes.pre_7_4_0_compatibility.pod_generator import ( # type: ignore[assignment] - PodGenerator, - ) + from airflow.providers.cncf.kubernetes.pod_generator import PodGenerator # We're running this in an except block, so we don't want it to fail # under any circumstances, e.g. accessing a non-existing attribute. diff --git a/airflow/triggers/base.py b/airflow/triggers/base.py index 7b5338ad2fa19..bc1da861f3c2d 100644 --- a/airflow/triggers/base.py +++ b/airflow/triggers/base.py @@ -203,7 +203,7 @@ def handle_submit(self, *, task_instance: TaskInstance, session: Session = NEW_S """ # Mark the task with terminal state and prevent it from resuming on worker task_instance.trigger_id = None - task_instance.state = self.task_instance_state + task_instance.set_state(self.task_instance_state, session=session) self._submit_callback_if_necessary(task_instance=task_instance, session=session) self._push_xcoms_if_necessary(task_instance=task_instance) diff --git a/airflow/triggers/external_task.py b/airflow/triggers/external_task.py index a5de817c357c2..cd43d59876e9e 100644 --- a/airflow/triggers/external_task.py +++ b/airflow/triggers/external_task.py @@ -21,16 +21,12 @@ from typing import Any from asgiref.sync import sync_to_async -from deprecated import deprecated from sqlalchemy import func -from airflow.exceptions import RemovedInAirflow3Warning -from airflow.models import DagRun, TaskInstance +from airflow.models import DagRun from airflow.triggers.base import BaseTrigger, TriggerEvent from airflow.utils.sensor_helper import _get_count from airflow.utils.session import NEW_SESSION, provide_session -from airflow.utils.state import TaskInstanceState -from airflow.utils.timezone import utcnow if typing.TYPE_CHECKING: from datetime import datetime @@ -136,121 +132,6 @@ def _get_count(self, states: typing.Iterable[str] | None) -> int: ) -@deprecated( - reason="TaskStateTrigger has been deprecated and will be removed in future.", - category=RemovedInAirflow3Warning, -) -class TaskStateTrigger(BaseTrigger): - """ - Waits asynchronously for a task in a different DAG to complete for a specific logical date. - - :param dag_id: The dag_id that contains the task you want to wait for - :param task_id: The task_id that contains the task you want to - wait for. - :param states: allowed states, default is ``['success']`` - :param execution_dates: task execution time interval - :param poll_interval: The time interval in seconds to check the state. - The default value is 5 sec. - :param trigger_start_time: time in Datetime format when the trigger was started. Is used - to control the execution of trigger to prevent infinite loop in case if specified name - of the dag does not exist in database. It will wait period of time equals _timeout_sec parameter - from the time, when the trigger was started and if the execution lasts more time than expected, - the trigger will terminate with 'timeout' status. - """ - - def __init__( - self, - dag_id: str, - execution_dates: list[datetime], - trigger_start_time: datetime, - states: list[str] | None = None, - task_id: str | None = None, - poll_interval: float = 2.0, - ): - super().__init__() - self.dag_id = dag_id - self.task_id = task_id - self.states = states - self.execution_dates = execution_dates - self.poll_interval = poll_interval - self.trigger_start_time = trigger_start_time - self.states = states or [TaskInstanceState.SUCCESS.value] - self._timeout_sec = 60 - - def serialize(self) -> tuple[str, dict[str, typing.Any]]: - """Serialize TaskStateTrigger arguments and classpath.""" - return ( - "airflow.triggers.external_task.TaskStateTrigger", - { - "dag_id": self.dag_id, - "task_id": self.task_id, - "states": self.states, - "execution_dates": self.execution_dates, - "poll_interval": self.poll_interval, - "trigger_start_time": self.trigger_start_time, - }, - ) - - async def run(self) -> typing.AsyncIterator[TriggerEvent]: - """ - Check periodically in the database to see if the dag exists and is in the running state. - - If found, wait until the task specified will reach one of the expected states. - If dag with specified name was not in the running state after _timeout_sec seconds - after starting execution process of the trigger, terminate with status 'timeout'. - """ - try: - while True: - delta = utcnow() - self.trigger_start_time - if delta.total_seconds() < self._timeout_sec: - # mypy confuses typing here - if await self.count_running_dags() == 0: # type: ignore[call-arg] - self.log.info("Waiting for DAG to start execution...") - await asyncio.sleep(self.poll_interval) - else: - yield TriggerEvent({"status": "timeout"}) - return - # mypy confuses typing here - if await self.count_tasks() == len(self.execution_dates): # type: ignore[call-arg] - yield TriggerEvent({"status": "success"}) - return - self.log.info("Task is still running, sleeping for %s seconds...", self.poll_interval) - await asyncio.sleep(self.poll_interval) - except Exception: - yield TriggerEvent({"status": "failed"}) - - @sync_to_async - @provide_session - def count_running_dags(self, session: Session): - """Count how many dag instances in running state in the database.""" - dags = ( - session.query(func.count("*")) - .filter( - TaskInstance.dag_id == self.dag_id, - TaskInstance.execution_date.in_(self.execution_dates), - TaskInstance.state.in_(["running", "success"]), - ) - .scalar() - ) - return dags - - @sync_to_async - @provide_session - def count_tasks(self, *, session: Session = NEW_SESSION) -> int | None: - """Count how many task instances in the database match our criteria.""" - count = ( - session.query(func.count("*")) # .count() is inefficient - .filter( - TaskInstance.dag_id == self.dag_id, - TaskInstance.task_id == self.task_id, - TaskInstance.state.in_(self.states), - TaskInstance.execution_date.in_(self.execution_dates), - ) - .scalar() - ) - return typing.cast(int, count) - - class DagStateTrigger(BaseTrigger): """ Waits asynchronously for a DAG to complete for a specific logical date. diff --git a/airflow/ui/.prettierignore b/airflow/ui/.prettierignore new file mode 100644 index 0000000000000..a2bcd8157d69c --- /dev/null +++ b/airflow/ui/.prettierignore @@ -0,0 +1,5 @@ +.mypy_cache/ +templates/**/*.html +dist/ +*.md +*.yaml diff --git a/airflow/ui/.prettierrc b/airflow/ui/.prettierrc new file mode 100644 index 0000000000000..39458246cff5f --- /dev/null +++ b/airflow/ui/.prettierrc @@ -0,0 +1,11 @@ +{ + "overrides": [ + { + "files": "*.json", + "options": { + "tabWidth": 2 + } + } + ], + "trailingComma": "es5" +} diff --git a/airflow/ui/CONTRIBUTING.md b/airflow/ui/CONTRIBUTING.md new file mode 100644 index 0000000000000..ee5d39ed52501 --- /dev/null +++ b/airflow/ui/CONTRIBUTING.md @@ -0,0 +1,65 @@ + + +# Contributing to the UI + +## Getting Started + +1. Install `pnpm`. Check their [docs](https://pnpm.io/installation) + +2. Start the project. ("watch" mode rebuilds the UI after each change, this is temporary until we get hot reloading working with Flask.) + +```console +pnpm install +pnpm run build --watch +``` + +## Learn + +If you're new to modern frontend development or parts of our stack, you may want to check out these resources to understand our codebase: + +- Typescript is an extension of javascript to add type-checking to our app. Files ending in `.ts` or `.tsx` will be type-checked. Check out the [handbook](https://www.typescriptlang.org/docs/handbook/typescript-in-5-minutes-func.html) for an introduction or feel free to keep this [cheatsheet](https://github.com/typescript-cheatsheets/react) open while developing. + +- React powers our entire app so it would be valuable to learn JSX, the html-in-js templates React utilizes. Files that contain JSX will end in `.tsx` instead of `.ts`. Check out their official [tutorial](https://reactjs.org/tutorial/tutorial.html#overview) for a basic overview. + +- Chakra-UI is our component library and theming system. You'll notice we have no traditional css nor html tags. This is all handled in Chakra with importing standard components like `` or `` that are styled globally in `src/theme.ts` file and then by passing styles as component props. Check out their [docs](https://chakra-ui.com/docs/getting-started) to see all the included components and hooks. + +- Testing is done with React Testing Library. We follow their idea of "The more your tests resemble the way your software is used, + the more confidence they can give you." Keep their [cheatsheet](https://testing-library.com/docs/react-testing-library/cheatsheet) open when writing tests + +- We use Vite as our app framework for running a dev server and build commands. Check out their [docs](https://vitejs.dev/guide/) if you need to customize it. + +- State management is handled with [Context](https://reactjs.org/docs/context.html) and [react-query](https://tanstack.com/query/latest/docs/framework/react/overview). Context is used for App-level state that doesn't change often (authentication, dark/light mode). React Query handles all the state and side effects (loading, error, caching, etc) of async data from the API. + +## Project Structure + +- `/openapi` autogenerated types and queries based on the public REST API openapi spec. Do not manually edit. To regenerate use: + +```console +pnpm run codegen +``` + +- `/src/assets` static assets for the UI +- `/src/components` shared components across the UI +- `/dist` build files +- TODO: build out project structure more + +## Find open issues + +TODO diff --git a/airflow/ui/README.md b/airflow/ui/README.md new file mode 100644 index 0000000000000..3d0ee99ba3ffd --- /dev/null +++ b/airflow/ui/README.md @@ -0,0 +1,69 @@ + + +# React + TypeScript + Vite + +This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules. + +Currently, two official plugins are available: + +- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/README.md) uses [Babel](https://babeljs.io/) for Fast Refresh +- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh + +## Expanding the ESLint configuration + +If you are developing a production application, we recommend updating the configuration to enable type aware lint rules: + +- Configure the top-level `parserOptions` property like this: + +```js +export default tseslint.config({ + languageOptions: { + // other options... + parserOptions: { + project: ['./tsconfig.node.json', './tsconfig.app.json'], + tsconfigRootDir: import.meta.dirname, + }, + }, +}) +``` + +- Replace `tseslint.configs.recommended` to `tseslint.configs.recommendedTypeChecked` or `tseslint.configs.strictTypeChecked` +- Optionally add `...tseslint.configs.stylisticTypeChecked` +- Install [eslint-plugin-react](https://github.com/jsx-eslint/eslint-plugin-react) and update the config: + +```js +// eslint.config.js +import react from 'eslint-plugin-react' + +export default tseslint.config({ + // Set the react version + settings: { react: { version: '18.3' } }, + plugins: { + // Add the react plugin + react, + }, + rules: { + // other rules... + // Enable its recommended rules + ...react.configs.recommended.rules, + ...react.configs['jsx-runtime'].rules, + }, +}) +``` diff --git a/airflow/ui/dev/index.html b/airflow/ui/dev/index.html new file mode 100644 index 0000000000000..10b45003217cf --- /dev/null +++ b/airflow/ui/dev/index.html @@ -0,0 +1,22 @@ + + + + + + + + + + Airflow 3.0 + + +
+ + + diff --git a/airflow/ui/eslint.config.js b/airflow/ui/eslint.config.js new file mode 100644 index 0000000000000..0035c39ec7844 --- /dev/null +++ b/airflow/ui/eslint.config.js @@ -0,0 +1,54 @@ +/*! + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import js from "@eslint/js"; +import globals from "globals"; +import reactHooks from "eslint-plugin-react-hooks"; +import reactRefresh from "eslint-plugin-react-refresh"; +import tseslint from "typescript-eslint"; +import pluginPrettier from "eslint-plugin-prettier"; +import pluginReact from "eslint-plugin-react"; + +export default tseslint.config( + { ignores: ["dist", "openapi-gen"] }, + { + extends: [ + js.configs.recommended, + ...tseslint.configs.recommended, + pluginReact.recommended, + pluginPrettier.recommended, + ], + files: ["**/*.{ts,tsx}"], + languageOptions: { + ecmaVersion: 2020, + globals: globals.browser, + }, + plugins: { + "react-hooks": reactHooks, + "react-refresh": reactRefresh, + }, + rules: { + ...reactHooks.configs.recommended.rules, + "react-refresh/only-export-components": [ + "warn", + { allowConstantExport: true }, + ], + }, + } +); diff --git a/airflow/ui/index.html b/airflow/ui/index.html new file mode 100644 index 0000000000000..28a29c6993e1b --- /dev/null +++ b/airflow/ui/index.html @@ -0,0 +1,13 @@ + + + + + + + Airflow 3.0 + + +
+ + + diff --git a/airflow/ui/openapi-gen/queries/common.ts b/airflow/ui/openapi-gen/queries/common.ts new file mode 100644 index 0000000000000..2c1ed898d183c --- /dev/null +++ b/airflow/ui/openapi-gen/queries/common.ts @@ -0,0 +1,1502 @@ +// generated with @7nohe/openapi-react-query-codegen@1.6.0 + +import { UseQueryResult } from "@tanstack/react-query"; +import { + ConfigService, + ConnectionService, + DagRunService, + DagService, + DagStatsService, + DagWarningService, + DatasetService, + EventLogService, + ImportErrorService, + MonitoringService, + PermissionService, + PluginService, + PoolService, + ProviderService, + RoleService, + TaskInstanceService, + UserService, + VariableService, + XcomService, +} from "../requests/services.gen"; +export type ConnectionServiceGetConnectionsDefaultResponse = Awaited< + ReturnType +>; +export type ConnectionServiceGetConnectionsQueryResult< + TData = ConnectionServiceGetConnectionsDefaultResponse, + TError = unknown, +> = UseQueryResult; +export const useConnectionServiceGetConnectionsKey = + "ConnectionServiceGetConnections"; +export const UseConnectionServiceGetConnectionsKeyFn = ( + { + limit, + offset, + orderBy, + }: { + limit?: number; + offset?: number; + orderBy?: string; + } = {}, + queryKey?: Array +) => [ + useConnectionServiceGetConnectionsKey, + ...(queryKey ?? [{ limit, offset, orderBy }]), +]; +export type ConnectionServiceGetConnectionDefaultResponse = Awaited< + ReturnType +>; +export type ConnectionServiceGetConnectionQueryResult< + TData = ConnectionServiceGetConnectionDefaultResponse, + TError = unknown, +> = UseQueryResult; +export const useConnectionServiceGetConnectionKey = + "ConnectionServiceGetConnection"; +export const UseConnectionServiceGetConnectionKeyFn = ( + { + connectionId, + }: { + connectionId: string; + }, + queryKey?: Array +) => [ + useConnectionServiceGetConnectionKey, + ...(queryKey ?? [{ connectionId }]), +]; +export type DagServiceGetDagsDefaultResponse = Awaited< + ReturnType +>; +export type DagServiceGetDagsQueryResult< + TData = DagServiceGetDagsDefaultResponse, + TError = unknown, +> = UseQueryResult; +export const useDagServiceGetDagsKey = "DagServiceGetDags"; +export const UseDagServiceGetDagsKeyFn = ( + { + dagIdPattern, + fields, + limit, + offset, + onlyActive, + orderBy, + paused, + tags, + }: { + dagIdPattern?: string; + fields?: string[]; + limit?: number; + offset?: number; + onlyActive?: boolean; + orderBy?: string; + paused?: boolean; + tags?: string[]; + } = {}, + queryKey?: Array +) => [ + useDagServiceGetDagsKey, + ...(queryKey ?? [ + { dagIdPattern, fields, limit, offset, onlyActive, orderBy, paused, tags }, + ]), +]; +export type DagServiceGetDagDefaultResponse = Awaited< + ReturnType +>; +export type DagServiceGetDagQueryResult< + TData = DagServiceGetDagDefaultResponse, + TError = unknown, +> = UseQueryResult; +export const useDagServiceGetDagKey = "DagServiceGetDag"; +export const UseDagServiceGetDagKeyFn = ( + { + dagId, + fields, + }: { + dagId: string; + fields?: string[]; + }, + queryKey?: Array +) => [useDagServiceGetDagKey, ...(queryKey ?? [{ dagId, fields }])]; +export type DagServiceGetDagDetailsDefaultResponse = Awaited< + ReturnType +>; +export type DagServiceGetDagDetailsQueryResult< + TData = DagServiceGetDagDetailsDefaultResponse, + TError = unknown, +> = UseQueryResult; +export const useDagServiceGetDagDetailsKey = "DagServiceGetDagDetails"; +export const UseDagServiceGetDagDetailsKeyFn = ( + { + dagId, + fields, + }: { + dagId: string; + fields?: string[]; + }, + queryKey?: Array +) => [useDagServiceGetDagDetailsKey, ...(queryKey ?? [{ dagId, fields }])]; +export type DagServiceGetTasksDefaultResponse = Awaited< + ReturnType +>; +export type DagServiceGetTasksQueryResult< + TData = DagServiceGetTasksDefaultResponse, + TError = unknown, +> = UseQueryResult; +export const useDagServiceGetTasksKey = "DagServiceGetTasks"; +export const UseDagServiceGetTasksKeyFn = ( + { + dagId, + orderBy, + }: { + dagId: string; + orderBy?: string; + }, + queryKey?: Array +) => [useDagServiceGetTasksKey, ...(queryKey ?? [{ dagId, orderBy }])]; +export type DagServiceGetTaskDefaultResponse = Awaited< + ReturnType +>; +export type DagServiceGetTaskQueryResult< + TData = DagServiceGetTaskDefaultResponse, + TError = unknown, +> = UseQueryResult; +export const useDagServiceGetTaskKey = "DagServiceGetTask"; +export const UseDagServiceGetTaskKeyFn = ( + { + dagId, + taskId, + }: { + dagId: string; + taskId: string; + }, + queryKey?: Array +) => [useDagServiceGetTaskKey, ...(queryKey ?? [{ dagId, taskId }])]; +export type DagServiceGetDagSourceDefaultResponse = Awaited< + ReturnType +>; +export type DagServiceGetDagSourceQueryResult< + TData = DagServiceGetDagSourceDefaultResponse, + TError = unknown, +> = UseQueryResult; +export const useDagServiceGetDagSourceKey = "DagServiceGetDagSource"; +export const UseDagServiceGetDagSourceKeyFn = ( + { + fileToken, + }: { + fileToken: string; + }, + queryKey?: Array +) => [useDagServiceGetDagSourceKey, ...(queryKey ?? [{ fileToken }])]; +export type TaskInstanceServiceGetTaskInstanceDependenciesDefaultResponse = + Awaited>; +export type TaskInstanceServiceGetTaskInstanceDependenciesQueryResult< + TData = TaskInstanceServiceGetTaskInstanceDependenciesDefaultResponse, + TError = unknown, +> = UseQueryResult; +export const useTaskInstanceServiceGetTaskInstanceDependenciesKey = + "TaskInstanceServiceGetTaskInstanceDependencies"; +export const UseTaskInstanceServiceGetTaskInstanceDependenciesKeyFn = ( + { + dagId, + dagRunId, + taskId, + }: { + dagId: string; + dagRunId: string; + taskId: string; + }, + queryKey?: Array +) => [ + useTaskInstanceServiceGetTaskInstanceDependenciesKey, + ...(queryKey ?? [{ dagId, dagRunId, taskId }]), +]; +export type TaskInstanceServiceGetMappedTaskInstanceDependenciesDefaultResponse = + Awaited< + ReturnType + >; +export type TaskInstanceServiceGetMappedTaskInstanceDependenciesQueryResult< + TData = TaskInstanceServiceGetMappedTaskInstanceDependenciesDefaultResponse, + TError = unknown, +> = UseQueryResult; +export const useTaskInstanceServiceGetMappedTaskInstanceDependenciesKey = + "TaskInstanceServiceGetMappedTaskInstanceDependencies"; +export const UseTaskInstanceServiceGetMappedTaskInstanceDependenciesKeyFn = ( + { + dagId, + dagRunId, + mapIndex, + taskId, + }: { + dagId: string; + dagRunId: string; + mapIndex: number; + taskId: string; + }, + queryKey?: Array +) => [ + useTaskInstanceServiceGetMappedTaskInstanceDependenciesKey, + ...(queryKey ?? [{ dagId, dagRunId, mapIndex, taskId }]), +]; +export type TaskInstanceServiceGetTaskInstancesDefaultResponse = Awaited< + ReturnType +>; +export type TaskInstanceServiceGetTaskInstancesQueryResult< + TData = TaskInstanceServiceGetTaskInstancesDefaultResponse, + TError = unknown, +> = UseQueryResult; +export const useTaskInstanceServiceGetTaskInstancesKey = + "TaskInstanceServiceGetTaskInstances"; +export const UseTaskInstanceServiceGetTaskInstancesKeyFn = ( + { + dagId, + dagRunId, + durationGte, + durationLte, + endDateGte, + endDateLte, + executionDateGte, + executionDateLte, + executor, + limit, + offset, + pool, + queue, + startDateGte, + startDateLte, + state, + updatedAtGte, + updatedAtLte, + }: { + dagId: string; + dagRunId: string; + durationGte?: number; + durationLte?: number; + endDateGte?: string; + endDateLte?: string; + executionDateGte?: string; + executionDateLte?: string; + executor?: string[]; + limit?: number; + offset?: number; + pool?: string[]; + queue?: string[]; + startDateGte?: string; + startDateLte?: string; + state?: string[]; + updatedAtGte?: string; + updatedAtLte?: string; + }, + queryKey?: Array +) => [ + useTaskInstanceServiceGetTaskInstancesKey, + ...(queryKey ?? [ + { + dagId, + dagRunId, + durationGte, + durationLte, + endDateGte, + endDateLte, + executionDateGte, + executionDateLte, + executor, + limit, + offset, + pool, + queue, + startDateGte, + startDateLte, + state, + updatedAtGte, + updatedAtLte, + }, + ]), +]; +export type TaskInstanceServiceGetTaskInstanceDefaultResponse = Awaited< + ReturnType +>; +export type TaskInstanceServiceGetTaskInstanceQueryResult< + TData = TaskInstanceServiceGetTaskInstanceDefaultResponse, + TError = unknown, +> = UseQueryResult; +export const useTaskInstanceServiceGetTaskInstanceKey = + "TaskInstanceServiceGetTaskInstance"; +export const UseTaskInstanceServiceGetTaskInstanceKeyFn = ( + { + dagId, + dagRunId, + taskId, + }: { + dagId: string; + dagRunId: string; + taskId: string; + }, + queryKey?: Array +) => [ + useTaskInstanceServiceGetTaskInstanceKey, + ...(queryKey ?? [{ dagId, dagRunId, taskId }]), +]; +export type TaskInstanceServiceGetMappedTaskInstanceDefaultResponse = Awaited< + ReturnType +>; +export type TaskInstanceServiceGetMappedTaskInstanceQueryResult< + TData = TaskInstanceServiceGetMappedTaskInstanceDefaultResponse, + TError = unknown, +> = UseQueryResult; +export const useTaskInstanceServiceGetMappedTaskInstanceKey = + "TaskInstanceServiceGetMappedTaskInstance"; +export const UseTaskInstanceServiceGetMappedTaskInstanceKeyFn = ( + { + dagId, + dagRunId, + mapIndex, + taskId, + }: { + dagId: string; + dagRunId: string; + mapIndex: number; + taskId: string; + }, + queryKey?: Array +) => [ + useTaskInstanceServiceGetMappedTaskInstanceKey, + ...(queryKey ?? [{ dagId, dagRunId, mapIndex, taskId }]), +]; +export type TaskInstanceServiceGetMappedTaskInstancesDefaultResponse = Awaited< + ReturnType +>; +export type TaskInstanceServiceGetMappedTaskInstancesQueryResult< + TData = TaskInstanceServiceGetMappedTaskInstancesDefaultResponse, + TError = unknown, +> = UseQueryResult; +export const useTaskInstanceServiceGetMappedTaskInstancesKey = + "TaskInstanceServiceGetMappedTaskInstances"; +export const UseTaskInstanceServiceGetMappedTaskInstancesKeyFn = ( + { + dagId, + dagRunId, + durationGte, + durationLte, + endDateGte, + endDateLte, + executionDateGte, + executionDateLte, + executor, + limit, + offset, + orderBy, + pool, + queue, + startDateGte, + startDateLte, + state, + taskId, + updatedAtGte, + updatedAtLte, + }: { + dagId: string; + dagRunId: string; + durationGte?: number; + durationLte?: number; + endDateGte?: string; + endDateLte?: string; + executionDateGte?: string; + executionDateLte?: string; + executor?: string[]; + limit?: number; + offset?: number; + orderBy?: string; + pool?: string[]; + queue?: string[]; + startDateGte?: string; + startDateLte?: string; + state?: string[]; + taskId: string; + updatedAtGte?: string; + updatedAtLte?: string; + }, + queryKey?: Array +) => [ + useTaskInstanceServiceGetMappedTaskInstancesKey, + ...(queryKey ?? [ + { + dagId, + dagRunId, + durationGte, + durationLte, + endDateGte, + endDateLte, + executionDateGte, + executionDateLte, + executor, + limit, + offset, + orderBy, + pool, + queue, + startDateGte, + startDateLte, + state, + taskId, + updatedAtGte, + updatedAtLte, + }, + ]), +]; +export type TaskInstanceServiceGetTaskInstanceTryDetailsDefaultResponse = + Awaited>; +export type TaskInstanceServiceGetTaskInstanceTryDetailsQueryResult< + TData = TaskInstanceServiceGetTaskInstanceTryDetailsDefaultResponse, + TError = unknown, +> = UseQueryResult; +export const useTaskInstanceServiceGetTaskInstanceTryDetailsKey = + "TaskInstanceServiceGetTaskInstanceTryDetails"; +export const UseTaskInstanceServiceGetTaskInstanceTryDetailsKeyFn = ( + { + dagId, + dagRunId, + taskId, + taskTryNumber, + }: { + dagId: string; + dagRunId: string; + taskId: string; + taskTryNumber: number; + }, + queryKey?: Array +) => [ + useTaskInstanceServiceGetTaskInstanceTryDetailsKey, + ...(queryKey ?? [{ dagId, dagRunId, taskId, taskTryNumber }]), +]; +export type TaskInstanceServiceGetTaskInstanceTriesDefaultResponse = Awaited< + ReturnType +>; +export type TaskInstanceServiceGetTaskInstanceTriesQueryResult< + TData = TaskInstanceServiceGetTaskInstanceTriesDefaultResponse, + TError = unknown, +> = UseQueryResult; +export const useTaskInstanceServiceGetTaskInstanceTriesKey = + "TaskInstanceServiceGetTaskInstanceTries"; +export const UseTaskInstanceServiceGetTaskInstanceTriesKeyFn = ( + { + dagId, + dagRunId, + limit, + offset, + orderBy, + taskId, + }: { + dagId: string; + dagRunId: string; + limit?: number; + offset?: number; + orderBy?: string; + taskId: string; + }, + queryKey?: Array +) => [ + useTaskInstanceServiceGetTaskInstanceTriesKey, + ...(queryKey ?? [{ dagId, dagRunId, limit, offset, orderBy, taskId }]), +]; +export type TaskInstanceServiceGetMappedTaskInstanceTriesDefaultResponse = + Awaited>; +export type TaskInstanceServiceGetMappedTaskInstanceTriesQueryResult< + TData = TaskInstanceServiceGetMappedTaskInstanceTriesDefaultResponse, + TError = unknown, +> = UseQueryResult; +export const useTaskInstanceServiceGetMappedTaskInstanceTriesKey = + "TaskInstanceServiceGetMappedTaskInstanceTries"; +export const UseTaskInstanceServiceGetMappedTaskInstanceTriesKeyFn = ( + { + dagId, + dagRunId, + limit, + mapIndex, + offset, + orderBy, + taskId, + }: { + dagId: string; + dagRunId: string; + limit?: number; + mapIndex: number; + offset?: number; + orderBy?: string; + taskId: string; + }, + queryKey?: Array +) => [ + useTaskInstanceServiceGetMappedTaskInstanceTriesKey, + ...(queryKey ?? [ + { dagId, dagRunId, limit, mapIndex, offset, orderBy, taskId }, + ]), +]; +export type TaskInstanceServiceGetMappedTaskInstanceTryDetailsDefaultResponse = + Awaited< + ReturnType + >; +export type TaskInstanceServiceGetMappedTaskInstanceTryDetailsQueryResult< + TData = TaskInstanceServiceGetMappedTaskInstanceTryDetailsDefaultResponse, + TError = unknown, +> = UseQueryResult; +export const useTaskInstanceServiceGetMappedTaskInstanceTryDetailsKey = + "TaskInstanceServiceGetMappedTaskInstanceTryDetails"; +export const UseTaskInstanceServiceGetMappedTaskInstanceTryDetailsKeyFn = ( + { + dagId, + dagRunId, + mapIndex, + taskId, + taskTryNumber, + }: { + dagId: string; + dagRunId: string; + mapIndex: number; + taskId: string; + taskTryNumber: number; + }, + queryKey?: Array +) => [ + useTaskInstanceServiceGetMappedTaskInstanceTryDetailsKey, + ...(queryKey ?? [{ dagId, dagRunId, mapIndex, taskId, taskTryNumber }]), +]; +export type TaskInstanceServiceGetExtraLinksDefaultResponse = Awaited< + ReturnType +>; +export type TaskInstanceServiceGetExtraLinksQueryResult< + TData = TaskInstanceServiceGetExtraLinksDefaultResponse, + TError = unknown, +> = UseQueryResult; +export const useTaskInstanceServiceGetExtraLinksKey = + "TaskInstanceServiceGetExtraLinks"; +export const UseTaskInstanceServiceGetExtraLinksKeyFn = ( + { + dagId, + dagRunId, + taskId, + }: { + dagId: string; + dagRunId: string; + taskId: string; + }, + queryKey?: Array +) => [ + useTaskInstanceServiceGetExtraLinksKey, + ...(queryKey ?? [{ dagId, dagRunId, taskId }]), +]; +export type TaskInstanceServiceGetLogDefaultResponse = Awaited< + ReturnType +>; +export type TaskInstanceServiceGetLogQueryResult< + TData = TaskInstanceServiceGetLogDefaultResponse, + TError = unknown, +> = UseQueryResult; +export const useTaskInstanceServiceGetLogKey = "TaskInstanceServiceGetLog"; +export const UseTaskInstanceServiceGetLogKeyFn = ( + { + dagId, + dagRunId, + fullContent, + mapIndex, + taskId, + taskTryNumber, + token, + }: { + dagId: string; + dagRunId: string; + fullContent?: boolean; + mapIndex?: number; + taskId: string; + taskTryNumber: number; + token?: string; + }, + queryKey?: Array +) => [ + useTaskInstanceServiceGetLogKey, + ...(queryKey ?? [ + { dagId, dagRunId, fullContent, mapIndex, taskId, taskTryNumber, token }, + ]), +]; +export type DagRunServiceGetDagRunsDefaultResponse = Awaited< + ReturnType +>; +export type DagRunServiceGetDagRunsQueryResult< + TData = DagRunServiceGetDagRunsDefaultResponse, + TError = unknown, +> = UseQueryResult; +export const useDagRunServiceGetDagRunsKey = "DagRunServiceGetDagRuns"; +export const UseDagRunServiceGetDagRunsKeyFn = ( + { + dagId, + endDateGte, + endDateLte, + executionDateGte, + executionDateLte, + fields, + limit, + offset, + orderBy, + startDateGte, + startDateLte, + state, + updatedAtGte, + updatedAtLte, + }: { + dagId: string; + endDateGte?: string; + endDateLte?: string; + executionDateGte?: string; + executionDateLte?: string; + fields?: string[]; + limit?: number; + offset?: number; + orderBy?: string; + startDateGte?: string; + startDateLte?: string; + state?: string[]; + updatedAtGte?: string; + updatedAtLte?: string; + }, + queryKey?: Array +) => [ + useDagRunServiceGetDagRunsKey, + ...(queryKey ?? [ + { + dagId, + endDateGte, + endDateLte, + executionDateGte, + executionDateLte, + fields, + limit, + offset, + orderBy, + startDateGte, + startDateLte, + state, + updatedAtGte, + updatedAtLte, + }, + ]), +]; +export type DagRunServiceGetDagRunDefaultResponse = Awaited< + ReturnType +>; +export type DagRunServiceGetDagRunQueryResult< + TData = DagRunServiceGetDagRunDefaultResponse, + TError = unknown, +> = UseQueryResult; +export const useDagRunServiceGetDagRunKey = "DagRunServiceGetDagRun"; +export const UseDagRunServiceGetDagRunKeyFn = ( + { + dagId, + dagRunId, + fields, + }: { + dagId: string; + dagRunId: string; + fields?: string[]; + }, + queryKey?: Array +) => [ + useDagRunServiceGetDagRunKey, + ...(queryKey ?? [{ dagId, dagRunId, fields }]), +]; +export type DagRunServiceGetUpstreamDatasetEventsDefaultResponse = Awaited< + ReturnType +>; +export type DagRunServiceGetUpstreamDatasetEventsQueryResult< + TData = DagRunServiceGetUpstreamDatasetEventsDefaultResponse, + TError = unknown, +> = UseQueryResult; +export const useDagRunServiceGetUpstreamDatasetEventsKey = + "DagRunServiceGetUpstreamDatasetEvents"; +export const UseDagRunServiceGetUpstreamDatasetEventsKeyFn = ( + { + dagId, + dagRunId, + }: { + dagId: string; + dagRunId: string; + }, + queryKey?: Array +) => [ + useDagRunServiceGetUpstreamDatasetEventsKey, + ...(queryKey ?? [{ dagId, dagRunId }]), +]; +export type DatasetServiceGetUpstreamDatasetEventsDefaultResponse = Awaited< + ReturnType +>; +export type DatasetServiceGetUpstreamDatasetEventsQueryResult< + TData = DatasetServiceGetUpstreamDatasetEventsDefaultResponse, + TError = unknown, +> = UseQueryResult; +export const useDatasetServiceGetUpstreamDatasetEventsKey = + "DatasetServiceGetUpstreamDatasetEvents"; +export const UseDatasetServiceGetUpstreamDatasetEventsKeyFn = ( + { + dagId, + dagRunId, + }: { + dagId: string; + dagRunId: string; + }, + queryKey?: Array +) => [ + useDatasetServiceGetUpstreamDatasetEventsKey, + ...(queryKey ?? [{ dagId, dagRunId }]), +]; +export type DatasetServiceGetDagDatasetQueuedEventDefaultResponse = Awaited< + ReturnType +>; +export type DatasetServiceGetDagDatasetQueuedEventQueryResult< + TData = DatasetServiceGetDagDatasetQueuedEventDefaultResponse, + TError = unknown, +> = UseQueryResult; +export const useDatasetServiceGetDagDatasetQueuedEventKey = + "DatasetServiceGetDagDatasetQueuedEvent"; +export const UseDatasetServiceGetDagDatasetQueuedEventKeyFn = ( + { + before, + dagId, + uri, + }: { + before?: string; + dagId: string; + uri: string; + }, + queryKey?: Array +) => [ + useDatasetServiceGetDagDatasetQueuedEventKey, + ...(queryKey ?? [{ before, dagId, uri }]), +]; +export type DatasetServiceGetDagDatasetQueuedEventsDefaultResponse = Awaited< + ReturnType +>; +export type DatasetServiceGetDagDatasetQueuedEventsQueryResult< + TData = DatasetServiceGetDagDatasetQueuedEventsDefaultResponse, + TError = unknown, +> = UseQueryResult; +export const useDatasetServiceGetDagDatasetQueuedEventsKey = + "DatasetServiceGetDagDatasetQueuedEvents"; +export const UseDatasetServiceGetDagDatasetQueuedEventsKeyFn = ( + { + before, + dagId, + }: { + before?: string; + dagId: string; + }, + queryKey?: Array +) => [ + useDatasetServiceGetDagDatasetQueuedEventsKey, + ...(queryKey ?? [{ before, dagId }]), +]; +export type DatasetServiceGetDatasetQueuedEventsDefaultResponse = Awaited< + ReturnType +>; +export type DatasetServiceGetDatasetQueuedEventsQueryResult< + TData = DatasetServiceGetDatasetQueuedEventsDefaultResponse, + TError = unknown, +> = UseQueryResult; +export const useDatasetServiceGetDatasetQueuedEventsKey = + "DatasetServiceGetDatasetQueuedEvents"; +export const UseDatasetServiceGetDatasetQueuedEventsKeyFn = ( + { + before, + uri, + }: { + before?: string; + uri: string; + }, + queryKey?: Array +) => [ + useDatasetServiceGetDatasetQueuedEventsKey, + ...(queryKey ?? [{ before, uri }]), +]; +export type DatasetServiceGetDatasetsDefaultResponse = Awaited< + ReturnType +>; +export type DatasetServiceGetDatasetsQueryResult< + TData = DatasetServiceGetDatasetsDefaultResponse, + TError = unknown, +> = UseQueryResult; +export const useDatasetServiceGetDatasetsKey = "DatasetServiceGetDatasets"; +export const UseDatasetServiceGetDatasetsKeyFn = ( + { + dagIds, + limit, + offset, + orderBy, + uriPattern, + }: { + dagIds?: string; + limit?: number; + offset?: number; + orderBy?: string; + uriPattern?: string; + } = {}, + queryKey?: Array +) => [ + useDatasetServiceGetDatasetsKey, + ...(queryKey ?? [{ dagIds, limit, offset, orderBy, uriPattern }]), +]; +export type DatasetServiceGetDatasetDefaultResponse = Awaited< + ReturnType +>; +export type DatasetServiceGetDatasetQueryResult< + TData = DatasetServiceGetDatasetDefaultResponse, + TError = unknown, +> = UseQueryResult; +export const useDatasetServiceGetDatasetKey = "DatasetServiceGetDataset"; +export const UseDatasetServiceGetDatasetKeyFn = ( + { + uri, + }: { + uri: string; + }, + queryKey?: Array +) => [useDatasetServiceGetDatasetKey, ...(queryKey ?? [{ uri }])]; +export type DatasetServiceGetDatasetEventsDefaultResponse = Awaited< + ReturnType +>; +export type DatasetServiceGetDatasetEventsQueryResult< + TData = DatasetServiceGetDatasetEventsDefaultResponse, + TError = unknown, +> = UseQueryResult; +export const useDatasetServiceGetDatasetEventsKey = + "DatasetServiceGetDatasetEvents"; +export const UseDatasetServiceGetDatasetEventsKeyFn = ( + { + datasetId, + limit, + offset, + orderBy, + sourceDagId, + sourceMapIndex, + sourceRunId, + sourceTaskId, + }: { + datasetId?: number; + limit?: number; + offset?: number; + orderBy?: string; + sourceDagId?: string; + sourceMapIndex?: number; + sourceRunId?: string; + sourceTaskId?: string; + } = {}, + queryKey?: Array +) => [ + useDatasetServiceGetDatasetEventsKey, + ...(queryKey ?? [ + { + datasetId, + limit, + offset, + orderBy, + sourceDagId, + sourceMapIndex, + sourceRunId, + sourceTaskId, + }, + ]), +]; +export type EventLogServiceGetEventLogsDefaultResponse = Awaited< + ReturnType +>; +export type EventLogServiceGetEventLogsQueryResult< + TData = EventLogServiceGetEventLogsDefaultResponse, + TError = unknown, +> = UseQueryResult; +export const useEventLogServiceGetEventLogsKey = "EventLogServiceGetEventLogs"; +export const UseEventLogServiceGetEventLogsKeyFn = ( + { + after, + before, + dagId, + event, + excludedEvents, + includedEvents, + limit, + mapIndex, + offset, + orderBy, + owner, + runId, + taskId, + tryNumber, + }: { + after?: string; + before?: string; + dagId?: string; + event?: string; + excludedEvents?: string; + includedEvents?: string; + limit?: number; + mapIndex?: number; + offset?: number; + orderBy?: string; + owner?: string; + runId?: string; + taskId?: string; + tryNumber?: number; + } = {}, + queryKey?: Array +) => [ + useEventLogServiceGetEventLogsKey, + ...(queryKey ?? [ + { + after, + before, + dagId, + event, + excludedEvents, + includedEvents, + limit, + mapIndex, + offset, + orderBy, + owner, + runId, + taskId, + tryNumber, + }, + ]), +]; +export type EventLogServiceGetEventLogDefaultResponse = Awaited< + ReturnType +>; +export type EventLogServiceGetEventLogQueryResult< + TData = EventLogServiceGetEventLogDefaultResponse, + TError = unknown, +> = UseQueryResult; +export const useEventLogServiceGetEventLogKey = "EventLogServiceGetEventLog"; +export const UseEventLogServiceGetEventLogKeyFn = ( + { + eventLogId, + }: { + eventLogId: number; + }, + queryKey?: Array +) => [useEventLogServiceGetEventLogKey, ...(queryKey ?? [{ eventLogId }])]; +export type ImportErrorServiceGetImportErrorsDefaultResponse = Awaited< + ReturnType +>; +export type ImportErrorServiceGetImportErrorsQueryResult< + TData = ImportErrorServiceGetImportErrorsDefaultResponse, + TError = unknown, +> = UseQueryResult; +export const useImportErrorServiceGetImportErrorsKey = + "ImportErrorServiceGetImportErrors"; +export const UseImportErrorServiceGetImportErrorsKeyFn = ( + { + limit, + offset, + orderBy, + }: { + limit?: number; + offset?: number; + orderBy?: string; + } = {}, + queryKey?: Array +) => [ + useImportErrorServiceGetImportErrorsKey, + ...(queryKey ?? [{ limit, offset, orderBy }]), +]; +export type ImportErrorServiceGetImportErrorDefaultResponse = Awaited< + ReturnType +>; +export type ImportErrorServiceGetImportErrorQueryResult< + TData = ImportErrorServiceGetImportErrorDefaultResponse, + TError = unknown, +> = UseQueryResult; +export const useImportErrorServiceGetImportErrorKey = + "ImportErrorServiceGetImportError"; +export const UseImportErrorServiceGetImportErrorKeyFn = ( + { + importErrorId, + }: { + importErrorId: number; + }, + queryKey?: Array +) => [ + useImportErrorServiceGetImportErrorKey, + ...(queryKey ?? [{ importErrorId }]), +]; +export type PoolServiceGetPoolsDefaultResponse = Awaited< + ReturnType +>; +export type PoolServiceGetPoolsQueryResult< + TData = PoolServiceGetPoolsDefaultResponse, + TError = unknown, +> = UseQueryResult; +export const usePoolServiceGetPoolsKey = "PoolServiceGetPools"; +export const UsePoolServiceGetPoolsKeyFn = ( + { + limit, + offset, + orderBy, + }: { + limit?: number; + offset?: number; + orderBy?: string; + } = {}, + queryKey?: Array +) => [usePoolServiceGetPoolsKey, ...(queryKey ?? [{ limit, offset, orderBy }])]; +export type PoolServiceGetPoolDefaultResponse = Awaited< + ReturnType +>; +export type PoolServiceGetPoolQueryResult< + TData = PoolServiceGetPoolDefaultResponse, + TError = unknown, +> = UseQueryResult; +export const usePoolServiceGetPoolKey = "PoolServiceGetPool"; +export const UsePoolServiceGetPoolKeyFn = ( + { + poolName, + }: { + poolName: string; + }, + queryKey?: Array +) => [usePoolServiceGetPoolKey, ...(queryKey ?? [{ poolName }])]; +export type ProviderServiceGetProvidersDefaultResponse = Awaited< + ReturnType +>; +export type ProviderServiceGetProvidersQueryResult< + TData = ProviderServiceGetProvidersDefaultResponse, + TError = unknown, +> = UseQueryResult; +export const useProviderServiceGetProvidersKey = "ProviderServiceGetProviders"; +export const UseProviderServiceGetProvidersKeyFn = ( + queryKey?: Array +) => [useProviderServiceGetProvidersKey, ...(queryKey ?? [])]; +export type VariableServiceGetVariablesDefaultResponse = Awaited< + ReturnType +>; +export type VariableServiceGetVariablesQueryResult< + TData = VariableServiceGetVariablesDefaultResponse, + TError = unknown, +> = UseQueryResult; +export const useVariableServiceGetVariablesKey = "VariableServiceGetVariables"; +export const UseVariableServiceGetVariablesKeyFn = ( + { + limit, + offset, + orderBy, + }: { + limit?: number; + offset?: number; + orderBy?: string; + } = {}, + queryKey?: Array +) => [ + useVariableServiceGetVariablesKey, + ...(queryKey ?? [{ limit, offset, orderBy }]), +]; +export type VariableServiceGetVariableDefaultResponse = Awaited< + ReturnType +>; +export type VariableServiceGetVariableQueryResult< + TData = VariableServiceGetVariableDefaultResponse, + TError = unknown, +> = UseQueryResult; +export const useVariableServiceGetVariableKey = "VariableServiceGetVariable"; +export const UseVariableServiceGetVariableKeyFn = ( + { + variableKey, + }: { + variableKey: string; + }, + queryKey?: Array +) => [useVariableServiceGetVariableKey, ...(queryKey ?? [{ variableKey }])]; +export type XcomServiceGetXcomEntriesDefaultResponse = Awaited< + ReturnType +>; +export type XcomServiceGetXcomEntriesQueryResult< + TData = XcomServiceGetXcomEntriesDefaultResponse, + TError = unknown, +> = UseQueryResult; +export const useXcomServiceGetXcomEntriesKey = "XcomServiceGetXcomEntries"; +export const UseXcomServiceGetXcomEntriesKeyFn = ( + { + dagId, + dagRunId, + limit, + mapIndex, + offset, + taskId, + xcomKey, + }: { + dagId: string; + dagRunId: string; + limit?: number; + mapIndex?: number; + offset?: number; + taskId: string; + xcomKey?: string; + }, + queryKey?: Array +) => [ + useXcomServiceGetXcomEntriesKey, + ...(queryKey ?? [ + { dagId, dagRunId, limit, mapIndex, offset, taskId, xcomKey }, + ]), +]; +export type XcomServiceGetXcomEntryDefaultResponse = Awaited< + ReturnType +>; +export type XcomServiceGetXcomEntryQueryResult< + TData = XcomServiceGetXcomEntryDefaultResponse, + TError = unknown, +> = UseQueryResult; +export const useXcomServiceGetXcomEntryKey = "XcomServiceGetXcomEntry"; +export const UseXcomServiceGetXcomEntryKeyFn = ( + { + dagId, + dagRunId, + deserialize, + mapIndex, + stringify, + taskId, + xcomKey, + }: { + dagId: string; + dagRunId: string; + deserialize?: boolean; + mapIndex?: number; + stringify?: boolean; + taskId: string; + xcomKey: string; + }, + queryKey?: Array +) => [ + useXcomServiceGetXcomEntryKey, + ...(queryKey ?? [ + { dagId, dagRunId, deserialize, mapIndex, stringify, taskId, xcomKey }, + ]), +]; +export type DagStatsServiceGetDagStatsDefaultResponse = Awaited< + ReturnType +>; +export type DagStatsServiceGetDagStatsQueryResult< + TData = DagStatsServiceGetDagStatsDefaultResponse, + TError = unknown, +> = UseQueryResult; +export const useDagStatsServiceGetDagStatsKey = "DagStatsServiceGetDagStats"; +export const UseDagStatsServiceGetDagStatsKeyFn = ( + { + dagIds, + }: { + dagIds: string; + }, + queryKey?: Array +) => [useDagStatsServiceGetDagStatsKey, ...(queryKey ?? [{ dagIds }])]; +export type DagWarningServiceGetDagWarningsDefaultResponse = Awaited< + ReturnType +>; +export type DagWarningServiceGetDagWarningsQueryResult< + TData = DagWarningServiceGetDagWarningsDefaultResponse, + TError = unknown, +> = UseQueryResult; +export const useDagWarningServiceGetDagWarningsKey = + "DagWarningServiceGetDagWarnings"; +export const UseDagWarningServiceGetDagWarningsKeyFn = ( + { + dagId, + limit, + offset, + orderBy, + warningType, + }: { + dagId?: string; + limit?: number; + offset?: number; + orderBy?: string; + warningType?: string; + } = {}, + queryKey?: Array +) => [ + useDagWarningServiceGetDagWarningsKey, + ...(queryKey ?? [{ dagId, limit, offset, orderBy, warningType }]), +]; +export type ConfigServiceGetConfigDefaultResponse = Awaited< + ReturnType +>; +export type ConfigServiceGetConfigQueryResult< + TData = ConfigServiceGetConfigDefaultResponse, + TError = unknown, +> = UseQueryResult; +export const useConfigServiceGetConfigKey = "ConfigServiceGetConfig"; +export const UseConfigServiceGetConfigKeyFn = ( + { + section, + }: { + section?: string; + } = {}, + queryKey?: Array +) => [useConfigServiceGetConfigKey, ...(queryKey ?? [{ section }])]; +export type ConfigServiceGetValueDefaultResponse = Awaited< + ReturnType +>; +export type ConfigServiceGetValueQueryResult< + TData = ConfigServiceGetValueDefaultResponse, + TError = unknown, +> = UseQueryResult; +export const useConfigServiceGetValueKey = "ConfigServiceGetValue"; +export const UseConfigServiceGetValueKeyFn = ( + { + option, + section, + }: { + option: string; + section: string; + }, + queryKey?: Array +) => [useConfigServiceGetValueKey, ...(queryKey ?? [{ option, section }])]; +export type MonitoringServiceGetHealthDefaultResponse = Awaited< + ReturnType +>; +export type MonitoringServiceGetHealthQueryResult< + TData = MonitoringServiceGetHealthDefaultResponse, + TError = unknown, +> = UseQueryResult; +export const useMonitoringServiceGetHealthKey = "MonitoringServiceGetHealth"; +export const UseMonitoringServiceGetHealthKeyFn = ( + queryKey?: Array +) => [useMonitoringServiceGetHealthKey, ...(queryKey ?? [])]; +export type MonitoringServiceGetVersionDefaultResponse = Awaited< + ReturnType +>; +export type MonitoringServiceGetVersionQueryResult< + TData = MonitoringServiceGetVersionDefaultResponse, + TError = unknown, +> = UseQueryResult; +export const useMonitoringServiceGetVersionKey = "MonitoringServiceGetVersion"; +export const UseMonitoringServiceGetVersionKeyFn = ( + queryKey?: Array +) => [useMonitoringServiceGetVersionKey, ...(queryKey ?? [])]; +export type PluginServiceGetPluginsDefaultResponse = Awaited< + ReturnType +>; +export type PluginServiceGetPluginsQueryResult< + TData = PluginServiceGetPluginsDefaultResponse, + TError = unknown, +> = UseQueryResult; +export const usePluginServiceGetPluginsKey = "PluginServiceGetPlugins"; +export const UsePluginServiceGetPluginsKeyFn = ( + { + limit, + offset, + }: { + limit?: number; + offset?: number; + } = {}, + queryKey?: Array +) => [usePluginServiceGetPluginsKey, ...(queryKey ?? [{ limit, offset }])]; +export type RoleServiceGetRolesDefaultResponse = Awaited< + ReturnType +>; +export type RoleServiceGetRolesQueryResult< + TData = RoleServiceGetRolesDefaultResponse, + TError = unknown, +> = UseQueryResult; +export const useRoleServiceGetRolesKey = "RoleServiceGetRoles"; +export const UseRoleServiceGetRolesKeyFn = ( + { + limit, + offset, + orderBy, + }: { + limit?: number; + offset?: number; + orderBy?: string; + } = {}, + queryKey?: Array +) => [useRoleServiceGetRolesKey, ...(queryKey ?? [{ limit, offset, orderBy }])]; +export type RoleServiceGetRoleDefaultResponse = Awaited< + ReturnType +>; +export type RoleServiceGetRoleQueryResult< + TData = RoleServiceGetRoleDefaultResponse, + TError = unknown, +> = UseQueryResult; +export const useRoleServiceGetRoleKey = "RoleServiceGetRole"; +export const UseRoleServiceGetRoleKeyFn = ( + { + roleName, + }: { + roleName: string; + }, + queryKey?: Array +) => [useRoleServiceGetRoleKey, ...(queryKey ?? [{ roleName }])]; +export type PermissionServiceGetPermissionsDefaultResponse = Awaited< + ReturnType +>; +export type PermissionServiceGetPermissionsQueryResult< + TData = PermissionServiceGetPermissionsDefaultResponse, + TError = unknown, +> = UseQueryResult; +export const usePermissionServiceGetPermissionsKey = + "PermissionServiceGetPermissions"; +export const UsePermissionServiceGetPermissionsKeyFn = ( + { + limit, + offset, + }: { + limit?: number; + offset?: number; + } = {}, + queryKey?: Array +) => [ + usePermissionServiceGetPermissionsKey, + ...(queryKey ?? [{ limit, offset }]), +]; +export type UserServiceGetUsersDefaultResponse = Awaited< + ReturnType +>; +export type UserServiceGetUsersQueryResult< + TData = UserServiceGetUsersDefaultResponse, + TError = unknown, +> = UseQueryResult; +export const useUserServiceGetUsersKey = "UserServiceGetUsers"; +export const UseUserServiceGetUsersKeyFn = ( + { + limit, + offset, + orderBy, + }: { + limit?: number; + offset?: number; + orderBy?: string; + } = {}, + queryKey?: Array +) => [useUserServiceGetUsersKey, ...(queryKey ?? [{ limit, offset, orderBy }])]; +export type UserServiceGetUserDefaultResponse = Awaited< + ReturnType +>; +export type UserServiceGetUserQueryResult< + TData = UserServiceGetUserDefaultResponse, + TError = unknown, +> = UseQueryResult; +export const useUserServiceGetUserKey = "UserServiceGetUser"; +export const UseUserServiceGetUserKeyFn = ( + { + username, + }: { + username: string; + }, + queryKey?: Array +) => [useUserServiceGetUserKey, ...(queryKey ?? [{ username }])]; +export type ConnectionServicePostConnectionMutationResult = Awaited< + ReturnType +>; +export type ConnectionServiceTestConnectionMutationResult = Awaited< + ReturnType +>; +export type DagServicePostClearTaskInstancesMutationResult = Awaited< + ReturnType +>; +export type DagServicePostSetTaskInstancesStateMutationResult = Awaited< + ReturnType +>; +export type TaskInstanceServiceGetTaskInstancesBatchMutationResult = Awaited< + ReturnType +>; +export type DagRunServicePostDagRunMutationResult = Awaited< + ReturnType +>; +export type DagRunServiceGetDagRunsBatchMutationResult = Awaited< + ReturnType +>; +export type DagRunServiceClearDagRunMutationResult = Awaited< + ReturnType +>; +export type DatasetServiceCreateDatasetEventMutationResult = Awaited< + ReturnType +>; +export type PoolServicePostPoolMutationResult = Awaited< + ReturnType +>; +export type VariableServicePostVariablesMutationResult = Awaited< + ReturnType +>; +export type RoleServicePostRoleMutationResult = Awaited< + ReturnType +>; +export type UserServicePostUserMutationResult = Awaited< + ReturnType +>; +export type DagServiceReparseDagFileMutationResult = Awaited< + ReturnType +>; +export type ConnectionServicePatchConnectionMutationResult = Awaited< + ReturnType +>; +export type DagServicePatchDagsMutationResult = Awaited< + ReturnType +>; +export type DagServicePatchDagMutationResult = Awaited< + ReturnType +>; +export type TaskInstanceServiceSetTaskInstanceNoteMutationResult = Awaited< + ReturnType +>; +export type TaskInstanceServiceSetMappedTaskInstanceNoteMutationResult = + Awaited>; +export type TaskInstanceServicePatchTaskInstanceMutationResult = Awaited< + ReturnType +>; +export type TaskInstanceServicePatchMappedTaskInstanceMutationResult = Awaited< + ReturnType +>; +export type DagRunServiceUpdateDagRunStateMutationResult = Awaited< + ReturnType +>; +export type DagRunServiceSetDagRunNoteMutationResult = Awaited< + ReturnType +>; +export type PoolServicePatchPoolMutationResult = Awaited< + ReturnType +>; +export type VariableServicePatchVariableMutationResult = Awaited< + ReturnType +>; +export type RoleServicePatchRoleMutationResult = Awaited< + ReturnType +>; +export type UserServicePatchUserMutationResult = Awaited< + ReturnType +>; +export type ConnectionServiceDeleteConnectionMutationResult = Awaited< + ReturnType +>; +export type DagServiceDeleteDagMutationResult = Awaited< + ReturnType +>; +export type DagRunServiceDeleteDagRunMutationResult = Awaited< + ReturnType +>; +export type DatasetServiceDeleteDagDatasetQueuedEventMutationResult = Awaited< + ReturnType +>; +export type DatasetServiceDeleteDagDatasetQueuedEventsMutationResult = Awaited< + ReturnType +>; +export type DatasetServiceDeleteDatasetQueuedEventsMutationResult = Awaited< + ReturnType +>; +export type PoolServiceDeletePoolMutationResult = Awaited< + ReturnType +>; +export type VariableServiceDeleteVariableMutationResult = Awaited< + ReturnType +>; +export type RoleServiceDeleteRoleMutationResult = Awaited< + ReturnType +>; +export type UserServiceDeleteUserMutationResult = Awaited< + ReturnType +>; diff --git a/airflow/ui/openapi-gen/queries/index.ts b/airflow/ui/openapi-gen/queries/index.ts new file mode 100644 index 0000000000000..f9175269e31a5 --- /dev/null +++ b/airflow/ui/openapi-gen/queries/index.ts @@ -0,0 +1,4 @@ +// generated with @7nohe/openapi-react-query-codegen@1.6.0 + +export * from "./common"; +export * from "./queries"; diff --git a/airflow/ui/openapi-gen/queries/infiniteQueries.ts b/airflow/ui/openapi-gen/queries/infiniteQueries.ts new file mode 100644 index 0000000000000..505a8d455464d --- /dev/null +++ b/airflow/ui/openapi-gen/queries/infiniteQueries.ts @@ -0,0 +1 @@ +// generated with @7nohe/openapi-react-query-codegen@1.6.0 diff --git a/airflow/ui/openapi-gen/queries/prefetch.ts b/airflow/ui/openapi-gen/queries/prefetch.ts new file mode 100644 index 0000000000000..14c12cba839b3 --- /dev/null +++ b/airflow/ui/openapi-gen/queries/prefetch.ts @@ -0,0 +1,1353 @@ +// generated with @7nohe/openapi-react-query-codegen@1.6.0 + +import { type QueryClient } from "@tanstack/react-query"; +import { + ConfigService, + ConnectionService, + DagRunService, + DagService, + DagStatsService, + DagWarningService, + DatasetService, + EventLogService, + ImportErrorService, + MonitoringService, + PermissionService, + PluginService, + PoolService, + ProviderService, + RoleService, + TaskInstanceService, + UserService, + VariableService, + XcomService, +} from "../requests/services.gen"; +import * as Common from "./common"; +export const prefetchUseConnectionServiceGetConnections = ( + queryClient: QueryClient, + { + limit, + offset, + orderBy, + }: { + limit?: number; + offset?: number; + orderBy?: string; + } = {} +) => + queryClient.prefetchQuery({ + queryKey: Common.UseConnectionServiceGetConnectionsKeyFn({ + limit, + offset, + orderBy, + }), + queryFn: () => ConnectionService.getConnections({ limit, offset, orderBy }), + }); +export const prefetchUseConnectionServiceGetConnection = ( + queryClient: QueryClient, + { + connectionId, + }: { + connectionId: string; + } +) => + queryClient.prefetchQuery({ + queryKey: Common.UseConnectionServiceGetConnectionKeyFn({ connectionId }), + queryFn: () => ConnectionService.getConnection({ connectionId }), + }); +export const prefetchUseDagServiceGetDags = ( + queryClient: QueryClient, + { + dagIdPattern, + fields, + limit, + offset, + onlyActive, + orderBy, + paused, + tags, + }: { + dagIdPattern?: string; + fields?: string[]; + limit?: number; + offset?: number; + onlyActive?: boolean; + orderBy?: string; + paused?: boolean; + tags?: string[]; + } = {} +) => + queryClient.prefetchQuery({ + queryKey: Common.UseDagServiceGetDagsKeyFn({ + dagIdPattern, + fields, + limit, + offset, + onlyActive, + orderBy, + paused, + tags, + }), + queryFn: () => + DagService.getDags({ + dagIdPattern, + fields, + limit, + offset, + onlyActive, + orderBy, + paused, + tags, + }), + }); +export const prefetchUseDagServiceGetDag = ( + queryClient: QueryClient, + { + dagId, + fields, + }: { + dagId: string; + fields?: string[]; + } +) => + queryClient.prefetchQuery({ + queryKey: Common.UseDagServiceGetDagKeyFn({ dagId, fields }), + queryFn: () => DagService.getDag({ dagId, fields }), + }); +export const prefetchUseDagServiceGetDagDetails = ( + queryClient: QueryClient, + { + dagId, + fields, + }: { + dagId: string; + fields?: string[]; + } +) => + queryClient.prefetchQuery({ + queryKey: Common.UseDagServiceGetDagDetailsKeyFn({ dagId, fields }), + queryFn: () => DagService.getDagDetails({ dagId, fields }), + }); +export const prefetchUseDagServiceGetTasks = ( + queryClient: QueryClient, + { + dagId, + orderBy, + }: { + dagId: string; + orderBy?: string; + } +) => + queryClient.prefetchQuery({ + queryKey: Common.UseDagServiceGetTasksKeyFn({ dagId, orderBy }), + queryFn: () => DagService.getTasks({ dagId, orderBy }), + }); +export const prefetchUseDagServiceGetTask = ( + queryClient: QueryClient, + { + dagId, + taskId, + }: { + dagId: string; + taskId: string; + } +) => + queryClient.prefetchQuery({ + queryKey: Common.UseDagServiceGetTaskKeyFn({ dagId, taskId }), + queryFn: () => DagService.getTask({ dagId, taskId }), + }); +export const prefetchUseDagServiceGetDagSource = ( + queryClient: QueryClient, + { + fileToken, + }: { + fileToken: string; + } +) => + queryClient.prefetchQuery({ + queryKey: Common.UseDagServiceGetDagSourceKeyFn({ fileToken }), + queryFn: () => DagService.getDagSource({ fileToken }), + }); +export const prefetchUseTaskInstanceServiceGetTaskInstanceDependencies = ( + queryClient: QueryClient, + { + dagId, + dagRunId, + taskId, + }: { + dagId: string; + dagRunId: string; + taskId: string; + } +) => + queryClient.prefetchQuery({ + queryKey: Common.UseTaskInstanceServiceGetTaskInstanceDependenciesKeyFn({ + dagId, + dagRunId, + taskId, + }), + queryFn: () => + TaskInstanceService.getTaskInstanceDependencies({ + dagId, + dagRunId, + taskId, + }), + }); +export const prefetchUseTaskInstanceServiceGetMappedTaskInstanceDependencies = ( + queryClient: QueryClient, + { + dagId, + dagRunId, + mapIndex, + taskId, + }: { + dagId: string; + dagRunId: string; + mapIndex: number; + taskId: string; + } +) => + queryClient.prefetchQuery({ + queryKey: + Common.UseTaskInstanceServiceGetMappedTaskInstanceDependenciesKeyFn({ + dagId, + dagRunId, + mapIndex, + taskId, + }), + queryFn: () => + TaskInstanceService.getMappedTaskInstanceDependencies({ + dagId, + dagRunId, + mapIndex, + taskId, + }), + }); +export const prefetchUseTaskInstanceServiceGetTaskInstances = ( + queryClient: QueryClient, + { + dagId, + dagRunId, + durationGte, + durationLte, + endDateGte, + endDateLte, + executionDateGte, + executionDateLte, + executor, + limit, + offset, + pool, + queue, + startDateGte, + startDateLte, + state, + updatedAtGte, + updatedAtLte, + }: { + dagId: string; + dagRunId: string; + durationGte?: number; + durationLte?: number; + endDateGte?: string; + endDateLte?: string; + executionDateGte?: string; + executionDateLte?: string; + executor?: string[]; + limit?: number; + offset?: number; + pool?: string[]; + queue?: string[]; + startDateGte?: string; + startDateLte?: string; + state?: string[]; + updatedAtGte?: string; + updatedAtLte?: string; + } +) => + queryClient.prefetchQuery({ + queryKey: Common.UseTaskInstanceServiceGetTaskInstancesKeyFn({ + dagId, + dagRunId, + durationGte, + durationLte, + endDateGte, + endDateLte, + executionDateGte, + executionDateLte, + executor, + limit, + offset, + pool, + queue, + startDateGte, + startDateLte, + state, + updatedAtGte, + updatedAtLte, + }), + queryFn: () => + TaskInstanceService.getTaskInstances({ + dagId, + dagRunId, + durationGte, + durationLte, + endDateGte, + endDateLte, + executionDateGte, + executionDateLte, + executor, + limit, + offset, + pool, + queue, + startDateGte, + startDateLte, + state, + updatedAtGte, + updatedAtLte, + }), + }); +export const prefetchUseTaskInstanceServiceGetTaskInstance = ( + queryClient: QueryClient, + { + dagId, + dagRunId, + taskId, + }: { + dagId: string; + dagRunId: string; + taskId: string; + } +) => + queryClient.prefetchQuery({ + queryKey: Common.UseTaskInstanceServiceGetTaskInstanceKeyFn({ + dagId, + dagRunId, + taskId, + }), + queryFn: () => + TaskInstanceService.getTaskInstance({ dagId, dagRunId, taskId }), + }); +export const prefetchUseTaskInstanceServiceGetMappedTaskInstance = ( + queryClient: QueryClient, + { + dagId, + dagRunId, + mapIndex, + taskId, + }: { + dagId: string; + dagRunId: string; + mapIndex: number; + taskId: string; + } +) => + queryClient.prefetchQuery({ + queryKey: Common.UseTaskInstanceServiceGetMappedTaskInstanceKeyFn({ + dagId, + dagRunId, + mapIndex, + taskId, + }), + queryFn: () => + TaskInstanceService.getMappedTaskInstance({ + dagId, + dagRunId, + mapIndex, + taskId, + }), + }); +export const prefetchUseTaskInstanceServiceGetMappedTaskInstances = ( + queryClient: QueryClient, + { + dagId, + dagRunId, + durationGte, + durationLte, + endDateGte, + endDateLte, + executionDateGte, + executionDateLte, + executor, + limit, + offset, + orderBy, + pool, + queue, + startDateGte, + startDateLte, + state, + taskId, + updatedAtGte, + updatedAtLte, + }: { + dagId: string; + dagRunId: string; + durationGte?: number; + durationLte?: number; + endDateGte?: string; + endDateLte?: string; + executionDateGte?: string; + executionDateLte?: string; + executor?: string[]; + limit?: number; + offset?: number; + orderBy?: string; + pool?: string[]; + queue?: string[]; + startDateGte?: string; + startDateLte?: string; + state?: string[]; + taskId: string; + updatedAtGte?: string; + updatedAtLte?: string; + } +) => + queryClient.prefetchQuery({ + queryKey: Common.UseTaskInstanceServiceGetMappedTaskInstancesKeyFn({ + dagId, + dagRunId, + durationGte, + durationLte, + endDateGte, + endDateLte, + executionDateGte, + executionDateLte, + executor, + limit, + offset, + orderBy, + pool, + queue, + startDateGte, + startDateLte, + state, + taskId, + updatedAtGte, + updatedAtLte, + }), + queryFn: () => + TaskInstanceService.getMappedTaskInstances({ + dagId, + dagRunId, + durationGte, + durationLte, + endDateGte, + endDateLte, + executionDateGte, + executionDateLte, + executor, + limit, + offset, + orderBy, + pool, + queue, + startDateGte, + startDateLte, + state, + taskId, + updatedAtGte, + updatedAtLte, + }), + }); +export const prefetchUseTaskInstanceServiceGetTaskInstanceTryDetails = ( + queryClient: QueryClient, + { + dagId, + dagRunId, + taskId, + taskTryNumber, + }: { + dagId: string; + dagRunId: string; + taskId: string; + taskTryNumber: number; + } +) => + queryClient.prefetchQuery({ + queryKey: Common.UseTaskInstanceServiceGetTaskInstanceTryDetailsKeyFn({ + dagId, + dagRunId, + taskId, + taskTryNumber, + }), + queryFn: () => + TaskInstanceService.getTaskInstanceTryDetails({ + dagId, + dagRunId, + taskId, + taskTryNumber, + }), + }); +export const prefetchUseTaskInstanceServiceGetTaskInstanceTries = ( + queryClient: QueryClient, + { + dagId, + dagRunId, + limit, + offset, + orderBy, + taskId, + }: { + dagId: string; + dagRunId: string; + limit?: number; + offset?: number; + orderBy?: string; + taskId: string; + } +) => + queryClient.prefetchQuery({ + queryKey: Common.UseTaskInstanceServiceGetTaskInstanceTriesKeyFn({ + dagId, + dagRunId, + limit, + offset, + orderBy, + taskId, + }), + queryFn: () => + TaskInstanceService.getTaskInstanceTries({ + dagId, + dagRunId, + limit, + offset, + orderBy, + taskId, + }), + }); +export const prefetchUseTaskInstanceServiceGetMappedTaskInstanceTries = ( + queryClient: QueryClient, + { + dagId, + dagRunId, + limit, + mapIndex, + offset, + orderBy, + taskId, + }: { + dagId: string; + dagRunId: string; + limit?: number; + mapIndex: number; + offset?: number; + orderBy?: string; + taskId: string; + } +) => + queryClient.prefetchQuery({ + queryKey: Common.UseTaskInstanceServiceGetMappedTaskInstanceTriesKeyFn({ + dagId, + dagRunId, + limit, + mapIndex, + offset, + orderBy, + taskId, + }), + queryFn: () => + TaskInstanceService.getMappedTaskInstanceTries({ + dagId, + dagRunId, + limit, + mapIndex, + offset, + orderBy, + taskId, + }), + }); +export const prefetchUseTaskInstanceServiceGetMappedTaskInstanceTryDetails = ( + queryClient: QueryClient, + { + dagId, + dagRunId, + mapIndex, + taskId, + taskTryNumber, + }: { + dagId: string; + dagRunId: string; + mapIndex: number; + taskId: string; + taskTryNumber: number; + } +) => + queryClient.prefetchQuery({ + queryKey: Common.UseTaskInstanceServiceGetMappedTaskInstanceTryDetailsKeyFn( + { dagId, dagRunId, mapIndex, taskId, taskTryNumber } + ), + queryFn: () => + TaskInstanceService.getMappedTaskInstanceTryDetails({ + dagId, + dagRunId, + mapIndex, + taskId, + taskTryNumber, + }), + }); +export const prefetchUseTaskInstanceServiceGetExtraLinks = ( + queryClient: QueryClient, + { + dagId, + dagRunId, + taskId, + }: { + dagId: string; + dagRunId: string; + taskId: string; + } +) => + queryClient.prefetchQuery({ + queryKey: Common.UseTaskInstanceServiceGetExtraLinksKeyFn({ + dagId, + dagRunId, + taskId, + }), + queryFn: () => + TaskInstanceService.getExtraLinks({ dagId, dagRunId, taskId }), + }); +export const prefetchUseTaskInstanceServiceGetLog = ( + queryClient: QueryClient, + { + dagId, + dagRunId, + fullContent, + mapIndex, + taskId, + taskTryNumber, + token, + }: { + dagId: string; + dagRunId: string; + fullContent?: boolean; + mapIndex?: number; + taskId: string; + taskTryNumber: number; + token?: string; + } +) => + queryClient.prefetchQuery({ + queryKey: Common.UseTaskInstanceServiceGetLogKeyFn({ + dagId, + dagRunId, + fullContent, + mapIndex, + taskId, + taskTryNumber, + token, + }), + queryFn: () => + TaskInstanceService.getLog({ + dagId, + dagRunId, + fullContent, + mapIndex, + taskId, + taskTryNumber, + token, + }), + }); +export const prefetchUseDagRunServiceGetDagRuns = ( + queryClient: QueryClient, + { + dagId, + endDateGte, + endDateLte, + executionDateGte, + executionDateLte, + fields, + limit, + offset, + orderBy, + startDateGte, + startDateLte, + state, + updatedAtGte, + updatedAtLte, + }: { + dagId: string; + endDateGte?: string; + endDateLte?: string; + executionDateGte?: string; + executionDateLte?: string; + fields?: string[]; + limit?: number; + offset?: number; + orderBy?: string; + startDateGte?: string; + startDateLte?: string; + state?: string[]; + updatedAtGte?: string; + updatedAtLte?: string; + } +) => + queryClient.prefetchQuery({ + queryKey: Common.UseDagRunServiceGetDagRunsKeyFn({ + dagId, + endDateGte, + endDateLte, + executionDateGte, + executionDateLte, + fields, + limit, + offset, + orderBy, + startDateGte, + startDateLte, + state, + updatedAtGte, + updatedAtLte, + }), + queryFn: () => + DagRunService.getDagRuns({ + dagId, + endDateGte, + endDateLte, + executionDateGte, + executionDateLte, + fields, + limit, + offset, + orderBy, + startDateGte, + startDateLte, + state, + updatedAtGte, + updatedAtLte, + }), + }); +export const prefetchUseDagRunServiceGetDagRun = ( + queryClient: QueryClient, + { + dagId, + dagRunId, + fields, + }: { + dagId: string; + dagRunId: string; + fields?: string[]; + } +) => + queryClient.prefetchQuery({ + queryKey: Common.UseDagRunServiceGetDagRunKeyFn({ + dagId, + dagRunId, + fields, + }), + queryFn: () => DagRunService.getDagRun({ dagId, dagRunId, fields }), + }); +export const prefetchUseDagRunServiceGetUpstreamDatasetEvents = ( + queryClient: QueryClient, + { + dagId, + dagRunId, + }: { + dagId: string; + dagRunId: string; + } +) => + queryClient.prefetchQuery({ + queryKey: Common.UseDagRunServiceGetUpstreamDatasetEventsKeyFn({ + dagId, + dagRunId, + }), + queryFn: () => DagRunService.getUpstreamDatasetEvents({ dagId, dagRunId }), + }); +export const prefetchUseDatasetServiceGetUpstreamDatasetEvents = ( + queryClient: QueryClient, + { + dagId, + dagRunId, + }: { + dagId: string; + dagRunId: string; + } +) => + queryClient.prefetchQuery({ + queryKey: Common.UseDatasetServiceGetUpstreamDatasetEventsKeyFn({ + dagId, + dagRunId, + }), + queryFn: () => DatasetService.getUpstreamDatasetEvents({ dagId, dagRunId }), + }); +export const prefetchUseDatasetServiceGetDagDatasetQueuedEvent = ( + queryClient: QueryClient, + { + before, + dagId, + uri, + }: { + before?: string; + dagId: string; + uri: string; + } +) => + queryClient.prefetchQuery({ + queryKey: Common.UseDatasetServiceGetDagDatasetQueuedEventKeyFn({ + before, + dagId, + uri, + }), + queryFn: () => + DatasetService.getDagDatasetQueuedEvent({ before, dagId, uri }), + }); +export const prefetchUseDatasetServiceGetDagDatasetQueuedEvents = ( + queryClient: QueryClient, + { + before, + dagId, + }: { + before?: string; + dagId: string; + } +) => + queryClient.prefetchQuery({ + queryKey: Common.UseDatasetServiceGetDagDatasetQueuedEventsKeyFn({ + before, + dagId, + }), + queryFn: () => DatasetService.getDagDatasetQueuedEvents({ before, dagId }), + }); +export const prefetchUseDatasetServiceGetDatasetQueuedEvents = ( + queryClient: QueryClient, + { + before, + uri, + }: { + before?: string; + uri: string; + } +) => + queryClient.prefetchQuery({ + queryKey: Common.UseDatasetServiceGetDatasetQueuedEventsKeyFn({ + before, + uri, + }), + queryFn: () => DatasetService.getDatasetQueuedEvents({ before, uri }), + }); +export const prefetchUseDatasetServiceGetDatasets = ( + queryClient: QueryClient, + { + dagIds, + limit, + offset, + orderBy, + uriPattern, + }: { + dagIds?: string; + limit?: number; + offset?: number; + orderBy?: string; + uriPattern?: string; + } = {} +) => + queryClient.prefetchQuery({ + queryKey: Common.UseDatasetServiceGetDatasetsKeyFn({ + dagIds, + limit, + offset, + orderBy, + uriPattern, + }), + queryFn: () => + DatasetService.getDatasets({ + dagIds, + limit, + offset, + orderBy, + uriPattern, + }), + }); +export const prefetchUseDatasetServiceGetDataset = ( + queryClient: QueryClient, + { + uri, + }: { + uri: string; + } +) => + queryClient.prefetchQuery({ + queryKey: Common.UseDatasetServiceGetDatasetKeyFn({ uri }), + queryFn: () => DatasetService.getDataset({ uri }), + }); +export const prefetchUseDatasetServiceGetDatasetEvents = ( + queryClient: QueryClient, + { + datasetId, + limit, + offset, + orderBy, + sourceDagId, + sourceMapIndex, + sourceRunId, + sourceTaskId, + }: { + datasetId?: number; + limit?: number; + offset?: number; + orderBy?: string; + sourceDagId?: string; + sourceMapIndex?: number; + sourceRunId?: string; + sourceTaskId?: string; + } = {} +) => + queryClient.prefetchQuery({ + queryKey: Common.UseDatasetServiceGetDatasetEventsKeyFn({ + datasetId, + limit, + offset, + orderBy, + sourceDagId, + sourceMapIndex, + sourceRunId, + sourceTaskId, + }), + queryFn: () => + DatasetService.getDatasetEvents({ + datasetId, + limit, + offset, + orderBy, + sourceDagId, + sourceMapIndex, + sourceRunId, + sourceTaskId, + }), + }); +export const prefetchUseEventLogServiceGetEventLogs = ( + queryClient: QueryClient, + { + after, + before, + dagId, + event, + excludedEvents, + includedEvents, + limit, + mapIndex, + offset, + orderBy, + owner, + runId, + taskId, + tryNumber, + }: { + after?: string; + before?: string; + dagId?: string; + event?: string; + excludedEvents?: string; + includedEvents?: string; + limit?: number; + mapIndex?: number; + offset?: number; + orderBy?: string; + owner?: string; + runId?: string; + taskId?: string; + tryNumber?: number; + } = {} +) => + queryClient.prefetchQuery({ + queryKey: Common.UseEventLogServiceGetEventLogsKeyFn({ + after, + before, + dagId, + event, + excludedEvents, + includedEvents, + limit, + mapIndex, + offset, + orderBy, + owner, + runId, + taskId, + tryNumber, + }), + queryFn: () => + EventLogService.getEventLogs({ + after, + before, + dagId, + event, + excludedEvents, + includedEvents, + limit, + mapIndex, + offset, + orderBy, + owner, + runId, + taskId, + tryNumber, + }), + }); +export const prefetchUseEventLogServiceGetEventLog = ( + queryClient: QueryClient, + { + eventLogId, + }: { + eventLogId: number; + } +) => + queryClient.prefetchQuery({ + queryKey: Common.UseEventLogServiceGetEventLogKeyFn({ eventLogId }), + queryFn: () => EventLogService.getEventLog({ eventLogId }), + }); +export const prefetchUseImportErrorServiceGetImportErrors = ( + queryClient: QueryClient, + { + limit, + offset, + orderBy, + }: { + limit?: number; + offset?: number; + orderBy?: string; + } = {} +) => + queryClient.prefetchQuery({ + queryKey: Common.UseImportErrorServiceGetImportErrorsKeyFn({ + limit, + offset, + orderBy, + }), + queryFn: () => + ImportErrorService.getImportErrors({ limit, offset, orderBy }), + }); +export const prefetchUseImportErrorServiceGetImportError = ( + queryClient: QueryClient, + { + importErrorId, + }: { + importErrorId: number; + } +) => + queryClient.prefetchQuery({ + queryKey: Common.UseImportErrorServiceGetImportErrorKeyFn({ + importErrorId, + }), + queryFn: () => ImportErrorService.getImportError({ importErrorId }), + }); +export const prefetchUsePoolServiceGetPools = ( + queryClient: QueryClient, + { + limit, + offset, + orderBy, + }: { + limit?: number; + offset?: number; + orderBy?: string; + } = {} +) => + queryClient.prefetchQuery({ + queryKey: Common.UsePoolServiceGetPoolsKeyFn({ limit, offset, orderBy }), + queryFn: () => PoolService.getPools({ limit, offset, orderBy }), + }); +export const prefetchUsePoolServiceGetPool = ( + queryClient: QueryClient, + { + poolName, + }: { + poolName: string; + } +) => + queryClient.prefetchQuery({ + queryKey: Common.UsePoolServiceGetPoolKeyFn({ poolName }), + queryFn: () => PoolService.getPool({ poolName }), + }); +export const prefetchUseProviderServiceGetProviders = ( + queryClient: QueryClient +) => + queryClient.prefetchQuery({ + queryKey: Common.UseProviderServiceGetProvidersKeyFn(), + queryFn: () => ProviderService.getProviders(), + }); +export const prefetchUseVariableServiceGetVariables = ( + queryClient: QueryClient, + { + limit, + offset, + orderBy, + }: { + limit?: number; + offset?: number; + orderBy?: string; + } = {} +) => + queryClient.prefetchQuery({ + queryKey: Common.UseVariableServiceGetVariablesKeyFn({ + limit, + offset, + orderBy, + }), + queryFn: () => VariableService.getVariables({ limit, offset, orderBy }), + }); +export const prefetchUseVariableServiceGetVariable = ( + queryClient: QueryClient, + { + variableKey, + }: { + variableKey: string; + } +) => + queryClient.prefetchQuery({ + queryKey: Common.UseVariableServiceGetVariableKeyFn({ variableKey }), + queryFn: () => VariableService.getVariable({ variableKey }), + }); +export const prefetchUseXcomServiceGetXcomEntries = ( + queryClient: QueryClient, + { + dagId, + dagRunId, + limit, + mapIndex, + offset, + taskId, + xcomKey, + }: { + dagId: string; + dagRunId: string; + limit?: number; + mapIndex?: number; + offset?: number; + taskId: string; + xcomKey?: string; + } +) => + queryClient.prefetchQuery({ + queryKey: Common.UseXcomServiceGetXcomEntriesKeyFn({ + dagId, + dagRunId, + limit, + mapIndex, + offset, + taskId, + xcomKey, + }), + queryFn: () => + XcomService.getXcomEntries({ + dagId, + dagRunId, + limit, + mapIndex, + offset, + taskId, + xcomKey, + }), + }); +export const prefetchUseXcomServiceGetXcomEntry = ( + queryClient: QueryClient, + { + dagId, + dagRunId, + deserialize, + mapIndex, + stringify, + taskId, + xcomKey, + }: { + dagId: string; + dagRunId: string; + deserialize?: boolean; + mapIndex?: number; + stringify?: boolean; + taskId: string; + xcomKey: string; + } +) => + queryClient.prefetchQuery({ + queryKey: Common.UseXcomServiceGetXcomEntryKeyFn({ + dagId, + dagRunId, + deserialize, + mapIndex, + stringify, + taskId, + xcomKey, + }), + queryFn: () => + XcomService.getXcomEntry({ + dagId, + dagRunId, + deserialize, + mapIndex, + stringify, + taskId, + xcomKey, + }), + }); +export const prefetchUseDagStatsServiceGetDagStats = ( + queryClient: QueryClient, + { + dagIds, + }: { + dagIds: string; + } +) => + queryClient.prefetchQuery({ + queryKey: Common.UseDagStatsServiceGetDagStatsKeyFn({ dagIds }), + queryFn: () => DagStatsService.getDagStats({ dagIds }), + }); +export const prefetchUseDagWarningServiceGetDagWarnings = ( + queryClient: QueryClient, + { + dagId, + limit, + offset, + orderBy, + warningType, + }: { + dagId?: string; + limit?: number; + offset?: number; + orderBy?: string; + warningType?: string; + } = {} +) => + queryClient.prefetchQuery({ + queryKey: Common.UseDagWarningServiceGetDagWarningsKeyFn({ + dagId, + limit, + offset, + orderBy, + warningType, + }), + queryFn: () => + DagWarningService.getDagWarnings({ + dagId, + limit, + offset, + orderBy, + warningType, + }), + }); +export const prefetchUseConfigServiceGetConfig = ( + queryClient: QueryClient, + { + section, + }: { + section?: string; + } = {} +) => + queryClient.prefetchQuery({ + queryKey: Common.UseConfigServiceGetConfigKeyFn({ section }), + queryFn: () => ConfigService.getConfig({ section }), + }); +export const prefetchUseConfigServiceGetValue = ( + queryClient: QueryClient, + { + option, + section, + }: { + option: string; + section: string; + } +) => + queryClient.prefetchQuery({ + queryKey: Common.UseConfigServiceGetValueKeyFn({ option, section }), + queryFn: () => ConfigService.getValue({ option, section }), + }); +export const prefetchUseMonitoringServiceGetHealth = ( + queryClient: QueryClient +) => + queryClient.prefetchQuery({ + queryKey: Common.UseMonitoringServiceGetHealthKeyFn(), + queryFn: () => MonitoringService.getHealth(), + }); +export const prefetchUseMonitoringServiceGetVersion = ( + queryClient: QueryClient +) => + queryClient.prefetchQuery({ + queryKey: Common.UseMonitoringServiceGetVersionKeyFn(), + queryFn: () => MonitoringService.getVersion(), + }); +export const prefetchUsePluginServiceGetPlugins = ( + queryClient: QueryClient, + { + limit, + offset, + }: { + limit?: number; + offset?: number; + } = {} +) => + queryClient.prefetchQuery({ + queryKey: Common.UsePluginServiceGetPluginsKeyFn({ limit, offset }), + queryFn: () => PluginService.getPlugins({ limit, offset }), + }); +export const prefetchUseRoleServiceGetRoles = ( + queryClient: QueryClient, + { + limit, + offset, + orderBy, + }: { + limit?: number; + offset?: number; + orderBy?: string; + } = {} +) => + queryClient.prefetchQuery({ + queryKey: Common.UseRoleServiceGetRolesKeyFn({ limit, offset, orderBy }), + queryFn: () => RoleService.getRoles({ limit, offset, orderBy }), + }); +export const prefetchUseRoleServiceGetRole = ( + queryClient: QueryClient, + { + roleName, + }: { + roleName: string; + } +) => + queryClient.prefetchQuery({ + queryKey: Common.UseRoleServiceGetRoleKeyFn({ roleName }), + queryFn: () => RoleService.getRole({ roleName }), + }); +export const prefetchUsePermissionServiceGetPermissions = ( + queryClient: QueryClient, + { + limit, + offset, + }: { + limit?: number; + offset?: number; + } = {} +) => + queryClient.prefetchQuery({ + queryKey: Common.UsePermissionServiceGetPermissionsKeyFn({ limit, offset }), + queryFn: () => PermissionService.getPermissions({ limit, offset }), + }); +export const prefetchUseUserServiceGetUsers = ( + queryClient: QueryClient, + { + limit, + offset, + orderBy, + }: { + limit?: number; + offset?: number; + orderBy?: string; + } = {} +) => + queryClient.prefetchQuery({ + queryKey: Common.UseUserServiceGetUsersKeyFn({ limit, offset, orderBy }), + queryFn: () => UserService.getUsers({ limit, offset, orderBy }), + }); +export const prefetchUseUserServiceGetUser = ( + queryClient: QueryClient, + { + username, + }: { + username: string; + } +) => + queryClient.prefetchQuery({ + queryKey: Common.UseUserServiceGetUserKeyFn({ username }), + queryFn: () => UserService.getUser({ username }), + }); diff --git a/airflow/ui/openapi-gen/queries/queries.ts b/airflow/ui/openapi-gen/queries/queries.ts new file mode 100644 index 0000000000000..3fc8b1365f4ac --- /dev/null +++ b/airflow/ui/openapi-gen/queries/queries.ts @@ -0,0 +1,2986 @@ +// generated with @7nohe/openapi-react-query-codegen@1.6.0 + +import { + UseMutationOptions, + UseQueryOptions, + useMutation, + useQuery, +} from "@tanstack/react-query"; +import { + ConfigService, + ConnectionService, + DagRunService, + DagService, + DagStatsService, + DagWarningService, + DatasetService, + EventLogService, + ImportErrorService, + MonitoringService, + PermissionService, + PluginService, + PoolService, + ProviderService, + RoleService, + TaskInstanceService, + UserService, + VariableService, + XcomService, +} from "../requests/services.gen"; +import { + ClearDagRun, + ClearTaskInstances, + Connection, + CreateDatasetEvent, + DAG, + DAGRun, + ListDagRunsForm, + ListTaskInstanceForm, + Pool, + Role, + SetDagRunNote, + SetTaskInstanceNote, + UpdateDagRunState, + UpdateTaskInstance, + UpdateTaskInstancesState, + User, + Variable, +} from "../requests/types.gen"; +import * as Common from "./common"; +export const useConnectionServiceGetConnections = < + TData = Common.ConnectionServiceGetConnectionsDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + limit, + offset, + orderBy, + }: { + limit?: number; + offset?: number; + orderBy?: string; + } = {}, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useQuery({ + queryKey: Common.UseConnectionServiceGetConnectionsKeyFn( + { limit, offset, orderBy }, + queryKey + ), + queryFn: () => + ConnectionService.getConnections({ limit, offset, orderBy }) as TData, + ...options, + }); +export const useConnectionServiceGetConnection = < + TData = Common.ConnectionServiceGetConnectionDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + connectionId, + }: { + connectionId: string; + }, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useQuery({ + queryKey: Common.UseConnectionServiceGetConnectionKeyFn( + { connectionId }, + queryKey + ), + queryFn: () => ConnectionService.getConnection({ connectionId }) as TData, + ...options, + }); +export const useDagServiceGetDags = < + TData = Common.DagServiceGetDagsDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + dagIdPattern, + fields, + limit, + offset, + onlyActive, + orderBy, + paused, + tags, + }: { + dagIdPattern?: string; + fields?: string[]; + limit?: number; + offset?: number; + onlyActive?: boolean; + orderBy?: string; + paused?: boolean; + tags?: string[]; + } = {}, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useQuery({ + queryKey: Common.UseDagServiceGetDagsKeyFn( + { + dagIdPattern, + fields, + limit, + offset, + onlyActive, + orderBy, + paused, + tags, + }, + queryKey + ), + queryFn: () => + DagService.getDags({ + dagIdPattern, + fields, + limit, + offset, + onlyActive, + orderBy, + paused, + tags, + }) as TData, + ...options, + }); +export const useDagServiceGetDag = < + TData = Common.DagServiceGetDagDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + dagId, + fields, + }: { + dagId: string; + fields?: string[]; + }, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useQuery({ + queryKey: Common.UseDagServiceGetDagKeyFn({ dagId, fields }, queryKey), + queryFn: () => DagService.getDag({ dagId, fields }) as TData, + ...options, + }); +export const useDagServiceGetDagDetails = < + TData = Common.DagServiceGetDagDetailsDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + dagId, + fields, + }: { + dagId: string; + fields?: string[]; + }, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useQuery({ + queryKey: Common.UseDagServiceGetDagDetailsKeyFn( + { dagId, fields }, + queryKey + ), + queryFn: () => DagService.getDagDetails({ dagId, fields }) as TData, + ...options, + }); +export const useDagServiceGetTasks = < + TData = Common.DagServiceGetTasksDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + dagId, + orderBy, + }: { + dagId: string; + orderBy?: string; + }, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useQuery({ + queryKey: Common.UseDagServiceGetTasksKeyFn({ dagId, orderBy }, queryKey), + queryFn: () => DagService.getTasks({ dagId, orderBy }) as TData, + ...options, + }); +export const useDagServiceGetTask = < + TData = Common.DagServiceGetTaskDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + dagId, + taskId, + }: { + dagId: string; + taskId: string; + }, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useQuery({ + queryKey: Common.UseDagServiceGetTaskKeyFn({ dagId, taskId }, queryKey), + queryFn: () => DagService.getTask({ dagId, taskId }) as TData, + ...options, + }); +export const useDagServiceGetDagSource = < + TData = Common.DagServiceGetDagSourceDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + fileToken, + }: { + fileToken: string; + }, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useQuery({ + queryKey: Common.UseDagServiceGetDagSourceKeyFn({ fileToken }, queryKey), + queryFn: () => DagService.getDagSource({ fileToken }) as TData, + ...options, + }); +export const useTaskInstanceServiceGetTaskInstanceDependencies = < + TData = Common.TaskInstanceServiceGetTaskInstanceDependenciesDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + dagId, + dagRunId, + taskId, + }: { + dagId: string; + dagRunId: string; + taskId: string; + }, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useQuery({ + queryKey: Common.UseTaskInstanceServiceGetTaskInstanceDependenciesKeyFn( + { dagId, dagRunId, taskId }, + queryKey + ), + queryFn: () => + TaskInstanceService.getTaskInstanceDependencies({ + dagId, + dagRunId, + taskId, + }) as TData, + ...options, + }); +export const useTaskInstanceServiceGetMappedTaskInstanceDependencies = < + TData = Common.TaskInstanceServiceGetMappedTaskInstanceDependenciesDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + dagId, + dagRunId, + mapIndex, + taskId, + }: { + dagId: string; + dagRunId: string; + mapIndex: number; + taskId: string; + }, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useQuery({ + queryKey: + Common.UseTaskInstanceServiceGetMappedTaskInstanceDependenciesKeyFn( + { dagId, dagRunId, mapIndex, taskId }, + queryKey + ), + queryFn: () => + TaskInstanceService.getMappedTaskInstanceDependencies({ + dagId, + dagRunId, + mapIndex, + taskId, + }) as TData, + ...options, + }); +export const useTaskInstanceServiceGetTaskInstances = < + TData = Common.TaskInstanceServiceGetTaskInstancesDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + dagId, + dagRunId, + durationGte, + durationLte, + endDateGte, + endDateLte, + executionDateGte, + executionDateLte, + executor, + limit, + offset, + pool, + queue, + startDateGte, + startDateLte, + state, + updatedAtGte, + updatedAtLte, + }: { + dagId: string; + dagRunId: string; + durationGte?: number; + durationLte?: number; + endDateGte?: string; + endDateLte?: string; + executionDateGte?: string; + executionDateLte?: string; + executor?: string[]; + limit?: number; + offset?: number; + pool?: string[]; + queue?: string[]; + startDateGte?: string; + startDateLte?: string; + state?: string[]; + updatedAtGte?: string; + updatedAtLte?: string; + }, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useQuery({ + queryKey: Common.UseTaskInstanceServiceGetTaskInstancesKeyFn( + { + dagId, + dagRunId, + durationGte, + durationLte, + endDateGte, + endDateLte, + executionDateGte, + executionDateLte, + executor, + limit, + offset, + pool, + queue, + startDateGte, + startDateLte, + state, + updatedAtGte, + updatedAtLte, + }, + queryKey + ), + queryFn: () => + TaskInstanceService.getTaskInstances({ + dagId, + dagRunId, + durationGte, + durationLte, + endDateGte, + endDateLte, + executionDateGte, + executionDateLte, + executor, + limit, + offset, + pool, + queue, + startDateGte, + startDateLte, + state, + updatedAtGte, + updatedAtLte, + }) as TData, + ...options, + }); +export const useTaskInstanceServiceGetTaskInstance = < + TData = Common.TaskInstanceServiceGetTaskInstanceDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + dagId, + dagRunId, + taskId, + }: { + dagId: string; + dagRunId: string; + taskId: string; + }, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useQuery({ + queryKey: Common.UseTaskInstanceServiceGetTaskInstanceKeyFn( + { dagId, dagRunId, taskId }, + queryKey + ), + queryFn: () => + TaskInstanceService.getTaskInstance({ dagId, dagRunId, taskId }) as TData, + ...options, + }); +export const useTaskInstanceServiceGetMappedTaskInstance = < + TData = Common.TaskInstanceServiceGetMappedTaskInstanceDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + dagId, + dagRunId, + mapIndex, + taskId, + }: { + dagId: string; + dagRunId: string; + mapIndex: number; + taskId: string; + }, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useQuery({ + queryKey: Common.UseTaskInstanceServiceGetMappedTaskInstanceKeyFn( + { dagId, dagRunId, mapIndex, taskId }, + queryKey + ), + queryFn: () => + TaskInstanceService.getMappedTaskInstance({ + dagId, + dagRunId, + mapIndex, + taskId, + }) as TData, + ...options, + }); +export const useTaskInstanceServiceGetMappedTaskInstances = < + TData = Common.TaskInstanceServiceGetMappedTaskInstancesDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + dagId, + dagRunId, + durationGte, + durationLte, + endDateGte, + endDateLte, + executionDateGte, + executionDateLte, + executor, + limit, + offset, + orderBy, + pool, + queue, + startDateGte, + startDateLte, + state, + taskId, + updatedAtGte, + updatedAtLte, + }: { + dagId: string; + dagRunId: string; + durationGte?: number; + durationLte?: number; + endDateGte?: string; + endDateLte?: string; + executionDateGte?: string; + executionDateLte?: string; + executor?: string[]; + limit?: number; + offset?: number; + orderBy?: string; + pool?: string[]; + queue?: string[]; + startDateGte?: string; + startDateLte?: string; + state?: string[]; + taskId: string; + updatedAtGte?: string; + updatedAtLte?: string; + }, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useQuery({ + queryKey: Common.UseTaskInstanceServiceGetMappedTaskInstancesKeyFn( + { + dagId, + dagRunId, + durationGte, + durationLte, + endDateGte, + endDateLte, + executionDateGte, + executionDateLte, + executor, + limit, + offset, + orderBy, + pool, + queue, + startDateGte, + startDateLte, + state, + taskId, + updatedAtGte, + updatedAtLte, + }, + queryKey + ), + queryFn: () => + TaskInstanceService.getMappedTaskInstances({ + dagId, + dagRunId, + durationGte, + durationLte, + endDateGte, + endDateLte, + executionDateGte, + executionDateLte, + executor, + limit, + offset, + orderBy, + pool, + queue, + startDateGte, + startDateLte, + state, + taskId, + updatedAtGte, + updatedAtLte, + }) as TData, + ...options, + }); +export const useTaskInstanceServiceGetTaskInstanceTryDetails = < + TData = Common.TaskInstanceServiceGetTaskInstanceTryDetailsDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + dagId, + dagRunId, + taskId, + taskTryNumber, + }: { + dagId: string; + dagRunId: string; + taskId: string; + taskTryNumber: number; + }, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useQuery({ + queryKey: Common.UseTaskInstanceServiceGetTaskInstanceTryDetailsKeyFn( + { dagId, dagRunId, taskId, taskTryNumber }, + queryKey + ), + queryFn: () => + TaskInstanceService.getTaskInstanceTryDetails({ + dagId, + dagRunId, + taskId, + taskTryNumber, + }) as TData, + ...options, + }); +export const useTaskInstanceServiceGetTaskInstanceTries = < + TData = Common.TaskInstanceServiceGetTaskInstanceTriesDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + dagId, + dagRunId, + limit, + offset, + orderBy, + taskId, + }: { + dagId: string; + dagRunId: string; + limit?: number; + offset?: number; + orderBy?: string; + taskId: string; + }, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useQuery({ + queryKey: Common.UseTaskInstanceServiceGetTaskInstanceTriesKeyFn( + { dagId, dagRunId, limit, offset, orderBy, taskId }, + queryKey + ), + queryFn: () => + TaskInstanceService.getTaskInstanceTries({ + dagId, + dagRunId, + limit, + offset, + orderBy, + taskId, + }) as TData, + ...options, + }); +export const useTaskInstanceServiceGetMappedTaskInstanceTries = < + TData = Common.TaskInstanceServiceGetMappedTaskInstanceTriesDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + dagId, + dagRunId, + limit, + mapIndex, + offset, + orderBy, + taskId, + }: { + dagId: string; + dagRunId: string; + limit?: number; + mapIndex: number; + offset?: number; + orderBy?: string; + taskId: string; + }, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useQuery({ + queryKey: Common.UseTaskInstanceServiceGetMappedTaskInstanceTriesKeyFn( + { dagId, dagRunId, limit, mapIndex, offset, orderBy, taskId }, + queryKey + ), + queryFn: () => + TaskInstanceService.getMappedTaskInstanceTries({ + dagId, + dagRunId, + limit, + mapIndex, + offset, + orderBy, + taskId, + }) as TData, + ...options, + }); +export const useTaskInstanceServiceGetMappedTaskInstanceTryDetails = < + TData = Common.TaskInstanceServiceGetMappedTaskInstanceTryDetailsDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + dagId, + dagRunId, + mapIndex, + taskId, + taskTryNumber, + }: { + dagId: string; + dagRunId: string; + mapIndex: number; + taskId: string; + taskTryNumber: number; + }, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useQuery({ + queryKey: Common.UseTaskInstanceServiceGetMappedTaskInstanceTryDetailsKeyFn( + { dagId, dagRunId, mapIndex, taskId, taskTryNumber }, + queryKey + ), + queryFn: () => + TaskInstanceService.getMappedTaskInstanceTryDetails({ + dagId, + dagRunId, + mapIndex, + taskId, + taskTryNumber, + }) as TData, + ...options, + }); +export const useTaskInstanceServiceGetExtraLinks = < + TData = Common.TaskInstanceServiceGetExtraLinksDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + dagId, + dagRunId, + taskId, + }: { + dagId: string; + dagRunId: string; + taskId: string; + }, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useQuery({ + queryKey: Common.UseTaskInstanceServiceGetExtraLinksKeyFn( + { dagId, dagRunId, taskId }, + queryKey + ), + queryFn: () => + TaskInstanceService.getExtraLinks({ dagId, dagRunId, taskId }) as TData, + ...options, + }); +export const useTaskInstanceServiceGetLog = < + TData = Common.TaskInstanceServiceGetLogDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + dagId, + dagRunId, + fullContent, + mapIndex, + taskId, + taskTryNumber, + token, + }: { + dagId: string; + dagRunId: string; + fullContent?: boolean; + mapIndex?: number; + taskId: string; + taskTryNumber: number; + token?: string; + }, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useQuery({ + queryKey: Common.UseTaskInstanceServiceGetLogKeyFn( + { dagId, dagRunId, fullContent, mapIndex, taskId, taskTryNumber, token }, + queryKey + ), + queryFn: () => + TaskInstanceService.getLog({ + dagId, + dagRunId, + fullContent, + mapIndex, + taskId, + taskTryNumber, + token, + }) as TData, + ...options, + }); +export const useDagRunServiceGetDagRuns = < + TData = Common.DagRunServiceGetDagRunsDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + dagId, + endDateGte, + endDateLte, + executionDateGte, + executionDateLte, + fields, + limit, + offset, + orderBy, + startDateGte, + startDateLte, + state, + updatedAtGte, + updatedAtLte, + }: { + dagId: string; + endDateGte?: string; + endDateLte?: string; + executionDateGte?: string; + executionDateLte?: string; + fields?: string[]; + limit?: number; + offset?: number; + orderBy?: string; + startDateGte?: string; + startDateLte?: string; + state?: string[]; + updatedAtGte?: string; + updatedAtLte?: string; + }, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useQuery({ + queryKey: Common.UseDagRunServiceGetDagRunsKeyFn( + { + dagId, + endDateGte, + endDateLte, + executionDateGte, + executionDateLte, + fields, + limit, + offset, + orderBy, + startDateGte, + startDateLte, + state, + updatedAtGte, + updatedAtLte, + }, + queryKey + ), + queryFn: () => + DagRunService.getDagRuns({ + dagId, + endDateGte, + endDateLte, + executionDateGte, + executionDateLte, + fields, + limit, + offset, + orderBy, + startDateGte, + startDateLte, + state, + updatedAtGte, + updatedAtLte, + }) as TData, + ...options, + }); +export const useDagRunServiceGetDagRun = < + TData = Common.DagRunServiceGetDagRunDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + dagId, + dagRunId, + fields, + }: { + dagId: string; + dagRunId: string; + fields?: string[]; + }, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useQuery({ + queryKey: Common.UseDagRunServiceGetDagRunKeyFn( + { dagId, dagRunId, fields }, + queryKey + ), + queryFn: () => + DagRunService.getDagRun({ dagId, dagRunId, fields }) as TData, + ...options, + }); +export const useDagRunServiceGetUpstreamDatasetEvents = < + TData = Common.DagRunServiceGetUpstreamDatasetEventsDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + dagId, + dagRunId, + }: { + dagId: string; + dagRunId: string; + }, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useQuery({ + queryKey: Common.UseDagRunServiceGetUpstreamDatasetEventsKeyFn( + { dagId, dagRunId }, + queryKey + ), + queryFn: () => + DagRunService.getUpstreamDatasetEvents({ dagId, dagRunId }) as TData, + ...options, + }); +export const useDatasetServiceGetUpstreamDatasetEvents = < + TData = Common.DatasetServiceGetUpstreamDatasetEventsDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + dagId, + dagRunId, + }: { + dagId: string; + dagRunId: string; + }, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useQuery({ + queryKey: Common.UseDatasetServiceGetUpstreamDatasetEventsKeyFn( + { dagId, dagRunId }, + queryKey + ), + queryFn: () => + DatasetService.getUpstreamDatasetEvents({ dagId, dagRunId }) as TData, + ...options, + }); +export const useDatasetServiceGetDagDatasetQueuedEvent = < + TData = Common.DatasetServiceGetDagDatasetQueuedEventDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + before, + dagId, + uri, + }: { + before?: string; + dagId: string; + uri: string; + }, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useQuery({ + queryKey: Common.UseDatasetServiceGetDagDatasetQueuedEventKeyFn( + { before, dagId, uri }, + queryKey + ), + queryFn: () => + DatasetService.getDagDatasetQueuedEvent({ before, dagId, uri }) as TData, + ...options, + }); +export const useDatasetServiceGetDagDatasetQueuedEvents = < + TData = Common.DatasetServiceGetDagDatasetQueuedEventsDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + before, + dagId, + }: { + before?: string; + dagId: string; + }, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useQuery({ + queryKey: Common.UseDatasetServiceGetDagDatasetQueuedEventsKeyFn( + { before, dagId }, + queryKey + ), + queryFn: () => + DatasetService.getDagDatasetQueuedEvents({ before, dagId }) as TData, + ...options, + }); +export const useDatasetServiceGetDatasetQueuedEvents = < + TData = Common.DatasetServiceGetDatasetQueuedEventsDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + before, + uri, + }: { + before?: string; + uri: string; + }, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useQuery({ + queryKey: Common.UseDatasetServiceGetDatasetQueuedEventsKeyFn( + { before, uri }, + queryKey + ), + queryFn: () => + DatasetService.getDatasetQueuedEvents({ before, uri }) as TData, + ...options, + }); +export const useDatasetServiceGetDatasets = < + TData = Common.DatasetServiceGetDatasetsDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + dagIds, + limit, + offset, + orderBy, + uriPattern, + }: { + dagIds?: string; + limit?: number; + offset?: number; + orderBy?: string; + uriPattern?: string; + } = {}, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useQuery({ + queryKey: Common.UseDatasetServiceGetDatasetsKeyFn( + { dagIds, limit, offset, orderBy, uriPattern }, + queryKey + ), + queryFn: () => + DatasetService.getDatasets({ + dagIds, + limit, + offset, + orderBy, + uriPattern, + }) as TData, + ...options, + }); +export const useDatasetServiceGetDataset = < + TData = Common.DatasetServiceGetDatasetDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + uri, + }: { + uri: string; + }, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useQuery({ + queryKey: Common.UseDatasetServiceGetDatasetKeyFn({ uri }, queryKey), + queryFn: () => DatasetService.getDataset({ uri }) as TData, + ...options, + }); +export const useDatasetServiceGetDatasetEvents = < + TData = Common.DatasetServiceGetDatasetEventsDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + datasetId, + limit, + offset, + orderBy, + sourceDagId, + sourceMapIndex, + sourceRunId, + sourceTaskId, + }: { + datasetId?: number; + limit?: number; + offset?: number; + orderBy?: string; + sourceDagId?: string; + sourceMapIndex?: number; + sourceRunId?: string; + sourceTaskId?: string; + } = {}, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useQuery({ + queryKey: Common.UseDatasetServiceGetDatasetEventsKeyFn( + { + datasetId, + limit, + offset, + orderBy, + sourceDagId, + sourceMapIndex, + sourceRunId, + sourceTaskId, + }, + queryKey + ), + queryFn: () => + DatasetService.getDatasetEvents({ + datasetId, + limit, + offset, + orderBy, + sourceDagId, + sourceMapIndex, + sourceRunId, + sourceTaskId, + }) as TData, + ...options, + }); +export const useEventLogServiceGetEventLogs = < + TData = Common.EventLogServiceGetEventLogsDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + after, + before, + dagId, + event, + excludedEvents, + includedEvents, + limit, + mapIndex, + offset, + orderBy, + owner, + runId, + taskId, + tryNumber, + }: { + after?: string; + before?: string; + dagId?: string; + event?: string; + excludedEvents?: string; + includedEvents?: string; + limit?: number; + mapIndex?: number; + offset?: number; + orderBy?: string; + owner?: string; + runId?: string; + taskId?: string; + tryNumber?: number; + } = {}, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useQuery({ + queryKey: Common.UseEventLogServiceGetEventLogsKeyFn( + { + after, + before, + dagId, + event, + excludedEvents, + includedEvents, + limit, + mapIndex, + offset, + orderBy, + owner, + runId, + taskId, + tryNumber, + }, + queryKey + ), + queryFn: () => + EventLogService.getEventLogs({ + after, + before, + dagId, + event, + excludedEvents, + includedEvents, + limit, + mapIndex, + offset, + orderBy, + owner, + runId, + taskId, + tryNumber, + }) as TData, + ...options, + }); +export const useEventLogServiceGetEventLog = < + TData = Common.EventLogServiceGetEventLogDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + eventLogId, + }: { + eventLogId: number; + }, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useQuery({ + queryKey: Common.UseEventLogServiceGetEventLogKeyFn( + { eventLogId }, + queryKey + ), + queryFn: () => EventLogService.getEventLog({ eventLogId }) as TData, + ...options, + }); +export const useImportErrorServiceGetImportErrors = < + TData = Common.ImportErrorServiceGetImportErrorsDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + limit, + offset, + orderBy, + }: { + limit?: number; + offset?: number; + orderBy?: string; + } = {}, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useQuery({ + queryKey: Common.UseImportErrorServiceGetImportErrorsKeyFn( + { limit, offset, orderBy }, + queryKey + ), + queryFn: () => + ImportErrorService.getImportErrors({ limit, offset, orderBy }) as TData, + ...options, + }); +export const useImportErrorServiceGetImportError = < + TData = Common.ImportErrorServiceGetImportErrorDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + importErrorId, + }: { + importErrorId: number; + }, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useQuery({ + queryKey: Common.UseImportErrorServiceGetImportErrorKeyFn( + { importErrorId }, + queryKey + ), + queryFn: () => + ImportErrorService.getImportError({ importErrorId }) as TData, + ...options, + }); +export const usePoolServiceGetPools = < + TData = Common.PoolServiceGetPoolsDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + limit, + offset, + orderBy, + }: { + limit?: number; + offset?: number; + orderBy?: string; + } = {}, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useQuery({ + queryKey: Common.UsePoolServiceGetPoolsKeyFn( + { limit, offset, orderBy }, + queryKey + ), + queryFn: () => PoolService.getPools({ limit, offset, orderBy }) as TData, + ...options, + }); +export const usePoolServiceGetPool = < + TData = Common.PoolServiceGetPoolDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + poolName, + }: { + poolName: string; + }, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useQuery({ + queryKey: Common.UsePoolServiceGetPoolKeyFn({ poolName }, queryKey), + queryFn: () => PoolService.getPool({ poolName }) as TData, + ...options, + }); +export const useProviderServiceGetProviders = < + TData = Common.ProviderServiceGetProvidersDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useQuery({ + queryKey: Common.UseProviderServiceGetProvidersKeyFn(queryKey), + queryFn: () => ProviderService.getProviders() as TData, + ...options, + }); +export const useVariableServiceGetVariables = < + TData = Common.VariableServiceGetVariablesDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + limit, + offset, + orderBy, + }: { + limit?: number; + offset?: number; + orderBy?: string; + } = {}, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useQuery({ + queryKey: Common.UseVariableServiceGetVariablesKeyFn( + { limit, offset, orderBy }, + queryKey + ), + queryFn: () => + VariableService.getVariables({ limit, offset, orderBy }) as TData, + ...options, + }); +export const useVariableServiceGetVariable = < + TData = Common.VariableServiceGetVariableDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + variableKey, + }: { + variableKey: string; + }, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useQuery({ + queryKey: Common.UseVariableServiceGetVariableKeyFn( + { variableKey }, + queryKey + ), + queryFn: () => VariableService.getVariable({ variableKey }) as TData, + ...options, + }); +export const useXcomServiceGetXcomEntries = < + TData = Common.XcomServiceGetXcomEntriesDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + dagId, + dagRunId, + limit, + mapIndex, + offset, + taskId, + xcomKey, + }: { + dagId: string; + dagRunId: string; + limit?: number; + mapIndex?: number; + offset?: number; + taskId: string; + xcomKey?: string; + }, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useQuery({ + queryKey: Common.UseXcomServiceGetXcomEntriesKeyFn( + { dagId, dagRunId, limit, mapIndex, offset, taskId, xcomKey }, + queryKey + ), + queryFn: () => + XcomService.getXcomEntries({ + dagId, + dagRunId, + limit, + mapIndex, + offset, + taskId, + xcomKey, + }) as TData, + ...options, + }); +export const useXcomServiceGetXcomEntry = < + TData = Common.XcomServiceGetXcomEntryDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + dagId, + dagRunId, + deserialize, + mapIndex, + stringify, + taskId, + xcomKey, + }: { + dagId: string; + dagRunId: string; + deserialize?: boolean; + mapIndex?: number; + stringify?: boolean; + taskId: string; + xcomKey: string; + }, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useQuery({ + queryKey: Common.UseXcomServiceGetXcomEntryKeyFn( + { dagId, dagRunId, deserialize, mapIndex, stringify, taskId, xcomKey }, + queryKey + ), + queryFn: () => + XcomService.getXcomEntry({ + dagId, + dagRunId, + deserialize, + mapIndex, + stringify, + taskId, + xcomKey, + }) as TData, + ...options, + }); +export const useDagStatsServiceGetDagStats = < + TData = Common.DagStatsServiceGetDagStatsDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + dagIds, + }: { + dagIds: string; + }, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useQuery({ + queryKey: Common.UseDagStatsServiceGetDagStatsKeyFn({ dagIds }, queryKey), + queryFn: () => DagStatsService.getDagStats({ dagIds }) as TData, + ...options, + }); +export const useDagWarningServiceGetDagWarnings = < + TData = Common.DagWarningServiceGetDagWarningsDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + dagId, + limit, + offset, + orderBy, + warningType, + }: { + dagId?: string; + limit?: number; + offset?: number; + orderBy?: string; + warningType?: string; + } = {}, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useQuery({ + queryKey: Common.UseDagWarningServiceGetDagWarningsKeyFn( + { dagId, limit, offset, orderBy, warningType }, + queryKey + ), + queryFn: () => + DagWarningService.getDagWarnings({ + dagId, + limit, + offset, + orderBy, + warningType, + }) as TData, + ...options, + }); +export const useConfigServiceGetConfig = < + TData = Common.ConfigServiceGetConfigDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + section, + }: { + section?: string; + } = {}, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useQuery({ + queryKey: Common.UseConfigServiceGetConfigKeyFn({ section }, queryKey), + queryFn: () => ConfigService.getConfig({ section }) as TData, + ...options, + }); +export const useConfigServiceGetValue = < + TData = Common.ConfigServiceGetValueDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + option, + section, + }: { + option: string; + section: string; + }, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useQuery({ + queryKey: Common.UseConfigServiceGetValueKeyFn( + { option, section }, + queryKey + ), + queryFn: () => ConfigService.getValue({ option, section }) as TData, + ...options, + }); +export const useMonitoringServiceGetHealth = < + TData = Common.MonitoringServiceGetHealthDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useQuery({ + queryKey: Common.UseMonitoringServiceGetHealthKeyFn(queryKey), + queryFn: () => MonitoringService.getHealth() as TData, + ...options, + }); +export const useMonitoringServiceGetVersion = < + TData = Common.MonitoringServiceGetVersionDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useQuery({ + queryKey: Common.UseMonitoringServiceGetVersionKeyFn(queryKey), + queryFn: () => MonitoringService.getVersion() as TData, + ...options, + }); +export const usePluginServiceGetPlugins = < + TData = Common.PluginServiceGetPluginsDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + limit, + offset, + }: { + limit?: number; + offset?: number; + } = {}, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useQuery({ + queryKey: Common.UsePluginServiceGetPluginsKeyFn( + { limit, offset }, + queryKey + ), + queryFn: () => PluginService.getPlugins({ limit, offset }) as TData, + ...options, + }); +export const useRoleServiceGetRoles = < + TData = Common.RoleServiceGetRolesDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + limit, + offset, + orderBy, + }: { + limit?: number; + offset?: number; + orderBy?: string; + } = {}, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useQuery({ + queryKey: Common.UseRoleServiceGetRolesKeyFn( + { limit, offset, orderBy }, + queryKey + ), + queryFn: () => RoleService.getRoles({ limit, offset, orderBy }) as TData, + ...options, + }); +export const useRoleServiceGetRole = < + TData = Common.RoleServiceGetRoleDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + roleName, + }: { + roleName: string; + }, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useQuery({ + queryKey: Common.UseRoleServiceGetRoleKeyFn({ roleName }, queryKey), + queryFn: () => RoleService.getRole({ roleName }) as TData, + ...options, + }); +export const usePermissionServiceGetPermissions = < + TData = Common.PermissionServiceGetPermissionsDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + limit, + offset, + }: { + limit?: number; + offset?: number; + } = {}, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useQuery({ + queryKey: Common.UsePermissionServiceGetPermissionsKeyFn( + { limit, offset }, + queryKey + ), + queryFn: () => PermissionService.getPermissions({ limit, offset }) as TData, + ...options, + }); +export const useUserServiceGetUsers = < + TData = Common.UserServiceGetUsersDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + limit, + offset, + orderBy, + }: { + limit?: number; + offset?: number; + orderBy?: string; + } = {}, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useQuery({ + queryKey: Common.UseUserServiceGetUsersKeyFn( + { limit, offset, orderBy }, + queryKey + ), + queryFn: () => UserService.getUsers({ limit, offset, orderBy }) as TData, + ...options, + }); +export const useUserServiceGetUser = < + TData = Common.UserServiceGetUserDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + username, + }: { + username: string; + }, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useQuery({ + queryKey: Common.UseUserServiceGetUserKeyFn({ username }, queryKey), + queryFn: () => UserService.getUser({ username }) as TData, + ...options, + }); +export const useConnectionServicePostConnection = < + TData = Common.ConnectionServicePostConnectionMutationResult, + TError = unknown, + TContext = unknown, +>( + options?: Omit< + UseMutationOptions< + TData, + TError, + { + requestBody: Connection; + }, + TContext + >, + "mutationFn" + > +) => + useMutation< + TData, + TError, + { + requestBody: Connection; + }, + TContext + >({ + mutationFn: ({ requestBody }) => + ConnectionService.postConnection({ + requestBody, + }) as unknown as Promise, + ...options, + }); +export const useConnectionServiceTestConnection = < + TData = Common.ConnectionServiceTestConnectionMutationResult, + TError = unknown, + TContext = unknown, +>( + options?: Omit< + UseMutationOptions< + TData, + TError, + { + requestBody: Connection; + }, + TContext + >, + "mutationFn" + > +) => + useMutation< + TData, + TError, + { + requestBody: Connection; + }, + TContext + >({ + mutationFn: ({ requestBody }) => + ConnectionService.testConnection({ + requestBody, + }) as unknown as Promise, + ...options, + }); +export const useDagServicePostClearTaskInstances = < + TData = Common.DagServicePostClearTaskInstancesMutationResult, + TError = unknown, + TContext = unknown, +>( + options?: Omit< + UseMutationOptions< + TData, + TError, + { + dagId: string; + requestBody: ClearTaskInstances; + }, + TContext + >, + "mutationFn" + > +) => + useMutation< + TData, + TError, + { + dagId: string; + requestBody: ClearTaskInstances; + }, + TContext + >({ + mutationFn: ({ dagId, requestBody }) => + DagService.postClearTaskInstances({ + dagId, + requestBody, + }) as unknown as Promise, + ...options, + }); +export const useDagServicePostSetTaskInstancesState = < + TData = Common.DagServicePostSetTaskInstancesStateMutationResult, + TError = unknown, + TContext = unknown, +>( + options?: Omit< + UseMutationOptions< + TData, + TError, + { + dagId: string; + requestBody: UpdateTaskInstancesState; + }, + TContext + >, + "mutationFn" + > +) => + useMutation< + TData, + TError, + { + dagId: string; + requestBody: UpdateTaskInstancesState; + }, + TContext + >({ + mutationFn: ({ dagId, requestBody }) => + DagService.postSetTaskInstancesState({ + dagId, + requestBody, + }) as unknown as Promise, + ...options, + }); +export const useTaskInstanceServiceGetTaskInstancesBatch = < + TData = Common.TaskInstanceServiceGetTaskInstancesBatchMutationResult, + TError = unknown, + TContext = unknown, +>( + options?: Omit< + UseMutationOptions< + TData, + TError, + { + requestBody: ListTaskInstanceForm; + }, + TContext + >, + "mutationFn" + > +) => + useMutation< + TData, + TError, + { + requestBody: ListTaskInstanceForm; + }, + TContext + >({ + mutationFn: ({ requestBody }) => + TaskInstanceService.getTaskInstancesBatch({ + requestBody, + }) as unknown as Promise, + ...options, + }); +export const useDagRunServicePostDagRun = < + TData = Common.DagRunServicePostDagRunMutationResult, + TError = unknown, + TContext = unknown, +>( + options?: Omit< + UseMutationOptions< + TData, + TError, + { + dagId: string; + requestBody: DAGRun; + }, + TContext + >, + "mutationFn" + > +) => + useMutation< + TData, + TError, + { + dagId: string; + requestBody: DAGRun; + }, + TContext + >({ + mutationFn: ({ dagId, requestBody }) => + DagRunService.postDagRun({ + dagId, + requestBody, + }) as unknown as Promise, + ...options, + }); +export const useDagRunServiceGetDagRunsBatch = < + TData = Common.DagRunServiceGetDagRunsBatchMutationResult, + TError = unknown, + TContext = unknown, +>( + options?: Omit< + UseMutationOptions< + TData, + TError, + { + requestBody: ListDagRunsForm; + }, + TContext + >, + "mutationFn" + > +) => + useMutation< + TData, + TError, + { + requestBody: ListDagRunsForm; + }, + TContext + >({ + mutationFn: ({ requestBody }) => + DagRunService.getDagRunsBatch({ + requestBody, + }) as unknown as Promise, + ...options, + }); +export const useDagRunServiceClearDagRun = < + TData = Common.DagRunServiceClearDagRunMutationResult, + TError = unknown, + TContext = unknown, +>( + options?: Omit< + UseMutationOptions< + TData, + TError, + { + dagId: string; + dagRunId: string; + requestBody: ClearDagRun; + }, + TContext + >, + "mutationFn" + > +) => + useMutation< + TData, + TError, + { + dagId: string; + dagRunId: string; + requestBody: ClearDagRun; + }, + TContext + >({ + mutationFn: ({ dagId, dagRunId, requestBody }) => + DagRunService.clearDagRun({ + dagId, + dagRunId, + requestBody, + }) as unknown as Promise, + ...options, + }); +export const useDatasetServiceCreateDatasetEvent = < + TData = Common.DatasetServiceCreateDatasetEventMutationResult, + TError = unknown, + TContext = unknown, +>( + options?: Omit< + UseMutationOptions< + TData, + TError, + { + requestBody: CreateDatasetEvent; + }, + TContext + >, + "mutationFn" + > +) => + useMutation< + TData, + TError, + { + requestBody: CreateDatasetEvent; + }, + TContext + >({ + mutationFn: ({ requestBody }) => + DatasetService.createDatasetEvent({ + requestBody, + }) as unknown as Promise, + ...options, + }); +export const usePoolServicePostPool = < + TData = Common.PoolServicePostPoolMutationResult, + TError = unknown, + TContext = unknown, +>( + options?: Omit< + UseMutationOptions< + TData, + TError, + { + requestBody: Pool; + }, + TContext + >, + "mutationFn" + > +) => + useMutation< + TData, + TError, + { + requestBody: Pool; + }, + TContext + >({ + mutationFn: ({ requestBody }) => + PoolService.postPool({ requestBody }) as unknown as Promise, + ...options, + }); +export const useVariableServicePostVariables = < + TData = Common.VariableServicePostVariablesMutationResult, + TError = unknown, + TContext = unknown, +>( + options?: Omit< + UseMutationOptions< + TData, + TError, + { + requestBody: Variable; + }, + TContext + >, + "mutationFn" + > +) => + useMutation< + TData, + TError, + { + requestBody: Variable; + }, + TContext + >({ + mutationFn: ({ requestBody }) => + VariableService.postVariables({ + requestBody, + }) as unknown as Promise, + ...options, + }); +export const useRoleServicePostRole = < + TData = Common.RoleServicePostRoleMutationResult, + TError = unknown, + TContext = unknown, +>( + options?: Omit< + UseMutationOptions< + TData, + TError, + { + requestBody: Role; + }, + TContext + >, + "mutationFn" + > +) => + useMutation< + TData, + TError, + { + requestBody: Role; + }, + TContext + >({ + mutationFn: ({ requestBody }) => + RoleService.postRole({ requestBody }) as unknown as Promise, + ...options, + }); +export const useUserServicePostUser = < + TData = Common.UserServicePostUserMutationResult, + TError = unknown, + TContext = unknown, +>( + options?: Omit< + UseMutationOptions< + TData, + TError, + { + requestBody: User; + }, + TContext + >, + "mutationFn" + > +) => + useMutation< + TData, + TError, + { + requestBody: User; + }, + TContext + >({ + mutationFn: ({ requestBody }) => + UserService.postUser({ requestBody }) as unknown as Promise, + ...options, + }); +export const useDagServiceReparseDagFile = < + TData = Common.DagServiceReparseDagFileMutationResult, + TError = unknown, + TContext = unknown, +>( + options?: Omit< + UseMutationOptions< + TData, + TError, + { + fileToken: string; + }, + TContext + >, + "mutationFn" + > +) => + useMutation< + TData, + TError, + { + fileToken: string; + }, + TContext + >({ + mutationFn: ({ fileToken }) => + DagService.reparseDagFile({ fileToken }) as unknown as Promise, + ...options, + }); +export const useConnectionServicePatchConnection = < + TData = Common.ConnectionServicePatchConnectionMutationResult, + TError = unknown, + TContext = unknown, +>( + options?: Omit< + UseMutationOptions< + TData, + TError, + { + connectionId: string; + requestBody: Connection; + updateMask?: string[]; + }, + TContext + >, + "mutationFn" + > +) => + useMutation< + TData, + TError, + { + connectionId: string; + requestBody: Connection; + updateMask?: string[]; + }, + TContext + >({ + mutationFn: ({ connectionId, requestBody, updateMask }) => + ConnectionService.patchConnection({ + connectionId, + requestBody, + updateMask, + }) as unknown as Promise, + ...options, + }); +export const useDagServicePatchDags = < + TData = Common.DagServicePatchDagsMutationResult, + TError = unknown, + TContext = unknown, +>( + options?: Omit< + UseMutationOptions< + TData, + TError, + { + dagIdPattern: string; + limit?: number; + offset?: number; + onlyActive?: boolean; + requestBody: DAG; + tags?: string[]; + updateMask?: string[]; + }, + TContext + >, + "mutationFn" + > +) => + useMutation< + TData, + TError, + { + dagIdPattern: string; + limit?: number; + offset?: number; + onlyActive?: boolean; + requestBody: DAG; + tags?: string[]; + updateMask?: string[]; + }, + TContext + >({ + mutationFn: ({ + dagIdPattern, + limit, + offset, + onlyActive, + requestBody, + tags, + updateMask, + }) => + DagService.patchDags({ + dagIdPattern, + limit, + offset, + onlyActive, + requestBody, + tags, + updateMask, + }) as unknown as Promise, + ...options, + }); +export const useDagServicePatchDag = < + TData = Common.DagServicePatchDagMutationResult, + TError = unknown, + TContext = unknown, +>( + options?: Omit< + UseMutationOptions< + TData, + TError, + { + dagId: string; + requestBody: DAG; + updateMask?: string[]; + }, + TContext + >, + "mutationFn" + > +) => + useMutation< + TData, + TError, + { + dagId: string; + requestBody: DAG; + updateMask?: string[]; + }, + TContext + >({ + mutationFn: ({ dagId, requestBody, updateMask }) => + DagService.patchDag({ + dagId, + requestBody, + updateMask, + }) as unknown as Promise, + ...options, + }); +export const useTaskInstanceServiceSetTaskInstanceNote = < + TData = Common.TaskInstanceServiceSetTaskInstanceNoteMutationResult, + TError = unknown, + TContext = unknown, +>( + options?: Omit< + UseMutationOptions< + TData, + TError, + { + dagId: string; + dagRunId: string; + requestBody: SetTaskInstanceNote; + taskId: string; + }, + TContext + >, + "mutationFn" + > +) => + useMutation< + TData, + TError, + { + dagId: string; + dagRunId: string; + requestBody: SetTaskInstanceNote; + taskId: string; + }, + TContext + >({ + mutationFn: ({ dagId, dagRunId, requestBody, taskId }) => + TaskInstanceService.setTaskInstanceNote({ + dagId, + dagRunId, + requestBody, + taskId, + }) as unknown as Promise, + ...options, + }); +export const useTaskInstanceServiceSetMappedTaskInstanceNote = < + TData = Common.TaskInstanceServiceSetMappedTaskInstanceNoteMutationResult, + TError = unknown, + TContext = unknown, +>( + options?: Omit< + UseMutationOptions< + TData, + TError, + { + dagId: string; + dagRunId: string; + mapIndex: number; + requestBody: SetTaskInstanceNote; + taskId: string; + }, + TContext + >, + "mutationFn" + > +) => + useMutation< + TData, + TError, + { + dagId: string; + dagRunId: string; + mapIndex: number; + requestBody: SetTaskInstanceNote; + taskId: string; + }, + TContext + >({ + mutationFn: ({ dagId, dagRunId, mapIndex, requestBody, taskId }) => + TaskInstanceService.setMappedTaskInstanceNote({ + dagId, + dagRunId, + mapIndex, + requestBody, + taskId, + }) as unknown as Promise, + ...options, + }); +export const useTaskInstanceServicePatchTaskInstance = < + TData = Common.TaskInstanceServicePatchTaskInstanceMutationResult, + TError = unknown, + TContext = unknown, +>( + options?: Omit< + UseMutationOptions< + TData, + TError, + { + dagId: string; + dagRunId: string; + requestBody: UpdateTaskInstance; + taskId: string; + }, + TContext + >, + "mutationFn" + > +) => + useMutation< + TData, + TError, + { + dagId: string; + dagRunId: string; + requestBody: UpdateTaskInstance; + taskId: string; + }, + TContext + >({ + mutationFn: ({ dagId, dagRunId, requestBody, taskId }) => + TaskInstanceService.patchTaskInstance({ + dagId, + dagRunId, + requestBody, + taskId, + }) as unknown as Promise, + ...options, + }); +export const useTaskInstanceServicePatchMappedTaskInstance = < + TData = Common.TaskInstanceServicePatchMappedTaskInstanceMutationResult, + TError = unknown, + TContext = unknown, +>( + options?: Omit< + UseMutationOptions< + TData, + TError, + { + dagId: string; + dagRunId: string; + mapIndex: number; + requestBody?: UpdateTaskInstance; + taskId: string; + }, + TContext + >, + "mutationFn" + > +) => + useMutation< + TData, + TError, + { + dagId: string; + dagRunId: string; + mapIndex: number; + requestBody?: UpdateTaskInstance; + taskId: string; + }, + TContext + >({ + mutationFn: ({ dagId, dagRunId, mapIndex, requestBody, taskId }) => + TaskInstanceService.patchMappedTaskInstance({ + dagId, + dagRunId, + mapIndex, + requestBody, + taskId, + }) as unknown as Promise, + ...options, + }); +export const useDagRunServiceUpdateDagRunState = < + TData = Common.DagRunServiceUpdateDagRunStateMutationResult, + TError = unknown, + TContext = unknown, +>( + options?: Omit< + UseMutationOptions< + TData, + TError, + { + dagId: string; + dagRunId: string; + requestBody: UpdateDagRunState; + }, + TContext + >, + "mutationFn" + > +) => + useMutation< + TData, + TError, + { + dagId: string; + dagRunId: string; + requestBody: UpdateDagRunState; + }, + TContext + >({ + mutationFn: ({ dagId, dagRunId, requestBody }) => + DagRunService.updateDagRunState({ + dagId, + dagRunId, + requestBody, + }) as unknown as Promise, + ...options, + }); +export const useDagRunServiceSetDagRunNote = < + TData = Common.DagRunServiceSetDagRunNoteMutationResult, + TError = unknown, + TContext = unknown, +>( + options?: Omit< + UseMutationOptions< + TData, + TError, + { + dagId: string; + dagRunId: string; + requestBody: SetDagRunNote; + }, + TContext + >, + "mutationFn" + > +) => + useMutation< + TData, + TError, + { + dagId: string; + dagRunId: string; + requestBody: SetDagRunNote; + }, + TContext + >({ + mutationFn: ({ dagId, dagRunId, requestBody }) => + DagRunService.setDagRunNote({ + dagId, + dagRunId, + requestBody, + }) as unknown as Promise, + ...options, + }); +export const usePoolServicePatchPool = < + TData = Common.PoolServicePatchPoolMutationResult, + TError = unknown, + TContext = unknown, +>( + options?: Omit< + UseMutationOptions< + TData, + TError, + { + poolName: string; + requestBody: Pool; + updateMask?: string[]; + }, + TContext + >, + "mutationFn" + > +) => + useMutation< + TData, + TError, + { + poolName: string; + requestBody: Pool; + updateMask?: string[]; + }, + TContext + >({ + mutationFn: ({ poolName, requestBody, updateMask }) => + PoolService.patchPool({ + poolName, + requestBody, + updateMask, + }) as unknown as Promise, + ...options, + }); +export const useVariableServicePatchVariable = < + TData = Common.VariableServicePatchVariableMutationResult, + TError = unknown, + TContext = unknown, +>( + options?: Omit< + UseMutationOptions< + TData, + TError, + { + requestBody: Variable; + updateMask?: string[]; + variableKey: string; + }, + TContext + >, + "mutationFn" + > +) => + useMutation< + TData, + TError, + { + requestBody: Variable; + updateMask?: string[]; + variableKey: string; + }, + TContext + >({ + mutationFn: ({ requestBody, updateMask, variableKey }) => + VariableService.patchVariable({ + requestBody, + updateMask, + variableKey, + }) as unknown as Promise, + ...options, + }); +export const useRoleServicePatchRole = < + TData = Common.RoleServicePatchRoleMutationResult, + TError = unknown, + TContext = unknown, +>( + options?: Omit< + UseMutationOptions< + TData, + TError, + { + requestBody: Role; + roleName: string; + updateMask?: string[]; + }, + TContext + >, + "mutationFn" + > +) => + useMutation< + TData, + TError, + { + requestBody: Role; + roleName: string; + updateMask?: string[]; + }, + TContext + >({ + mutationFn: ({ requestBody, roleName, updateMask }) => + RoleService.patchRole({ + requestBody, + roleName, + updateMask, + }) as unknown as Promise, + ...options, + }); +export const useUserServicePatchUser = < + TData = Common.UserServicePatchUserMutationResult, + TError = unknown, + TContext = unknown, +>( + options?: Omit< + UseMutationOptions< + TData, + TError, + { + requestBody: User; + updateMask?: string[]; + username: string; + }, + TContext + >, + "mutationFn" + > +) => + useMutation< + TData, + TError, + { + requestBody: User; + updateMask?: string[]; + username: string; + }, + TContext + >({ + mutationFn: ({ requestBody, updateMask, username }) => + UserService.patchUser({ + requestBody, + updateMask, + username, + }) as unknown as Promise, + ...options, + }); +export const useConnectionServiceDeleteConnection = < + TData = Common.ConnectionServiceDeleteConnectionMutationResult, + TError = unknown, + TContext = unknown, +>( + options?: Omit< + UseMutationOptions< + TData, + TError, + { + connectionId: string; + }, + TContext + >, + "mutationFn" + > +) => + useMutation< + TData, + TError, + { + connectionId: string; + }, + TContext + >({ + mutationFn: ({ connectionId }) => + ConnectionService.deleteConnection({ + connectionId, + }) as unknown as Promise, + ...options, + }); +export const useDagServiceDeleteDag = < + TData = Common.DagServiceDeleteDagMutationResult, + TError = unknown, + TContext = unknown, +>( + options?: Omit< + UseMutationOptions< + TData, + TError, + { + dagId: string; + }, + TContext + >, + "mutationFn" + > +) => + useMutation< + TData, + TError, + { + dagId: string; + }, + TContext + >({ + mutationFn: ({ dagId }) => + DagService.deleteDag({ dagId }) as unknown as Promise, + ...options, + }); +export const useDagRunServiceDeleteDagRun = < + TData = Common.DagRunServiceDeleteDagRunMutationResult, + TError = unknown, + TContext = unknown, +>( + options?: Omit< + UseMutationOptions< + TData, + TError, + { + dagId: string; + dagRunId: string; + }, + TContext + >, + "mutationFn" + > +) => + useMutation< + TData, + TError, + { + dagId: string; + dagRunId: string; + }, + TContext + >({ + mutationFn: ({ dagId, dagRunId }) => + DagRunService.deleteDagRun({ + dagId, + dagRunId, + }) as unknown as Promise, + ...options, + }); +export const useDatasetServiceDeleteDagDatasetQueuedEvent = < + TData = Common.DatasetServiceDeleteDagDatasetQueuedEventMutationResult, + TError = unknown, + TContext = unknown, +>( + options?: Omit< + UseMutationOptions< + TData, + TError, + { + before?: string; + dagId: string; + uri: string; + }, + TContext + >, + "mutationFn" + > +) => + useMutation< + TData, + TError, + { + before?: string; + dagId: string; + uri: string; + }, + TContext + >({ + mutationFn: ({ before, dagId, uri }) => + DatasetService.deleteDagDatasetQueuedEvent({ + before, + dagId, + uri, + }) as unknown as Promise, + ...options, + }); +export const useDatasetServiceDeleteDagDatasetQueuedEvents = < + TData = Common.DatasetServiceDeleteDagDatasetQueuedEventsMutationResult, + TError = unknown, + TContext = unknown, +>( + options?: Omit< + UseMutationOptions< + TData, + TError, + { + before?: string; + dagId: string; + }, + TContext + >, + "mutationFn" + > +) => + useMutation< + TData, + TError, + { + before?: string; + dagId: string; + }, + TContext + >({ + mutationFn: ({ before, dagId }) => + DatasetService.deleteDagDatasetQueuedEvents({ + before, + dagId, + }) as unknown as Promise, + ...options, + }); +export const useDatasetServiceDeleteDatasetQueuedEvents = < + TData = Common.DatasetServiceDeleteDatasetQueuedEventsMutationResult, + TError = unknown, + TContext = unknown, +>( + options?: Omit< + UseMutationOptions< + TData, + TError, + { + before?: string; + uri: string; + }, + TContext + >, + "mutationFn" + > +) => + useMutation< + TData, + TError, + { + before?: string; + uri: string; + }, + TContext + >({ + mutationFn: ({ before, uri }) => + DatasetService.deleteDatasetQueuedEvents({ + before, + uri, + }) as unknown as Promise, + ...options, + }); +export const usePoolServiceDeletePool = < + TData = Common.PoolServiceDeletePoolMutationResult, + TError = unknown, + TContext = unknown, +>( + options?: Omit< + UseMutationOptions< + TData, + TError, + { + poolName: string; + }, + TContext + >, + "mutationFn" + > +) => + useMutation< + TData, + TError, + { + poolName: string; + }, + TContext + >({ + mutationFn: ({ poolName }) => + PoolService.deletePool({ poolName }) as unknown as Promise, + ...options, + }); +export const useVariableServiceDeleteVariable = < + TData = Common.VariableServiceDeleteVariableMutationResult, + TError = unknown, + TContext = unknown, +>( + options?: Omit< + UseMutationOptions< + TData, + TError, + { + variableKey: string; + }, + TContext + >, + "mutationFn" + > +) => + useMutation< + TData, + TError, + { + variableKey: string; + }, + TContext + >({ + mutationFn: ({ variableKey }) => + VariableService.deleteVariable({ + variableKey, + }) as unknown as Promise, + ...options, + }); +export const useRoleServiceDeleteRole = < + TData = Common.RoleServiceDeleteRoleMutationResult, + TError = unknown, + TContext = unknown, +>( + options?: Omit< + UseMutationOptions< + TData, + TError, + { + roleName: string; + }, + TContext + >, + "mutationFn" + > +) => + useMutation< + TData, + TError, + { + roleName: string; + }, + TContext + >({ + mutationFn: ({ roleName }) => + RoleService.deleteRole({ roleName }) as unknown as Promise, + ...options, + }); +export const useUserServiceDeleteUser = < + TData = Common.UserServiceDeleteUserMutationResult, + TError = unknown, + TContext = unknown, +>( + options?: Omit< + UseMutationOptions< + TData, + TError, + { + username: string; + }, + TContext + >, + "mutationFn" + > +) => + useMutation< + TData, + TError, + { + username: string; + }, + TContext + >({ + mutationFn: ({ username }) => + UserService.deleteUser({ username }) as unknown as Promise, + ...options, + }); diff --git a/airflow/ui/openapi-gen/queries/suspense.ts b/airflow/ui/openapi-gen/queries/suspense.ts new file mode 100644 index 0000000000000..adb7aed669268 --- /dev/null +++ b/airflow/ui/openapi-gen/queries/suspense.ts @@ -0,0 +1,1685 @@ +// generated with @7nohe/openapi-react-query-codegen@1.6.0 + +import { UseQueryOptions, useSuspenseQuery } from "@tanstack/react-query"; +import { + ConfigService, + ConnectionService, + DagRunService, + DagService, + DagStatsService, + DagWarningService, + DatasetService, + EventLogService, + ImportErrorService, + MonitoringService, + PermissionService, + PluginService, + PoolService, + ProviderService, + RoleService, + TaskInstanceService, + UserService, + VariableService, + XcomService, +} from "../requests/services.gen"; +import * as Common from "./common"; +export const useConnectionServiceGetConnectionsSuspense = < + TData = Common.ConnectionServiceGetConnectionsDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + limit, + offset, + orderBy, + }: { + limit?: number; + offset?: number; + orderBy?: string; + } = {}, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useSuspenseQuery({ + queryKey: Common.UseConnectionServiceGetConnectionsKeyFn( + { limit, offset, orderBy }, + queryKey + ), + queryFn: () => + ConnectionService.getConnections({ limit, offset, orderBy }) as TData, + ...options, + }); +export const useConnectionServiceGetConnectionSuspense = < + TData = Common.ConnectionServiceGetConnectionDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + connectionId, + }: { + connectionId: string; + }, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useSuspenseQuery({ + queryKey: Common.UseConnectionServiceGetConnectionKeyFn( + { connectionId }, + queryKey + ), + queryFn: () => ConnectionService.getConnection({ connectionId }) as TData, + ...options, + }); +export const useDagServiceGetDagsSuspense = < + TData = Common.DagServiceGetDagsDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + dagIdPattern, + fields, + limit, + offset, + onlyActive, + orderBy, + paused, + tags, + }: { + dagIdPattern?: string; + fields?: string[]; + limit?: number; + offset?: number; + onlyActive?: boolean; + orderBy?: string; + paused?: boolean; + tags?: string[]; + } = {}, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useSuspenseQuery({ + queryKey: Common.UseDagServiceGetDagsKeyFn( + { + dagIdPattern, + fields, + limit, + offset, + onlyActive, + orderBy, + paused, + tags, + }, + queryKey + ), + queryFn: () => + DagService.getDags({ + dagIdPattern, + fields, + limit, + offset, + onlyActive, + orderBy, + paused, + tags, + }) as TData, + ...options, + }); +export const useDagServiceGetDagSuspense = < + TData = Common.DagServiceGetDagDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + dagId, + fields, + }: { + dagId: string; + fields?: string[]; + }, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useSuspenseQuery({ + queryKey: Common.UseDagServiceGetDagKeyFn({ dagId, fields }, queryKey), + queryFn: () => DagService.getDag({ dagId, fields }) as TData, + ...options, + }); +export const useDagServiceGetDagDetailsSuspense = < + TData = Common.DagServiceGetDagDetailsDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + dagId, + fields, + }: { + dagId: string; + fields?: string[]; + }, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useSuspenseQuery({ + queryKey: Common.UseDagServiceGetDagDetailsKeyFn( + { dagId, fields }, + queryKey + ), + queryFn: () => DagService.getDagDetails({ dagId, fields }) as TData, + ...options, + }); +export const useDagServiceGetTasksSuspense = < + TData = Common.DagServiceGetTasksDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + dagId, + orderBy, + }: { + dagId: string; + orderBy?: string; + }, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useSuspenseQuery({ + queryKey: Common.UseDagServiceGetTasksKeyFn({ dagId, orderBy }, queryKey), + queryFn: () => DagService.getTasks({ dagId, orderBy }) as TData, + ...options, + }); +export const useDagServiceGetTaskSuspense = < + TData = Common.DagServiceGetTaskDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + dagId, + taskId, + }: { + dagId: string; + taskId: string; + }, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useSuspenseQuery({ + queryKey: Common.UseDagServiceGetTaskKeyFn({ dagId, taskId }, queryKey), + queryFn: () => DagService.getTask({ dagId, taskId }) as TData, + ...options, + }); +export const useDagServiceGetDagSourceSuspense = < + TData = Common.DagServiceGetDagSourceDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + fileToken, + }: { + fileToken: string; + }, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useSuspenseQuery({ + queryKey: Common.UseDagServiceGetDagSourceKeyFn({ fileToken }, queryKey), + queryFn: () => DagService.getDagSource({ fileToken }) as TData, + ...options, + }); +export const useTaskInstanceServiceGetTaskInstanceDependenciesSuspense = < + TData = Common.TaskInstanceServiceGetTaskInstanceDependenciesDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + dagId, + dagRunId, + taskId, + }: { + dagId: string; + dagRunId: string; + taskId: string; + }, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useSuspenseQuery({ + queryKey: Common.UseTaskInstanceServiceGetTaskInstanceDependenciesKeyFn( + { dagId, dagRunId, taskId }, + queryKey + ), + queryFn: () => + TaskInstanceService.getTaskInstanceDependencies({ + dagId, + dagRunId, + taskId, + }) as TData, + ...options, + }); +export const useTaskInstanceServiceGetMappedTaskInstanceDependenciesSuspense = < + TData = Common.TaskInstanceServiceGetMappedTaskInstanceDependenciesDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + dagId, + dagRunId, + mapIndex, + taskId, + }: { + dagId: string; + dagRunId: string; + mapIndex: number; + taskId: string; + }, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useSuspenseQuery({ + queryKey: + Common.UseTaskInstanceServiceGetMappedTaskInstanceDependenciesKeyFn( + { dagId, dagRunId, mapIndex, taskId }, + queryKey + ), + queryFn: () => + TaskInstanceService.getMappedTaskInstanceDependencies({ + dagId, + dagRunId, + mapIndex, + taskId, + }) as TData, + ...options, + }); +export const useTaskInstanceServiceGetTaskInstancesSuspense = < + TData = Common.TaskInstanceServiceGetTaskInstancesDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + dagId, + dagRunId, + durationGte, + durationLte, + endDateGte, + endDateLte, + executionDateGte, + executionDateLte, + executor, + limit, + offset, + pool, + queue, + startDateGte, + startDateLte, + state, + updatedAtGte, + updatedAtLte, + }: { + dagId: string; + dagRunId: string; + durationGte?: number; + durationLte?: number; + endDateGte?: string; + endDateLte?: string; + executionDateGte?: string; + executionDateLte?: string; + executor?: string[]; + limit?: number; + offset?: number; + pool?: string[]; + queue?: string[]; + startDateGte?: string; + startDateLte?: string; + state?: string[]; + updatedAtGte?: string; + updatedAtLte?: string; + }, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useSuspenseQuery({ + queryKey: Common.UseTaskInstanceServiceGetTaskInstancesKeyFn( + { + dagId, + dagRunId, + durationGte, + durationLte, + endDateGte, + endDateLte, + executionDateGte, + executionDateLte, + executor, + limit, + offset, + pool, + queue, + startDateGte, + startDateLte, + state, + updatedAtGte, + updatedAtLte, + }, + queryKey + ), + queryFn: () => + TaskInstanceService.getTaskInstances({ + dagId, + dagRunId, + durationGte, + durationLte, + endDateGte, + endDateLte, + executionDateGte, + executionDateLte, + executor, + limit, + offset, + pool, + queue, + startDateGte, + startDateLte, + state, + updatedAtGte, + updatedAtLte, + }) as TData, + ...options, + }); +export const useTaskInstanceServiceGetTaskInstanceSuspense = < + TData = Common.TaskInstanceServiceGetTaskInstanceDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + dagId, + dagRunId, + taskId, + }: { + dagId: string; + dagRunId: string; + taskId: string; + }, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useSuspenseQuery({ + queryKey: Common.UseTaskInstanceServiceGetTaskInstanceKeyFn( + { dagId, dagRunId, taskId }, + queryKey + ), + queryFn: () => + TaskInstanceService.getTaskInstance({ dagId, dagRunId, taskId }) as TData, + ...options, + }); +export const useTaskInstanceServiceGetMappedTaskInstanceSuspense = < + TData = Common.TaskInstanceServiceGetMappedTaskInstanceDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + dagId, + dagRunId, + mapIndex, + taskId, + }: { + dagId: string; + dagRunId: string; + mapIndex: number; + taskId: string; + }, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useSuspenseQuery({ + queryKey: Common.UseTaskInstanceServiceGetMappedTaskInstanceKeyFn( + { dagId, dagRunId, mapIndex, taskId }, + queryKey + ), + queryFn: () => + TaskInstanceService.getMappedTaskInstance({ + dagId, + dagRunId, + mapIndex, + taskId, + }) as TData, + ...options, + }); +export const useTaskInstanceServiceGetMappedTaskInstancesSuspense = < + TData = Common.TaskInstanceServiceGetMappedTaskInstancesDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + dagId, + dagRunId, + durationGte, + durationLte, + endDateGte, + endDateLte, + executionDateGte, + executionDateLte, + executor, + limit, + offset, + orderBy, + pool, + queue, + startDateGte, + startDateLte, + state, + taskId, + updatedAtGte, + updatedAtLte, + }: { + dagId: string; + dagRunId: string; + durationGte?: number; + durationLte?: number; + endDateGte?: string; + endDateLte?: string; + executionDateGte?: string; + executionDateLte?: string; + executor?: string[]; + limit?: number; + offset?: number; + orderBy?: string; + pool?: string[]; + queue?: string[]; + startDateGte?: string; + startDateLte?: string; + state?: string[]; + taskId: string; + updatedAtGte?: string; + updatedAtLte?: string; + }, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useSuspenseQuery({ + queryKey: Common.UseTaskInstanceServiceGetMappedTaskInstancesKeyFn( + { + dagId, + dagRunId, + durationGte, + durationLte, + endDateGte, + endDateLte, + executionDateGte, + executionDateLte, + executor, + limit, + offset, + orderBy, + pool, + queue, + startDateGte, + startDateLte, + state, + taskId, + updatedAtGte, + updatedAtLte, + }, + queryKey + ), + queryFn: () => + TaskInstanceService.getMappedTaskInstances({ + dagId, + dagRunId, + durationGte, + durationLte, + endDateGte, + endDateLte, + executionDateGte, + executionDateLte, + executor, + limit, + offset, + orderBy, + pool, + queue, + startDateGte, + startDateLte, + state, + taskId, + updatedAtGte, + updatedAtLte, + }) as TData, + ...options, + }); +export const useTaskInstanceServiceGetTaskInstanceTryDetailsSuspense = < + TData = Common.TaskInstanceServiceGetTaskInstanceTryDetailsDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + dagId, + dagRunId, + taskId, + taskTryNumber, + }: { + dagId: string; + dagRunId: string; + taskId: string; + taskTryNumber: number; + }, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useSuspenseQuery({ + queryKey: Common.UseTaskInstanceServiceGetTaskInstanceTryDetailsKeyFn( + { dagId, dagRunId, taskId, taskTryNumber }, + queryKey + ), + queryFn: () => + TaskInstanceService.getTaskInstanceTryDetails({ + dagId, + dagRunId, + taskId, + taskTryNumber, + }) as TData, + ...options, + }); +export const useTaskInstanceServiceGetTaskInstanceTriesSuspense = < + TData = Common.TaskInstanceServiceGetTaskInstanceTriesDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + dagId, + dagRunId, + limit, + offset, + orderBy, + taskId, + }: { + dagId: string; + dagRunId: string; + limit?: number; + offset?: number; + orderBy?: string; + taskId: string; + }, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useSuspenseQuery({ + queryKey: Common.UseTaskInstanceServiceGetTaskInstanceTriesKeyFn( + { dagId, dagRunId, limit, offset, orderBy, taskId }, + queryKey + ), + queryFn: () => + TaskInstanceService.getTaskInstanceTries({ + dagId, + dagRunId, + limit, + offset, + orderBy, + taskId, + }) as TData, + ...options, + }); +export const useTaskInstanceServiceGetMappedTaskInstanceTriesSuspense = < + TData = Common.TaskInstanceServiceGetMappedTaskInstanceTriesDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + dagId, + dagRunId, + limit, + mapIndex, + offset, + orderBy, + taskId, + }: { + dagId: string; + dagRunId: string; + limit?: number; + mapIndex: number; + offset?: number; + orderBy?: string; + taskId: string; + }, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useSuspenseQuery({ + queryKey: Common.UseTaskInstanceServiceGetMappedTaskInstanceTriesKeyFn( + { dagId, dagRunId, limit, mapIndex, offset, orderBy, taskId }, + queryKey + ), + queryFn: () => + TaskInstanceService.getMappedTaskInstanceTries({ + dagId, + dagRunId, + limit, + mapIndex, + offset, + orderBy, + taskId, + }) as TData, + ...options, + }); +export const useTaskInstanceServiceGetMappedTaskInstanceTryDetailsSuspense = < + TData = Common.TaskInstanceServiceGetMappedTaskInstanceTryDetailsDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + dagId, + dagRunId, + mapIndex, + taskId, + taskTryNumber, + }: { + dagId: string; + dagRunId: string; + mapIndex: number; + taskId: string; + taskTryNumber: number; + }, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useSuspenseQuery({ + queryKey: Common.UseTaskInstanceServiceGetMappedTaskInstanceTryDetailsKeyFn( + { dagId, dagRunId, mapIndex, taskId, taskTryNumber }, + queryKey + ), + queryFn: () => + TaskInstanceService.getMappedTaskInstanceTryDetails({ + dagId, + dagRunId, + mapIndex, + taskId, + taskTryNumber, + }) as TData, + ...options, + }); +export const useTaskInstanceServiceGetExtraLinksSuspense = < + TData = Common.TaskInstanceServiceGetExtraLinksDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + dagId, + dagRunId, + taskId, + }: { + dagId: string; + dagRunId: string; + taskId: string; + }, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useSuspenseQuery({ + queryKey: Common.UseTaskInstanceServiceGetExtraLinksKeyFn( + { dagId, dagRunId, taskId }, + queryKey + ), + queryFn: () => + TaskInstanceService.getExtraLinks({ dagId, dagRunId, taskId }) as TData, + ...options, + }); +export const useTaskInstanceServiceGetLogSuspense = < + TData = Common.TaskInstanceServiceGetLogDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + dagId, + dagRunId, + fullContent, + mapIndex, + taskId, + taskTryNumber, + token, + }: { + dagId: string; + dagRunId: string; + fullContent?: boolean; + mapIndex?: number; + taskId: string; + taskTryNumber: number; + token?: string; + }, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useSuspenseQuery({ + queryKey: Common.UseTaskInstanceServiceGetLogKeyFn( + { dagId, dagRunId, fullContent, mapIndex, taskId, taskTryNumber, token }, + queryKey + ), + queryFn: () => + TaskInstanceService.getLog({ + dagId, + dagRunId, + fullContent, + mapIndex, + taskId, + taskTryNumber, + token, + }) as TData, + ...options, + }); +export const useDagRunServiceGetDagRunsSuspense = < + TData = Common.DagRunServiceGetDagRunsDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + dagId, + endDateGte, + endDateLte, + executionDateGte, + executionDateLte, + fields, + limit, + offset, + orderBy, + startDateGte, + startDateLte, + state, + updatedAtGte, + updatedAtLte, + }: { + dagId: string; + endDateGte?: string; + endDateLte?: string; + executionDateGte?: string; + executionDateLte?: string; + fields?: string[]; + limit?: number; + offset?: number; + orderBy?: string; + startDateGte?: string; + startDateLte?: string; + state?: string[]; + updatedAtGte?: string; + updatedAtLte?: string; + }, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useSuspenseQuery({ + queryKey: Common.UseDagRunServiceGetDagRunsKeyFn( + { + dagId, + endDateGte, + endDateLte, + executionDateGte, + executionDateLte, + fields, + limit, + offset, + orderBy, + startDateGte, + startDateLte, + state, + updatedAtGte, + updatedAtLte, + }, + queryKey + ), + queryFn: () => + DagRunService.getDagRuns({ + dagId, + endDateGte, + endDateLte, + executionDateGte, + executionDateLte, + fields, + limit, + offset, + orderBy, + startDateGte, + startDateLte, + state, + updatedAtGte, + updatedAtLte, + }) as TData, + ...options, + }); +export const useDagRunServiceGetDagRunSuspense = < + TData = Common.DagRunServiceGetDagRunDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + dagId, + dagRunId, + fields, + }: { + dagId: string; + dagRunId: string; + fields?: string[]; + }, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useSuspenseQuery({ + queryKey: Common.UseDagRunServiceGetDagRunKeyFn( + { dagId, dagRunId, fields }, + queryKey + ), + queryFn: () => + DagRunService.getDagRun({ dagId, dagRunId, fields }) as TData, + ...options, + }); +export const useDagRunServiceGetUpstreamDatasetEventsSuspense = < + TData = Common.DagRunServiceGetUpstreamDatasetEventsDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + dagId, + dagRunId, + }: { + dagId: string; + dagRunId: string; + }, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useSuspenseQuery({ + queryKey: Common.UseDagRunServiceGetUpstreamDatasetEventsKeyFn( + { dagId, dagRunId }, + queryKey + ), + queryFn: () => + DagRunService.getUpstreamDatasetEvents({ dagId, dagRunId }) as TData, + ...options, + }); +export const useDatasetServiceGetUpstreamDatasetEventsSuspense = < + TData = Common.DatasetServiceGetUpstreamDatasetEventsDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + dagId, + dagRunId, + }: { + dagId: string; + dagRunId: string; + }, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useSuspenseQuery({ + queryKey: Common.UseDatasetServiceGetUpstreamDatasetEventsKeyFn( + { dagId, dagRunId }, + queryKey + ), + queryFn: () => + DatasetService.getUpstreamDatasetEvents({ dagId, dagRunId }) as TData, + ...options, + }); +export const useDatasetServiceGetDagDatasetQueuedEventSuspense = < + TData = Common.DatasetServiceGetDagDatasetQueuedEventDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + before, + dagId, + uri, + }: { + before?: string; + dagId: string; + uri: string; + }, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useSuspenseQuery({ + queryKey: Common.UseDatasetServiceGetDagDatasetQueuedEventKeyFn( + { before, dagId, uri }, + queryKey + ), + queryFn: () => + DatasetService.getDagDatasetQueuedEvent({ before, dagId, uri }) as TData, + ...options, + }); +export const useDatasetServiceGetDagDatasetQueuedEventsSuspense = < + TData = Common.DatasetServiceGetDagDatasetQueuedEventsDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + before, + dagId, + }: { + before?: string; + dagId: string; + }, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useSuspenseQuery({ + queryKey: Common.UseDatasetServiceGetDagDatasetQueuedEventsKeyFn( + { before, dagId }, + queryKey + ), + queryFn: () => + DatasetService.getDagDatasetQueuedEvents({ before, dagId }) as TData, + ...options, + }); +export const useDatasetServiceGetDatasetQueuedEventsSuspense = < + TData = Common.DatasetServiceGetDatasetQueuedEventsDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + before, + uri, + }: { + before?: string; + uri: string; + }, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useSuspenseQuery({ + queryKey: Common.UseDatasetServiceGetDatasetQueuedEventsKeyFn( + { before, uri }, + queryKey + ), + queryFn: () => + DatasetService.getDatasetQueuedEvents({ before, uri }) as TData, + ...options, + }); +export const useDatasetServiceGetDatasetsSuspense = < + TData = Common.DatasetServiceGetDatasetsDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + dagIds, + limit, + offset, + orderBy, + uriPattern, + }: { + dagIds?: string; + limit?: number; + offset?: number; + orderBy?: string; + uriPattern?: string; + } = {}, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useSuspenseQuery({ + queryKey: Common.UseDatasetServiceGetDatasetsKeyFn( + { dagIds, limit, offset, orderBy, uriPattern }, + queryKey + ), + queryFn: () => + DatasetService.getDatasets({ + dagIds, + limit, + offset, + orderBy, + uriPattern, + }) as TData, + ...options, + }); +export const useDatasetServiceGetDatasetSuspense = < + TData = Common.DatasetServiceGetDatasetDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + uri, + }: { + uri: string; + }, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useSuspenseQuery({ + queryKey: Common.UseDatasetServiceGetDatasetKeyFn({ uri }, queryKey), + queryFn: () => DatasetService.getDataset({ uri }) as TData, + ...options, + }); +export const useDatasetServiceGetDatasetEventsSuspense = < + TData = Common.DatasetServiceGetDatasetEventsDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + datasetId, + limit, + offset, + orderBy, + sourceDagId, + sourceMapIndex, + sourceRunId, + sourceTaskId, + }: { + datasetId?: number; + limit?: number; + offset?: number; + orderBy?: string; + sourceDagId?: string; + sourceMapIndex?: number; + sourceRunId?: string; + sourceTaskId?: string; + } = {}, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useSuspenseQuery({ + queryKey: Common.UseDatasetServiceGetDatasetEventsKeyFn( + { + datasetId, + limit, + offset, + orderBy, + sourceDagId, + sourceMapIndex, + sourceRunId, + sourceTaskId, + }, + queryKey + ), + queryFn: () => + DatasetService.getDatasetEvents({ + datasetId, + limit, + offset, + orderBy, + sourceDagId, + sourceMapIndex, + sourceRunId, + sourceTaskId, + }) as TData, + ...options, + }); +export const useEventLogServiceGetEventLogsSuspense = < + TData = Common.EventLogServiceGetEventLogsDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + after, + before, + dagId, + event, + excludedEvents, + includedEvents, + limit, + mapIndex, + offset, + orderBy, + owner, + runId, + taskId, + tryNumber, + }: { + after?: string; + before?: string; + dagId?: string; + event?: string; + excludedEvents?: string; + includedEvents?: string; + limit?: number; + mapIndex?: number; + offset?: number; + orderBy?: string; + owner?: string; + runId?: string; + taskId?: string; + tryNumber?: number; + } = {}, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useSuspenseQuery({ + queryKey: Common.UseEventLogServiceGetEventLogsKeyFn( + { + after, + before, + dagId, + event, + excludedEvents, + includedEvents, + limit, + mapIndex, + offset, + orderBy, + owner, + runId, + taskId, + tryNumber, + }, + queryKey + ), + queryFn: () => + EventLogService.getEventLogs({ + after, + before, + dagId, + event, + excludedEvents, + includedEvents, + limit, + mapIndex, + offset, + orderBy, + owner, + runId, + taskId, + tryNumber, + }) as TData, + ...options, + }); +export const useEventLogServiceGetEventLogSuspense = < + TData = Common.EventLogServiceGetEventLogDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + eventLogId, + }: { + eventLogId: number; + }, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useSuspenseQuery({ + queryKey: Common.UseEventLogServiceGetEventLogKeyFn( + { eventLogId }, + queryKey + ), + queryFn: () => EventLogService.getEventLog({ eventLogId }) as TData, + ...options, + }); +export const useImportErrorServiceGetImportErrorsSuspense = < + TData = Common.ImportErrorServiceGetImportErrorsDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + limit, + offset, + orderBy, + }: { + limit?: number; + offset?: number; + orderBy?: string; + } = {}, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useSuspenseQuery({ + queryKey: Common.UseImportErrorServiceGetImportErrorsKeyFn( + { limit, offset, orderBy }, + queryKey + ), + queryFn: () => + ImportErrorService.getImportErrors({ limit, offset, orderBy }) as TData, + ...options, + }); +export const useImportErrorServiceGetImportErrorSuspense = < + TData = Common.ImportErrorServiceGetImportErrorDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + importErrorId, + }: { + importErrorId: number; + }, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useSuspenseQuery({ + queryKey: Common.UseImportErrorServiceGetImportErrorKeyFn( + { importErrorId }, + queryKey + ), + queryFn: () => + ImportErrorService.getImportError({ importErrorId }) as TData, + ...options, + }); +export const usePoolServiceGetPoolsSuspense = < + TData = Common.PoolServiceGetPoolsDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + limit, + offset, + orderBy, + }: { + limit?: number; + offset?: number; + orderBy?: string; + } = {}, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useSuspenseQuery({ + queryKey: Common.UsePoolServiceGetPoolsKeyFn( + { limit, offset, orderBy }, + queryKey + ), + queryFn: () => PoolService.getPools({ limit, offset, orderBy }) as TData, + ...options, + }); +export const usePoolServiceGetPoolSuspense = < + TData = Common.PoolServiceGetPoolDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + poolName, + }: { + poolName: string; + }, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useSuspenseQuery({ + queryKey: Common.UsePoolServiceGetPoolKeyFn({ poolName }, queryKey), + queryFn: () => PoolService.getPool({ poolName }) as TData, + ...options, + }); +export const useProviderServiceGetProvidersSuspense = < + TData = Common.ProviderServiceGetProvidersDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useSuspenseQuery({ + queryKey: Common.UseProviderServiceGetProvidersKeyFn(queryKey), + queryFn: () => ProviderService.getProviders() as TData, + ...options, + }); +export const useVariableServiceGetVariablesSuspense = < + TData = Common.VariableServiceGetVariablesDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + limit, + offset, + orderBy, + }: { + limit?: number; + offset?: number; + orderBy?: string; + } = {}, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useSuspenseQuery({ + queryKey: Common.UseVariableServiceGetVariablesKeyFn( + { limit, offset, orderBy }, + queryKey + ), + queryFn: () => + VariableService.getVariables({ limit, offset, orderBy }) as TData, + ...options, + }); +export const useVariableServiceGetVariableSuspense = < + TData = Common.VariableServiceGetVariableDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + variableKey, + }: { + variableKey: string; + }, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useSuspenseQuery({ + queryKey: Common.UseVariableServiceGetVariableKeyFn( + { variableKey }, + queryKey + ), + queryFn: () => VariableService.getVariable({ variableKey }) as TData, + ...options, + }); +export const useXcomServiceGetXcomEntriesSuspense = < + TData = Common.XcomServiceGetXcomEntriesDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + dagId, + dagRunId, + limit, + mapIndex, + offset, + taskId, + xcomKey, + }: { + dagId: string; + dagRunId: string; + limit?: number; + mapIndex?: number; + offset?: number; + taskId: string; + xcomKey?: string; + }, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useSuspenseQuery({ + queryKey: Common.UseXcomServiceGetXcomEntriesKeyFn( + { dagId, dagRunId, limit, mapIndex, offset, taskId, xcomKey }, + queryKey + ), + queryFn: () => + XcomService.getXcomEntries({ + dagId, + dagRunId, + limit, + mapIndex, + offset, + taskId, + xcomKey, + }) as TData, + ...options, + }); +export const useXcomServiceGetXcomEntrySuspense = < + TData = Common.XcomServiceGetXcomEntryDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + dagId, + dagRunId, + deserialize, + mapIndex, + stringify, + taskId, + xcomKey, + }: { + dagId: string; + dagRunId: string; + deserialize?: boolean; + mapIndex?: number; + stringify?: boolean; + taskId: string; + xcomKey: string; + }, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useSuspenseQuery({ + queryKey: Common.UseXcomServiceGetXcomEntryKeyFn( + { dagId, dagRunId, deserialize, mapIndex, stringify, taskId, xcomKey }, + queryKey + ), + queryFn: () => + XcomService.getXcomEntry({ + dagId, + dagRunId, + deserialize, + mapIndex, + stringify, + taskId, + xcomKey, + }) as TData, + ...options, + }); +export const useDagStatsServiceGetDagStatsSuspense = < + TData = Common.DagStatsServiceGetDagStatsDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + dagIds, + }: { + dagIds: string; + }, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useSuspenseQuery({ + queryKey: Common.UseDagStatsServiceGetDagStatsKeyFn({ dagIds }, queryKey), + queryFn: () => DagStatsService.getDagStats({ dagIds }) as TData, + ...options, + }); +export const useDagWarningServiceGetDagWarningsSuspense = < + TData = Common.DagWarningServiceGetDagWarningsDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + dagId, + limit, + offset, + orderBy, + warningType, + }: { + dagId?: string; + limit?: number; + offset?: number; + orderBy?: string; + warningType?: string; + } = {}, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useSuspenseQuery({ + queryKey: Common.UseDagWarningServiceGetDagWarningsKeyFn( + { dagId, limit, offset, orderBy, warningType }, + queryKey + ), + queryFn: () => + DagWarningService.getDagWarnings({ + dagId, + limit, + offset, + orderBy, + warningType, + }) as TData, + ...options, + }); +export const useConfigServiceGetConfigSuspense = < + TData = Common.ConfigServiceGetConfigDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + section, + }: { + section?: string; + } = {}, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useSuspenseQuery({ + queryKey: Common.UseConfigServiceGetConfigKeyFn({ section }, queryKey), + queryFn: () => ConfigService.getConfig({ section }) as TData, + ...options, + }); +export const useConfigServiceGetValueSuspense = < + TData = Common.ConfigServiceGetValueDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + option, + section, + }: { + option: string; + section: string; + }, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useSuspenseQuery({ + queryKey: Common.UseConfigServiceGetValueKeyFn( + { option, section }, + queryKey + ), + queryFn: () => ConfigService.getValue({ option, section }) as TData, + ...options, + }); +export const useMonitoringServiceGetHealthSuspense = < + TData = Common.MonitoringServiceGetHealthDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useSuspenseQuery({ + queryKey: Common.UseMonitoringServiceGetHealthKeyFn(queryKey), + queryFn: () => MonitoringService.getHealth() as TData, + ...options, + }); +export const useMonitoringServiceGetVersionSuspense = < + TData = Common.MonitoringServiceGetVersionDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useSuspenseQuery({ + queryKey: Common.UseMonitoringServiceGetVersionKeyFn(queryKey), + queryFn: () => MonitoringService.getVersion() as TData, + ...options, + }); +export const usePluginServiceGetPluginsSuspense = < + TData = Common.PluginServiceGetPluginsDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + limit, + offset, + }: { + limit?: number; + offset?: number; + } = {}, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useSuspenseQuery({ + queryKey: Common.UsePluginServiceGetPluginsKeyFn( + { limit, offset }, + queryKey + ), + queryFn: () => PluginService.getPlugins({ limit, offset }) as TData, + ...options, + }); +export const useRoleServiceGetRolesSuspense = < + TData = Common.RoleServiceGetRolesDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + limit, + offset, + orderBy, + }: { + limit?: number; + offset?: number; + orderBy?: string; + } = {}, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useSuspenseQuery({ + queryKey: Common.UseRoleServiceGetRolesKeyFn( + { limit, offset, orderBy }, + queryKey + ), + queryFn: () => RoleService.getRoles({ limit, offset, orderBy }) as TData, + ...options, + }); +export const useRoleServiceGetRoleSuspense = < + TData = Common.RoleServiceGetRoleDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + roleName, + }: { + roleName: string; + }, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useSuspenseQuery({ + queryKey: Common.UseRoleServiceGetRoleKeyFn({ roleName }, queryKey), + queryFn: () => RoleService.getRole({ roleName }) as TData, + ...options, + }); +export const usePermissionServiceGetPermissionsSuspense = < + TData = Common.PermissionServiceGetPermissionsDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + limit, + offset, + }: { + limit?: number; + offset?: number; + } = {}, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useSuspenseQuery({ + queryKey: Common.UsePermissionServiceGetPermissionsKeyFn( + { limit, offset }, + queryKey + ), + queryFn: () => PermissionService.getPermissions({ limit, offset }) as TData, + ...options, + }); +export const useUserServiceGetUsersSuspense = < + TData = Common.UserServiceGetUsersDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + limit, + offset, + orderBy, + }: { + limit?: number; + offset?: number; + orderBy?: string; + } = {}, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useSuspenseQuery({ + queryKey: Common.UseUserServiceGetUsersKeyFn( + { limit, offset, orderBy }, + queryKey + ), + queryFn: () => UserService.getUsers({ limit, offset, orderBy }) as TData, + ...options, + }); +export const useUserServiceGetUserSuspense = < + TData = Common.UserServiceGetUserDefaultResponse, + TError = unknown, + TQueryKey extends Array = unknown[], +>( + { + username, + }: { + username: string; + }, + queryKey?: TQueryKey, + options?: Omit, "queryKey" | "queryFn"> +) => + useSuspenseQuery({ + queryKey: Common.UseUserServiceGetUserKeyFn({ username }, queryKey), + queryFn: () => UserService.getUser({ username }) as TData, + ...options, + }); diff --git a/airflow/ui/openapi-gen/requests/core/ApiError.ts b/airflow/ui/openapi-gen/requests/core/ApiError.ts new file mode 100644 index 0000000000000..47ac0058c3b2b --- /dev/null +++ b/airflow/ui/openapi-gen/requests/core/ApiError.ts @@ -0,0 +1,25 @@ +import type { ApiRequestOptions } from "./ApiRequestOptions"; +import type { ApiResult } from "./ApiResult"; + +export class ApiError extends Error { + public readonly url: string; + public readonly status: number; + public readonly statusText: string; + public readonly body: unknown; + public readonly request: ApiRequestOptions; + + constructor( + request: ApiRequestOptions, + response: ApiResult, + message: string + ) { + super(message); + + this.name = "ApiError"; + this.url = response.url; + this.status = response.status; + this.statusText = response.statusText; + this.body = response.body; + this.request = request; + } +} diff --git a/airflow/ui/openapi-gen/requests/core/ApiRequestOptions.ts b/airflow/ui/openapi-gen/requests/core/ApiRequestOptions.ts new file mode 100644 index 0000000000000..45e204fbca78c --- /dev/null +++ b/airflow/ui/openapi-gen/requests/core/ApiRequestOptions.ts @@ -0,0 +1,21 @@ +export type ApiRequestOptions = { + readonly body?: any; + readonly cookies?: Record; + readonly errors?: Record; + readonly formData?: Record | any[] | Blob | File; + readonly headers?: Record; + readonly mediaType?: string; + readonly method: + | "DELETE" + | "GET" + | "HEAD" + | "OPTIONS" + | "PATCH" + | "POST" + | "PUT"; + readonly path?: Record; + readonly query?: Record; + readonly responseHeader?: string; + readonly responseTransformer?: (data: unknown) => Promise; + readonly url: string; +}; diff --git a/airflow/ui/openapi-gen/requests/core/ApiResult.ts b/airflow/ui/openapi-gen/requests/core/ApiResult.ts new file mode 100644 index 0000000000000..05040ba816733 --- /dev/null +++ b/airflow/ui/openapi-gen/requests/core/ApiResult.ts @@ -0,0 +1,7 @@ +export type ApiResult = { + readonly body: TData; + readonly ok: boolean; + readonly status: number; + readonly statusText: string; + readonly url: string; +}; diff --git a/airflow/ui/openapi-gen/requests/core/CancelablePromise.ts b/airflow/ui/openapi-gen/requests/core/CancelablePromise.ts new file mode 100644 index 0000000000000..41e3d3cea9f09 --- /dev/null +++ b/airflow/ui/openapi-gen/requests/core/CancelablePromise.ts @@ -0,0 +1,126 @@ +export class CancelError extends Error { + constructor(message: string) { + super(message); + this.name = "CancelError"; + } + + public get isCancelled(): boolean { + return true; + } +} + +export interface OnCancel { + readonly isResolved: boolean; + readonly isRejected: boolean; + readonly isCancelled: boolean; + + (cancelHandler: () => void): void; +} + +export class CancelablePromise implements Promise { + private _isResolved: boolean; + private _isRejected: boolean; + private _isCancelled: boolean; + readonly cancelHandlers: (() => void)[]; + readonly promise: Promise; + private _resolve?: (value: T | PromiseLike) => void; + private _reject?: (reason?: unknown) => void; + + constructor( + executor: ( + resolve: (value: T | PromiseLike) => void, + reject: (reason?: unknown) => void, + onCancel: OnCancel + ) => void + ) { + this._isResolved = false; + this._isRejected = false; + this._isCancelled = false; + this.cancelHandlers = []; + this.promise = new Promise((resolve, reject) => { + this._resolve = resolve; + this._reject = reject; + + const onResolve = (value: T | PromiseLike): void => { + if (this._isResolved || this._isRejected || this._isCancelled) { + return; + } + this._isResolved = true; + if (this._resolve) this._resolve(value); + }; + + const onReject = (reason?: unknown): void => { + if (this._isResolved || this._isRejected || this._isCancelled) { + return; + } + this._isRejected = true; + if (this._reject) this._reject(reason); + }; + + const onCancel = (cancelHandler: () => void): void => { + if (this._isResolved || this._isRejected || this._isCancelled) { + return; + } + this.cancelHandlers.push(cancelHandler); + }; + + Object.defineProperty(onCancel, "isResolved", { + get: (): boolean => this._isResolved, + }); + + Object.defineProperty(onCancel, "isRejected", { + get: (): boolean => this._isRejected, + }); + + Object.defineProperty(onCancel, "isCancelled", { + get: (): boolean => this._isCancelled, + }); + + return executor(onResolve, onReject, onCancel as OnCancel); + }); + } + + get [Symbol.toStringTag]() { + return "Cancellable Promise"; + } + + public then( + onFulfilled?: ((value: T) => TResult1 | PromiseLike) | null, + onRejected?: ((reason: unknown) => TResult2 | PromiseLike) | null + ): Promise { + return this.promise.then(onFulfilled, onRejected); + } + + public catch( + onRejected?: ((reason: unknown) => TResult | PromiseLike) | null + ): Promise { + return this.promise.catch(onRejected); + } + + public finally(onFinally?: (() => void) | null): Promise { + return this.promise.finally(onFinally); + } + + public cancel(): void { + if (this._isResolved || this._isRejected || this._isCancelled) { + return; + } + this._isCancelled = true; + if (this.cancelHandlers.length) { + try { + for (const cancelHandler of this.cancelHandlers) { + cancelHandler(); + } + } catch (error) { + console.warn("Cancellation threw an error", error); + return; + } + } + this.cancelHandlers.length = 0; + if (this._reject) this._reject(new CancelError("Request aborted")); + } + + public get isCancelled(): boolean { + return this._isCancelled; + } +} diff --git a/airflow/ui/openapi-gen/requests/core/OpenAPI.ts b/airflow/ui/openapi-gen/requests/core/OpenAPI.ts new file mode 100644 index 0000000000000..8edc94e4c988f --- /dev/null +++ b/airflow/ui/openapi-gen/requests/core/OpenAPI.ts @@ -0,0 +1,57 @@ +import type { AxiosRequestConfig, AxiosResponse } from "axios"; +import type { ApiRequestOptions } from "./ApiRequestOptions"; + +type Headers = Record; +type Middleware = (value: T) => T | Promise; +type Resolver = (options: ApiRequestOptions) => Promise; + +export class Interceptors { + _fns: Middleware[]; + + constructor() { + this._fns = []; + } + + eject(fn: Middleware): void { + const index = this._fns.indexOf(fn); + if (index !== -1) { + this._fns = [...this._fns.slice(0, index), ...this._fns.slice(index + 1)]; + } + } + + use(fn: Middleware): void { + this._fns = [...this._fns, fn]; + } +} + +export type OpenAPIConfig = { + BASE: string; + CREDENTIALS: "include" | "omit" | "same-origin"; + ENCODE_PATH?: ((path: string) => string) | undefined; + HEADERS?: Headers | Resolver | undefined; + PASSWORD?: string | Resolver | undefined; + TOKEN?: string | Resolver | undefined; + USERNAME?: string | Resolver | undefined; + VERSION: string; + WITH_CREDENTIALS: boolean; + interceptors: { + request: Interceptors; + response: Interceptors; + }; +}; + +export const OpenAPI: OpenAPIConfig = { + BASE: "/api/v1", + CREDENTIALS: "include", + ENCODE_PATH: undefined, + HEADERS: undefined, + PASSWORD: undefined, + TOKEN: undefined, + USERNAME: undefined, + VERSION: "2.9.0.dev0", + WITH_CREDENTIALS: false, + interceptors: { + request: new Interceptors(), + response: new Interceptors(), + }, +}; diff --git a/airflow/ui/openapi-gen/requests/core/request.ts b/airflow/ui/openapi-gen/requests/core/request.ts new file mode 100644 index 0000000000000..e54943e379dea --- /dev/null +++ b/airflow/ui/openapi-gen/requests/core/request.ts @@ -0,0 +1,387 @@ +import axios from "axios"; +import type { + AxiosError, + AxiosRequestConfig, + AxiosResponse, + AxiosInstance, +} from "axios"; + +import { ApiError } from "./ApiError"; +import type { ApiRequestOptions } from "./ApiRequestOptions"; +import type { ApiResult } from "./ApiResult"; +import { CancelablePromise } from "./CancelablePromise"; +import type { OnCancel } from "./CancelablePromise"; +import type { OpenAPIConfig } from "./OpenAPI"; + +export const isString = (value: unknown): value is string => { + return typeof value === "string"; +}; + +export const isStringWithValue = (value: unknown): value is string => { + return isString(value) && value !== ""; +}; + +export const isBlob = (value: any): value is Blob => { + return value instanceof Blob; +}; + +export const isFormData = (value: unknown): value is FormData => { + return value instanceof FormData; +}; + +export const isSuccess = (status: number): boolean => { + return status >= 200 && status < 300; +}; + +export const base64 = (str: string): string => { + try { + return btoa(str); + } catch (err) { + // @ts-ignore + return Buffer.from(str).toString("base64"); + } +}; + +export const getQueryString = (params: Record): string => { + const qs: string[] = []; + + const append = (key: string, value: unknown) => { + qs.push(`${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`); + }; + + const encodePair = (key: string, value: unknown) => { + if (value === undefined || value === null) { + return; + } + + if (value instanceof Date) { + append(key, value.toISOString()); + } else if (Array.isArray(value)) { + value.forEach((v) => encodePair(key, v)); + } else if (typeof value === "object") { + Object.entries(value).forEach(([k, v]) => encodePair(`${key}[${k}]`, v)); + } else { + append(key, value); + } + }; + + Object.entries(params).forEach(([key, value]) => encodePair(key, value)); + + return qs.length ? `?${qs.join("&")}` : ""; +}; + +const getUrl = (config: OpenAPIConfig, options: ApiRequestOptions): string => { + const encoder = config.ENCODE_PATH || encodeURI; + + const path = options.url + .replace("{api-version}", config.VERSION) + .replace(/{(.*?)}/g, (substring: string, group: string) => { + if (options.path?.hasOwnProperty(group)) { + return encoder(String(options.path[group])); + } + return substring; + }); + + const url = config.BASE + path; + return options.query ? url + getQueryString(options.query) : url; +}; + +export const getFormData = ( + options: ApiRequestOptions +): FormData | undefined => { + if (options.formData) { + const formData = new FormData(); + + const process = (key: string, value: unknown) => { + if (isString(value) || isBlob(value)) { + formData.append(key, value); + } else { + formData.append(key, JSON.stringify(value)); + } + }; + + Object.entries(options.formData) + .filter(([, value]) => value !== undefined && value !== null) + .forEach(([key, value]) => { + if (Array.isArray(value)) { + value.forEach((v) => process(key, v)); + } else { + process(key, value); + } + }); + + return formData; + } + return undefined; +}; + +type Resolver = (options: ApiRequestOptions) => Promise; + +export const resolve = async ( + options: ApiRequestOptions, + resolver?: T | Resolver +): Promise => { + if (typeof resolver === "function") { + return (resolver as Resolver)(options); + } + return resolver; +}; + +export const getHeaders = async ( + config: OpenAPIConfig, + options: ApiRequestOptions +): Promise> => { + const [token, username, password, additionalHeaders] = await Promise.all([ + // @ts-ignore + resolve(options, config.TOKEN), + // @ts-ignore + resolve(options, config.USERNAME), + // @ts-ignore + resolve(options, config.PASSWORD), + // @ts-ignore + resolve(options, config.HEADERS), + ]); + + const headers = Object.entries({ + Accept: "application/json", + ...additionalHeaders, + ...options.headers, + }) + .filter(([, value]) => value !== undefined && value !== null) + .reduce( + (headers, [key, value]) => ({ + ...headers, + [key]: String(value), + }), + {} as Record + ); + + if (isStringWithValue(token)) { + headers["Authorization"] = `Bearer ${token}`; + } + + if (isStringWithValue(username) && isStringWithValue(password)) { + const credentials = base64(`${username}:${password}`); + headers["Authorization"] = `Basic ${credentials}`; + } + + if (options.body !== undefined) { + if (options.mediaType) { + headers["Content-Type"] = options.mediaType; + } else if (isBlob(options.body)) { + headers["Content-Type"] = options.body.type || "application/octet-stream"; + } else if (isString(options.body)) { + headers["Content-Type"] = "text/plain"; + } else if (!isFormData(options.body)) { + headers["Content-Type"] = "application/json"; + } + } else if (options.formData !== undefined) { + if (options.mediaType) { + headers["Content-Type"] = options.mediaType; + } + } + + return headers; +}; + +export const getRequestBody = (options: ApiRequestOptions): unknown => { + if (options.body) { + return options.body; + } + return undefined; +}; + +export const sendRequest = async ( + config: OpenAPIConfig, + options: ApiRequestOptions, + url: string, + body: unknown, + formData: FormData | undefined, + headers: Record, + onCancel: OnCancel, + axiosClient: AxiosInstance +): Promise> => { + const controller = new AbortController(); + + let requestConfig: AxiosRequestConfig = { + data: body ?? formData, + headers, + method: options.method, + signal: controller.signal, + url, + withCredentials: config.WITH_CREDENTIALS, + }; + + onCancel(() => controller.abort()); + + for (const fn of config.interceptors.request._fns) { + requestConfig = await fn(requestConfig); + } + + try { + return await axiosClient.request(requestConfig); + } catch (error) { + const axiosError = error as AxiosError; + if (axiosError.response) { + return axiosError.response; + } + throw error; + } +}; + +export const getResponseHeader = ( + response: AxiosResponse, + responseHeader?: string +): string | undefined => { + if (responseHeader) { + const content = response.headers[responseHeader]; + if (isString(content)) { + return content; + } + } + return undefined; +}; + +export const getResponseBody = (response: AxiosResponse): unknown => { + if (response.status !== 204) { + return response.data; + } + return undefined; +}; + +export const catchErrorCodes = ( + options: ApiRequestOptions, + result: ApiResult +): void => { + const errors: Record = { + 400: "Bad Request", + 401: "Unauthorized", + 402: "Payment Required", + 403: "Forbidden", + 404: "Not Found", + 405: "Method Not Allowed", + 406: "Not Acceptable", + 407: "Proxy Authentication Required", + 408: "Request Timeout", + 409: "Conflict", + 410: "Gone", + 411: "Length Required", + 412: "Precondition Failed", + 413: "Payload Too Large", + 414: "URI Too Long", + 415: "Unsupported Media Type", + 416: "Range Not Satisfiable", + 417: "Expectation Failed", + 418: "Im a teapot", + 421: "Misdirected Request", + 422: "Unprocessable Content", + 423: "Locked", + 424: "Failed Dependency", + 425: "Too Early", + 426: "Upgrade Required", + 428: "Precondition Required", + 429: "Too Many Requests", + 431: "Request Header Fields Too Large", + 451: "Unavailable For Legal Reasons", + 500: "Internal Server Error", + 501: "Not Implemented", + 502: "Bad Gateway", + 503: "Service Unavailable", + 504: "Gateway Timeout", + 505: "HTTP Version Not Supported", + 506: "Variant Also Negotiates", + 507: "Insufficient Storage", + 508: "Loop Detected", + 510: "Not Extended", + 511: "Network Authentication Required", + ...options.errors, + }; + + const error = errors[result.status]; + if (error) { + throw new ApiError(options, result, error); + } + + if (!result.ok) { + const errorStatus = result.status ?? "unknown"; + const errorStatusText = result.statusText ?? "unknown"; + const errorBody = (() => { + try { + return JSON.stringify(result.body, null, 2); + } catch (e) { + return undefined; + } + })(); + + throw new ApiError( + options, + result, + `Generic Error: status: ${errorStatus}; status text: ${errorStatusText}; body: ${errorBody}` + ); + } +}; + +/** + * Request method + * @param config The OpenAPI configuration object + * @param options The request options from the service + * @param axiosClient The axios client instance to use + * @returns CancelablePromise + * @throws ApiError + */ +export const request = ( + config: OpenAPIConfig, + options: ApiRequestOptions, + axiosClient: AxiosInstance = axios +): CancelablePromise => { + return new CancelablePromise(async (resolve, reject, onCancel) => { + try { + const url = getUrl(config, options); + const formData = getFormData(options); + const body = getRequestBody(options); + const headers = await getHeaders(config, options); + + if (!onCancel.isCancelled) { + let response = await sendRequest( + config, + options, + url, + body, + formData, + headers, + onCancel, + axiosClient + ); + + for (const fn of config.interceptors.response._fns) { + response = await fn(response); + } + + const responseBody = getResponseBody(response); + const responseHeader = getResponseHeader( + response, + options.responseHeader + ); + + let transformedBody = responseBody; + if (options.responseTransformer && isSuccess(response.status)) { + transformedBody = await options.responseTransformer(responseBody); + } + + const result: ApiResult = { + url, + ok: isSuccess(response.status), + status: response.status, + statusText: response.statusText, + body: responseHeader ?? transformedBody, + }; + + catchErrorCodes(options, result); + + resolve(result.body); + } + } catch (error) { + reject(error); + } + }); +}; diff --git a/airflow/ui/openapi-gen/requests/index.ts b/airflow/ui/openapi-gen/requests/index.ts new file mode 100644 index 0000000000000..1a73593d0567f --- /dev/null +++ b/airflow/ui/openapi-gen/requests/index.ts @@ -0,0 +1,7 @@ +// This file is auto-generated by @hey-api/openapi-ts +export { ApiError } from "./core/ApiError"; +export { CancelablePromise, CancelError } from "./core/CancelablePromise"; +export { OpenAPI, type OpenAPIConfig } from "./core/OpenAPI"; +export * from "./schemas.gen"; +export * from "./services.gen"; +export * from "./types.gen"; diff --git a/airflow/ui/openapi-gen/requests/schemas.gen.ts b/airflow/ui/openapi-gen/requests/schemas.gen.ts new file mode 100644 index 0000000000000..9aab6fb09f320 --- /dev/null +++ b/airflow/ui/openapi-gen/requests/schemas.gen.ts @@ -0,0 +1,3244 @@ +// This file is auto-generated by @hey-api/openapi-ts + +export const $UserCollectionItem = { + description: `A user object. + +*New in version 2.1.0* +`, + type: "object", + properties: { + first_name: { + type: "string", + description: `The user's first name. + +*Changed in version 2.4.0*: The requirement for this to be non-empty was removed. +`, + }, + last_name: { + type: "string", + description: `The user's last name. + +*Changed in version 2.4.0*: The requirement for this to be non-empty was removed. +`, + }, + username: { + type: "string", + description: `The username. + +*Changed in version 2.2.0*: A minimum character length requirement ('minLength') is added. +`, + minLength: 1, + }, + email: { + type: "string", + description: `The user's email. + +*Changed in version 2.2.0*: A minimum character length requirement ('minLength') is added. +`, + minLength: 1, + }, + active: { + type: "boolean", + description: "Whether the user is active", + readOnly: true, + nullable: true, + }, + last_login: { + type: "string", + format: "datetime", + description: "The last user login", + readOnly: true, + nullable: true, + }, + login_count: { + type: "integer", + description: "The login count", + readOnly: true, + nullable: true, + }, + failed_login_count: { + type: "integer", + description: "The number of times the login failed", + readOnly: true, + nullable: true, + }, + roles: { + type: "array", + description: `User roles. + +*Changed in version 2.2.0*: Field is no longer read-only. +`, + items: { + type: "object", + properties: { + name: { + type: "string", + }, + }, + nullable: true, + }, + }, + created_on: { + type: "string", + format: "datetime", + description: "The date user was created", + readOnly: true, + nullable: true, + }, + changed_on: { + type: "string", + format: "datetime", + description: "The date user was changed", + readOnly: true, + nullable: true, + }, + }, +} as const; + +export const $User = { + type: "object", + description: `A user object with sensitive data. + +*New in version 2.1.0* +`, + allOf: [ + { + $ref: "#/components/schemas/UserCollectionItem", + }, + { + type: "object", + properties: { + password: { + type: "string", + writeOnly: true, + }, + }, + }, + ], +} as const; + +export const $UserCollection = { + type: "object", + description: `Collection of users. + +*New in version 2.1.0* +`, + allOf: [ + { + type: "object", + properties: { + users: { + type: "array", + items: { + $ref: "#/components/schemas/UserCollectionItem", + }, + }, + }, + }, + { + $ref: "#/components/schemas/CollectionInfo", + }, + ], +} as const; + +export const $ConnectionCollectionItem = { + description: `Connection collection item. +The password and extra fields are only available when retrieving a single object due to the sensitivity of this data. +`, + type: "object", + properties: { + connection_id: { + type: "string", + description: "The connection ID.", + }, + conn_type: { + type: "string", + description: "The connection type.", + }, + description: { + type: "string", + description: "The description of the connection.", + nullable: true, + }, + host: { + type: "string", + nullable: true, + description: "Host of the connection.", + }, + login: { + type: "string", + nullable: true, + description: "Login of the connection.", + }, + schema: { + type: "string", + nullable: true, + description: "Schema of the connection.", + }, + port: { + type: "integer", + nullable: true, + description: "Port of the connection.", + }, + }, +} as const; + +export const $ConnectionCollection = { + type: "object", + description: `Collection of connections. + +*Changed in version 2.1.0*: 'total_entries' field is added. +`, + allOf: [ + { + type: "object", + properties: { + connections: { + type: "array", + items: { + $ref: "#/components/schemas/ConnectionCollectionItem", + }, + }, + }, + }, + { + $ref: "#/components/schemas/CollectionInfo", + }, + ], +} as const; + +export const $Connection = { + description: "Full representation of the connection.", + allOf: [ + { + $ref: "#/components/schemas/ConnectionCollectionItem", + }, + { + type: "object", + properties: { + password: { + type: "string", + format: "password", + writeOnly: true, + description: "Password of the connection.", + }, + extra: { + type: "string", + nullable: true, + description: + "Other values that cannot be put into another field, e.g. RSA keys.", + }, + }, + }, + ], +} as const; + +export const $ConnectionTest = { + description: `Connection test results. + +*New in version 2.2.0* +`, + type: "object", + properties: { + status: { + type: "boolean", + description: "The status of the request.", + }, + message: { + type: "string", + description: "The success or failure message of the request.", + }, + }, +} as const; + +export const $DAG = { + type: "object", + description: "DAG", + properties: { + dag_id: { + type: "string", + readOnly: true, + description: "The ID of the DAG.", + }, + dag_display_name: { + type: "string", + readOnly: true, + description: `Human centric display text for the DAG. + +*New in version 2.9.0* +`, + }, + is_paused: { + type: "boolean", + nullable: true, + description: "Whether the DAG is paused.", + }, + is_active: { + description: `Whether the DAG is currently seen by the scheduler(s). + +*New in version 2.1.1* + +*Changed in version 2.2.0*: Field is read-only. +`, + nullable: true, + readOnly: true, + type: "boolean", + }, + last_parsed_time: { + type: "string", + format: "date-time", + readOnly: true, + nullable: true, + description: `The last time the DAG was parsed. + +*New in version 2.3.0* +`, + }, + last_pickled: { + type: "string", + format: "date-time", + readOnly: true, + nullable: true, + description: `The last time the DAG was pickled. + +*New in version 2.3.0* +`, + }, + last_expired: { + type: "string", + format: "date-time", + readOnly: true, + nullable: true, + description: `Time when the DAG last received a refresh signal +(e.g. the DAG's "refresh" button was clicked in the web UI) + +*New in version 2.3.0* +`, + }, + scheduler_lock: { + type: "boolean", + readOnly: true, + nullable: true, + description: `Whether (one of) the scheduler is scheduling this DAG at the moment + +*New in version 2.3.0* +`, + }, + pickle_id: { + type: "string", + readOnly: true, + nullable: true, + description: `Foreign key to the latest pickle_id + +*New in version 2.3.0* +`, + }, + default_view: { + type: "string", + nullable: true, + readOnly: true, + description: `Default view of the DAG inside the webserver + +*New in version 2.3.0* +`, + }, + fileloc: { + description: "The absolute path to the file.", + type: "string", + readOnly: true, + }, + file_token: { + type: "string", + readOnly: true, + description: `The key containing the encrypted path to the file. Encryption and decryption take place only on the server. This prevents the client from reading an non-DAG file. This also ensures API extensibility, because the format of encrypted data may change. +`, + }, + owners: { + type: "array", + items: { + type: "string", + }, + readOnly: true, + }, + description: { + type: "string", + readOnly: true, + nullable: true, + description: `User-provided DAG description, which can consist of several sentences or paragraphs that describe DAG contents. +`, + }, + schedule_interval: { + $ref: "#/components/schemas/ScheduleInterval", + }, + timetable_description: { + type: "string", + readOnly: true, + nullable: true, + description: `Timetable/Schedule Interval description. + +*New in version 2.3.0* +`, + }, + tags: { + description: "List of tags.", + type: "array", + nullable: true, + items: { + $ref: "#/components/schemas/Tag", + }, + readOnly: true, + }, + max_active_tasks: { + type: "integer", + nullable: true, + readOnly: true, + description: `Maximum number of active tasks that can be run on the DAG + +*New in version 2.3.0* +`, + }, + max_active_runs: { + type: "integer", + nullable: true, + readOnly: true, + description: `Maximum number of active DAG runs for the DAG + +*New in version 2.3.0* +`, + }, + has_task_concurrency_limits: { + type: "boolean", + nullable: true, + readOnly: true, + description: `Whether the DAG has task concurrency limits + +*New in version 2.3.0* +`, + }, + has_import_errors: { + type: "boolean", + nullable: true, + readOnly: true, + description: `Whether the DAG has import errors + +*New in version 2.3.0* +`, + }, + next_dagrun: { + type: "string", + format: "date-time", + readOnly: true, + nullable: true, + description: `The logical date of the next dag run. + +*New in version 2.3.0* +`, + }, + next_dagrun_data_interval_start: { + type: "string", + format: "date-time", + readOnly: true, + nullable: true, + description: `The start of the interval of the next dag run. + +*New in version 2.3.0* +`, + }, + next_dagrun_data_interval_end: { + type: "string", + format: "date-time", + readOnly: true, + nullable: true, + description: `The end of the interval of the next dag run. + +*New in version 2.3.0* +`, + }, + next_dagrun_create_after: { + type: "string", + format: "date-time", + readOnly: true, + nullable: true, + description: `Earliest time at which this \`\`next_dagrun\`\` can be created. + +*New in version 2.3.0* +`, + }, + max_consecutive_failed_dag_runs: { + type: "integer", + nullable: true, + readOnly: true, + description: `(experimental) The maximum number of consecutive DAG failures before DAG is automatically paused. + +*New in version 2.9.0* +`, + }, + }, +} as const; + +export const $DAGCollection = { + description: `Collection of DAGs. + +*Changed in version 2.1.0*: 'total_entries' field is added. +`, + type: "object", + allOf: [ + { + type: "object", + properties: { + dags: { + type: "array", + items: { + $ref: "#/components/schemas/DAG", + }, + }, + }, + }, + { + $ref: "#/components/schemas/CollectionInfo", + }, + ], +} as const; + +export const $DAGRun = { + type: "object", + properties: { + dag_run_id: { + type: "string", + nullable: true, + description: `Run ID. + +The value of this field can be set only when creating the object. If you try to modify the +field of an existing object, the request fails with an BAD_REQUEST error. + +If not provided, a value will be generated based on execution_date. + +If the specified dag_run_id is in use, the creation request fails with an ALREADY_EXISTS error. + +This together with DAG_ID are a unique key. +`, + }, + dag_id: { + type: "string", + readOnly: true, + }, + logical_date: { + type: "string", + nullable: true, + description: `The logical date (previously called execution date). This is the time or interval covered by +this DAG run, according to the DAG definition. + +The value of this field can be set only when creating the object. If you try to modify the +field of an existing object, the request fails with an BAD_REQUEST error. + +This together with DAG_ID are a unique key. + +*New in version 2.2.0* +`, + format: "date-time", + }, + execution_date: { + type: "string", + nullable: true, + description: `The execution date. This is the same as logical_date, kept for backwards compatibility. +If both this field and logical_date are provided but with different values, the request +will fail with an BAD_REQUEST error. + +*Changed in version 2.2.0*: Field becomes nullable. + +*Deprecated since version 2.2.0*: Use 'logical_date' instead. +`, + format: "date-time", + deprecated: true, + }, + start_date: { + type: "string", + format: "date-time", + description: `The start time. The time when DAG run was actually created. + +*Changed in version 2.1.3*: Field becomes nullable. +`, + readOnly: true, + nullable: true, + }, + end_date: { + type: "string", + format: "date-time", + readOnly: true, + nullable: true, + }, + data_interval_start: { + type: "string", + format: "date-time", + description: `The beginning of the interval the DAG run covers. +`, + nullable: true, + }, + data_interval_end: { + type: "string", + format: "date-time", + description: `The end of the interval the DAG run covers. +`, + nullable: true, + }, + last_scheduling_decision: { + type: "string", + format: "date-time", + readOnly: true, + nullable: true, + }, + run_type: { + type: "string", + readOnly: true, + enum: ["backfill", "manual", "scheduled", "dataset_triggered"], + }, + state: { + $ref: "#/components/schemas/DagState", + }, + external_trigger: { + type: "boolean", + readOnly: true, + }, + conf: { + type: "object", + description: `JSON object describing additional configuration parameters. + +The value of this field can be set only when creating the object. If you try to modify the +field of an existing object, the request fails with an BAD_REQUEST error. +`, + }, + note: { + type: "string", + description: `Contains manually entered notes by the user about the DagRun. + +*New in version 2.5.0* +`, + nullable: true, + }, + }, +} as const; + +export const $UpdateDagRunState = { + type: "object", + description: `Modify the state of a DAG run. + +*New in version 2.2.0* +`, + properties: { + state: { + description: "The state to set this DagRun", + type: "string", + enum: ["success", "failed", "queued"], + }, + }, +} as const; + +export const $DAGRunCollection = { + type: "object", + description: `Collection of DAG runs. + +*Changed in version 2.1.0*: 'total_entries' field is added. +`, + allOf: [ + { + type: "object", + properties: { + dag_runs: { + type: "array", + items: { + $ref: "#/components/schemas/DAGRun", + }, + }, + }, + }, + { + $ref: "#/components/schemas/CollectionInfo", + }, + ], +} as const; + +export const $DagStatsCollectionSchema = { + type: "object", + description: `Collection of Dag statistics. +`, + allOf: [ + { + type: "object", + properties: { + dags: { + type: "array", + items: { + $ref: "#/components/schemas/DagStatsCollectionItem", + }, + }, + }, + }, + { + $ref: "#/components/schemas/CollectionInfo", + }, + ], +} as const; + +export const $DagStatsCollectionItem = { + description: "DagStats entry collection item.", + type: "object", + properties: { + dag_id: { + type: "string", + description: "The DAG ID.", + }, + stats: { + type: "array", + nullable: true, + items: { + $ref: "#/components/schemas/DagStatsStateCollectionItem", + }, + }, + }, +} as const; + +export const $DagStatsStateCollectionItem = { + description: "DagStatsState entry collection item.", + type: "object", + properties: { + state: { + type: "string", + description: "The DAG state.", + }, + count: { + type: "integer", + description: "The DAG state count.", + }, + }, +} as const; + +export const $DagWarning = { + type: "object", + properties: { + dag_id: { + type: "string", + readOnly: true, + description: "The dag_id.", + }, + warning_type: { + type: "string", + readOnly: true, + description: "The warning type for the dag warning.", + }, + message: { + type: "string", + readOnly: true, + description: "The message for the dag warning.", + }, + timestamp: { + type: "string", + format: "datetime", + readOnly: true, + description: "The time when this warning was logged.", + }, + }, +} as const; + +export const $DagWarningCollection = { + type: "object", + description: `Collection of DAG warnings. +`, + allOf: [ + { + type: "object", + properties: { + import_errors: { + type: "array", + items: { + $ref: "#/components/schemas/DagWarning", + }, + }, + }, + }, + { + $ref: "#/components/schemas/CollectionInfo", + }, + ], +} as const; + +export const $SetDagRunNote = { + type: "object", + properties: { + note: { + description: "Custom notes left by users for this Dag Run.", + type: "string", + }, + }, +} as const; + +export const $EventLog = { + type: "object", + description: "Log of user operations via CLI or Web UI.", + properties: { + event_log_id: { + description: "The event log ID", + type: "integer", + readOnly: true, + }, + when: { + description: "The time when these events happened.", + format: "date-time", + type: "string", + readOnly: true, + }, + dag_id: { + description: "The DAG ID", + type: "string", + readOnly: true, + nullable: true, + }, + task_id: { + description: "The Task ID", + type: "string", + readOnly: true, + nullable: true, + }, + run_id: { + description: "The DAG Run ID", + type: "string", + readOnly: true, + nullable: true, + }, + map_index: { + description: "The Map Index", + type: "integer", + readOnly: true, + nullable: true, + }, + try_number: { + description: "The Try Number", + type: "integer", + readOnly: true, + nullable: true, + }, + event: { + description: "A key describing the type of event.", + type: "string", + readOnly: true, + }, + execution_date: { + description: `When the event was dispatched for an object having execution_date, the value of this field. +`, + format: "date-time", + type: "string", + readOnly: true, + nullable: true, + }, + owner: { + description: "Name of the user who triggered these events a.", + type: "string", + nullable: true, + readOnly: true, + }, + extra: { + description: `Other information that was not included in the other fields, e.g. the complete CLI command. +`, + type: "string", + readOnly: true, + nullable: true, + }, + }, +} as const; + +export const $EventLogCollection = { + type: "object", + description: `Collection of event logs. + +*Changed in version 2.1.0*: 'total_entries' field is added. +*Changed in version 2.10.0*: 'try_number' and 'map_index' fields are added. +`, + allOf: [ + { + type: "object", + properties: { + event_logs: { + type: "array", + items: { + $ref: "#/components/schemas/EventLog", + }, + }, + }, + }, + { + $ref: "#/components/schemas/CollectionInfo", + }, + ], +} as const; + +export const $ImportError = { + type: "object", + properties: { + import_error_id: { + type: "integer", + readOnly: true, + description: "The import error ID.", + }, + timestamp: { + type: "string", + format: "datetime", + readOnly: true, + description: "The time when this error was created.", + }, + filename: { + type: "string", + readOnly: true, + description: "The filename", + }, + stack_trace: { + type: "string", + readOnly: true, + description: "The full stackstrace.", + }, + }, +} as const; + +export const $ImportErrorCollection = { + type: "object", + description: `Collection of import errors. + +*Changed in version 2.1.0*: 'total_entries' field is added. +`, + allOf: [ + { + type: "object", + properties: { + import_errors: { + type: "array", + items: { + $ref: "#/components/schemas/ImportError", + }, + }, + }, + }, + { + $ref: "#/components/schemas/CollectionInfo", + }, + ], +} as const; + +export const $HealthInfo = { + type: "object", + description: "Instance status information.", + properties: { + metadatabase: { + $ref: "#/components/schemas/MetadatabaseStatus", + }, + scheduler: { + $ref: "#/components/schemas/SchedulerStatus", + }, + triggerer: { + $ref: "#/components/schemas/TriggererStatus", + }, + dag_processor: { + $ref: "#/components/schemas/DagProcessorStatus", + }, + }, +} as const; + +export const $MetadatabaseStatus = { + type: "object", + description: "The status of the metadatabase.", + properties: { + status: { + $ref: "#/components/schemas/HealthStatus", + }, + }, +} as const; + +export const $SchedulerStatus = { + type: "object", + description: "The status and the latest scheduler heartbeat.", + properties: { + status: { + $ref: "#/components/schemas/HealthStatus", + }, + latest_scheduler_heartbeat: { + description: "The time the scheduler last did a heartbeat.", + type: "string", + format: "datetime", + readOnly: true, + nullable: true, + }, + }, +} as const; + +export const $TriggererStatus = { + type: "object", + description: `The status and the latest triggerer heartbeat. + +*New in version 2.6.2* +`, + properties: { + status: { + $ref: "#/components/schemas/HealthStatus", + }, + latest_triggerer_heartbeat: { + description: "The time the triggerer last did a heartbeat.", + type: "string", + format: "datetime", + readOnly: true, + nullable: true, + }, + }, +} as const; + +export const $DagProcessorStatus = { + type: "object", + description: `The status and the latest dag processor heartbeat. + +*New in version 2.6.3* +`, + properties: { + status: { + $ref: "#/components/schemas/HealthStatus", + }, + latest_dag_processor_heartbeat: { + description: "The time the dag processor last did a heartbeat.", + type: "string", + format: "datetime", + readOnly: true, + nullable: true, + }, + }, +} as const; + +export const $Pool = { + description: "The pool", + type: "object", + properties: { + name: { + type: "string", + description: "The name of pool.", + }, + slots: { + type: "integer", + description: `The maximum number of slots that can be assigned to tasks. One job may occupy one or more slots. +`, + }, + occupied_slots: { + type: "integer", + readOnly: true, + description: + "The number of slots used by running/queued tasks at the moment. May include deferred tasks if 'include_deferred' is set to true.", + }, + running_slots: { + type: "integer", + readOnly: true, + description: "The number of slots used by running tasks at the moment.", + }, + queued_slots: { + type: "integer", + readOnly: true, + description: "The number of slots used by queued tasks at the moment.", + }, + open_slots: { + type: "integer", + readOnly: true, + description: "The number of free slots at the moment.", + }, + scheduled_slots: { + type: "integer", + readOnly: true, + description: "The number of slots used by scheduled tasks at the moment.", + }, + deferred_slots: { + type: "integer", + readOnly: true, + description: `The number of slots used by deferred tasks at the moment. Relevant if 'include_deferred' is set to true. + +*New in version 2.7.0* +`, + }, + description: { + type: "string", + description: `The description of the pool. + +*New in version 2.3.0* +`, + nullable: true, + }, + include_deferred: { + type: "boolean", + description: `If set to true, deferred tasks are considered when calculating open pool slots. + +*New in version 2.7.0* +`, + }, + }, +} as const; + +export const $PoolCollection = { + type: "object", + description: `Collection of pools. + +*Changed in version 2.1.0*: 'total_entries' field is added. +`, + allOf: [ + { + type: "object", + properties: { + pools: { + type: "array", + items: { + $ref: "#/components/schemas/Pool", + }, + }, + }, + }, + { + $ref: "#/components/schemas/CollectionInfo", + }, + ], +} as const; + +export const $Provider = { + description: `The provider + +*New in version 2.1.0* +`, + type: "object", + properties: { + package_name: { + type: "string", + description: "The package name of the provider.", + }, + description: { + type: "string", + description: "The description of the provider.", + }, + version: { + type: "string", + description: "The version of the provider.", + }, + }, +} as const; + +export const $ProviderCollection = { + description: `Collection of providers. + +*New in version 2.1.0* +`, + type: "object", + properties: { + providers: { + type: "array", + items: { + $ref: "#/components/schemas/Provider", + }, + }, + }, +} as const; + +export const $SLAMiss = { + type: "object", + properties: { + task_id: { + type: "string", + readOnly: true, + description: "The task ID.", + }, + dag_id: { + type: "string", + description: "The DAG ID.", + }, + execution_date: { + type: "string", + format: "datetime", + }, + email_sent: { + type: "boolean", + }, + timestamp: { + type: "string", + format: "datetime", + }, + description: { + type: "string", + nullable: true, + }, + notification_sent: { + type: "boolean", + }, + }, + nullable: true, +} as const; + +export const $Trigger = { + type: "object", + nullable: true, + properties: { + id: { + type: "integer", + }, + classpath: { + type: "string", + }, + kwargs: { + type: "string", + }, + created_date: { + type: "string", + format: "datetime", + }, + triggerer_id: { + type: "integer", + nullable: true, + }, + }, +} as const; + +export const $TaskFailedDependency = { + type: "object", + properties: { + name: { + type: "string", + }, + reason: { + type: "string", + }, + }, +} as const; + +export const $TaskInstanceDependencyCollection = { + type: "object", + properties: { + dependencies: { + type: "array", + items: { + $ref: "#/components/schemas/TaskFailedDependency", + }, + }, + }, +} as const; + +export const $Job = { + type: "object", + nullable: true, + properties: { + id: { + type: "integer", + }, + dag_id: { + type: "string", + nullable: true, + }, + state: { + type: "string", + nullable: true, + }, + job_type: { + type: "string", + nullable: true, + }, + start_date: { + type: "string", + format: "datetime", + nullable: true, + }, + end_date: { + type: "string", + format: "datetime", + nullable: true, + }, + latest_heartbeat: { + type: "string", + format: "datetime", + nullable: true, + }, + executor_class: { + type: "string", + nullable: true, + }, + hostname: { + type: "string", + nullable: true, + }, + unixname: { + type: "string", + nullable: true, + }, + }, +} as const; + +export const $TaskInstance = { + type: "object", + properties: { + task_id: { + type: "string", + }, + task_display_name: { + type: "string", + description: `Human centric display text for the task. + +*New in version 2.9.0* +`, + }, + dag_id: { + type: "string", + }, + dag_run_id: { + type: "string", + description: `The DagRun ID for this task instance + +*New in version 2.3.0* +`, + }, + execution_date: { + type: "string", + format: "datetime", + }, + start_date: { + type: "string", + format: "datetime", + nullable: true, + }, + end_date: { + type: "string", + format: "datetime", + nullable: true, + }, + duration: { + type: "number", + nullable: true, + }, + state: { + $ref: "#/components/schemas/TaskState", + }, + try_number: { + type: "integer", + }, + map_index: { + type: "integer", + }, + max_tries: { + type: "integer", + }, + hostname: { + type: "string", + }, + unixname: { + type: "string", + }, + pool: { + type: "string", + }, + pool_slots: { + type: "integer", + }, + queue: { + type: "string", + nullable: true, + }, + priority_weight: { + type: "integer", + nullable: true, + }, + operator: { + type: "string", + nullable: true, + description: `*Changed in version 2.1.1*: Field becomes nullable. +`, + }, + queued_when: { + type: "string", + nullable: true, + description: `The datetime that the task enter the state QUEUE, also known as queue_at +`, + }, + pid: { + type: "integer", + nullable: true, + }, + executor: { + type: "string", + nullable: true, + description: `Executor the task is configured to run on or None (which indicates the default executor) + +*New in version 2.10.0* +`, + }, + executor_config: { + type: "string", + }, + sla_miss: { + $ref: "#/components/schemas/SLAMiss", + }, + rendered_map_index: { + description: `Rendered name of an expanded task instance, if the task is mapped. + +*New in version 2.9.0* +`, + type: "string", + nullable: true, + }, + rendered_fields: { + description: `JSON object describing rendered fields. + +*New in version 2.3.0* +`, + type: "object", + }, + trigger: { + $ref: "#/components/schemas/Trigger", + }, + triggerer_job: { + $ref: "#/components/schemas/Job", + }, + note: { + type: "string", + description: `Contains manually entered notes by the user about the TaskInstance. + +*New in version 2.5.0* +`, + nullable: true, + }, + }, +} as const; + +export const $TaskInstanceCollection = { + type: "object", + description: `Collection of task instances. + +*Changed in version 2.1.0*: 'total_entries' field is added. +`, + allOf: [ + { + type: "object", + properties: { + task_instances: { + type: "array", + items: { + $ref: "#/components/schemas/TaskInstance", + }, + }, + }, + }, + { + $ref: "#/components/schemas/CollectionInfo", + }, + ], +} as const; + +export const $TaskInstanceReference = { + type: "object", + properties: { + task_id: { + type: "string", + readOnly: true, + description: "The task ID.", + }, + dag_id: { + type: "string", + readOnly: true, + description: "The DAG ID.", + }, + execution_date: { + type: "string", + format: "datetime", + readOnly: true, + }, + dag_run_id: { + type: "string", + readOnly: true, + description: "The DAG run ID.", + }, + }, +} as const; + +export const $TaskInstanceReferenceCollection = { + type: "object", + properties: { + task_instances: { + type: "array", + items: { + $ref: "#/components/schemas/TaskInstanceReference", + }, + }, + }, +} as const; + +export const $VariableCollectionItem = { + description: `XCom entry collection item. +The value field are only available when retrieving a single object due to the sensitivity of this data.`, + type: "object", + properties: { + key: { + type: "string", + }, + description: { + type: "string", + description: `The description of the variable. + +*New in version 2.4.0* +`, + nullable: true, + }, + }, +} as const; + +export const $VariableCollection = { + type: "object", + description: `Collection of variables. + +*Changed in version 2.1.0*: 'total_entries' field is added. +`, + allOf: [ + { + type: "object", + properties: { + variables: { + type: "array", + items: { + $ref: "#/components/schemas/VariableCollectionItem", + }, + }, + }, + }, + { + $ref: "#/components/schemas/CollectionInfo", + }, + ], +} as const; + +export const $Variable = { + description: "Full representation of Variable", + allOf: [ + { + $ref: "#/components/schemas/VariableCollectionItem", + }, + { + type: "object", + properties: { + value: { + type: "string", + }, + }, + }, + ], +} as const; + +export const $XComCollectionItem = { + type: "object", + description: `XCom entry collection item. + +The value field is only available when reading a single object due to the size of the value. +`, + properties: { + key: { + type: "string", + }, + timestamp: { + type: "string", + format: "datetime", + }, + execution_date: { + type: "string", + format: "datetime", + }, + map_index: { + type: "integer", + }, + task_id: { + type: "string", + }, + dag_id: { + type: "string", + }, + }, +} as const; + +export const $XComCollection = { + type: "object", + description: `Collection of XCom entries. + +*Changed in version 2.1.0*: 'total_entries' field is added. +`, + allOf: [ + { + type: "object", + properties: { + xcom_entries: { + type: "array", + items: { + $ref: "#/components/schemas/XComCollectionItem", + }, + }, + }, + }, + { + $ref: "#/components/schemas/CollectionInfo", + }, + ], +} as const; + +export const $XCom = { + description: "Full representations of XCom entry.", + allOf: [ + { + $ref: "#/components/schemas/XComCollectionItem", + }, + { + type: "object", + properties: { + value: { + anyOf: [ + { + type: "string", + }, + { + type: "number", + }, + { + type: "integer", + }, + { + type: "boolean", + }, + { + type: "array", + items: {}, + }, + { + type: "object", + }, + ], + description: "The value(s),", + }, + }, + }, + ], +} as const; + +export const $DAGDetail = { + description: `DAG details. + +For details see: +[airflow.models.dag.DAG](https://airflow.apache.org/docs/apache-airflow/stable/_api/airflow/models/dag/index.html#airflow.models.dag.DAG) +`, + allOf: [ + { + $ref: "#/components/schemas/DAG", + }, + { + type: "object", + properties: { + timezone: { + $ref: "#/components/schemas/Timezone", + nullable: true, + }, + catchup: { + type: "boolean", + readOnly: true, + nullable: true, + }, + orientation: { + type: "string", + readOnly: true, + nullable: true, + }, + concurrency: { + type: "number", + readOnly: true, + nullable: true, + }, + start_date: { + type: "string", + format: "date-time", + readOnly: true, + nullable: true, + description: `The DAG's start date. + +*Changed in version 2.0.1*: Field becomes nullable. +`, + }, + dag_run_timeout: { + $ref: "#/components/schemas/TimeDelta", + nullable: true, + }, + dataset_expression: { + type: "object", + description: "Nested dataset any/all conditions", + nullable: true, + }, + doc_md: { + type: "string", + readOnly: true, + nullable: true, + }, + default_view: { + type: "string", + readOnly: true, + nullable: true, + }, + params: { + type: "object", + readOnly: true, + description: `User-specified DAG params. + +*New in version 2.0.1* +`, + }, + end_date: { + type: "string", + format: "date-time", + readOnly: true, + nullable: true, + description: `The DAG's end date. + +*New in version 2.3.0*. +`, + }, + is_paused_upon_creation: { + type: "boolean", + readOnly: true, + nullable: true, + description: `Whether the DAG is paused upon creation. + +*New in version 2.3.0* +`, + }, + last_parsed: { + type: "string", + format: "date-time", + nullable: true, + readOnly: true, + description: `The last time the DAG was parsed. + +*New in version 2.3.0* +`, + }, + template_search_path: { + type: "array", + nullable: true, + items: { + type: "string", + }, + description: `The template search path. + +*New in version 2.3.0* +`, + }, + render_template_as_native_obj: { + type: "boolean", + nullable: true, + readOnly: true, + description: `Whether to render templates as native Python objects. + +*New in version 2.3.0* +`, + }, + }, + }, + ], +} as const; + +export const $ExtraLink = { + type: "object", + description: + "Additional links containing additional information about the task.", + properties: { + class_ref: { + $ref: "#/components/schemas/ClassReference", + }, + name: { + type: "string", + readOnly: true, + }, + href: { + type: "string", + readOnly: true, + }, + }, +} as const; + +export const $ExtraLinkCollection = { + type: "object", + description: "The collection of extra links.", + properties: { + extra_links: { + type: "array", + items: { + $ref: "#/components/schemas/ExtraLink", + }, + }, + }, +} as const; + +export const $Task = { + type: "object", + description: `For details see: +[airflow.models.baseoperator.BaseOperator](https://airflow.apache.org/docs/apache-airflow/stable/_api/airflow/models/baseoperator/index.html#airflow.models.baseoperator.BaseOperator) +`, + properties: { + class_ref: { + $ref: "#/components/schemas/ClassReference", + }, + task_id: { + type: "string", + readOnly: true, + }, + task_display_name: { + type: "string", + readOnly: true, + }, + owner: { + type: "string", + readOnly: true, + }, + start_date: { + type: "string", + format: "date-time", + readOnly: true, + nullable: true, + }, + end_date: { + type: "string", + format: "date-time", + readOnly: true, + nullable: true, + }, + trigger_rule: { + $ref: "#/components/schemas/TriggerRule", + }, + extra_links: { + type: "array", + readOnly: true, + items: { + type: "object", + properties: { + class_ref: { + $ref: "#/components/schemas/ClassReference", + }, + }, + }, + }, + depends_on_past: { + type: "boolean", + readOnly: true, + }, + is_mapped: { + type: "boolean", + readOnly: true, + }, + wait_for_downstream: { + type: "boolean", + readOnly: true, + }, + retries: { + type: "number", + readOnly: true, + }, + queue: { + type: "string", + readOnly: true, + nullable: true, + }, + executor: { + type: "string", + readOnly: true, + nullable: true, + }, + pool: { + type: "string", + readOnly: true, + }, + pool_slots: { + type: "number", + readOnly: true, + }, + execution_timeout: { + $ref: "#/components/schemas/TimeDelta", + }, + retry_delay: { + $ref: "#/components/schemas/TimeDelta", + }, + retry_exponential_backoff: { + type: "boolean", + readOnly: true, + }, + priority_weight: { + type: "number", + readOnly: true, + }, + weight_rule: { + $ref: "#/components/schemas/WeightRule", + }, + ui_color: { + $ref: "#/components/schemas/Color", + }, + ui_fgcolor: { + $ref: "#/components/schemas/Color", + }, + template_fields: { + type: "array", + readOnly: true, + items: { + type: "string", + }, + }, + sub_dag: { + $ref: "#/components/schemas/DAG", + }, + downstream_task_ids: { + type: "array", + readOnly: true, + items: { + type: "string", + }, + }, + doc_md: { + type: "string", + readOnly: true, + nullable: true, + description: `Task documentation in markdown. + +*New in version 2.10.0* +`, + }, + }, +} as const; + +export const $TaskCollection = { + type: "object", + description: "Collection of tasks.", + properties: { + tasks: { + type: "array", + items: { + $ref: "#/components/schemas/Task", + }, + }, + }, +} as const; + +export const $PluginCollectionItem = { + type: "object", + description: `A plugin Item. + +*New in version 2.1.0* +`, + properties: { + name: { + type: "string", + description: "The name of the plugin", + }, + hooks: { + type: "array", + items: { + type: "string", + nullable: true, + }, + description: "The plugin hooks", + }, + executors: { + type: "array", + items: { + type: "string", + nullable: true, + }, + description: "The plugin executors", + }, + macros: { + type: "array", + items: { + type: "string", + nullable: true, + }, + description: "The plugin macros", + }, + flask_blueprints: { + type: "array", + items: { + type: "string", + nullable: true, + }, + description: "The flask blueprints", + }, + appbuilder_views: { + type: "array", + items: { + type: "object", + nullable: true, + }, + description: "The appuilder views", + }, + appbuilder_menu_items: { + type: "array", + items: { + type: "object", + nullable: true, + }, + description: "The Flask Appbuilder menu items", + }, + global_operator_extra_links: { + type: "array", + items: { + type: "string", + nullable: true, + }, + description: "The global operator extra links", + }, + operator_extra_links: { + type: "array", + items: { + type: "string", + nullable: true, + }, + description: "Operator extra links", + }, + source: { + type: "string", + description: "The plugin source", + nullable: true, + }, + ti_deps: { + type: "array", + items: { + type: "string", + }, + description: "The plugin task instance dependencies", + }, + listeners: { + type: "array", + items: { + type: "string", + }, + description: "The plugin listeners", + }, + timetables: { + type: "array", + items: { + type: "string", + }, + description: "The plugin timetables", + }, + }, +} as const; + +export const $PluginCollection = { + type: "object", + description: `A collection of plugin. + +*New in version 2.1.0* +`, + allOf: [ + { + type: "object", + properties: { + plugins: { + type: "array", + items: { + $ref: "#/components/schemas/PluginCollectionItem", + }, + }, + }, + }, + { + $ref: "#/components/schemas/CollectionInfo", + }, + ], +} as const; + +export const $Role = { + description: `a role item. + +*New in version 2.1.0* +`, + type: "object", + properties: { + name: { + type: "string", + description: `The name of the role + +*Changed in version 2.3.0*: A minimum character length requirement ('minLength') is added. +`, + minLength: 1, + }, + actions: { + type: "array", + items: { + $ref: "#/components/schemas/ActionResource", + }, + }, + }, +} as const; + +export const $RoleCollection = { + description: `A collection of roles. + +*New in version 2.1.0* +`, + type: "object", + allOf: [ + { + type: "object", + properties: { + roles: { + type: "array", + items: { + $ref: "#/components/schemas/Role", + }, + }, + }, + }, + { + $ref: "#/components/schemas/CollectionInfo", + }, + ], +} as const; + +export const $Action = { + description: `An action Item. + +*New in version 2.1.0* +`, + type: "object", + properties: { + name: { + type: "string", + description: 'The name of the permission "action"', + nullable: false, + }, + }, +} as const; + +export const $ActionCollection = { + description: `A collection of actions. + +*New in version 2.1.0* +`, + type: "object", + allOf: [ + { + type: "object", + properties: { + actions: { + type: "array", + items: { + $ref: "#/components/schemas/Action", + }, + }, + }, + }, + { + $ref: "#/components/schemas/CollectionInfo", + }, + ], +} as const; + +export const $Resource = { + description: `A resource on which permissions are granted. + +*New in version 2.1.0* +`, + type: "object", + properties: { + name: { + type: "string", + description: "The name of the resource", + nullable: false, + }, + }, +} as const; + +export const $ActionResource = { + description: `The Action-Resource item. + +*New in version 2.1.0* +`, + type: "object", + properties: { + action: { + type: "object", + $ref: "#/components/schemas/Action", + description: "The permission action", + }, + resource: { + type: "object", + $ref: "#/components/schemas/Resource", + description: "The permission resource", + }, + }, +} as const; + +export const $Dataset = { + description: `A dataset item. + +*New in version 2.4.0* +`, + type: "object", + properties: { + id: { + type: "integer", + description: "The dataset id", + }, + uri: { + type: "string", + description: "The dataset uri", + nullable: false, + }, + extra: { + type: "object", + description: "The dataset extra", + nullable: true, + }, + created_at: { + type: "string", + description: "The dataset creation time", + nullable: false, + }, + updated_at: { + type: "string", + description: "The dataset update time", + nullable: false, + }, + consuming_dags: { + type: "array", + items: { + $ref: "#/components/schemas/DagScheduleDatasetReference", + }, + }, + producing_tasks: { + type: "array", + items: { + $ref: "#/components/schemas/TaskOutletDatasetReference", + }, + }, + }, +} as const; + +export const $TaskOutletDatasetReference = { + description: `A datasets reference to an upstream task. + +*New in version 2.4.0* +`, + type: "object", + properties: { + dag_id: { + type: "string", + description: "The DAG ID that updates the dataset.", + nullable: true, + }, + task_id: { + type: "string", + description: "The task ID that updates the dataset.", + nullable: true, + }, + created_at: { + type: "string", + description: "The dataset creation time", + nullable: false, + }, + updated_at: { + type: "string", + description: "The dataset update time", + nullable: false, + }, + }, +} as const; + +export const $DagScheduleDatasetReference = { + description: `A datasets reference to a downstream DAG. + +*New in version 2.4.0* +`, + type: "object", + properties: { + dag_id: { + type: "string", + description: "The DAG ID that depends on the dataset.", + nullable: true, + }, + created_at: { + type: "string", + description: "The dataset reference creation time", + nullable: false, + }, + updated_at: { + type: "string", + description: "The dataset reference update time", + nullable: false, + }, + }, +} as const; + +export const $DatasetCollection = { + description: `A collection of datasets. + +*New in version 2.4.0* +`, + type: "object", + allOf: [ + { + type: "object", + properties: { + datasets: { + type: "array", + items: { + $ref: "#/components/schemas/Dataset", + }, + }, + }, + }, + { + $ref: "#/components/schemas/CollectionInfo", + }, + ], +} as const; + +export const $DatasetEvent = { + description: `A dataset event. + +*New in version 2.4.0* +`, + type: "object", + properties: { + dataset_id: { + type: "integer", + description: "The dataset id", + }, + dataset_uri: { + type: "string", + description: "The URI of the dataset", + nullable: false, + }, + extra: { + type: "object", + description: "The dataset event extra", + nullable: true, + }, + source_dag_id: { + type: "string", + description: "The DAG ID that updated the dataset.", + nullable: true, + }, + source_task_id: { + type: "string", + description: "The task ID that updated the dataset.", + nullable: true, + }, + source_run_id: { + type: "string", + description: "The DAG run ID that updated the dataset.", + nullable: true, + }, + source_map_index: { + type: "integer", + description: "The task map index that updated the dataset.", + nullable: true, + }, + created_dagruns: { + type: "array", + items: { + $ref: "#/components/schemas/BasicDAGRun", + }, + }, + timestamp: { + type: "string", + description: "The dataset event creation time", + nullable: false, + }, + }, +} as const; + +export const $CreateDatasetEvent = { + type: "object", + required: ["dataset_uri"], + properties: { + dataset_uri: { + type: "string", + description: "The URI of the dataset", + nullable: false, + }, + extra: { + type: "object", + description: "The dataset event extra", + nullable: true, + }, + }, +} as const; + +export const $QueuedEvent = { + type: "object", + properties: { + uri: { + type: "string", + description: "The datata uri.", + }, + dag_id: { + type: "string", + description: "The DAG ID.", + }, + created_at: { + type: "string", + format: "date-time", + description: "The creation time of QueuedEvent", + }, + }, +} as const; + +export const $QueuedEventCollection = { + description: `A collection of Dataset Dag Run Queues. + +*New in version 2.9.0* +`, + type: "object", + allOf: [ + { + type: "object", + properties: { + datasets: { + type: "array", + items: { + $ref: "#/components/schemas/QueuedEvent", + }, + }, + }, + }, + { + $ref: "#/components/schemas/CollectionInfo", + }, + ], +} as const; + +export const $BasicDAGRun = { + type: "object", + properties: { + run_id: { + type: "string", + description: `Run ID. +`, + }, + dag_id: { + type: "string", + readOnly: true, + }, + logical_date: { + type: "string", + description: `The logical date (previously called execution date). This is the time or interval covered by +this DAG run, according to the DAG definition. + +The value of this field can be set only when creating the object. If you try to modify the +field of an existing object, the request fails with an BAD_REQUEST error. + +This together with DAG_ID are a unique key. + +*New in version 2.2.0* +`, + format: "date-time", + }, + start_date: { + type: "string", + format: "date-time", + description: `The start time. The time when DAG run was actually created. + +*Changed in version 2.1.3*: Field becomes nullable. +`, + readOnly: true, + nullable: true, + }, + end_date: { + type: "string", + format: "date-time", + readOnly: true, + nullable: true, + }, + data_interval_start: { + type: "string", + format: "date-time", + readOnly: true, + nullable: true, + }, + data_interval_end: { + type: "string", + format: "date-time", + readOnly: true, + nullable: true, + }, + state: { + $ref: "#/components/schemas/DagState", + }, + }, +} as const; + +export const $DatasetEventCollection = { + description: `A collection of dataset events. + +*New in version 2.4.0* +`, + type: "object", + allOf: [ + { + type: "object", + properties: { + dataset_events: { + type: "array", + items: { + $ref: "#/components/schemas/DatasetEvent", + }, + }, + }, + }, + { + $ref: "#/components/schemas/CollectionInfo", + }, + ], +} as const; + +export const $ConfigOption = { + type: "object", + description: "The option of configuration.", + properties: { + key: { + type: "string", + readOnly: true, + }, + value: { + type: "string", + readOnly: true, + }, + }, +} as const; + +export const $ConfigSection = { + type: "object", + description: "The section of configuration.", + properties: { + name: { + type: "string", + readOnly: true, + }, + options: { + type: "array", + items: { + $ref: "#/components/schemas/ConfigOption", + }, + }, + }, +} as const; + +export const $Config = { + type: "object", + description: "The configuration.", + properties: { + sections: { + type: "array", + items: { + $ref: "#/components/schemas/ConfigSection", + }, + }, + }, +} as const; + +export const $VersionInfo = { + type: "object", + description: "Version information.", + properties: { + version: { + type: "string", + description: "The version of Airflow", + }, + git_version: { + type: "string", + description: "The git version (including git commit hash)", + nullable: true, + }, + }, +} as const; + +export const $ClearDagRun = { + type: "object", + properties: { + dry_run: { + description: `If set, don't actually run this operation. The response will contain a list of task instances +planned to be cleaned, but not modified in any way. +`, + type: "boolean", + default: true, + }, + }, +} as const; + +export const $ClearTaskInstances = { + type: "object", + properties: { + dry_run: { + description: `If set, don't actually run this operation. The response will contain a list of task instances +planned to be cleaned, but not modified in any way. +`, + type: "boolean", + default: true, + }, + task_ids: { + description: `A list of task ids to clear. + +*New in version 2.1.0* +`, + type: "array", + items: { + type: "string", + }, + minItems: 1, + }, + start_date: { + description: "The minimum execution date to clear.", + type: "string", + format: "datetime", + }, + end_date: { + description: "The maximum execution date to clear.", + type: "string", + format: "datetime", + }, + only_failed: { + description: "Only clear failed tasks.", + type: "boolean", + default: true, + }, + only_running: { + description: "Only clear running tasks.", + type: "boolean", + default: false, + }, + reset_dag_runs: { + description: "Set state of DAG runs to RUNNING.", + type: "boolean", + }, + dag_run_id: { + type: "string", + description: "The DagRun ID for this task instance", + nullable: true, + }, + include_upstream: { + description: "If set to true, upstream tasks are also affected.", + type: "boolean", + default: false, + }, + include_downstream: { + description: "If set to true, downstream tasks are also affected.", + type: "boolean", + default: false, + }, + include_future: { + description: + "If set to True, also tasks from future DAG Runs are affected.", + type: "boolean", + default: false, + }, + include_past: { + description: + "If set to True, also tasks from past DAG Runs are affected.", + type: "boolean", + default: false, + }, + }, +} as const; + +export const $UpdateTaskInstancesState = { + type: "object", + properties: { + dry_run: { + description: `If set, don't actually run this operation. The response will contain a list of task instances +planned to be affected, but won't be modified in any way. +`, + type: "boolean", + default: true, + }, + task_id: { + description: "The task ID.", + type: "string", + }, + execution_date: { + description: + "The execution date. Either set this or dag_run_id but not both.", + type: "string", + format: "datetime", + }, + dag_run_id: { + description: `The task instance's DAG run ID. Either set this or execution_date but not both. + +*New in version 2.3.0* +`, + type: "string", + }, + include_upstream: { + description: "If set to true, upstream tasks are also affected.", + type: "boolean", + }, + include_downstream: { + description: "If set to true, downstream tasks are also affected.", + type: "boolean", + }, + include_future: { + description: + "If set to True, also tasks from future DAG Runs are affected.", + type: "boolean", + }, + include_past: { + description: + "If set to True, also tasks from past DAG Runs are affected.", + type: "boolean", + }, + new_state: { + $ref: "#/components/schemas/UpdateTaskState", + }, + }, +} as const; + +export const $UpdateTaskInstance = { + type: "object", + properties: { + dry_run: { + description: `If set, don't actually run this operation. The response will contain the task instance +planned to be affected, but won't be modified in any way. +`, + type: "boolean", + default: true, + }, + new_state: { + $ref: "#/components/schemas/UpdateTaskState", + }, + }, +} as const; + +export const $SetTaskInstanceNote = { + type: "object", + required: ["note"], + properties: { + note: { + description: "The custom note to set for this Task Instance.", + type: "string", + }, + }, +} as const; + +export const $ListDagRunsForm = { + type: "object", + properties: { + order_by: { + type: "string", + description: `The name of the field to order the results by. Prefix a field name +with \`-\` to reverse the sort order. + +*New in version 2.1.0* +`, + }, + page_offset: { + type: "integer", + minimum: 0, + description: + "The number of items to skip before starting to collect the result set.", + }, + page_limit: { + type: "integer", + minimum: 1, + default: 100, + description: "The numbers of items to return.", + }, + dag_ids: { + type: "array", + items: { + type: "string", + }, + description: `Return objects with specific DAG IDs. +The value can be repeated to retrieve multiple matching values (OR condition).`, + }, + states: { + type: "array", + items: { + type: "string", + }, + description: `Return objects with specific states. +The value can be repeated to retrieve multiple matching values (OR condition).`, + }, + execution_date_gte: { + type: "string", + format: "date-time", + description: `Returns objects greater or equal to the specified date. + +This can be combined with execution_date_lte key to receive only the selected period. +`, + }, + execution_date_lte: { + type: "string", + format: "date-time", + description: `Returns objects less than or equal to the specified date. + +This can be combined with execution_date_gte key to receive only the selected period. +`, + }, + start_date_gte: { + type: "string", + format: "date-time", + description: `Returns objects greater or equal the specified date. + +This can be combined with start_date_lte key to receive only the selected period. +`, + }, + start_date_lte: { + type: "string", + format: "date-time", + description: `Returns objects less or equal the specified date. + +This can be combined with start_date_gte parameter to receive only the selected period +`, + }, + end_date_gte: { + type: "string", + format: "date-time", + description: `Returns objects greater or equal the specified date. + +This can be combined with end_date_lte parameter to receive only the selected period. +`, + }, + end_date_lte: { + type: "string", + format: "date-time", + description: `Returns objects less than or equal to the specified date. + +This can be combined with end_date_gte parameter to receive only the selected period. +`, + }, + }, +} as const; + +export const $ListTaskInstanceForm = { + type: "object", + properties: { + dag_ids: { + type: "array", + items: { + type: "string", + }, + description: `Return objects with specific DAG IDs. +The value can be repeated to retrieve multiple matching values (OR condition).`, + }, + dag_run_ids: { + type: "array", + items: { + type: "string", + }, + description: `Return objects with specific DAG Run IDs. +The value can be repeated to retrieve multiple matching values (OR condition). +*New in version 2.7.1*`, + }, + task_ids: { + type: "array", + items: { + type: "string", + }, + description: `Return objects with specific task IDs. +The value can be repeated to retrieve multiple matching values (OR condition). +*New in version 2.7.1*`, + }, + execution_date_gte: { + type: "string", + format: "date-time", + description: `Returns objects greater or equal to the specified date. + +This can be combined with execution_date_lte parameter to receive only the selected period. +`, + }, + execution_date_lte: { + type: "string", + format: "date-time", + description: `Returns objects less than or equal to the specified date. + +This can be combined with execution_date_gte parameter to receive only the selected period. +`, + }, + start_date_gte: { + type: "string", + format: "date-time", + description: `Returns objects greater or equal the specified date. + +This can be combined with start_date_lte parameter to receive only the selected period. +`, + }, + start_date_lte: { + type: "string", + format: "date-time", + description: `Returns objects less or equal the specified date. + +This can be combined with start_date_gte parameter to receive only the selected period. +`, + }, + end_date_gte: { + type: "string", + format: "date-time", + description: `Returns objects greater or equal the specified date. + +This can be combined with start_date_lte parameter to receive only the selected period. +`, + }, + end_date_lte: { + type: "string", + format: "date-time", + description: `Returns objects less than or equal to the specified date. + +This can be combined with start_date_gte parameter to receive only the selected period. +`, + }, + duration_gte: { + type: "number", + description: `Returns objects greater than or equal to the specified values. + +This can be combined with duration_lte parameter to receive only the selected period. +`, + }, + duration_lte: { + type: "number", + description: `Returns objects less than or equal to the specified values. + +This can be combined with duration_gte parameter to receive only the selected range. +`, + }, + state: { + type: "array", + items: { + $ref: "#/components/schemas/TaskState", + }, + description: + "The value can be repeated to retrieve multiple matching values (OR condition).", + }, + pool: { + type: "array", + items: { + type: "string", + }, + description: + "The value can be repeated to retrieve multiple matching values (OR condition).", + }, + queue: { + type: "array", + items: { + type: "string", + }, + description: + "The value can be repeated to retrieve multiple matching values (OR condition).", + }, + executor: { + type: "array", + items: { + type: "string", + }, + description: + "The value can be repeated to retrieve multiple matching values (OR condition).", + }, + }, +} as const; + +export const $ScheduleInterval = { + description: `Schedule interval. Defines how often DAG runs, this object gets added to your latest task instance's +execution_date to figure out the next schedule. +`, + nullable: true, + readOnly: true, + anyOf: [ + { + $ref: "#/components/schemas/TimeDelta", + }, + { + $ref: "#/components/schemas/RelativeDelta", + }, + { + $ref: "#/components/schemas/CronExpression", + }, + ], + discriminator: { + propertyName: "__type", + }, +} as const; + +export const $TimeDelta = { + description: "Time delta", + type: "object", + nullable: true, + required: ["__type", "days", "seconds", "microseconds"], + properties: { + __type: { + type: "string", + }, + days: { + type: "integer", + }, + seconds: { + type: "integer", + }, + microseconds: { + type: "integer", + }, + }, +} as const; + +export const $RelativeDelta = { + description: "Relative delta", + type: "object", + required: [ + "__type", + "years", + "months", + "days", + "leapdays", + "hours", + "minutes", + "seconds", + "microseconds", + "year", + "month", + "day", + "hour", + "minute", + "second", + "microsecond", + ], + properties: { + __type: { + type: "string", + }, + years: { + type: "integer", + }, + months: { + type: "integer", + }, + days: { + type: "integer", + }, + leapdays: { + type: "integer", + }, + hours: { + type: "integer", + }, + minutes: { + type: "integer", + }, + seconds: { + type: "integer", + }, + microseconds: { + type: "integer", + }, + year: { + type: "integer", + }, + month: { + type: "integer", + }, + day: { + type: "integer", + }, + hour: { + type: "integer", + }, + minute: { + type: "integer", + }, + second: { + type: "integer", + }, + microsecond: { + type: "integer", + }, + }, +} as const; + +export const $CronExpression = { + description: "Cron expression", + type: "object", + required: ["__type", "value"], + properties: { + __type: { + type: "string", + }, + value: { + type: "string", + }, + }, + nullable: true, +} as const; + +export const $Timezone = { + type: "string", +} as const; + +export const $Tag = { + description: "Tag", + type: "object", + properties: { + name: { + type: "string", + }, + }, +} as const; + +export const $Color = { + description: "Color in hexadecimal notation.", + type: "string", + pattern: "^#[a-fA-F0-9]{3,6}$", +} as const; + +export const $ClassReference = { + description: "Class reference", + type: "object", + properties: { + module_path: { + type: "string", + readOnly: true, + }, + class_name: { + type: "string", + readOnly: true, + }, + }, +} as const; + +export const $Error = { + description: `[RFC7807](https://tools.ietf.org/html/rfc7807) compliant response. +`, + type: "object", + properties: { + type: { + type: "string", + description: `A URI reference [RFC3986] that identifies the problem type. This specification +encourages that, when dereferenced, it provide human-readable documentation for +the problem type. +`, + }, + title: { + type: "string", + description: "A short, human-readable summary of the problem type.", + }, + status: { + type: "number", + description: + "The HTTP status code generated by the API server for this occurrence of the problem.", + }, + detail: { + type: "string", + description: + "A human-readable explanation specific to this occurrence of the problem.", + }, + instance: { + type: "string", + description: `A URI reference that identifies the specific occurrence of the problem. It may or may +not yield further information if dereferenced. +`, + }, + }, + required: ["type", "title", "status"], +} as const; + +export const $CollectionInfo = { + description: "Metadata about collection.", + type: "object", + properties: { + total_entries: { + type: "integer", + description: `Count of total objects in the current result set before pagination parameters +(limit, offset) are applied. +`, + }, + }, +} as const; + +export const $TaskState = { + description: `Task state. + +*Changed in version 2.0.2*: 'removed' is added as a possible value. + +*Changed in version 2.2.0*: 'deferred' is added as a possible value. + +*Changed in version 2.4.0*: 'sensing' state has been removed. +*Changed in version 2.4.2*: 'restarting' is added as a possible value + +*Changed in version 2.7.0*: Field becomes nullable and null primitive is added as a possible value. +*Changed in version 2.7.0*: 'none' state is deprecated in favor of null. +`, + type: "string", + nullable: true, + enum: [ + null, + "success", + "running", + "failed", + "upstream_failed", + "skipped", + "up_for_retry", + "up_for_reschedule", + "queued", + "none", + "scheduled", + "deferred", + "removed", + "restarting", + ], +} as const; + +export const $UpdateTaskState = { + description: `Expected new state. Only a subset of TaskState are available. + +Other states are managed directly by the scheduler or the workers and cannot be updated manually through the REST API. +`, + type: "string", + enum: ["success", "failed", "skipped"], +} as const; + +export const $DagState = { + description: `DAG State. + +*Changed in version 2.1.3*: 'queued' is added as a possible value. +`, + type: "string", + readOnly: true, + enum: ["queued", "running", "success", "failed"], +} as const; + +export const $TriggerRule = { + description: `Trigger rule. + +*Changed in version 2.2.0*: 'none_failed_min_one_success' is added as a possible value. Deprecated 'dummy' and 'always' is added as a possible value + +*Changed in version 2.3.0*: 'all_skipped' is added as a possible value. + +*Changed in version 2.5.0*: 'one_done' is added as a possible value. + +*Changed in version 2.7.0*: 'all_done_setup_success' is added as a possible value. +`, + type: "string", + enum: [ + "all_success", + "all_failed", + "all_done", + "all_done_setup_success", + "one_success", + "one_failed", + "one_done", + "none_failed", + "none_skipped", + "none_failed_or_skipped", + "none_failed_min_one_success", + "dummy", + "all_skipped", + "always", + ], +} as const; + +export const $WeightRule = { + description: "Weight rule.", + type: "string", + enum: ["downstream", "upstream", "absolute"], +} as const; + +export const $HealthStatus = { + description: "Health status", + type: "string", + nullable: true, + enum: ["healthy", "unhealthy"], +} as const; diff --git a/airflow/ui/openapi-gen/requests/services.gen.ts b/airflow/ui/openapi-gen/requests/services.gen.ts new file mode 100644 index 0000000000000..ffe7de3074a14 --- /dev/null +++ b/airflow/ui/openapi-gen/requests/services.gen.ts @@ -0,0 +1,3298 @@ +// This file is auto-generated by @hey-api/openapi-ts + +import type { CancelablePromise } from "./core/CancelablePromise"; +import { OpenAPI } from "./core/OpenAPI"; +import { request as __request } from "./core/request"; +import type { + GetConnectionsData, + GetConnectionsResponse, + PostConnectionData, + PostConnectionResponse, + GetConnectionData, + GetConnectionResponse, + PatchConnectionData, + PatchConnectionResponse, + DeleteConnectionData, + DeleteConnectionResponse, + TestConnectionData, + TestConnectionResponse, + GetDagsData, + GetDagsResponse, + PatchDagsData, + PatchDagsResponse, + GetDagData, + GetDagResponse, + PatchDagData, + PatchDagResponse, + DeleteDagData, + DeleteDagResponse, + PostClearTaskInstancesData, + PostClearTaskInstancesResponse, + PostSetTaskInstancesStateData, + PostSetTaskInstancesStateResponse, + ReparseDagFileData, + ReparseDagFileResponse, + GetDagDetailsData, + GetDagDetailsResponse, + GetTasksData, + GetTasksResponse, + GetTaskData, + GetTaskResponse, + GetDagSourceData, + GetDagSourceResponse, + SetTaskInstanceNoteData, + SetTaskInstanceNoteResponse, + SetMappedTaskInstanceNoteData, + SetMappedTaskInstanceNoteResponse, + GetTaskInstanceDependenciesData, + GetTaskInstanceDependenciesResponse, + GetMappedTaskInstanceDependenciesData, + GetMappedTaskInstanceDependenciesResponse, + GetTaskInstancesData, + GetTaskInstancesResponse, + GetTaskInstanceData, + GetTaskInstanceResponse, + PatchTaskInstanceData, + PatchTaskInstanceResponse, + GetMappedTaskInstanceData, + GetMappedTaskInstanceResponse, + PatchMappedTaskInstanceData, + PatchMappedTaskInstanceResponse, + GetMappedTaskInstancesData, + GetMappedTaskInstancesResponse, + GetTaskInstancesBatchData, + GetTaskInstancesBatchResponse, + GetTaskInstanceTryDetailsData, + GetTaskInstanceTryDetailsResponse, + GetTaskInstanceTriesData, + GetTaskInstanceTriesResponse, + GetMappedTaskInstanceTriesData, + GetMappedTaskInstanceTriesResponse, + GetMappedTaskInstanceTryDetailsData, + GetMappedTaskInstanceTryDetailsResponse, + GetExtraLinksData, + GetExtraLinksResponse, + GetLogData, + GetLogResponse, + GetDagRunsData, + GetDagRunsResponse, + PostDagRunData, + PostDagRunResponse, + GetDagRunsBatchData, + GetDagRunsBatchResponse, + GetDagRunData, + GetDagRunResponse, + DeleteDagRunData, + DeleteDagRunResponse, + UpdateDagRunStateData, + UpdateDagRunStateResponse, + ClearDagRunData, + ClearDagRunResponse, + GetUpstreamDatasetEventsData, + GetUpstreamDatasetEventsResponse, + SetDagRunNoteData, + SetDagRunNoteResponse, + GetDagDatasetQueuedEventData, + GetDagDatasetQueuedEventResponse, + DeleteDagDatasetQueuedEventData, + DeleteDagDatasetQueuedEventResponse, + GetDagDatasetQueuedEventsData, + GetDagDatasetQueuedEventsResponse, + DeleteDagDatasetQueuedEventsData, + DeleteDagDatasetQueuedEventsResponse, + GetDatasetQueuedEventsData, + GetDatasetQueuedEventsResponse, + DeleteDatasetQueuedEventsData, + DeleteDatasetQueuedEventsResponse, + GetDatasetsData, + GetDatasetsResponse, + GetDatasetData, + GetDatasetResponse, + GetDatasetEventsData, + GetDatasetEventsResponse, + CreateDatasetEventData, + CreateDatasetEventResponse, + GetEventLogsData, + GetEventLogsResponse, + GetEventLogData, + GetEventLogResponse, + GetImportErrorsData, + GetImportErrorsResponse, + GetImportErrorData, + GetImportErrorResponse, + GetPoolsData, + GetPoolsResponse, + PostPoolData, + PostPoolResponse, + GetPoolData, + GetPoolResponse, + PatchPoolData, + PatchPoolResponse, + DeletePoolData, + DeletePoolResponse, + GetProvidersResponse, + GetVariablesData, + GetVariablesResponse, + PostVariablesData, + PostVariablesResponse, + GetVariableData, + GetVariableResponse, + PatchVariableData, + PatchVariableResponse, + DeleteVariableData, + DeleteVariableResponse, + GetXcomEntriesData, + GetXcomEntriesResponse, + GetXcomEntryData, + GetXcomEntryResponse, + GetDagStatsData, + GetDagStatsResponse, + GetDagWarningsData, + GetDagWarningsResponse, + GetConfigData, + GetConfigResponse, + GetValueData, + GetValueResponse, + GetHealthResponse, + GetVersionResponse, + GetPluginsData, + GetPluginsResponse, + GetRolesData, + GetRolesResponse, + PostRoleData, + PostRoleResponse, + GetRoleData, + GetRoleResponse, + PatchRoleData, + PatchRoleResponse, + DeleteRoleData, + DeleteRoleResponse, + GetPermissionsData, + GetPermissionsResponse, + GetUsersData, + GetUsersResponse, + PostUserData, + PostUserResponse, + GetUserData, + GetUserResponse, + PatchUserData, + PatchUserResponse, + DeleteUserData, + DeleteUserResponse, +} from "./types.gen"; + +export class ConnectionService { + /** + * List connections + * @param data The data for the request. + * @param data.limit The numbers of items to return. + * @param data.offset The number of items to skip before starting to collect the result set. + * @param data.orderBy The name of the field to order the results by. + * Prefix a field name with `-` to reverse the sort order. + * + * *New in version 2.1.0* + * + * @returns ConnectionCollection Success. + * @throws ApiError + */ + public static getConnections( + data: GetConnectionsData = {} + ): CancelablePromise { + return __request(OpenAPI, { + method: "GET", + url: "/connections", + query: { + limit: data.limit, + offset: data.offset, + order_by: data.orderBy, + }, + errors: { + 401: "Request not authenticated due to missing, invalid, authentication info.", + 403: "Client does not have sufficient permission.", + }, + }); + } + + /** + * Create a connection + * @param data The data for the request. + * @param data.requestBody + * @returns Connection Success. + * @throws ApiError + */ + public static postConnection( + data: PostConnectionData + ): CancelablePromise { + return __request(OpenAPI, { + method: "POST", + url: "/connections", + body: data.requestBody, + mediaType: "application/json", + errors: { + 400: "Client specified an invalid argument.", + 401: "Request not authenticated due to missing, invalid, authentication info.", + 403: "Client does not have sufficient permission.", + }, + }); + } + + /** + * Get a connection + * @param data The data for the request. + * @param data.connectionId The connection ID. + * @returns Connection Success. + * @throws ApiError + */ + public static getConnection( + data: GetConnectionData + ): CancelablePromise { + return __request(OpenAPI, { + method: "GET", + url: "/connections/{connection_id}", + path: { + connection_id: data.connectionId, + }, + errors: { + 401: "Request not authenticated due to missing, invalid, authentication info.", + 403: "Client does not have sufficient permission.", + 404: "A specified resource is not found.", + }, + }); + } + + /** + * Update a connection + * @param data The data for the request. + * @param data.requestBody + * @param data.connectionId The connection ID. + * @param data.updateMask The fields to update on the resource. If absent or empty, all modifiable fields are updated. + * A comma-separated list of fully qualified names of fields. + * + * @returns Connection Success. + * @throws ApiError + */ + public static patchConnection( + data: PatchConnectionData + ): CancelablePromise { + return __request(OpenAPI, { + method: "PATCH", + url: "/connections/{connection_id}", + path: { + connection_id: data.connectionId, + }, + query: { + update_mask: data.updateMask, + }, + body: data.requestBody, + mediaType: "application/json", + errors: { + 400: "Client specified an invalid argument.", + 401: "Request not authenticated due to missing, invalid, authentication info.", + 403: "Client does not have sufficient permission.", + 404: "A specified resource is not found.", + }, + }); + } + + /** + * Delete a connection + * @param data The data for the request. + * @param data.connectionId The connection ID. + * @returns void Success. + * @throws ApiError + */ + public static deleteConnection( + data: DeleteConnectionData + ): CancelablePromise { + return __request(OpenAPI, { + method: "DELETE", + url: "/connections/{connection_id}", + path: { + connection_id: data.connectionId, + }, + errors: { + 400: "Client specified an invalid argument.", + 401: "Request not authenticated due to missing, invalid, authentication info.", + 403: "Client does not have sufficient permission.", + 404: "A specified resource is not found.", + }, + }); + } + + /** + * Test a connection + * Test a connection. + * + * For security reasons, the test connection functionality is disabled by default across Airflow UI, API and CLI. + * For more information on capabilities of users, see the documentation: + * https://airflow.apache.org/docs/apache-airflow/stable/security/security_model.html#capabilities-of-authenticated-ui-users. + * It is strongly advised to not enable the feature until you make sure that only + * highly trusted UI/API users have "edit connection" permissions. + * + * Set the "test_connection" flag to "Enabled" in the "core" section of Airflow configuration (airflow.cfg) to enable testing of collections. + * It can also be controlled by the environment variable `AIRFLOW__CORE__TEST_CONNECTION`. + * + * *New in version 2.2.0* + * + * @param data The data for the request. + * @param data.requestBody + * @returns ConnectionTest Success. + * @throws ApiError + */ + public static testConnection( + data: TestConnectionData + ): CancelablePromise { + return __request(OpenAPI, { + method: "POST", + url: "/connections/test", + body: data.requestBody, + mediaType: "application/json", + errors: { + 400: "Client specified an invalid argument.", + 401: "Request not authenticated due to missing, invalid, authentication info.", + 403: "Client does not have sufficient permission.", + 404: "A specified resource is not found.", + }, + }); + } +} + +export class DagService { + /** + * List DAGs + * List DAGs in the database. + * `dag_id_pattern` can be set to match dags of a specific pattern + * + * @param data The data for the request. + * @param data.limit The numbers of items to return. + * @param data.offset The number of items to skip before starting to collect the result set. + * @param data.orderBy The name of the field to order the results by. + * Prefix a field name with `-` to reverse the sort order. + * + * *New in version 2.1.0* + * + * @param data.tags List of tags to filter results. + * + * *New in version 2.2.0* + * + * @param data.onlyActive Only filter active DAGs. + * + * *New in version 2.1.1* + * + * @param data.paused Only filter paused/unpaused DAGs. If absent or null, it returns paused and unpaused DAGs. + * + * *New in version 2.6.0* + * + * @param data.fields List of field for return. + * + * @param data.dagIdPattern If set, only return DAGs with dag_ids matching this pattern. + * + * @returns DAGCollection Success. + * @throws ApiError + */ + public static getDags( + data: GetDagsData = {} + ): CancelablePromise { + return __request(OpenAPI, { + method: "GET", + url: "/dags", + query: { + limit: data.limit, + offset: data.offset, + order_by: data.orderBy, + tags: data.tags, + only_active: data.onlyActive, + paused: data.paused, + fields: data.fields, + dag_id_pattern: data.dagIdPattern, + }, + errors: { + 401: "Request not authenticated due to missing, invalid, authentication info.", + }, + }); + } + + /** + * Update DAGs + * Update DAGs of a given dag_id_pattern using UpdateMask. + * This endpoint allows specifying `~` as the dag_id_pattern to update all DAGs. + * *New in version 2.3.0* + * + * @param data The data for the request. + * @param data.dagIdPattern If set, only update DAGs with dag_ids matching this pattern. + * + * @param data.requestBody + * @param data.limit The numbers of items to return. + * @param data.offset The number of items to skip before starting to collect the result set. + * @param data.tags List of tags to filter results. + * + * *New in version 2.2.0* + * + * @param data.updateMask The fields to update on the resource. If absent or empty, all modifiable fields are updated. + * A comma-separated list of fully qualified names of fields. + * + * @param data.onlyActive Only filter active DAGs. + * + * *New in version 2.1.1* + * + * @returns DAGCollection Success. + * @throws ApiError + */ + public static patchDags( + data: PatchDagsData + ): CancelablePromise { + return __request(OpenAPI, { + method: "PATCH", + url: "/dags", + query: { + limit: data.limit, + offset: data.offset, + tags: data.tags, + update_mask: data.updateMask, + only_active: data.onlyActive, + dag_id_pattern: data.dagIdPattern, + }, + body: data.requestBody, + mediaType: "application/json", + errors: { + 401: "Request not authenticated due to missing, invalid, authentication info.", + 403: "Client does not have sufficient permission.", + 404: "A specified resource is not found.", + }, + }); + } + + /** + * Get basic information about a DAG + * Presents only information available in database (DAGModel). + * If you need detailed information, consider using GET /dags/{dag_id}/details. + * + * @param data The data for the request. + * @param data.dagId The DAG ID. + * @param data.fields List of field for return. + * + * @returns DAG Success. + * @throws ApiError + */ + public static getDag(data: GetDagData): CancelablePromise { + return __request(OpenAPI, { + method: "GET", + url: "/dags/{dag_id}", + path: { + dag_id: data.dagId, + }, + query: { + fields: data.fields, + }, + errors: { + 401: "Request not authenticated due to missing, invalid, authentication info.", + 403: "Client does not have sufficient permission.", + 404: "A specified resource is not found.", + }, + }); + } + + /** + * Update a DAG + * @param data The data for the request. + * @param data.requestBody + * @param data.dagId The DAG ID. + * @param data.updateMask The fields to update on the resource. If absent or empty, all modifiable fields are updated. + * A comma-separated list of fully qualified names of fields. + * + * @returns DAG Success. + * @throws ApiError + */ + public static patchDag( + data: PatchDagData + ): CancelablePromise { + return __request(OpenAPI, { + method: "PATCH", + url: "/dags/{dag_id}", + path: { + dag_id: data.dagId, + }, + query: { + update_mask: data.updateMask, + }, + body: data.requestBody, + mediaType: "application/json", + errors: { + 401: "Request not authenticated due to missing, invalid, authentication info.", + 403: "Client does not have sufficient permission.", + 404: "A specified resource is not found.", + }, + }); + } + + /** + * Delete a DAG + * Deletes all metadata related to the DAG, including finished DAG Runs and Tasks. + * Logs are not deleted. This action cannot be undone. + * + * *New in version 2.2.0* + * + * @param data The data for the request. + * @param data.dagId The DAG ID. + * @returns void Success. + * @throws ApiError + */ + public static deleteDag( + data: DeleteDagData + ): CancelablePromise { + return __request(OpenAPI, { + method: "DELETE", + url: "/dags/{dag_id}", + path: { + dag_id: data.dagId, + }, + errors: { + 400: "Client specified an invalid argument.", + 401: "Request not authenticated due to missing, invalid, authentication info.", + 403: "Client does not have sufficient permission.", + 404: "A specified resource is not found.", + 409: "An existing resource conflicts with the request.", + }, + }); + } + + /** + * Clear a set of task instances + * Clears a set of task instances associated with the DAG for a specified date range. + * + * @param data The data for the request. + * @param data.requestBody Parameters of action + * @param data.dagId The DAG ID. + * @returns TaskInstanceReferenceCollection Success. + * @throws ApiError + */ + public static postClearTaskInstances( + data: PostClearTaskInstancesData + ): CancelablePromise { + return __request(OpenAPI, { + method: "POST", + url: "/dags/{dag_id}/clearTaskInstances", + path: { + dag_id: data.dagId, + }, + body: data.requestBody, + mediaType: "application/json", + errors: { + 401: "Request not authenticated due to missing, invalid, authentication info.", + 403: "Client does not have sufficient permission.", + 404: "A specified resource is not found.", + }, + }); + } + + /** + * Set a state of task instances + * Updates the state for multiple task instances simultaneously. + * + * @param data The data for the request. + * @param data.requestBody Parameters of action + * @param data.dagId The DAG ID. + * @returns TaskInstanceReferenceCollection Success. + * @throws ApiError + */ + public static postSetTaskInstancesState( + data: PostSetTaskInstancesStateData + ): CancelablePromise { + return __request(OpenAPI, { + method: "POST", + url: "/dags/{dag_id}/updateTaskInstancesState", + path: { + dag_id: data.dagId, + }, + body: data.requestBody, + mediaType: "application/json", + errors: { + 401: "Request not authenticated due to missing, invalid, authentication info.", + 403: "Client does not have sufficient permission.", + 404: "A specified resource is not found.", + }, + }); + } + + /** + * Request re-parsing of a DAG file + * Request re-parsing of existing DAG files using a file token. + * + * @param data The data for the request. + * @param data.fileToken The key containing the encrypted path to the file. Encryption and decryption take place only on + * the server. This prevents the client from reading an non-DAG file. This also ensures API + * extensibility, because the format of encrypted data may change. + * + * @returns unknown Success. + * @throws ApiError + */ + public static reparseDagFile( + data: ReparseDagFileData + ): CancelablePromise { + return __request(OpenAPI, { + method: "PUT", + url: "/parseDagFile/{file_token}", + path: { + file_token: data.fileToken, + }, + errors: { + 401: "Request not authenticated due to missing, invalid, authentication info.", + 403: "Client does not have sufficient permission.", + 404: "A specified resource is not found.", + }, + }); + } + + /** + * Get a simplified representation of DAG + * The response contains many DAG attributes, so the response can be large. If possible, consider using GET /dags/{dag_id}. + * + * @param data The data for the request. + * @param data.dagId The DAG ID. + * @param data.fields List of field for return. + * + * @returns DAGDetail Success. + * @throws ApiError + */ + public static getDagDetails( + data: GetDagDetailsData + ): CancelablePromise { + return __request(OpenAPI, { + method: "GET", + url: "/dags/{dag_id}/details", + path: { + dag_id: data.dagId, + }, + query: { + fields: data.fields, + }, + errors: { + 401: "Request not authenticated due to missing, invalid, authentication info.", + 403: "Client does not have sufficient permission.", + 404: "A specified resource is not found.", + }, + }); + } + + /** + * Get tasks for DAG + * @param data The data for the request. + * @param data.dagId The DAG ID. + * @param data.orderBy The name of the field to order the results by. + * Prefix a field name with `-` to reverse the sort order. + * + * *New in version 2.1.0* + * + * @returns TaskCollection Success. + * @throws ApiError + */ + public static getTasks( + data: GetTasksData + ): CancelablePromise { + return __request(OpenAPI, { + method: "GET", + url: "/dags/{dag_id}/tasks", + path: { + dag_id: data.dagId, + }, + query: { + order_by: data.orderBy, + }, + errors: { + 401: "Request not authenticated due to missing, invalid, authentication info.", + 403: "Client does not have sufficient permission.", + 404: "A specified resource is not found.", + }, + }); + } + + /** + * Get simplified representation of a task + * @param data The data for the request. + * @param data.dagId The DAG ID. + * @param data.taskId The task ID. + * @returns Task Success. + * @throws ApiError + */ + public static getTask(data: GetTaskData): CancelablePromise { + return __request(OpenAPI, { + method: "GET", + url: "/dags/{dag_id}/tasks/{task_id}", + path: { + dag_id: data.dagId, + task_id: data.taskId, + }, + errors: { + 401: "Request not authenticated due to missing, invalid, authentication info.", + 403: "Client does not have sufficient permission.", + 404: "A specified resource is not found.", + }, + }); + } + + /** + * Get a source code + * Get a source code using file token. + * + * @param data The data for the request. + * @param data.fileToken The key containing the encrypted path to the file. Encryption and decryption take place only on + * the server. This prevents the client from reading an non-DAG file. This also ensures API + * extensibility, because the format of encrypted data may change. + * + * @returns unknown Success. + * @throws ApiError + */ + public static getDagSource( + data: GetDagSourceData + ): CancelablePromise { + return __request(OpenAPI, { + method: "GET", + url: "/dagSources/{file_token}", + path: { + file_token: data.fileToken, + }, + errors: { + 401: "Request not authenticated due to missing, invalid, authentication info.", + 403: "Client does not have sufficient permission.", + 404: "A specified resource is not found.", + 406: "A specified Accept header is not allowed.", + }, + }); + } +} + +export class TaskInstanceService { + /** + * Update the TaskInstance note. + * Update the manual user note of a non-mapped Task Instance. + * + * *New in version 2.5.0* + * + * @param data The data for the request. + * @param data.requestBody Parameters of set Task Instance note. + * @param data.dagId The DAG ID. + * @param data.dagRunId The DAG run ID. + * @param data.taskId The task ID. + * @returns TaskInstance Success. + * @throws ApiError + */ + public static setTaskInstanceNote( + data: SetTaskInstanceNoteData + ): CancelablePromise { + return __request(OpenAPI, { + method: "PATCH", + url: "/dags/{dag_id}/dagRuns/{dag_run_id}/taskInstances/{task_id}/setNote", + path: { + dag_id: data.dagId, + dag_run_id: data.dagRunId, + task_id: data.taskId, + }, + body: data.requestBody, + mediaType: "application/json", + errors: { + 400: "Client specified an invalid argument.", + 401: "Request not authenticated due to missing, invalid, authentication info.", + 403: "Client does not have sufficient permission.", + 404: "A specified resource is not found.", + }, + }); + } + + /** + * Update the TaskInstance note. + * Update the manual user note of a mapped Task Instance. + * + * *New in version 2.5.0* + * + * @param data The data for the request. + * @param data.requestBody Parameters of set Task Instance note. + * @param data.dagId The DAG ID. + * @param data.dagRunId The DAG run ID. + * @param data.taskId The task ID. + * @param data.mapIndex The map index. + * @returns TaskInstance Success. + * @throws ApiError + */ + public static setMappedTaskInstanceNote( + data: SetMappedTaskInstanceNoteData + ): CancelablePromise { + return __request(OpenAPI, { + method: "PATCH", + url: "/dags/{dag_id}/dagRuns/{dag_run_id}/taskInstances/{task_id}/{map_index}/setNote", + path: { + dag_id: data.dagId, + dag_run_id: data.dagRunId, + task_id: data.taskId, + map_index: data.mapIndex, + }, + body: data.requestBody, + mediaType: "application/json", + errors: { + 400: "Client specified an invalid argument.", + 401: "Request not authenticated due to missing, invalid, authentication info.", + 403: "Client does not have sufficient permission.", + 404: "A specified resource is not found.", + }, + }); + } + + /** + * Get task dependencies blocking task from getting scheduled. + * Get task dependencies blocking task from getting scheduled. + * + * *New in version 2.10.0* + * + * @param data The data for the request. + * @param data.dagId The DAG ID. + * @param data.dagRunId The DAG run ID. + * @param data.taskId The task ID. + * @returns TaskInstanceDependencyCollection Success. + * @throws ApiError + */ + public static getTaskInstanceDependencies( + data: GetTaskInstanceDependenciesData + ): CancelablePromise { + return __request(OpenAPI, { + method: "GET", + url: "/dags/{dag_id}/dagRuns/{dag_run_id}/taskInstances/{task_id}/dependencies", + path: { + dag_id: data.dagId, + dag_run_id: data.dagRunId, + task_id: data.taskId, + }, + errors: { + 400: "Client specified an invalid argument.", + 401: "Request not authenticated due to missing, invalid, authentication info.", + 403: "Client does not have sufficient permission.", + 404: "A specified resource is not found.", + }, + }); + } + + /** + * Get task dependencies blocking task from getting scheduled. + * Get task dependencies blocking task from getting scheduled. + * + * *New in version 2.10.0* + * + * @param data The data for the request. + * @param data.dagId The DAG ID. + * @param data.dagRunId The DAG run ID. + * @param data.taskId The task ID. + * @param data.mapIndex The map index. + * @returns TaskInstanceDependencyCollection Success. + * @throws ApiError + */ + public static getMappedTaskInstanceDependencies( + data: GetMappedTaskInstanceDependenciesData + ): CancelablePromise { + return __request(OpenAPI, { + method: "GET", + url: "/dags/{dag_id}/dagRuns/{dag_run_id}/taskInstances/{task_id}/{map_index}/dependencies", + path: { + dag_id: data.dagId, + dag_run_id: data.dagRunId, + task_id: data.taskId, + map_index: data.mapIndex, + }, + errors: { + 400: "Client specified an invalid argument.", + 401: "Request not authenticated due to missing, invalid, authentication info.", + 403: "Client does not have sufficient permission.", + 404: "A specified resource is not found.", + }, + }); + } + + /** + * List task instances + * This endpoint allows specifying `~` as the dag_id, dag_run_id to retrieve DAG runs for all DAGs and DAG runs. + * + * @param data The data for the request. + * @param data.dagId The DAG ID. + * @param data.dagRunId The DAG run ID. + * @param data.limit The numbers of items to return. + * @param data.offset The number of items to skip before starting to collect the result set. + * @param data.executionDateGte Returns objects greater or equal to the specified date. + * + * This can be combined with execution_date_lte parameter to receive only the selected period. + * + * @param data.executionDateLte Returns objects less than or equal to the specified date. + * + * This can be combined with execution_date_gte parameter to receive only the selected period. + * + * @param data.startDateGte Returns objects greater or equal the specified date. + * + * This can be combined with start_date_lte parameter to receive only the selected period. + * + * @param data.startDateLte Returns objects less or equal the specified date. + * + * This can be combined with start_date_gte parameter to receive only the selected period. + * + * @param data.endDateGte Returns objects greater or equal the specified date. + * + * This can be combined with start_date_lte parameter to receive only the selected period. + * + * @param data.endDateLte Returns objects less than or equal to the specified date. + * + * This can be combined with start_date_gte parameter to receive only the selected period. + * + * @param data.updatedAtGte Returns objects greater or equal the specified date. + * + * This can be combined with updated_at_lte parameter to receive only the selected period. + * + * *New in version 2.6.0* + * + * @param data.updatedAtLte Returns objects less or equal the specified date. + * + * This can be combined with updated_at_gte parameter to receive only the selected period. + * + * *New in version 2.6.0* + * + * @param data.durationGte Returns objects greater than or equal to the specified values. + * + * This can be combined with duration_lte parameter to receive only the selected period. + * + * @param data.durationLte Returns objects less than or equal to the specified values. + * + * This can be combined with duration_gte parameter to receive only the selected range. + * + * @param data.state The value can be repeated to retrieve multiple matching values (OR condition). + * @param data.pool The value can be repeated to retrieve multiple matching values (OR condition). + * @param data.queue The value can be repeated to retrieve multiple matching values (OR condition). + * @param data.executor The value can be repeated to retrieve multiple matching values (OR condition). + * @returns TaskInstanceCollection Success. + * @throws ApiError + */ + public static getTaskInstances( + data: GetTaskInstancesData + ): CancelablePromise { + return __request(OpenAPI, { + method: "GET", + url: "/dags/{dag_id}/dagRuns/{dag_run_id}/taskInstances", + path: { + dag_id: data.dagId, + dag_run_id: data.dagRunId, + }, + query: { + limit: data.limit, + offset: data.offset, + execution_date_gte: data.executionDateGte, + execution_date_lte: data.executionDateLte, + start_date_gte: data.startDateGte, + start_date_lte: data.startDateLte, + end_date_gte: data.endDateGte, + end_date_lte: data.endDateLte, + updated_at_gte: data.updatedAtGte, + updated_at_lte: data.updatedAtLte, + duration_gte: data.durationGte, + duration_lte: data.durationLte, + state: data.state, + pool: data.pool, + queue: data.queue, + executor: data.executor, + }, + errors: { + 401: "Request not authenticated due to missing, invalid, authentication info.", + 403: "Client does not have sufficient permission.", + }, + }); + } + + /** + * Get a task instance + * @param data The data for the request. + * @param data.dagId The DAG ID. + * @param data.dagRunId The DAG run ID. + * @param data.taskId The task ID. + * @returns TaskInstance Success. + * @throws ApiError + */ + public static getTaskInstance( + data: GetTaskInstanceData + ): CancelablePromise { + return __request(OpenAPI, { + method: "GET", + url: "/dags/{dag_id}/dagRuns/{dag_run_id}/taskInstances/{task_id}", + path: { + dag_id: data.dagId, + dag_run_id: data.dagRunId, + task_id: data.taskId, + }, + errors: { + 401: "Request not authenticated due to missing, invalid, authentication info.", + 403: "Client does not have sufficient permission.", + 404: "A specified resource is not found.", + }, + }); + } + + /** + * Updates the state of a task instance + * Updates the state for single task instance. + * *New in version 2.5.0* + * + * @param data The data for the request. + * @param data.requestBody Parameters of action + * @param data.dagId The DAG ID. + * @param data.dagRunId The DAG run ID. + * @param data.taskId The task ID. + * @returns TaskInstanceReference Success. + * @throws ApiError + */ + public static patchTaskInstance( + data: PatchTaskInstanceData + ): CancelablePromise { + return __request(OpenAPI, { + method: "PATCH", + url: "/dags/{dag_id}/dagRuns/{dag_run_id}/taskInstances/{task_id}", + path: { + dag_id: data.dagId, + dag_run_id: data.dagRunId, + task_id: data.taskId, + }, + body: data.requestBody, + mediaType: "application/json", + errors: { + 401: "Request not authenticated due to missing, invalid, authentication info.", + 403: "Client does not have sufficient permission.", + 404: "A specified resource is not found.", + }, + }); + } + + /** + * Get a mapped task instance + * Get details of a mapped task instance. + * + * *New in version 2.3.0* + * + * @param data The data for the request. + * @param data.dagId The DAG ID. + * @param data.dagRunId The DAG run ID. + * @param data.taskId The task ID. + * @param data.mapIndex The map index. + * @returns TaskInstance Success. + * @throws ApiError + */ + public static getMappedTaskInstance( + data: GetMappedTaskInstanceData + ): CancelablePromise { + return __request(OpenAPI, { + method: "GET", + url: "/dags/{dag_id}/dagRuns/{dag_run_id}/taskInstances/{task_id}/{map_index}", + path: { + dag_id: data.dagId, + dag_run_id: data.dagRunId, + task_id: data.taskId, + map_index: data.mapIndex, + }, + errors: { + 401: "Request not authenticated due to missing, invalid, authentication info.", + 403: "Client does not have sufficient permission.", + 404: "A specified resource is not found.", + }, + }); + } + + /** + * Updates the state of a mapped task instance + * Updates the state for single mapped task instance. + * *New in version 2.5.0* + * + * @param data The data for the request. + * @param data.dagId The DAG ID. + * @param data.dagRunId The DAG run ID. + * @param data.taskId The task ID. + * @param data.mapIndex The map index. + * @param data.requestBody Parameters of action + * @returns TaskInstanceReference Success. + * @throws ApiError + */ + public static patchMappedTaskInstance( + data: PatchMappedTaskInstanceData + ): CancelablePromise { + return __request(OpenAPI, { + method: "PATCH", + url: "/dags/{dag_id}/dagRuns/{dag_run_id}/taskInstances/{task_id}/{map_index}", + path: { + dag_id: data.dagId, + dag_run_id: data.dagRunId, + task_id: data.taskId, + map_index: data.mapIndex, + }, + body: data.requestBody, + mediaType: "application/json", + errors: { + 401: "Request not authenticated due to missing, invalid, authentication info.", + 403: "Client does not have sufficient permission.", + 404: "A specified resource is not found.", + }, + }); + } + + /** + * List mapped task instances + * Get details of all mapped task instances. + * + * *New in version 2.3.0* + * + * @param data The data for the request. + * @param data.dagId The DAG ID. + * @param data.dagRunId The DAG run ID. + * @param data.taskId The task ID. + * @param data.limit The numbers of items to return. + * @param data.offset The number of items to skip before starting to collect the result set. + * @param data.executionDateGte Returns objects greater or equal to the specified date. + * + * This can be combined with execution_date_lte parameter to receive only the selected period. + * + * @param data.executionDateLte Returns objects less than or equal to the specified date. + * + * This can be combined with execution_date_gte parameter to receive only the selected period. + * + * @param data.startDateGte Returns objects greater or equal the specified date. + * + * This can be combined with start_date_lte parameter to receive only the selected period. + * + * @param data.startDateLte Returns objects less or equal the specified date. + * + * This can be combined with start_date_gte parameter to receive only the selected period. + * + * @param data.endDateGte Returns objects greater or equal the specified date. + * + * This can be combined with start_date_lte parameter to receive only the selected period. + * + * @param data.endDateLte Returns objects less than or equal to the specified date. + * + * This can be combined with start_date_gte parameter to receive only the selected period. + * + * @param data.updatedAtGte Returns objects greater or equal the specified date. + * + * This can be combined with updated_at_lte parameter to receive only the selected period. + * + * *New in version 2.6.0* + * + * @param data.updatedAtLte Returns objects less or equal the specified date. + * + * This can be combined with updated_at_gte parameter to receive only the selected period. + * + * *New in version 2.6.0* + * + * @param data.durationGte Returns objects greater than or equal to the specified values. + * + * This can be combined with duration_lte parameter to receive only the selected period. + * + * @param data.durationLte Returns objects less than or equal to the specified values. + * + * This can be combined with duration_gte parameter to receive only the selected range. + * + * @param data.state The value can be repeated to retrieve multiple matching values (OR condition). + * @param data.pool The value can be repeated to retrieve multiple matching values (OR condition). + * @param data.queue The value can be repeated to retrieve multiple matching values (OR condition). + * @param data.executor The value can be repeated to retrieve multiple matching values (OR condition). + * @param data.orderBy The name of the field to order the results by. + * Prefix a field name with `-` to reverse the sort order. + * + * *New in version 2.1.0* + * + * @returns TaskInstanceCollection Success. + * @throws ApiError + */ + public static getMappedTaskInstances( + data: GetMappedTaskInstancesData + ): CancelablePromise { + return __request(OpenAPI, { + method: "GET", + url: "/dags/{dag_id}/dagRuns/{dag_run_id}/taskInstances/{task_id}/listMapped", + path: { + dag_id: data.dagId, + dag_run_id: data.dagRunId, + task_id: data.taskId, + }, + query: { + limit: data.limit, + offset: data.offset, + execution_date_gte: data.executionDateGte, + execution_date_lte: data.executionDateLte, + start_date_gte: data.startDateGte, + start_date_lte: data.startDateLte, + end_date_gte: data.endDateGte, + end_date_lte: data.endDateLte, + updated_at_gte: data.updatedAtGte, + updated_at_lte: data.updatedAtLte, + duration_gte: data.durationGte, + duration_lte: data.durationLte, + state: data.state, + pool: data.pool, + queue: data.queue, + executor: data.executor, + order_by: data.orderBy, + }, + errors: { + 401: "Request not authenticated due to missing, invalid, authentication info.", + 403: "Client does not have sufficient permission.", + 404: "A specified resource is not found.", + }, + }); + } + + /** + * List task instances (batch) + * List task instances from all DAGs and DAG runs. + * This endpoint is a POST to allow filtering across a large number of DAG IDs, where as a GET it would run in to maximum HTTP request URL length limits. + * + * @param data The data for the request. + * @param data.requestBody + * @returns TaskInstanceCollection Success. + * @throws ApiError + */ + public static getTaskInstancesBatch( + data: GetTaskInstancesBatchData + ): CancelablePromise { + return __request(OpenAPI, { + method: "POST", + url: "/dags/~/dagRuns/~/taskInstances/list", + body: data.requestBody, + mediaType: "application/json", + errors: { + 401: "Request not authenticated due to missing, invalid, authentication info.", + 403: "Client does not have sufficient permission.", + 404: "A specified resource is not found.", + }, + }); + } + + /** + * get taskinstance try + * Get details of a task instance try. + * + * *New in version 2.10.0* + * + * @param data The data for the request. + * @param data.dagId The DAG ID. + * @param data.dagRunId The DAG run ID. + * @param data.taskId The task ID. + * @param data.taskTryNumber The task try number. + * @returns TaskInstance Success. + * @throws ApiError + */ + public static getTaskInstanceTryDetails( + data: GetTaskInstanceTryDetailsData + ): CancelablePromise { + return __request(OpenAPI, { + method: "GET", + url: "/dags/{dag_id}/dagRuns/{dag_run_id}/taskInstances/{task_id}/tries/{task_try_number}", + path: { + dag_id: data.dagId, + dag_run_id: data.dagRunId, + task_id: data.taskId, + task_try_number: data.taskTryNumber, + }, + errors: { + 401: "Request not authenticated due to missing, invalid, authentication info.", + 403: "Client does not have sufficient permission.", + 404: "A specified resource is not found.", + }, + }); + } + + /** + * List task instance tries + * Get details of all task instance tries. + * + * *New in version 2.10.0* + * + * @param data The data for the request. + * @param data.dagId The DAG ID. + * @param data.dagRunId The DAG run ID. + * @param data.taskId The task ID. + * @param data.limit The numbers of items to return. + * @param data.offset The number of items to skip before starting to collect the result set. + * @param data.orderBy The name of the field to order the results by. + * Prefix a field name with `-` to reverse the sort order. + * + * *New in version 2.1.0* + * + * @returns TaskInstanceCollection Success. + * @throws ApiError + */ + public static getTaskInstanceTries( + data: GetTaskInstanceTriesData + ): CancelablePromise { + return __request(OpenAPI, { + method: "GET", + url: "/dags/{dag_id}/dagRuns/{dag_run_id}/taskInstances/{task_id}/tries", + path: { + dag_id: data.dagId, + dag_run_id: data.dagRunId, + task_id: data.taskId, + }, + query: { + limit: data.limit, + offset: data.offset, + order_by: data.orderBy, + }, + errors: { + 401: "Request not authenticated due to missing, invalid, authentication info.", + 403: "Client does not have sufficient permission.", + 404: "A specified resource is not found.", + }, + }); + } + + /** + * List mapped task instance tries + * Get details of all task instance tries. + * + * *New in version 2.10.0* + * + * @param data The data for the request. + * @param data.dagId The DAG ID. + * @param data.dagRunId The DAG run ID. + * @param data.taskId The task ID. + * @param data.mapIndex The map index. + * @param data.limit The numbers of items to return. + * @param data.offset The number of items to skip before starting to collect the result set. + * @param data.orderBy The name of the field to order the results by. + * Prefix a field name with `-` to reverse the sort order. + * + * *New in version 2.1.0* + * + * @returns TaskInstanceCollection Success. + * @throws ApiError + */ + public static getMappedTaskInstanceTries( + data: GetMappedTaskInstanceTriesData + ): CancelablePromise { + return __request(OpenAPI, { + method: "GET", + url: "/dags/{dag_id}/dagRuns/{dag_run_id}/taskInstances/{task_id}/{map_index}/tries", + path: { + dag_id: data.dagId, + dag_run_id: data.dagRunId, + task_id: data.taskId, + map_index: data.mapIndex, + }, + query: { + limit: data.limit, + offset: data.offset, + order_by: data.orderBy, + }, + errors: { + 401: "Request not authenticated due to missing, invalid, authentication info.", + 403: "Client does not have sufficient permission.", + 404: "A specified resource is not found.", + }, + }); + } + + /** + * get mapped taskinstance try + * Get details of a mapped task instance try. + * + * *New in version 2.10.0* + * + * @param data The data for the request. + * @param data.dagId The DAG ID. + * @param data.dagRunId The DAG run ID. + * @param data.taskId The task ID. + * @param data.mapIndex The map index. + * @param data.taskTryNumber The task try number. + * @returns TaskInstance Success. + * @throws ApiError + */ + public static getMappedTaskInstanceTryDetails( + data: GetMappedTaskInstanceTryDetailsData + ): CancelablePromise { + return __request(OpenAPI, { + method: "GET", + url: "/dags/{dag_id}/dagRuns/{dag_run_id}/taskInstances/{task_id}/{map_index}/tries/{task_try_number}", + path: { + dag_id: data.dagId, + dag_run_id: data.dagRunId, + task_id: data.taskId, + map_index: data.mapIndex, + task_try_number: data.taskTryNumber, + }, + errors: { + 401: "Request not authenticated due to missing, invalid, authentication info.", + 403: "Client does not have sufficient permission.", + 404: "A specified resource is not found.", + }, + }); + } + + /** + * List extra links + * List extra links for task instance. + * + * @param data The data for the request. + * @param data.dagId The DAG ID. + * @param data.dagRunId The DAG run ID. + * @param data.taskId The task ID. + * @returns ExtraLinkCollection Success. + * @throws ApiError + */ + public static getExtraLinks( + data: GetExtraLinksData + ): CancelablePromise { + return __request(OpenAPI, { + method: "GET", + url: "/dags/{dag_id}/dagRuns/{dag_run_id}/taskInstances/{task_id}/links", + path: { + dag_id: data.dagId, + dag_run_id: data.dagRunId, + task_id: data.taskId, + }, + errors: { + 401: "Request not authenticated due to missing, invalid, authentication info.", + 403: "Client does not have sufficient permission.", + 404: "A specified resource is not found.", + }, + }); + } + + /** + * Get logs + * Get logs for a specific task instance and its try number. + * To get log from specific character position, following way of using + * URLSafeSerializer can be used. + * + * Example: + * ``` + * from itsdangerous.url_safe import URLSafeSerializer + * + * request_url = f"api/v1/dags/{DAG_ID}/dagRuns/{RUN_ID}/taskInstances/{TASK_ID}/logs/1" + * key = app.config["SECRET_KEY"] + * serializer = URLSafeSerializer(key) + * token = serializer.dumps({"log_pos": 10000}) + * + * response = self.client.get( + * request_url, + * query_string={"token": token}, + * headers={"Accept": "text/plain"}, + * environ_overrides={"REMOTE_USER": "test"}, + * ) + * continuation_token = response.json["continuation_token"] + * metadata = URLSafeSerializer(key).loads(continuation_token) + * log_pos = metadata["log_pos"] + * end_of_log = metadata["end_of_log"] + * ``` + * If log_pos is passed as 10000 like the above example, it renders the logs starting + * from char position 10000 to last (not the end as the logs may be tailing behind in + * running state). This way pagination can be done with metadata as part of the token. + * + * @param data The data for the request. + * @param data.dagId The DAG ID. + * @param data.dagRunId The DAG run ID. + * @param data.taskId The task ID. + * @param data.taskTryNumber The task try number. + * @param data.fullContent A full content will be returned. + * By default, only the first fragment will be returned. + * + * @param data.mapIndex Filter on map index for mapped task. + * @param data.token A token that allows you to continue fetching logs. + * If passed, it will specify the location from which the download should be continued. + * + * @returns unknown Success. + * @throws ApiError + */ + public static getLog(data: GetLogData): CancelablePromise { + return __request(OpenAPI, { + method: "GET", + url: "/dags/{dag_id}/dagRuns/{dag_run_id}/taskInstances/{task_id}/logs/{task_try_number}", + path: { + dag_id: data.dagId, + dag_run_id: data.dagRunId, + task_id: data.taskId, + task_try_number: data.taskTryNumber, + }, + query: { + full_content: data.fullContent, + map_index: data.mapIndex, + token: data.token, + }, + errors: { + 400: "Client specified an invalid argument.", + 401: "Request not authenticated due to missing, invalid, authentication info.", + 403: "Client does not have sufficient permission.", + 404: "A specified resource is not found.", + }, + }); + } +} + +export class DagRunService { + /** + * List DAG runs + * This endpoint allows specifying `~` as the dag_id to retrieve DAG runs for all DAGs. + * + * @param data The data for the request. + * @param data.dagId The DAG ID. + * @param data.limit The numbers of items to return. + * @param data.offset The number of items to skip before starting to collect the result set. + * @param data.executionDateGte Returns objects greater or equal to the specified date. + * + * This can be combined with execution_date_lte parameter to receive only the selected period. + * + * @param data.executionDateLte Returns objects less than or equal to the specified date. + * + * This can be combined with execution_date_gte parameter to receive only the selected period. + * + * @param data.startDateGte Returns objects greater or equal the specified date. + * + * This can be combined with start_date_lte parameter to receive only the selected period. + * + * @param data.startDateLte Returns objects less or equal the specified date. + * + * This can be combined with start_date_gte parameter to receive only the selected period. + * + * @param data.endDateGte Returns objects greater or equal the specified date. + * + * This can be combined with start_date_lte parameter to receive only the selected period. + * + * @param data.endDateLte Returns objects less than or equal to the specified date. + * + * This can be combined with start_date_gte parameter to receive only the selected period. + * + * @param data.updatedAtGte Returns objects greater or equal the specified date. + * + * This can be combined with updated_at_lte parameter to receive only the selected period. + * + * *New in version 2.6.0* + * + * @param data.updatedAtLte Returns objects less or equal the specified date. + * + * This can be combined with updated_at_gte parameter to receive only the selected period. + * + * *New in version 2.6.0* + * + * @param data.state The value can be repeated to retrieve multiple matching values (OR condition). + * @param data.orderBy The name of the field to order the results by. + * Prefix a field name with `-` to reverse the sort order. + * + * *New in version 2.1.0* + * + * @param data.fields List of field for return. + * + * @returns DAGRunCollection List of DAG runs. + * @throws ApiError + */ + public static getDagRuns( + data: GetDagRunsData + ): CancelablePromise { + return __request(OpenAPI, { + method: "GET", + url: "/dags/{dag_id}/dagRuns", + path: { + dag_id: data.dagId, + }, + query: { + limit: data.limit, + offset: data.offset, + execution_date_gte: data.executionDateGte, + execution_date_lte: data.executionDateLte, + start_date_gte: data.startDateGte, + start_date_lte: data.startDateLte, + end_date_gte: data.endDateGte, + end_date_lte: data.endDateLte, + updated_at_gte: data.updatedAtGte, + updated_at_lte: data.updatedAtLte, + state: data.state, + order_by: data.orderBy, + fields: data.fields, + }, + errors: { + 401: "Request not authenticated due to missing, invalid, authentication info.", + }, + }); + } + + /** + * Trigger a new DAG run. + * This will initiate a dagrun. If DAG is paused then dagrun state will remain queued, and the task won't run. + * + * @param data The data for the request. + * @param data.requestBody + * @param data.dagId The DAG ID. + * @returns DAGRun Success. + * @throws ApiError + */ + public static postDagRun( + data: PostDagRunData + ): CancelablePromise { + return __request(OpenAPI, { + method: "POST", + url: "/dags/{dag_id}/dagRuns", + path: { + dag_id: data.dagId, + }, + body: data.requestBody, + mediaType: "application/json", + errors: { + 400: "Client specified an invalid argument.", + 401: "Request not authenticated due to missing, invalid, authentication info.", + 403: "Client does not have sufficient permission.", + 404: "A specified resource is not found.", + 409: "An existing resource conflicts with the request.", + }, + }); + } + + /** + * List DAG runs (batch) + * This endpoint is a POST to allow filtering across a large number of DAG IDs, where as a GET it would run in to maximum HTTP request URL length limit. + * + * @param data The data for the request. + * @param data.requestBody + * @returns DAGRunCollection Success. + * @throws ApiError + */ + public static getDagRunsBatch( + data: GetDagRunsBatchData + ): CancelablePromise { + return __request(OpenAPI, { + method: "POST", + url: "/dags/~/dagRuns/list", + body: data.requestBody, + mediaType: "application/json", + errors: { + 400: "Client specified an invalid argument.", + 401: "Request not authenticated due to missing, invalid, authentication info.", + 403: "Client does not have sufficient permission.", + }, + }); + } + + /** + * Get a DAG run + * @param data The data for the request. + * @param data.dagId The DAG ID. + * @param data.dagRunId The DAG run ID. + * @param data.fields List of field for return. + * + * @returns DAGRun Success. + * @throws ApiError + */ + public static getDagRun( + data: GetDagRunData + ): CancelablePromise { + return __request(OpenAPI, { + method: "GET", + url: "/dags/{dag_id}/dagRuns/{dag_run_id}", + path: { + dag_id: data.dagId, + dag_run_id: data.dagRunId, + }, + query: { + fields: data.fields, + }, + errors: { + 401: "Request not authenticated due to missing, invalid, authentication info.", + 403: "Client does not have sufficient permission.", + 404: "A specified resource is not found.", + }, + }); + } + + /** + * Delete a DAG run + * @param data The data for the request. + * @param data.dagId The DAG ID. + * @param data.dagRunId The DAG run ID. + * @returns void Success. + * @throws ApiError + */ + public static deleteDagRun( + data: DeleteDagRunData + ): CancelablePromise { + return __request(OpenAPI, { + method: "DELETE", + url: "/dags/{dag_id}/dagRuns/{dag_run_id}", + path: { + dag_id: data.dagId, + dag_run_id: data.dagRunId, + }, + errors: { + 400: "Client specified an invalid argument.", + 401: "Request not authenticated due to missing, invalid, authentication info.", + 403: "Client does not have sufficient permission.", + 404: "A specified resource is not found.", + }, + }); + } + + /** + * Modify a DAG run + * Modify a DAG run. + * + * *New in version 2.2.0* + * + * @param data The data for the request. + * @param data.requestBody + * @param data.dagId The DAG ID. + * @param data.dagRunId The DAG run ID. + * @returns DAGRun Success. + * @throws ApiError + */ + public static updateDagRunState( + data: UpdateDagRunStateData + ): CancelablePromise { + return __request(OpenAPI, { + method: "PATCH", + url: "/dags/{dag_id}/dagRuns/{dag_run_id}", + path: { + dag_id: data.dagId, + dag_run_id: data.dagRunId, + }, + body: data.requestBody, + mediaType: "application/json", + errors: { + 400: "Client specified an invalid argument.", + 401: "Request not authenticated due to missing, invalid, authentication info.", + 403: "Client does not have sufficient permission.", + 404: "A specified resource is not found.", + }, + }); + } + + /** + * Clear a DAG run + * Clear a DAG run. + * + * *New in version 2.4.0* + * + * @param data The data for the request. + * @param data.requestBody + * @param data.dagId The DAG ID. + * @param data.dagRunId The DAG run ID. + * @returns unknown Success. + * @throws ApiError + */ + public static clearDagRun( + data: ClearDagRunData + ): CancelablePromise { + return __request(OpenAPI, { + method: "POST", + url: "/dags/{dag_id}/dagRuns/{dag_run_id}/clear", + path: { + dag_id: data.dagId, + dag_run_id: data.dagRunId, + }, + body: data.requestBody, + mediaType: "application/json", + errors: { + 400: "Client specified an invalid argument.", + 401: "Request not authenticated due to missing, invalid, authentication info.", + 403: "Client does not have sufficient permission.", + 404: "A specified resource is not found.", + }, + }); + } + + /** + * Get dataset events for a DAG run + * Get datasets for a dag run. + * + * *New in version 2.4.0* + * + * @param data The data for the request. + * @param data.dagId The DAG ID. + * @param data.dagRunId The DAG run ID. + * @returns DatasetEventCollection Success. + * @throws ApiError + */ + public static getUpstreamDatasetEvents( + data: GetUpstreamDatasetEventsData + ): CancelablePromise { + return __request(OpenAPI, { + method: "GET", + url: "/dags/{dag_id}/dagRuns/{dag_run_id}/upstreamDatasetEvents", + path: { + dag_id: data.dagId, + dag_run_id: data.dagRunId, + }, + errors: { + 401: "Request not authenticated due to missing, invalid, authentication info.", + 403: "Client does not have sufficient permission.", + 404: "A specified resource is not found.", + }, + }); + } + + /** + * Update the DagRun note. + * Update the manual user note of a DagRun. + * + * *New in version 2.5.0* + * + * @param data The data for the request. + * @param data.requestBody Parameters of set DagRun note. + * @param data.dagId The DAG ID. + * @param data.dagRunId The DAG run ID. + * @returns DAGRun Success. + * @throws ApiError + */ + public static setDagRunNote( + data: SetDagRunNoteData + ): CancelablePromise { + return __request(OpenAPI, { + method: "PATCH", + url: "/dags/{dag_id}/dagRuns/{dag_run_id}/setNote", + path: { + dag_id: data.dagId, + dag_run_id: data.dagRunId, + }, + body: data.requestBody, + mediaType: "application/json", + errors: { + 400: "Client specified an invalid argument.", + 401: "Request not authenticated due to missing, invalid, authentication info.", + 403: "Client does not have sufficient permission.", + 404: "A specified resource is not found.", + }, + }); + } +} + +export class DatasetService { + /** + * Get dataset events for a DAG run + * Get datasets for a dag run. + * + * *New in version 2.4.0* + * + * @param data The data for the request. + * @param data.dagId The DAG ID. + * @param data.dagRunId The DAG run ID. + * @returns DatasetEventCollection Success. + * @throws ApiError + */ + public static getUpstreamDatasetEvents( + data: GetUpstreamDatasetEventsData + ): CancelablePromise { + return __request(OpenAPI, { + method: "GET", + url: "/dags/{dag_id}/dagRuns/{dag_run_id}/upstreamDatasetEvents", + path: { + dag_id: data.dagId, + dag_run_id: data.dagRunId, + }, + errors: { + 401: "Request not authenticated due to missing, invalid, authentication info.", + 403: "Client does not have sufficient permission.", + 404: "A specified resource is not found.", + }, + }); + } + + /** + * Get a queued Dataset event for a DAG + * Get a queued Dataset event for a DAG. + * + * *New in version 2.9.0* + * + * @param data The data for the request. + * @param data.dagId The DAG ID. + * @param data.uri The encoded Dataset URI + * @param data.before Timestamp to select event logs occurring before. + * @returns QueuedEvent Success. + * @throws ApiError + */ + public static getDagDatasetQueuedEvent( + data: GetDagDatasetQueuedEventData + ): CancelablePromise { + return __request(OpenAPI, { + method: "GET", + url: "/dags/{dag_id}/datasets/queuedEvent/{uri}", + path: { + dag_id: data.dagId, + uri: data.uri, + }, + query: { + before: data.before, + }, + errors: { + 401: "Request not authenticated due to missing, invalid, authentication info.", + 403: "Client does not have sufficient permission.", + 404: "A specified resource is not found.", + }, + }); + } + + /** + * Delete a queued Dataset event for a DAG. + * Delete a queued Dataset event for a DAG. + * + * *New in version 2.9.0* + * + * @param data The data for the request. + * @param data.dagId The DAG ID. + * @param data.uri The encoded Dataset URI + * @param data.before Timestamp to select event logs occurring before. + * @returns void Success. + * @throws ApiError + */ + public static deleteDagDatasetQueuedEvent( + data: DeleteDagDatasetQueuedEventData + ): CancelablePromise { + return __request(OpenAPI, { + method: "DELETE", + url: "/dags/{dag_id}/datasets/queuedEvent/{uri}", + path: { + dag_id: data.dagId, + uri: data.uri, + }, + query: { + before: data.before, + }, + errors: { + 400: "Client specified an invalid argument.", + 401: "Request not authenticated due to missing, invalid, authentication info.", + 403: "Client does not have sufficient permission.", + 404: "A specified resource is not found.", + }, + }); + } + + /** + * Get queued Dataset events for a DAG. + * Get queued Dataset events for a DAG. + * + * *New in version 2.9.0* + * + * @param data The data for the request. + * @param data.dagId The DAG ID. + * @param data.before Timestamp to select event logs occurring before. + * @returns QueuedEventCollection Success. + * @throws ApiError + */ + public static getDagDatasetQueuedEvents( + data: GetDagDatasetQueuedEventsData + ): CancelablePromise { + return __request(OpenAPI, { + method: "GET", + url: "/dags/{dag_id}/datasets/queuedEvent", + path: { + dag_id: data.dagId, + }, + query: { + before: data.before, + }, + errors: { + 401: "Request not authenticated due to missing, invalid, authentication info.", + 403: "Client does not have sufficient permission.", + 404: "A specified resource is not found.", + }, + }); + } + + /** + * Delete queued Dataset events for a DAG. + * Delete queued Dataset events for a DAG. + * + * *New in version 2.9.0* + * + * @param data The data for the request. + * @param data.dagId The DAG ID. + * @param data.before Timestamp to select event logs occurring before. + * @returns void Success. + * @throws ApiError + */ + public static deleteDagDatasetQueuedEvents( + data: DeleteDagDatasetQueuedEventsData + ): CancelablePromise { + return __request(OpenAPI, { + method: "DELETE", + url: "/dags/{dag_id}/datasets/queuedEvent", + path: { + dag_id: data.dagId, + }, + query: { + before: data.before, + }, + errors: { + 400: "Client specified an invalid argument.", + 401: "Request not authenticated due to missing, invalid, authentication info.", + 403: "Client does not have sufficient permission.", + 404: "A specified resource is not found.", + }, + }); + } + + /** + * Get queued Dataset events for a Dataset. + * Get queued Dataset events for a Dataset + * + * *New in version 2.9.0* + * + * @param data The data for the request. + * @param data.uri The encoded Dataset URI + * @param data.before Timestamp to select event logs occurring before. + * @returns QueuedEventCollection Success. + * @throws ApiError + */ + public static getDatasetQueuedEvents( + data: GetDatasetQueuedEventsData + ): CancelablePromise { + return __request(OpenAPI, { + method: "GET", + url: "/datasets/queuedEvent/{uri}", + path: { + uri: data.uri, + }, + query: { + before: data.before, + }, + errors: { + 401: "Request not authenticated due to missing, invalid, authentication info.", + 403: "Client does not have sufficient permission.", + 404: "A specified resource is not found.", + }, + }); + } + + /** + * Delete queued Dataset events for a Dataset. + * Delete queued Dataset events for a Dataset. + * + * *New in version 2.9.0* + * + * @param data The data for the request. + * @param data.uri The encoded Dataset URI + * @param data.before Timestamp to select event logs occurring before. + * @returns void Success. + * @throws ApiError + */ + public static deleteDatasetQueuedEvents( + data: DeleteDatasetQueuedEventsData + ): CancelablePromise { + return __request(OpenAPI, { + method: "DELETE", + url: "/datasets/queuedEvent/{uri}", + path: { + uri: data.uri, + }, + query: { + before: data.before, + }, + errors: { + 400: "Client specified an invalid argument.", + 401: "Request not authenticated due to missing, invalid, authentication info.", + 403: "Client does not have sufficient permission.", + 404: "A specified resource is not found.", + }, + }); + } + + /** + * List datasets + * @param data The data for the request. + * @param data.limit The numbers of items to return. + * @param data.offset The number of items to skip before starting to collect the result set. + * @param data.orderBy The name of the field to order the results by. + * Prefix a field name with `-` to reverse the sort order. + * + * *New in version 2.1.0* + * + * @param data.uriPattern If set, only return datasets with uris matching this pattern. + * + * @param data.dagIds One or more DAG IDs separated by commas to filter datasets by associated DAGs either consuming or producing. + * + * *New in version 2.9.0* + * + * @returns DatasetCollection Success. + * @throws ApiError + */ + public static getDatasets( + data: GetDatasetsData = {} + ): CancelablePromise { + return __request(OpenAPI, { + method: "GET", + url: "/datasets", + query: { + limit: data.limit, + offset: data.offset, + order_by: data.orderBy, + uri_pattern: data.uriPattern, + dag_ids: data.dagIds, + }, + errors: { + 401: "Request not authenticated due to missing, invalid, authentication info.", + 403: "Client does not have sufficient permission.", + }, + }); + } + + /** + * Get a dataset + * Get a dataset by uri. + * @param data The data for the request. + * @param data.uri The encoded Dataset URI + * @returns Dataset Success. + * @throws ApiError + */ + public static getDataset( + data: GetDatasetData + ): CancelablePromise { + return __request(OpenAPI, { + method: "GET", + url: "/datasets/{uri}", + path: { + uri: data.uri, + }, + errors: { + 401: "Request not authenticated due to missing, invalid, authentication info.", + 403: "Client does not have sufficient permission.", + 404: "A specified resource is not found.", + }, + }); + } + + /** + * Get dataset events + * Get dataset events + * @param data The data for the request. + * @param data.limit The numbers of items to return. + * @param data.offset The number of items to skip before starting to collect the result set. + * @param data.orderBy The name of the field to order the results by. + * Prefix a field name with `-` to reverse the sort order. + * + * *New in version 2.1.0* + * + * @param data.datasetId The Dataset ID that updated the dataset. + * @param data.sourceDagId The DAG ID that updated the dataset. + * @param data.sourceTaskId The task ID that updated the dataset. + * @param data.sourceRunId The DAG run ID that updated the dataset. + * @param data.sourceMapIndex The map index that updated the dataset. + * @returns DatasetEventCollection Success. + * @throws ApiError + */ + public static getDatasetEvents( + data: GetDatasetEventsData = {} + ): CancelablePromise { + return __request(OpenAPI, { + method: "GET", + url: "/datasets/events", + query: { + limit: data.limit, + offset: data.offset, + order_by: data.orderBy, + dataset_id: data.datasetId, + source_dag_id: data.sourceDagId, + source_task_id: data.sourceTaskId, + source_run_id: data.sourceRunId, + source_map_index: data.sourceMapIndex, + }, + errors: { + 401: "Request not authenticated due to missing, invalid, authentication info.", + 403: "Client does not have sufficient permission.", + 404: "A specified resource is not found.", + }, + }); + } + + /** + * Create dataset event + * Create dataset event + * @param data The data for the request. + * @param data.requestBody + * @returns DatasetEvent Success. + * @throws ApiError + */ + public static createDatasetEvent( + data: CreateDatasetEventData + ): CancelablePromise { + return __request(OpenAPI, { + method: "POST", + url: "/datasets/events", + body: data.requestBody, + mediaType: "application/json", + errors: { + 400: "Client specified an invalid argument.", + 401: "Request not authenticated due to missing, invalid, authentication info.", + 403: "Client does not have sufficient permission.", + 404: "A specified resource is not found.", + }, + }); + } +} + +export class EventLogService { + /** + * List log entries + * List log entries from event log. + * @param data The data for the request. + * @param data.limit The numbers of items to return. + * @param data.offset The number of items to skip before starting to collect the result set. + * @param data.orderBy The name of the field to order the results by. + * Prefix a field name with `-` to reverse the sort order. + * + * *New in version 2.1.0* + * + * @param data.dagId Returns objects matched by the DAG ID. + * @param data.taskId Returns objects matched by the Task ID. + * @param data.runId Returns objects matched by the Run ID. + * @param data.mapIndex Filter on map index for mapped task. + * @param data.tryNumber Filter on try_number for task instance. + * @param data.event The name of event log. + * @param data.owner The owner's name of event log. + * @param data.before Timestamp to select event logs occurring before. + * @param data.after Timestamp to select event logs occurring after. + * @param data.includedEvents One or more event names separated by commas. If set, only return event logs with events matching this pattern. + * *New in version 2.9.0* + * + * @param data.excludedEvents One or more event names separated by commas. If set, only return event logs with events that do not match this pattern. + * *New in version 2.9.0* + * + * @returns EventLogCollection Success. + * @throws ApiError + */ + public static getEventLogs( + data: GetEventLogsData = {} + ): CancelablePromise { + return __request(OpenAPI, { + method: "GET", + url: "/eventLogs", + query: { + limit: data.limit, + offset: data.offset, + order_by: data.orderBy, + dag_id: data.dagId, + task_id: data.taskId, + run_id: data.runId, + map_index: data.mapIndex, + try_number: data.tryNumber, + event: data.event, + owner: data.owner, + before: data.before, + after: data.after, + included_events: data.includedEvents, + excluded_events: data.excludedEvents, + }, + errors: { + 401: "Request not authenticated due to missing, invalid, authentication info.", + 403: "Client does not have sufficient permission.", + }, + }); + } + + /** + * Get a log entry + * @param data The data for the request. + * @param data.eventLogId The event log ID. + * @returns EventLog Success. + * @throws ApiError + */ + public static getEventLog( + data: GetEventLogData + ): CancelablePromise { + return __request(OpenAPI, { + method: "GET", + url: "/eventLogs/{event_log_id}", + path: { + event_log_id: data.eventLogId, + }, + errors: { + 401: "Request not authenticated due to missing, invalid, authentication info.", + 403: "Client does not have sufficient permission.", + 404: "A specified resource is not found.", + }, + }); + } +} + +export class ImportErrorService { + /** + * List import errors + * @param data The data for the request. + * @param data.limit The numbers of items to return. + * @param data.offset The number of items to skip before starting to collect the result set. + * @param data.orderBy The name of the field to order the results by. + * Prefix a field name with `-` to reverse the sort order. + * + * *New in version 2.1.0* + * + * @returns ImportErrorCollection Success. + * @throws ApiError + */ + public static getImportErrors( + data: GetImportErrorsData = {} + ): CancelablePromise { + return __request(OpenAPI, { + method: "GET", + url: "/importErrors", + query: { + limit: data.limit, + offset: data.offset, + order_by: data.orderBy, + }, + errors: { + 401: "Request not authenticated due to missing, invalid, authentication info.", + 403: "Client does not have sufficient permission.", + }, + }); + } + + /** + * Get an import error + * @param data The data for the request. + * @param data.importErrorId The import error ID. + * @returns ImportError Success. + * @throws ApiError + */ + public static getImportError( + data: GetImportErrorData + ): CancelablePromise { + return __request(OpenAPI, { + method: "GET", + url: "/importErrors/{import_error_id}", + path: { + import_error_id: data.importErrorId, + }, + errors: { + 401: "Request not authenticated due to missing, invalid, authentication info.", + 403: "Client does not have sufficient permission.", + 404: "A specified resource is not found.", + }, + }); + } +} + +export class PoolService { + /** + * List pools + * @param data The data for the request. + * @param data.limit The numbers of items to return. + * @param data.offset The number of items to skip before starting to collect the result set. + * @param data.orderBy The name of the field to order the results by. + * Prefix a field name with `-` to reverse the sort order. + * + * *New in version 2.1.0* + * + * @returns PoolCollection List of pools. + * @throws ApiError + */ + public static getPools( + data: GetPoolsData = {} + ): CancelablePromise { + return __request(OpenAPI, { + method: "GET", + url: "/pools", + query: { + limit: data.limit, + offset: data.offset, + order_by: data.orderBy, + }, + errors: { + 401: "Request not authenticated due to missing, invalid, authentication info.", + 403: "Client does not have sufficient permission.", + }, + }); + } + + /** + * Create a pool + * @param data The data for the request. + * @param data.requestBody + * @returns Pool Success. + * @throws ApiError + */ + public static postPool( + data: PostPoolData + ): CancelablePromise { + return __request(OpenAPI, { + method: "POST", + url: "/pools", + body: data.requestBody, + mediaType: "application/json", + errors: { + 400: "Client specified an invalid argument.", + 401: "Request not authenticated due to missing, invalid, authentication info.", + 403: "Client does not have sufficient permission.", + }, + }); + } + + /** + * Get a pool + * @param data The data for the request. + * @param data.poolName The pool name. + * @returns Pool Success. + * @throws ApiError + */ + public static getPool(data: GetPoolData): CancelablePromise { + return __request(OpenAPI, { + method: "GET", + url: "/pools/{pool_name}", + path: { + pool_name: data.poolName, + }, + errors: { + 401: "Request not authenticated due to missing, invalid, authentication info.", + 403: "Client does not have sufficient permission.", + 404: "A specified resource is not found.", + }, + }); + } + + /** + * Update a pool + * @param data The data for the request. + * @param data.requestBody + * @param data.poolName The pool name. + * @param data.updateMask The fields to update on the resource. If absent or empty, all modifiable fields are updated. + * A comma-separated list of fully qualified names of fields. + * + * @returns Pool Success. + * @throws ApiError + */ + public static patchPool( + data: PatchPoolData + ): CancelablePromise { + return __request(OpenAPI, { + method: "PATCH", + url: "/pools/{pool_name}", + path: { + pool_name: data.poolName, + }, + query: { + update_mask: data.updateMask, + }, + body: data.requestBody, + mediaType: "application/json", + errors: { + 400: "Client specified an invalid argument.", + 401: "Request not authenticated due to missing, invalid, authentication info.", + 403: "Client does not have sufficient permission.", + 404: "A specified resource is not found.", + 409: "An existing resource conflicts with the request.", + }, + }); + } + + /** + * Delete a pool + * @param data The data for the request. + * @param data.poolName The pool name. + * @returns void Success. + * @throws ApiError + */ + public static deletePool( + data: DeletePoolData + ): CancelablePromise { + return __request(OpenAPI, { + method: "DELETE", + url: "/pools/{pool_name}", + path: { + pool_name: data.poolName, + }, + errors: { + 400: "Client specified an invalid argument.", + 401: "Request not authenticated due to missing, invalid, authentication info.", + 403: "Client does not have sufficient permission.", + 404: "A specified resource is not found.", + }, + }); + } +} + +export class ProviderService { + /** + * List providers + * Get a list of providers. + * + * *New in version 2.1.0* + * + * @returns unknown List of providers. + * @throws ApiError + */ + public static getProviders(): CancelablePromise { + return __request(OpenAPI, { + method: "GET", + url: "/providers", + errors: { + 401: "Request not authenticated due to missing, invalid, authentication info.", + 403: "Client does not have sufficient permission.", + }, + }); + } +} + +export class VariableService { + /** + * List variables + * The collection does not contain data. To get data, you must get a single entity. + * @param data The data for the request. + * @param data.limit The numbers of items to return. + * @param data.offset The number of items to skip before starting to collect the result set. + * @param data.orderBy The name of the field to order the results by. + * Prefix a field name with `-` to reverse the sort order. + * + * *New in version 2.1.0* + * + * @returns VariableCollection Success. + * @throws ApiError + */ + public static getVariables( + data: GetVariablesData = {} + ): CancelablePromise { + return __request(OpenAPI, { + method: "GET", + url: "/variables", + query: { + limit: data.limit, + offset: data.offset, + order_by: data.orderBy, + }, + errors: { + 401: "Request not authenticated due to missing, invalid, authentication info.", + 403: "Client does not have sufficient permission.", + }, + }); + } + + /** + * Create a variable + * @param data The data for the request. + * @param data.requestBody + * @returns Variable Success. + * @throws ApiError + */ + public static postVariables( + data: PostVariablesData + ): CancelablePromise { + return __request(OpenAPI, { + method: "POST", + url: "/variables", + body: data.requestBody, + mediaType: "application/json", + errors: { + 400: "Client specified an invalid argument.", + 401: "Request not authenticated due to missing, invalid, authentication info.", + 403: "Client does not have sufficient permission.", + }, + }); + } + + /** + * Get a variable + * Get a variable by key. + * @param data The data for the request. + * @param data.variableKey The variable Key. + * @returns Variable Success. + * @throws ApiError + */ + public static getVariable( + data: GetVariableData + ): CancelablePromise { + return __request(OpenAPI, { + method: "GET", + url: "/variables/{variable_key}", + path: { + variable_key: data.variableKey, + }, + errors: { + 401: "Request not authenticated due to missing, invalid, authentication info.", + 403: "Client does not have sufficient permission.", + 404: "A specified resource is not found.", + }, + }); + } + + /** + * Update a variable + * Update a variable by key. + * @param data The data for the request. + * @param data.requestBody + * @param data.variableKey The variable Key. + * @param data.updateMask The fields to update on the resource. If absent or empty, all modifiable fields are updated. + * A comma-separated list of fully qualified names of fields. + * + * @returns Variable Success. + * @throws ApiError + */ + public static patchVariable( + data: PatchVariableData + ): CancelablePromise { + return __request(OpenAPI, { + method: "PATCH", + url: "/variables/{variable_key}", + path: { + variable_key: data.variableKey, + }, + query: { + update_mask: data.updateMask, + }, + body: data.requestBody, + mediaType: "application/json", + errors: { + 400: "Client specified an invalid argument.", + 401: "Request not authenticated due to missing, invalid, authentication info.", + 403: "Client does not have sufficient permission.", + 404: "A specified resource is not found.", + }, + }); + } + + /** + * Delete a variable + * @param data The data for the request. + * @param data.variableKey The variable Key. + * @returns void Success. + * @throws ApiError + */ + public static deleteVariable( + data: DeleteVariableData + ): CancelablePromise { + return __request(OpenAPI, { + method: "DELETE", + url: "/variables/{variable_key}", + path: { + variable_key: data.variableKey, + }, + errors: { + 400: "Client specified an invalid argument.", + 401: "Request not authenticated due to missing, invalid, authentication info.", + 403: "Client does not have sufficient permission.", + 404: "A specified resource is not found.", + }, + }); + } +} + +export class XcomService { + /** + * List XCom entries + * This endpoint allows specifying `~` as the dag_id, dag_run_id, task_id to retrieve XCOM entries for for all DAGs, DAG runs and task instances. XCom values won't be returned as they can be large. Use this endpoint to get a list of XCom entries and then fetch individual entry to get value. + * @param data The data for the request. + * @param data.dagId The DAG ID. + * @param data.dagRunId The DAG run ID. + * @param data.taskId The task ID. + * @param data.mapIndex Filter on map index for mapped task. + * @param data.xcomKey Only filter the XCom records which have the provided key. + * @param data.limit The numbers of items to return. + * @param data.offset The number of items to skip before starting to collect the result set. + * @returns XComCollection Success. + * @throws ApiError + */ + public static getXcomEntries( + data: GetXcomEntriesData + ): CancelablePromise { + return __request(OpenAPI, { + method: "GET", + url: "/dags/{dag_id}/dagRuns/{dag_run_id}/taskInstances/{task_id}/xcomEntries", + path: { + dag_id: data.dagId, + dag_run_id: data.dagRunId, + task_id: data.taskId, + }, + query: { + map_index: data.mapIndex, + xcom_key: data.xcomKey, + limit: data.limit, + offset: data.offset, + }, + errors: { + 401: "Request not authenticated due to missing, invalid, authentication info.", + 403: "Client does not have sufficient permission.", + }, + }); + } + + /** + * Get an XCom entry + * @param data The data for the request. + * @param data.dagId The DAG ID. + * @param data.dagRunId The DAG run ID. + * @param data.taskId The task ID. + * @param data.xcomKey The XCom key. + * @param data.mapIndex Filter on map index for mapped task. + * @param data.deserialize Whether to deserialize an XCom value when using a custom XCom backend. + * + * The XCom API endpoint calls `orm_deserialize_value` by default since an XCom may contain value + * that is potentially expensive to deserialize in the web server. Setting this to true overrides + * the consideration, and calls `deserialize_value` instead. + * + * This parameter is not meaningful when using the default XCom backend. + * + * *New in version 2.4.0* + * + * @param data.stringify Whether to convert the XCom value to be a string. XCom values can be of Any data type. + * + * If set to true (default) the Any value will be returned as string, e.g. a Python representation + * of a dict. If set to false it will return the raw data as dict, list, string or whatever was stored. + * + * *New in version 2.10.0* + * + * @returns XCom Success. + * @throws ApiError + */ + public static getXcomEntry( + data: GetXcomEntryData + ): CancelablePromise { + return __request(OpenAPI, { + method: "GET", + url: "/dags/{dag_id}/dagRuns/{dag_run_id}/taskInstances/{task_id}/xcomEntries/{xcom_key}", + path: { + dag_id: data.dagId, + dag_run_id: data.dagRunId, + task_id: data.taskId, + xcom_key: data.xcomKey, + }, + query: { + map_index: data.mapIndex, + deserialize: data.deserialize, + stringify: data.stringify, + }, + errors: { + 401: "Request not authenticated due to missing, invalid, authentication info.", + 403: "Client does not have sufficient permission.", + 404: "A specified resource is not found.", + }, + }); + } +} + +export class DagStatsService { + /** + * List Dag statistics + * @param data The data for the request. + * @param data.dagIds One or more DAG IDs separated by commas to filter relevant Dags. + * + * @returns DagStatsCollectionSchema Success. + * @throws ApiError + */ + public static getDagStats( + data: GetDagStatsData + ): CancelablePromise { + return __request(OpenAPI, { + method: "GET", + url: "/dagStats", + query: { + dag_ids: data.dagIds, + }, + errors: { + 401: "Request not authenticated due to missing, invalid, authentication info.", + 403: "Client does not have sufficient permission.", + }, + }); + } +} + +export class DagWarningService { + /** + * List dag warnings + * @param data The data for the request. + * @param data.dagId If set, only return DAG warnings with this dag_id. + * @param data.warningType If set, only return DAG warnings with this type. + * @param data.limit The numbers of items to return. + * @param data.offset The number of items to skip before starting to collect the result set. + * @param data.orderBy The name of the field to order the results by. + * Prefix a field name with `-` to reverse the sort order. + * + * *New in version 2.1.0* + * + * @returns DagWarningCollection Success. + * @throws ApiError + */ + public static getDagWarnings( + data: GetDagWarningsData = {} + ): CancelablePromise { + return __request(OpenAPI, { + method: "GET", + url: "/dagWarnings", + query: { + dag_id: data.dagId, + warning_type: data.warningType, + limit: data.limit, + offset: data.offset, + order_by: data.orderBy, + }, + errors: { + 401: "Request not authenticated due to missing, invalid, authentication info.", + 403: "Client does not have sufficient permission.", + }, + }); + } +} + +export class ConfigService { + /** + * Get current configuration + * @param data The data for the request. + * @param data.section If given, only return config of this section. + * @returns Config Success. + * @throws ApiError + */ + public static getConfig( + data: GetConfigData = {} + ): CancelablePromise { + return __request(OpenAPI, { + method: "GET", + url: "/config", + query: { + section: data.section, + }, + errors: { + 401: "Request not authenticated due to missing, invalid, authentication info.", + 403: "Client does not have sufficient permission.", + 404: "A specified resource is not found.", + }, + }); + } + + /** + * Get a option from configuration + * @param data The data for the request. + * @param data.section + * @param data.option + * @returns Config Success. + * @throws ApiError + */ + public static getValue( + data: GetValueData + ): CancelablePromise { + return __request(OpenAPI, { + method: "GET", + url: "/config/section/{section}/option/{option}", + path: { + section: data.section, + option: data.option, + }, + errors: { + 401: "Request not authenticated due to missing, invalid, authentication info.", + 403: "Client does not have sufficient permission.", + 404: "A specified resource is not found.", + }, + }); + } +} + +export class MonitoringService { + /** + * Get instance status + * Get the status of Airflow's metadatabase, triggerer and scheduler. It includes info about + * metadatabase and last heartbeat of scheduler and triggerer. + * + * @returns HealthInfo Success. + * @throws ApiError + */ + public static getHealth(): CancelablePromise { + return __request(OpenAPI, { + method: "GET", + url: "/health", + }); + } + + /** + * Get version information + * @returns VersionInfo Success. + * @throws ApiError + */ + public static getVersion(): CancelablePromise { + return __request(OpenAPI, { + method: "GET", + url: "/version", + }); + } +} + +export class PluginService { + /** + * Get a list of loaded plugins + * Get a list of loaded plugins. + * + * *New in version 2.1.0* + * + * @param data The data for the request. + * @param data.limit The numbers of items to return. + * @param data.offset The number of items to skip before starting to collect the result set. + * @returns PluginCollection Success + * @throws ApiError + */ + public static getPlugins( + data: GetPluginsData = {} + ): CancelablePromise { + return __request(OpenAPI, { + method: "GET", + url: "/plugins", + query: { + limit: data.limit, + offset: data.offset, + }, + errors: { + 401: "Request not authenticated due to missing, invalid, authentication info.", + 403: "Client does not have sufficient permission.", + 404: "A specified resource is not found.", + }, + }); + } +} + +export class RoleService { + /** + * @deprecated + * List roles + * Get a list of roles. + * + * *This API endpoint is deprecated, please use the endpoint `/auth/fab/v1` for this operation instead.* + * + * @param data The data for the request. + * @param data.limit The numbers of items to return. + * @param data.offset The number of items to skip before starting to collect the result set. + * @param data.orderBy The name of the field to order the results by. + * Prefix a field name with `-` to reverse the sort order. + * + * *New in version 2.1.0* + * + * @returns RoleCollection Success. + * @throws ApiError + */ + public static getRoles( + data: GetRolesData = {} + ): CancelablePromise { + return __request(OpenAPI, { + method: "GET", + url: "/roles", + query: { + limit: data.limit, + offset: data.offset, + order_by: data.orderBy, + }, + errors: { + 401: "Request not authenticated due to missing, invalid, authentication info.", + 403: "Client does not have sufficient permission.", + }, + }); + } + + /** + * @deprecated + * Create a role + * Create a new role. + * + * *This API endpoint is deprecated, please use the endpoint `/auth/fab/v1` for this operation instead.* + * + * @param data The data for the request. + * @param data.requestBody + * @returns Role Success. + * @throws ApiError + */ + public static postRole( + data: PostRoleData + ): CancelablePromise { + return __request(OpenAPI, { + method: "POST", + url: "/roles", + body: data.requestBody, + mediaType: "application/json", + errors: { + 400: "Client specified an invalid argument.", + 401: "Request not authenticated due to missing, invalid, authentication info.", + 403: "Client does not have sufficient permission.", + }, + }); + } + + /** + * @deprecated + * Get a role + * Get a role. + * + * *This API endpoint is deprecated, please use the endpoint `/auth/fab/v1` for this operation instead.* + * + * @param data The data for the request. + * @param data.roleName The role name + * @returns Role Success. + * @throws ApiError + */ + public static getRole(data: GetRoleData): CancelablePromise { + return __request(OpenAPI, { + method: "GET", + url: "/roles/{role_name}", + path: { + role_name: data.roleName, + }, + errors: { + 401: "Request not authenticated due to missing, invalid, authentication info.", + 403: "Client does not have sufficient permission.", + 404: "A specified resource is not found.", + }, + }); + } + + /** + * @deprecated + * Update a role + * Update a role. + * + * *This API endpoint is deprecated, please use the endpoint `/auth/fab/v1` for this operation instead.* + * + * @param data The data for the request. + * @param data.requestBody + * @param data.roleName The role name + * @param data.updateMask The fields to update on the resource. If absent or empty, all modifiable fields are updated. + * A comma-separated list of fully qualified names of fields. + * + * @returns Role Success. + * @throws ApiError + */ + public static patchRole( + data: PatchRoleData + ): CancelablePromise { + return __request(OpenAPI, { + method: "PATCH", + url: "/roles/{role_name}", + path: { + role_name: data.roleName, + }, + query: { + update_mask: data.updateMask, + }, + body: data.requestBody, + mediaType: "application/json", + errors: { + 400: "Client specified an invalid argument.", + 401: "Request not authenticated due to missing, invalid, authentication info.", + 403: "Client does not have sufficient permission.", + 404: "A specified resource is not found.", + }, + }); + } + + /** + * @deprecated + * Delete a role + * Delete a role. + * + * *This API endpoint is deprecated, please use the endpoint `/auth/fab/v1` for this operation instead.* + * + * @param data The data for the request. + * @param data.roleName The role name + * @returns void Success. + * @throws ApiError + */ + public static deleteRole( + data: DeleteRoleData + ): CancelablePromise { + return __request(OpenAPI, { + method: "DELETE", + url: "/roles/{role_name}", + path: { + role_name: data.roleName, + }, + errors: { + 400: "Client specified an invalid argument.", + 401: "Request not authenticated due to missing, invalid, authentication info.", + 403: "Client does not have sufficient permission.", + 404: "A specified resource is not found.", + }, + }); + } +} + +export class PermissionService { + /** + * @deprecated + * List permissions + * Get a list of permissions. + * + * *This API endpoint is deprecated, please use the endpoint `/auth/fab/v1` for this operation instead.* + * + * @param data The data for the request. + * @param data.limit The numbers of items to return. + * @param data.offset The number of items to skip before starting to collect the result set. + * @returns ActionCollection Success. + * @throws ApiError + */ + public static getPermissions( + data: GetPermissionsData = {} + ): CancelablePromise { + return __request(OpenAPI, { + method: "GET", + url: "/permissions", + query: { + limit: data.limit, + offset: data.offset, + }, + errors: { + 401: "Request not authenticated due to missing, invalid, authentication info.", + 403: "Client does not have sufficient permission.", + }, + }); + } +} + +export class UserService { + /** + * @deprecated + * List users + * Get a list of users. + * + * *This API endpoint is deprecated, please use the endpoint `/auth/fab/v1` for this operation instead.* + * + * @param data The data for the request. + * @param data.limit The numbers of items to return. + * @param data.offset The number of items to skip before starting to collect the result set. + * @param data.orderBy The name of the field to order the results by. + * Prefix a field name with `-` to reverse the sort order. + * + * *New in version 2.1.0* + * + * @returns UserCollection Success. + * @throws ApiError + */ + public static getUsers( + data: GetUsersData = {} + ): CancelablePromise { + return __request(OpenAPI, { + method: "GET", + url: "/users", + query: { + limit: data.limit, + offset: data.offset, + order_by: data.orderBy, + }, + errors: { + 401: "Request not authenticated due to missing, invalid, authentication info.", + 403: "Client does not have sufficient permission.", + }, + }); + } + + /** + * @deprecated + * Create a user + * Create a new user with unique username and email. + * + * *This API endpoint is deprecated, please use the endpoint `/auth/fab/v1` for this operation instead.* + * + * @param data The data for the request. + * @param data.requestBody + * @returns User Success. + * @throws ApiError + */ + public static postUser( + data: PostUserData + ): CancelablePromise { + return __request(OpenAPI, { + method: "POST", + url: "/users", + body: data.requestBody, + mediaType: "application/json", + errors: { + 400: "Client specified an invalid argument.", + 401: "Request not authenticated due to missing, invalid, authentication info.", + 403: "Client does not have sufficient permission.", + 409: "An existing resource conflicts with the request.", + }, + }); + } + + /** + * @deprecated + * Get a user + * Get a user with a specific username. + * + * *This API endpoint is deprecated, please use the endpoint `/auth/fab/v1` for this operation instead.* + * + * @param data The data for the request. + * @param data.username The username of the user. + * + * *New in version 2.1.0* + * + * @returns UserCollectionItem Success. + * @throws ApiError + */ + public static getUser(data: GetUserData): CancelablePromise { + return __request(OpenAPI, { + method: "GET", + url: "/users/{username}", + path: { + username: data.username, + }, + errors: { + 401: "Request not authenticated due to missing, invalid, authentication info.", + 403: "Client does not have sufficient permission.", + 404: "A specified resource is not found.", + }, + }); + } + + /** + * @deprecated + * Update a user + * Update fields for a user. + * + * *This API endpoint is deprecated, please use the endpoint `/auth/fab/v1` for this operation instead.* + * + * @param data The data for the request. + * @param data.requestBody + * @param data.username The username of the user. + * + * *New in version 2.1.0* + * + * @param data.updateMask The fields to update on the resource. If absent or empty, all modifiable fields are updated. + * A comma-separated list of fully qualified names of fields. + * + * @returns UserCollectionItem Success. + * @throws ApiError + */ + public static patchUser( + data: PatchUserData + ): CancelablePromise { + return __request(OpenAPI, { + method: "PATCH", + url: "/users/{username}", + path: { + username: data.username, + }, + query: { + update_mask: data.updateMask, + }, + body: data.requestBody, + mediaType: "application/json", + errors: { + 400: "Client specified an invalid argument.", + 401: "Request not authenticated due to missing, invalid, authentication info.", + 403: "Client does not have sufficient permission.", + 404: "A specified resource is not found.", + }, + }); + } + + /** + * @deprecated + * Delete a user + * Delete a user with a specific username. + * + * *This API endpoint is deprecated, please use the endpoint `/auth/fab/v1` for this operation instead.* + * + * @param data The data for the request. + * @param data.username The username of the user. + * + * *New in version 2.1.0* + * + * @returns void Success. + * @throws ApiError + */ + public static deleteUser( + data: DeleteUserData + ): CancelablePromise { + return __request(OpenAPI, { + method: "DELETE", + url: "/users/{username}", + path: { + username: data.username, + }, + errors: { + 400: "Client specified an invalid argument.", + 401: "Request not authenticated due to missing, invalid, authentication info.", + 403: "Client does not have sufficient permission.", + 404: "A specified resource is not found.", + }, + }); + } +} diff --git a/airflow/ui/openapi-gen/requests/types.gen.ts b/airflow/ui/openapi-gen/requests/types.gen.ts new file mode 100644 index 0000000000000..63138c6060fa3 --- /dev/null +++ b/airflow/ui/openapi-gen/requests/types.gen.ts @@ -0,0 +1,6164 @@ +// This file is auto-generated by @hey-api/openapi-ts + +/** + * A user object. + * + * *New in version 2.1.0* + * + */ +export type UserCollectionItem = { + /** + * The user's first name. + * + * *Changed in version 2.4.0*: The requirement for this to be non-empty was removed. + * + */ + first_name?: string; + /** + * The user's last name. + * + * *Changed in version 2.4.0*: The requirement for this to be non-empty was removed. + * + */ + last_name?: string; + /** + * The username. + * + * *Changed in version 2.2.0*: A minimum character length requirement ('minLength') is added. + * + */ + username?: string; + /** + * The user's email. + * + * *Changed in version 2.2.0*: A minimum character length requirement ('minLength') is added. + * + */ + email?: string; + /** + * Whether the user is active + */ + readonly active?: boolean | null; + /** + * The last user login + */ + readonly last_login?: string | null; + /** + * The login count + */ + readonly login_count?: number | null; + /** + * The number of times the login failed + */ + readonly failed_login_count?: number | null; + /** + * User roles. + * + * *Changed in version 2.2.0*: Field is no longer read-only. + * + */ + roles?: Array<{ + name?: string; + } | null>; + /** + * The date user was created + */ + readonly created_on?: string | null; + /** + * The date user was changed + */ + readonly changed_on?: string | null; +}; + +/** + * A user object with sensitive data. + * + * *New in version 2.1.0* + * + */ +export type User = UserCollectionItem & { + password?: string; +}; + +/** + * Collection of users. + * + * *New in version 2.1.0* + * + */ +export type UserCollection = { + users?: Array; +} & CollectionInfo; + +/** + * Connection collection item. + * The password and extra fields are only available when retrieving a single object due to the sensitivity of this data. + * + */ +export type ConnectionCollectionItem = { + /** + * The connection ID. + */ + connection_id?: string; + /** + * The connection type. + */ + conn_type?: string; + /** + * The description of the connection. + */ + description?: string | null; + /** + * Host of the connection. + */ + host?: string | null; + /** + * Login of the connection. + */ + login?: string | null; + /** + * Schema of the connection. + */ + schema?: string | null; + /** + * Port of the connection. + */ + port?: number | null; +}; + +/** + * Collection of connections. + * + * *Changed in version 2.1.0*: 'total_entries' field is added. + * + */ +export type ConnectionCollection = { + connections?: Array; +} & CollectionInfo; + +/** + * Full representation of the connection. + */ +export type Connection = ConnectionCollectionItem & { + /** + * Password of the connection. + */ + password?: string; + /** + * Other values that cannot be put into another field, e.g. RSA keys. + */ + extra?: string | null; +}; + +/** + * Connection test results. + * + * *New in version 2.2.0* + * + */ +export type ConnectionTest = { + /** + * The status of the request. + */ + status?: boolean; + /** + * The success or failure message of the request. + */ + message?: string; +}; + +/** + * DAG + */ +export type DAG = { + /** + * The ID of the DAG. + */ + readonly dag_id?: string; + /** + * Human centric display text for the DAG. + * + * *New in version 2.9.0* + * + */ + readonly dag_display_name?: string; + /** + * Whether the DAG is paused. + */ + is_paused?: boolean | null; + /** + * Whether the DAG is currently seen by the scheduler(s). + * + * *New in version 2.1.1* + * + * *Changed in version 2.2.0*: Field is read-only. + * + */ + readonly is_active?: boolean | null; + /** + * The last time the DAG was parsed. + * + * *New in version 2.3.0* + * + */ + readonly last_parsed_time?: string | null; + /** + * The last time the DAG was pickled. + * + * *New in version 2.3.0* + * + */ + readonly last_pickled?: string | null; + /** + * Time when the DAG last received a refresh signal + * (e.g. the DAG's "refresh" button was clicked in the web UI) + * + * *New in version 2.3.0* + * + */ + readonly last_expired?: string | null; + /** + * Whether (one of) the scheduler is scheduling this DAG at the moment + * + * *New in version 2.3.0* + * + */ + readonly scheduler_lock?: boolean | null; + /** + * Foreign key to the latest pickle_id + * + * *New in version 2.3.0* + * + */ + readonly pickle_id?: string | null; + /** + * Default view of the DAG inside the webserver + * + * *New in version 2.3.0* + * + */ + readonly default_view?: string | null; + /** + * The absolute path to the file. + */ + readonly fileloc?: string; + /** + * The key containing the encrypted path to the file. Encryption and decryption take place only on the server. This prevents the client from reading an non-DAG file. This also ensures API extensibility, because the format of encrypted data may change. + * + */ + readonly file_token?: string; + readonly owners?: Array; + /** + * User-provided DAG description, which can consist of several sentences or paragraphs that describe DAG contents. + * + */ + readonly description?: string | null; + schedule_interval?: ScheduleInterval; + /** + * Timetable/Schedule Interval description. + * + * *New in version 2.3.0* + * + */ + readonly timetable_description?: string | null; + /** + * List of tags. + */ + readonly tags?: Array | null; + /** + * Maximum number of active tasks that can be run on the DAG + * + * *New in version 2.3.0* + * + */ + readonly max_active_tasks?: number | null; + /** + * Maximum number of active DAG runs for the DAG + * + * *New in version 2.3.0* + * + */ + readonly max_active_runs?: number | null; + /** + * Whether the DAG has task concurrency limits + * + * *New in version 2.3.0* + * + */ + readonly has_task_concurrency_limits?: boolean | null; + /** + * Whether the DAG has import errors + * + * *New in version 2.3.0* + * + */ + readonly has_import_errors?: boolean | null; + /** + * The logical date of the next dag run. + * + * *New in version 2.3.0* + * + */ + readonly next_dagrun?: string | null; + /** + * The start of the interval of the next dag run. + * + * *New in version 2.3.0* + * + */ + readonly next_dagrun_data_interval_start?: string | null; + /** + * The end of the interval of the next dag run. + * + * *New in version 2.3.0* + * + */ + readonly next_dagrun_data_interval_end?: string | null; + /** + * Earliest time at which this ``next_dagrun`` can be created. + * + * *New in version 2.3.0* + * + */ + readonly next_dagrun_create_after?: string | null; + /** + * (experimental) The maximum number of consecutive DAG failures before DAG is automatically paused. + * + * *New in version 2.9.0* + * + */ + readonly max_consecutive_failed_dag_runs?: number | null; +}; + +/** + * Collection of DAGs. + * + * *Changed in version 2.1.0*: 'total_entries' field is added. + * + */ +export type DAGCollection = { + dags?: Array; +} & CollectionInfo; + +export type DAGRun = { + /** + * Run ID. + * + * The value of this field can be set only when creating the object. If you try to modify the + * field of an existing object, the request fails with an BAD_REQUEST error. + * + * If not provided, a value will be generated based on execution_date. + * + * If the specified dag_run_id is in use, the creation request fails with an ALREADY_EXISTS error. + * + * This together with DAG_ID are a unique key. + * + */ + dag_run_id?: string | null; + readonly dag_id?: string; + /** + * The logical date (previously called execution date). This is the time or interval covered by + * this DAG run, according to the DAG definition. + * + * The value of this field can be set only when creating the object. If you try to modify the + * field of an existing object, the request fails with an BAD_REQUEST error. + * + * This together with DAG_ID are a unique key. + * + * *New in version 2.2.0* + * + */ + logical_date?: string | null; + /** + * The execution date. This is the same as logical_date, kept for backwards compatibility. + * If both this field and logical_date are provided but with different values, the request + * will fail with an BAD_REQUEST error. + * + * *Changed in version 2.2.0*: Field becomes nullable. + * + * *Deprecated since version 2.2.0*: Use 'logical_date' instead. + * + * @deprecated + */ + execution_date?: string | null; + /** + * The start time. The time when DAG run was actually created. + * + * *Changed in version 2.1.3*: Field becomes nullable. + * + */ + readonly start_date?: string | null; + readonly end_date?: string | null; + /** + * The beginning of the interval the DAG run covers. + * + */ + data_interval_start?: string | null; + /** + * The end of the interval the DAG run covers. + * + */ + data_interval_end?: string | null; + readonly last_scheduling_decision?: string | null; + readonly run_type?: "backfill" | "manual" | "scheduled" | "dataset_triggered"; + state?: DagState; + readonly external_trigger?: boolean; + /** + * JSON object describing additional configuration parameters. + * + * The value of this field can be set only when creating the object. If you try to modify the + * field of an existing object, the request fails with an BAD_REQUEST error. + * + */ + conf?: { + [key: string]: unknown; + }; + /** + * Contains manually entered notes by the user about the DagRun. + * + * *New in version 2.5.0* + * + */ + note?: string | null; +}; + +export type run_type = + | "backfill" + | "manual" + | "scheduled" + | "dataset_triggered"; + +/** + * Modify the state of a DAG run. + * + * *New in version 2.2.0* + * + */ +export type UpdateDagRunState = { + /** + * The state to set this DagRun + */ + state?: "success" | "failed" | "queued"; +}; + +/** + * The state to set this DagRun + */ +export type state = "success" | "failed" | "queued"; + +/** + * Collection of DAG runs. + * + * *Changed in version 2.1.0*: 'total_entries' field is added. + * + */ +export type DAGRunCollection = { + dag_runs?: Array; +} & CollectionInfo; + +/** + * Collection of Dag statistics. + * + */ +export type DagStatsCollectionSchema = { + dags?: Array; +} & CollectionInfo; + +/** + * DagStats entry collection item. + */ +export type DagStatsCollectionItem = { + /** + * The DAG ID. + */ + dag_id?: string; + stats?: Array | null; +}; + +/** + * DagStatsState entry collection item. + */ +export type DagStatsStateCollectionItem = { + /** + * The DAG state. + */ + state?: string; + /** + * The DAG state count. + */ + count?: number; +}; + +export type DagWarning = { + /** + * The dag_id. + */ + readonly dag_id?: string; + /** + * The warning type for the dag warning. + */ + readonly warning_type?: string; + /** + * The message for the dag warning. + */ + readonly message?: string; + /** + * The time when this warning was logged. + */ + readonly timestamp?: string; +}; + +/** + * Collection of DAG warnings. + * + */ +export type DagWarningCollection = { + import_errors?: Array; +} & CollectionInfo; + +export type SetDagRunNote = { + /** + * Custom notes left by users for this Dag Run. + */ + note?: string; +}; + +/** + * Log of user operations via CLI or Web UI. + */ +export type EventLog = { + /** + * The event log ID + */ + readonly event_log_id?: number; + /** + * The time when these events happened. + */ + readonly when?: string; + /** + * The DAG ID + */ + readonly dag_id?: string | null; + /** + * The Task ID + */ + readonly task_id?: string | null; + /** + * The DAG Run ID + */ + readonly run_id?: string | null; + /** + * The Map Index + */ + readonly map_index?: number | null; + /** + * The Try Number + */ + readonly try_number?: number | null; + /** + * A key describing the type of event. + */ + readonly event?: string; + /** + * When the event was dispatched for an object having execution_date, the value of this field. + * + */ + readonly execution_date?: string | null; + /** + * Name of the user who triggered these events a. + */ + readonly owner?: string | null; + /** + * Other information that was not included in the other fields, e.g. the complete CLI command. + * + */ + readonly extra?: string | null; +}; + +/** + * Collection of event logs. + * + * *Changed in version 2.1.0*: 'total_entries' field is added. + * *Changed in version 2.10.0*: 'try_number' and 'map_index' fields are added. + * + */ +export type EventLogCollection = { + event_logs?: Array; +} & CollectionInfo; + +export type ImportError = { + /** + * The import error ID. + */ + readonly import_error_id?: number; + /** + * The time when this error was created. + */ + readonly timestamp?: string; + /** + * The filename + */ + readonly filename?: string; + /** + * The full stackstrace. + */ + readonly stack_trace?: string; +}; + +/** + * Collection of import errors. + * + * *Changed in version 2.1.0*: 'total_entries' field is added. + * + */ +export type ImportErrorCollection = { + import_errors?: Array; +} & CollectionInfo; + +/** + * Instance status information. + */ +export type HealthInfo = { + metadatabase?: MetadatabaseStatus; + scheduler?: SchedulerStatus; + triggerer?: TriggererStatus; + dag_processor?: DagProcessorStatus; +}; + +/** + * The status of the metadatabase. + */ +export type MetadatabaseStatus = { + status?: HealthStatus; +}; + +/** + * The status and the latest scheduler heartbeat. + */ +export type SchedulerStatus = { + status?: HealthStatus; + /** + * The time the scheduler last did a heartbeat. + */ + readonly latest_scheduler_heartbeat?: string | null; +}; + +/** + * The status and the latest triggerer heartbeat. + * + * *New in version 2.6.2* + * + */ +export type TriggererStatus = { + status?: HealthStatus; + /** + * The time the triggerer last did a heartbeat. + */ + readonly latest_triggerer_heartbeat?: string | null; +}; + +/** + * The status and the latest dag processor heartbeat. + * + * *New in version 2.6.3* + * + */ +export type DagProcessorStatus = { + status?: HealthStatus; + /** + * The time the dag processor last did a heartbeat. + */ + readonly latest_dag_processor_heartbeat?: string | null; +}; + +/** + * The pool + */ +export type Pool = { + /** + * The name of pool. + */ + name?: string; + /** + * The maximum number of slots that can be assigned to tasks. One job may occupy one or more slots. + * + */ + slots?: number; + /** + * The number of slots used by running/queued tasks at the moment. May include deferred tasks if 'include_deferred' is set to true. + */ + readonly occupied_slots?: number; + /** + * The number of slots used by running tasks at the moment. + */ + readonly running_slots?: number; + /** + * The number of slots used by queued tasks at the moment. + */ + readonly queued_slots?: number; + /** + * The number of free slots at the moment. + */ + readonly open_slots?: number; + /** + * The number of slots used by scheduled tasks at the moment. + */ + readonly scheduled_slots?: number; + /** + * The number of slots used by deferred tasks at the moment. Relevant if 'include_deferred' is set to true. + * + * *New in version 2.7.0* + * + */ + readonly deferred_slots?: number; + /** + * The description of the pool. + * + * *New in version 2.3.0* + * + */ + description?: string | null; + /** + * If set to true, deferred tasks are considered when calculating open pool slots. + * + * *New in version 2.7.0* + * + */ + include_deferred?: boolean; +}; + +/** + * Collection of pools. + * + * *Changed in version 2.1.0*: 'total_entries' field is added. + * + */ +export type PoolCollection = { + pools?: Array; +} & CollectionInfo; + +/** + * The provider + * + * *New in version 2.1.0* + * + */ +export type Provider = { + /** + * The package name of the provider. + */ + package_name?: string; + /** + * The description of the provider. + */ + description?: string; + /** + * The version of the provider. + */ + version?: string; +}; + +/** + * Collection of providers. + * + * *New in version 2.1.0* + * + */ +export type ProviderCollection = { + providers?: Array; +}; + +export type SLAMiss = { + /** + * The task ID. + */ + readonly task_id?: string; + /** + * The DAG ID. + */ + dag_id?: string; + execution_date?: string; + email_sent?: boolean; + timestamp?: string; + description?: string | null; + notification_sent?: boolean; +} | null; + +export type Trigger = { + id?: number; + classpath?: string; + kwargs?: string; + created_date?: string; + triggerer_id?: number | null; +} | null; + +export type TaskFailedDependency = { + name?: string; + reason?: string; +}; + +export type TaskInstanceDependencyCollection = { + dependencies?: Array; +}; + +export type Job = { + id?: number; + dag_id?: string | null; + state?: string | null; + job_type?: string | null; + start_date?: string | null; + end_date?: string | null; + latest_heartbeat?: string | null; + executor_class?: string | null; + hostname?: string | null; + unixname?: string | null; +} | null; + +export type TaskInstance = { + task_id?: string; + /** + * Human centric display text for the task. + * + * *New in version 2.9.0* + * + */ + task_display_name?: string; + dag_id?: string; + /** + * The DagRun ID for this task instance + * + * *New in version 2.3.0* + * + */ + dag_run_id?: string; + execution_date?: string; + start_date?: string | null; + end_date?: string | null; + duration?: number | null; + state?: TaskState; + try_number?: number; + map_index?: number; + max_tries?: number; + hostname?: string; + unixname?: string; + pool?: string; + pool_slots?: number; + queue?: string | null; + priority_weight?: number | null; + /** + * *Changed in version 2.1.1*: Field becomes nullable. + * + */ + operator?: string | null; + /** + * The datetime that the task enter the state QUEUE, also known as queue_at + * + */ + queued_when?: string | null; + pid?: number | null; + /** + * Executor the task is configured to run on or None (which indicates the default executor) + * + * *New in version 2.10.0* + * + */ + executor?: string | null; + executor_config?: string; + sla_miss?: SLAMiss; + /** + * Rendered name of an expanded task instance, if the task is mapped. + * + * *New in version 2.9.0* + * + */ + rendered_map_index?: string | null; + /** + * JSON object describing rendered fields. + * + * *New in version 2.3.0* + * + */ + rendered_fields?: { + [key: string]: unknown; + }; + trigger?: Trigger; + triggerer_job?: Job; + /** + * Contains manually entered notes by the user about the TaskInstance. + * + * *New in version 2.5.0* + * + */ + note?: string | null; +}; + +/** + * Collection of task instances. + * + * *Changed in version 2.1.0*: 'total_entries' field is added. + * + */ +export type TaskInstanceCollection = { + task_instances?: Array; +} & CollectionInfo; + +export type TaskInstanceReference = { + /** + * The task ID. + */ + readonly task_id?: string; + /** + * The DAG ID. + */ + readonly dag_id?: string; + readonly execution_date?: string; + /** + * The DAG run ID. + */ + readonly dag_run_id?: string; +}; + +export type TaskInstanceReferenceCollection = { + task_instances?: Array; +}; + +/** + * XCom entry collection item. + * The value field are only available when retrieving a single object due to the sensitivity of this data. + */ +export type VariableCollectionItem = { + key?: string; + /** + * The description of the variable. + * + * *New in version 2.4.0* + * + */ + description?: string | null; +}; + +/** + * Collection of variables. + * + * *Changed in version 2.1.0*: 'total_entries' field is added. + * + */ +export type VariableCollection = { + variables?: Array; +} & CollectionInfo; + +/** + * Full representation of Variable + */ +export type Variable = VariableCollectionItem & { + value?: string; +}; + +/** + * XCom entry collection item. + * + * The value field is only available when reading a single object due to the size of the value. + * + */ +export type XComCollectionItem = { + key?: string; + timestamp?: string; + execution_date?: string; + map_index?: number; + task_id?: string; + dag_id?: string; +}; + +/** + * Collection of XCom entries. + * + * *Changed in version 2.1.0*: 'total_entries' field is added. + * + */ +export type XComCollection = { + xcom_entries?: Array; +} & CollectionInfo; + +/** + * Full representations of XCom entry. + */ +export type XCom = XComCollectionItem & { + /** + * The value(s), + */ + value?: + | string + | number + | boolean + | Array + | { + [key: string]: unknown; + }; +}; + +/** + * DAG details. + * + * For details see: + * [airflow.models.dag.DAG](https://airflow.apache.org/docs/apache-airflow/stable/_api/airflow/models/dag/index.html#airflow.models.dag.DAG) + * + */ +export type DAGDetail = DAG & { + timezone?: Timezone | null; + readonly catchup?: boolean | null; + readonly orientation?: string | null; + readonly concurrency?: number | null; + /** + * The DAG's start date. + * + * *Changed in version 2.0.1*: Field becomes nullable. + * + */ + readonly start_date?: string | null; + dag_run_timeout?: TimeDelta | null; + /** + * Nested dataset any/all conditions + */ + dataset_expression?: { + [key: string]: unknown; + } | null; + readonly doc_md?: string | null; + readonly default_view?: string | null; + /** + * User-specified DAG params. + * + * *New in version 2.0.1* + * + */ + readonly params?: { + [key: string]: unknown; + }; + /** + * The DAG's end date. + * + * *New in version 2.3.0*. + * + */ + readonly end_date?: string | null; + /** + * Whether the DAG is paused upon creation. + * + * *New in version 2.3.0* + * + */ + readonly is_paused_upon_creation?: boolean | null; + /** + * The last time the DAG was parsed. + * + * *New in version 2.3.0* + * + */ + readonly last_parsed?: string | null; + /** + * The template search path. + * + * *New in version 2.3.0* + * + */ + template_search_path?: Array | null; + /** + * Whether to render templates as native Python objects. + * + * *New in version 2.3.0* + * + */ + readonly render_template_as_native_obj?: boolean | null; +}; + +/** + * Additional links containing additional information about the task. + */ +export type ExtraLink = { + class_ref?: ClassReference; + readonly name?: string; + readonly href?: string; +}; + +/** + * The collection of extra links. + */ +export type ExtraLinkCollection = { + extra_links?: Array; +}; + +/** + * For details see: + * [airflow.models.baseoperator.BaseOperator](https://airflow.apache.org/docs/apache-airflow/stable/_api/airflow/models/baseoperator/index.html#airflow.models.baseoperator.BaseOperator) + * + */ +export type Task = { + class_ref?: ClassReference; + readonly task_id?: string; + readonly task_display_name?: string; + readonly owner?: string; + readonly start_date?: string | null; + readonly end_date?: string | null; + trigger_rule?: TriggerRule; + readonly extra_links?: Array<{ + class_ref?: ClassReference; + }>; + readonly depends_on_past?: boolean; + readonly is_mapped?: boolean; + readonly wait_for_downstream?: boolean; + readonly retries?: number; + readonly queue?: string | null; + readonly executor?: string | null; + readonly pool?: string; + readonly pool_slots?: number; + execution_timeout?: TimeDelta; + retry_delay?: TimeDelta; + readonly retry_exponential_backoff?: boolean; + readonly priority_weight?: number; + weight_rule?: WeightRule; + ui_color?: Color; + ui_fgcolor?: Color; + readonly template_fields?: Array; + sub_dag?: DAG; + readonly downstream_task_ids?: Array; + /** + * Task documentation in markdown. + * + * *New in version 2.10.0* + * + */ + readonly doc_md?: string | null; +}; + +/** + * Collection of tasks. + */ +export type TaskCollection = { + tasks?: Array; +}; + +/** + * A plugin Item. + * + * *New in version 2.1.0* + * + */ +export type PluginCollectionItem = { + /** + * The name of the plugin + */ + name?: string; + /** + * The plugin hooks + */ + hooks?: Array; + /** + * The plugin executors + */ + executors?: Array; + /** + * The plugin macros + */ + macros?: Array; + /** + * The flask blueprints + */ + flask_blueprints?: Array; + /** + * The appuilder views + */ + appbuilder_views?: Array<{ + [key: string]: unknown; + } | null>; + /** + * The Flask Appbuilder menu items + */ + appbuilder_menu_items?: Array<{ + [key: string]: unknown; + } | null>; + /** + * The global operator extra links + */ + global_operator_extra_links?: Array; + /** + * Operator extra links + */ + operator_extra_links?: Array; + /** + * The plugin source + */ + source?: string | null; + /** + * The plugin task instance dependencies + */ + ti_deps?: Array; + /** + * The plugin listeners + */ + listeners?: Array; + /** + * The plugin timetables + */ + timetables?: Array; +}; + +/** + * A collection of plugin. + * + * *New in version 2.1.0* + * + */ +export type PluginCollection = { + plugins?: Array; +} & CollectionInfo; + +/** + * a role item. + * + * *New in version 2.1.0* + * + */ +export type Role = { + /** + * The name of the role + * + * *Changed in version 2.3.0*: A minimum character length requirement ('minLength') is added. + * + */ + name?: string; + actions?: Array; +}; + +/** + * A collection of roles. + * + * *New in version 2.1.0* + * + */ +export type RoleCollection = { + roles?: Array; +} & CollectionInfo; + +/** + * An action Item. + * + * *New in version 2.1.0* + * + */ +export type Action = { + /** + * The name of the permission "action" + */ + name?: string; +}; + +/** + * A collection of actions. + * + * *New in version 2.1.0* + * + */ +export type ActionCollection = { + actions?: Array; +} & CollectionInfo; + +/** + * A resource on which permissions are granted. + * + * *New in version 2.1.0* + * + */ +export type Resource = { + /** + * The name of the resource + */ + name?: string; +}; + +/** + * The Action-Resource item. + * + * *New in version 2.1.0* + * + */ +export type ActionResource = { + /** + * The permission action + */ + action?: Action; + /** + * The permission resource + */ + resource?: Resource; +}; + +/** + * A dataset item. + * + * *New in version 2.4.0* + * + */ +export type Dataset = { + /** + * The dataset id + */ + id?: number; + /** + * The dataset uri + */ + uri?: string; + /** + * The dataset extra + */ + extra?: { + [key: string]: unknown; + } | null; + /** + * The dataset creation time + */ + created_at?: string; + /** + * The dataset update time + */ + updated_at?: string; + consuming_dags?: Array; + producing_tasks?: Array; +}; + +/** + * A datasets reference to an upstream task. + * + * *New in version 2.4.0* + * + */ +export type TaskOutletDatasetReference = { + /** + * The DAG ID that updates the dataset. + */ + dag_id?: string | null; + /** + * The task ID that updates the dataset. + */ + task_id?: string | null; + /** + * The dataset creation time + */ + created_at?: string; + /** + * The dataset update time + */ + updated_at?: string; +}; + +/** + * A datasets reference to a downstream DAG. + * + * *New in version 2.4.0* + * + */ +export type DagScheduleDatasetReference = { + /** + * The DAG ID that depends on the dataset. + */ + dag_id?: string | null; + /** + * The dataset reference creation time + */ + created_at?: string; + /** + * The dataset reference update time + */ + updated_at?: string; +}; + +/** + * A collection of datasets. + * + * *New in version 2.4.0* + * + */ +export type DatasetCollection = { + datasets?: Array; +} & CollectionInfo; + +/** + * A dataset event. + * + * *New in version 2.4.0* + * + */ +export type DatasetEvent = { + /** + * The dataset id + */ + dataset_id?: number; + /** + * The URI of the dataset + */ + dataset_uri?: string; + /** + * The dataset event extra + */ + extra?: { + [key: string]: unknown; + } | null; + /** + * The DAG ID that updated the dataset. + */ + source_dag_id?: string | null; + /** + * The task ID that updated the dataset. + */ + source_task_id?: string | null; + /** + * The DAG run ID that updated the dataset. + */ + source_run_id?: string | null; + /** + * The task map index that updated the dataset. + */ + source_map_index?: number | null; + created_dagruns?: Array; + /** + * The dataset event creation time + */ + timestamp?: string; +}; + +export type CreateDatasetEvent = { + /** + * The URI of the dataset + */ + dataset_uri: string; + /** + * The dataset event extra + */ + extra?: { + [key: string]: unknown; + } | null; +}; + +export type QueuedEvent = { + /** + * The datata uri. + */ + uri?: string; + /** + * The DAG ID. + */ + dag_id?: string; + /** + * The creation time of QueuedEvent + */ + created_at?: string; +}; + +/** + * A collection of Dataset Dag Run Queues. + * + * *New in version 2.9.0* + * + */ +export type QueuedEventCollection = { + datasets?: Array; +} & CollectionInfo; + +export type BasicDAGRun = { + /** + * Run ID. + * + */ + run_id?: string; + readonly dag_id?: string; + /** + * The logical date (previously called execution date). This is the time or interval covered by + * this DAG run, according to the DAG definition. + * + * The value of this field can be set only when creating the object. If you try to modify the + * field of an existing object, the request fails with an BAD_REQUEST error. + * + * This together with DAG_ID are a unique key. + * + * *New in version 2.2.0* + * + */ + logical_date?: string; + /** + * The start time. The time when DAG run was actually created. + * + * *Changed in version 2.1.3*: Field becomes nullable. + * + */ + readonly start_date?: string | null; + readonly end_date?: string | null; + readonly data_interval_start?: string | null; + readonly data_interval_end?: string | null; + state?: DagState; +}; + +/** + * A collection of dataset events. + * + * *New in version 2.4.0* + * + */ +export type DatasetEventCollection = { + dataset_events?: Array; +} & CollectionInfo; + +/** + * The option of configuration. + */ +export type ConfigOption = { + readonly key?: string; + readonly value?: string; +}; + +/** + * The section of configuration. + */ +export type ConfigSection = { + readonly name?: string; + options?: Array; +}; + +/** + * The configuration. + */ +export type Config = { + sections?: Array; +}; + +/** + * Version information. + */ +export type VersionInfo = { + /** + * The version of Airflow + */ + version?: string; + /** + * The git version (including git commit hash) + */ + git_version?: string | null; +}; + +export type ClearDagRun = { + /** + * If set, don't actually run this operation. The response will contain a list of task instances + * planned to be cleaned, but not modified in any way. + * + */ + dry_run?: boolean; +}; + +export type ClearTaskInstances = { + /** + * If set, don't actually run this operation. The response will contain a list of task instances + * planned to be cleaned, but not modified in any way. + * + */ + dry_run?: boolean; + /** + * A list of task ids to clear. + * + * *New in version 2.1.0* + * + */ + task_ids?: Array; + /** + * The minimum execution date to clear. + */ + start_date?: string; + /** + * The maximum execution date to clear. + */ + end_date?: string; + /** + * Only clear failed tasks. + */ + only_failed?: boolean; + /** + * Only clear running tasks. + */ + only_running?: boolean; + /** + * Set state of DAG runs to RUNNING. + */ + reset_dag_runs?: boolean; + /** + * The DagRun ID for this task instance + */ + dag_run_id?: string | null; + /** + * If set to true, upstream tasks are also affected. + */ + include_upstream?: boolean; + /** + * If set to true, downstream tasks are also affected. + */ + include_downstream?: boolean; + /** + * If set to True, also tasks from future DAG Runs are affected. + */ + include_future?: boolean; + /** + * If set to True, also tasks from past DAG Runs are affected. + */ + include_past?: boolean; +}; + +export type UpdateTaskInstancesState = { + /** + * If set, don't actually run this operation. The response will contain a list of task instances + * planned to be affected, but won't be modified in any way. + * + */ + dry_run?: boolean; + /** + * The task ID. + */ + task_id?: string; + /** + * The execution date. Either set this or dag_run_id but not both. + */ + execution_date?: string; + /** + * The task instance's DAG run ID. Either set this or execution_date but not both. + * + * *New in version 2.3.0* + * + */ + dag_run_id?: string; + /** + * If set to true, upstream tasks are also affected. + */ + include_upstream?: boolean; + /** + * If set to true, downstream tasks are also affected. + */ + include_downstream?: boolean; + /** + * If set to True, also tasks from future DAG Runs are affected. + */ + include_future?: boolean; + /** + * If set to True, also tasks from past DAG Runs are affected. + */ + include_past?: boolean; + new_state?: UpdateTaskState; +}; + +export type UpdateTaskInstance = { + /** + * If set, don't actually run this operation. The response will contain the task instance + * planned to be affected, but won't be modified in any way. + * + */ + dry_run?: boolean; + new_state?: UpdateTaskState; +}; + +export type SetTaskInstanceNote = { + /** + * The custom note to set for this Task Instance. + */ + note: string; +}; + +export type ListDagRunsForm = { + /** + * The name of the field to order the results by. Prefix a field name + * with `-` to reverse the sort order. + * + * *New in version 2.1.0* + * + */ + order_by?: string; + /** + * The number of items to skip before starting to collect the result set. + */ + page_offset?: number; + /** + * The numbers of items to return. + */ + page_limit?: number; + /** + * Return objects with specific DAG IDs. + * The value can be repeated to retrieve multiple matching values (OR condition). + */ + dag_ids?: Array; + /** + * Return objects with specific states. + * The value can be repeated to retrieve multiple matching values (OR condition). + */ + states?: Array; + /** + * Returns objects greater or equal to the specified date. + * + * This can be combined with execution_date_lte key to receive only the selected period. + * + */ + execution_date_gte?: string; + /** + * Returns objects less than or equal to the specified date. + * + * This can be combined with execution_date_gte key to receive only the selected period. + * + */ + execution_date_lte?: string; + /** + * Returns objects greater or equal the specified date. + * + * This can be combined with start_date_lte key to receive only the selected period. + * + */ + start_date_gte?: string; + /** + * Returns objects less or equal the specified date. + * + * This can be combined with start_date_gte parameter to receive only the selected period + * + */ + start_date_lte?: string; + /** + * Returns objects greater or equal the specified date. + * + * This can be combined with end_date_lte parameter to receive only the selected period. + * + */ + end_date_gte?: string; + /** + * Returns objects less than or equal to the specified date. + * + * This can be combined with end_date_gte parameter to receive only the selected period. + * + */ + end_date_lte?: string; +}; + +export type ListTaskInstanceForm = { + /** + * Return objects with specific DAG IDs. + * The value can be repeated to retrieve multiple matching values (OR condition). + */ + dag_ids?: Array; + /** + * Return objects with specific DAG Run IDs. + * The value can be repeated to retrieve multiple matching values (OR condition). + * *New in version 2.7.1* + */ + dag_run_ids?: Array; + /** + * Return objects with specific task IDs. + * The value can be repeated to retrieve multiple matching values (OR condition). + * *New in version 2.7.1* + */ + task_ids?: Array; + /** + * Returns objects greater or equal to the specified date. + * + * This can be combined with execution_date_lte parameter to receive only the selected period. + * + */ + execution_date_gte?: string; + /** + * Returns objects less than or equal to the specified date. + * + * This can be combined with execution_date_gte parameter to receive only the selected period. + * + */ + execution_date_lte?: string; + /** + * Returns objects greater or equal the specified date. + * + * This can be combined with start_date_lte parameter to receive only the selected period. + * + */ + start_date_gte?: string; + /** + * Returns objects less or equal the specified date. + * + * This can be combined with start_date_gte parameter to receive only the selected period. + * + */ + start_date_lte?: string; + /** + * Returns objects greater or equal the specified date. + * + * This can be combined with start_date_lte parameter to receive only the selected period. + * + */ + end_date_gte?: string; + /** + * Returns objects less than or equal to the specified date. + * + * This can be combined with start_date_gte parameter to receive only the selected period. + * + */ + end_date_lte?: string; + /** + * Returns objects greater than or equal to the specified values. + * + * This can be combined with duration_lte parameter to receive only the selected period. + * + */ + duration_gte?: number; + /** + * Returns objects less than or equal to the specified values. + * + * This can be combined with duration_gte parameter to receive only the selected range. + * + */ + duration_lte?: number; + /** + * The value can be repeated to retrieve multiple matching values (OR condition). + */ + state?: Array; + /** + * The value can be repeated to retrieve multiple matching values (OR condition). + */ + pool?: Array; + /** + * The value can be repeated to retrieve multiple matching values (OR condition). + */ + queue?: Array; + /** + * The value can be repeated to retrieve multiple matching values (OR condition). + */ + executor?: Array; +}; + +/** + * Schedule interval. Defines how often DAG runs, this object gets added to your latest task instance's + * execution_date to figure out the next schedule. + * + */ +export type ScheduleInterval = + | TimeDelta + | RelativeDelta + | CronExpression + | null; + +/** + * Time delta + */ +export type TimeDelta = { + __type: string; + days: number; + seconds: number; + microseconds: number; +} | null; + +/** + * Relative delta + */ +export type RelativeDelta = { + __type: string; + years: number; + months: number; + days: number; + leapdays: number; + hours: number; + minutes: number; + seconds: number; + microseconds: number; + year: number; + month: number; + day: number; + hour: number; + minute: number; + second: number; + microsecond: number; +}; + +/** + * Cron expression + */ +export type CronExpression = { + __type: string; + value: string; +} | null; + +export type Timezone = string; + +/** + * Tag + */ +export type Tag = { + name?: string; +}; + +/** + * Color in hexadecimal notation. + */ +export type Color = string; + +/** + * Class reference + */ +export type ClassReference = { + readonly module_path?: string; + readonly class_name?: string; +}; + +/** + * [RFC7807](https://tools.ietf.org/html/rfc7807) compliant response. + * + */ +export type Error = { + /** + * A URI reference [RFC3986] that identifies the problem type. This specification + * encourages that, when dereferenced, it provide human-readable documentation for + * the problem type. + * + */ + type: string; + /** + * A short, human-readable summary of the problem type. + */ + title: string; + /** + * The HTTP status code generated by the API server for this occurrence of the problem. + */ + status: number; + /** + * A human-readable explanation specific to this occurrence of the problem. + */ + detail?: string; + /** + * A URI reference that identifies the specific occurrence of the problem. It may or may + * not yield further information if dereferenced. + * + */ + instance?: string; +}; + +/** + * Metadata about collection. + */ +export type CollectionInfo = { + /** + * Count of total objects in the current result set before pagination parameters + * (limit, offset) are applied. + * + */ + total_entries?: number; +}; + +/** + * Task state. + * + * *Changed in version 2.0.2*: 'removed' is added as a possible value. + * + * *Changed in version 2.2.0*: 'deferred' is added as a possible value. + * + * *Changed in version 2.4.0*: 'sensing' state has been removed. + * *Changed in version 2.4.2*: 'restarting' is added as a possible value + * + * *Changed in version 2.7.0*: Field becomes nullable and null primitive is added as a possible value. + * *Changed in version 2.7.0*: 'none' state is deprecated in favor of null. + * + */ +export type TaskState = + | "success" + | "running" + | "failed" + | "upstream_failed" + | "skipped" + | "up_for_retry" + | "up_for_reschedule" + | "queued" + | "none" + | "scheduled" + | "deferred" + | "removed" + | "restarting"; + +/** + * Expected new state. Only a subset of TaskState are available. + * + * Other states are managed directly by the scheduler or the workers and cannot be updated manually through the REST API. + * + */ +export type UpdateTaskState = "success" | "failed" | "skipped"; + +/** + * DAG State. + * + * *Changed in version 2.1.3*: 'queued' is added as a possible value. + * + */ +export type DagState = "queued" | "running" | "success" | "failed"; + +/** + * Trigger rule. + * + * *Changed in version 2.2.0*: 'none_failed_min_one_success' is added as a possible value. Deprecated 'dummy' and 'always' is added as a possible value + * + * *Changed in version 2.3.0*: 'all_skipped' is added as a possible value. + * + * *Changed in version 2.5.0*: 'one_done' is added as a possible value. + * + * *Changed in version 2.7.0*: 'all_done_setup_success' is added as a possible value. + * + */ +export type TriggerRule = + | "all_success" + | "all_failed" + | "all_done" + | "all_done_setup_success" + | "one_success" + | "one_failed" + | "one_done" + | "none_failed" + | "none_skipped" + | "none_failed_or_skipped" + | "none_failed_min_one_success" + | "dummy" + | "all_skipped" + | "always"; + +/** + * Weight rule. + */ +export type WeightRule = "downstream" | "upstream" | "absolute"; + +/** + * Health status + */ +export type HealthStatus = "healthy" | "unhealthy"; + +/** + * The number of items to skip before starting to collect the result set. + */ +export type ParameterPageOffset = number; + +/** + * The numbers of items to return. + */ +export type ParameterPageLimit = number; + +/** + * The username of the user. + * + * *New in version 2.1.0* + * + */ +export type ParameterUsername = string; + +/** + * The role name + */ +export type ParameterRoleName = string; + +/** + * The connection ID. + */ +export type ParameterConnectionID = string; + +/** + * The DAG ID. + */ +export type ParameterDAGID = string; + +/** + * The task ID. + */ +export type ParameterTaskID = string; + +/** + * The name of event log. + */ +export type ParameterEvent = string; + +/** + * The owner's name of event log. + */ +export type ParameterOwner = string; + +/** + * Timestamp to select event logs occurring before. + */ +export type ParameterBefore = string; + +/** + * Timestamp to select event logs occurring after. + */ +export type ParameterAfter = string; + +/** + * The map index. + */ +export type ParameterMapIndex = number; + +/** + * The DAG run ID. + */ +export type ParameterDAGRunID = string; + +/** + * The task try number. + */ +export type ParameterTaskTryNumber = number; + +/** + * The event log ID. + */ +export type ParameterEventLogID = number; + +/** + * The import error ID. + */ +export type ParameterImportErrorID = number; + +/** + * The encoded Dataset URI + */ +export type ParameterDatasetURI = string; + +/** + * The pool name. + */ +export type ParameterPoolName = string; + +/** + * The variable Key. + */ +export type ParameterVariableKey = string; + +/** + * A full content will be returned. + * By default, only the first fragment will be returned. + * + */ +export type ParameterFullContent = boolean; + +/** + * A token that allows you to continue fetching logs. + * If passed, it will specify the location from which the download should be continued. + * + */ +export type ParameterContinuationToken = string; + +/** + * The XCom key. + */ +export type ParameterXComKey = string; + +/** + * Returns objects greater or equal to the specified date. + * + * This can be combined with execution_date_lte parameter to receive only the selected period. + * + */ +export type ParameterFilterExecutionDateGTE = string; + +/** + * Returns objects less than or equal to the specified date. + * + * This can be combined with execution_date_gte parameter to receive only the selected period. + * + */ +export type ParameterFilterExecutionDateLTE = string; + +/** + * Returns objects greater or equal the specified date. + * + * This can be combined with start_date_lte parameter to receive only the selected period. + * + */ +export type ParameterFilterStartDateGTE = string; + +/** + * Returns objects less or equal the specified date. + * + * This can be combined with start_date_gte parameter to receive only the selected period. + * + */ +export type ParameterFilterStartDateLTE = string; + +/** + * Returns objects greater or equal the specified date. + * + * This can be combined with start_date_lte parameter to receive only the selected period. + * + */ +export type ParameterFilterEndDateGTE = string; + +/** + * Returns objects less than or equal to the specified date. + * + * This can be combined with start_date_gte parameter to receive only the selected period. + * + */ +export type ParameterFilterEndDateLTE = string; + +/** + * Returns objects greater than or equal to the specified values. + * + * This can be combined with duration_lte parameter to receive only the selected period. + * + */ +export type ParameterFilterDurationGTE = number; + +/** + * Returns objects less than or equal to the specified values. + * + * This can be combined with duration_gte parameter to receive only the selected range. + * + */ +export type ParameterFilterDurationLTE = number; + +/** + * The value can be repeated to retrieve multiple matching values (OR condition). + */ +export type ParameterFilterState = Array; + +/** + * The value can be repeated to retrieve multiple matching values (OR condition). + */ +export type ParameterFilterPool = Array; + +/** + * The value can be repeated to retrieve multiple matching values (OR condition). + */ +export type ParameterFilterQueue = Array; + +/** + * The value can be repeated to retrieve multiple matching values (OR condition). + */ +export type ParameterFilterExecutor = Array; + +/** + * List of tags to filter results. + * + * *New in version 2.2.0* + * + */ +export type ParameterFilterTags = Array; + +/** + * The Dataset ID that updated the dataset. + */ +export type ParameterFilterDatasetID = number; + +/** + * The DAG ID that updated the dataset. + */ +export type ParameterFilterSourceDAGID = string; + +/** + * The task ID that updated the dataset. + */ +export type ParameterFilterSourceTaskID = string; + +/** + * The DAG run ID that updated the dataset. + */ +export type ParameterFilterSourceRunID = string; + +/** + * The map index that updated the dataset. + */ +export type ParameterFilterSourceMapIndex = number; + +/** + * Filter on map index for mapped task. + */ +export type ParameterFilterMapIndex = number; + +/** + * Filter on try_number for task instance. + */ +export type ParameterFilterTryNumber = number; + +/** + * The name of the field to order the results by. + * Prefix a field name with `-` to reverse the sort order. + * + * *New in version 2.1.0* + * + */ +export type ParameterOrderBy = string; + +/** + * Only filter active DAGs. + * + * *New in version 2.1.1* + * + */ +export type ParameterOnlyActive = boolean; + +/** + * Returns objects less or equal the specified date. + * + * This can be combined with updated_at_gte parameter to receive only the selected period. + * + * *New in version 2.6.0* + * + */ +export type ParameterFilterUpdatedAtLTE = string; + +/** + * Returns objects greater or equal the specified date. + * + * This can be combined with updated_at_lte parameter to receive only the selected period. + * + * *New in version 2.6.0* + * + */ +export type ParameterFilterUpdatedAtGTE = string; + +/** + * Only filter paused/unpaused DAGs. If absent or null, it returns paused and unpaused DAGs. + * + * *New in version 2.6.0* + * + */ +export type ParameterPaused = boolean; + +/** + * Only filter the XCom records which have the provided key. + */ +export type ParameterFilterXcomKey = string; + +/** + * Returns objects matched by the DAG ID. + */ +export type ParameterFilterDAGID = string; + +/** + * Returns objects matched by the Task ID. + */ +export type ParameterFilterTaskID = string; + +/** + * Returns objects matched by the Run ID. + */ +export type ParameterFilterRunID = string; + +/** + * The key containing the encrypted path to the file. Encryption and decryption take place only on + * the server. This prevents the client from reading an non-DAG file. This also ensures API + * extensibility, because the format of encrypted data may change. + * + */ +export type ParameterFileToken = string; + +/** + * The fields to update on the resource. If absent or empty, all modifiable fields are updated. + * A comma-separated list of fully qualified names of fields. + * + */ +export type ParameterUpdateMask = Array; + +/** + * List of field for return. + * + */ +export type ParameterReturnFields = Array; + +export type GetConnectionsData = { + /** + * The numbers of items to return. + */ + limit?: number; + /** + * The number of items to skip before starting to collect the result set. + */ + offset?: number; + /** + * The name of the field to order the results by. + * Prefix a field name with `-` to reverse the sort order. + * + * *New in version 2.1.0* + * + */ + orderBy?: string; +}; + +export type GetConnectionsResponse = ConnectionCollection; + +export type PostConnectionData = { + requestBody: Connection; +}; + +export type PostConnectionResponse = Connection; + +export type GetConnectionData = { + /** + * The connection ID. + */ + connectionId: string; +}; + +export type GetConnectionResponse = Connection; + +export type PatchConnectionData = { + /** + * The connection ID. + */ + connectionId: string; + requestBody: Connection; + /** + * The fields to update on the resource. If absent or empty, all modifiable fields are updated. + * A comma-separated list of fully qualified names of fields. + * + */ + updateMask?: Array; +}; + +export type PatchConnectionResponse = Connection; + +export type DeleteConnectionData = { + /** + * The connection ID. + */ + connectionId: string; +}; + +export type DeleteConnectionResponse = void; + +export type TestConnectionData = { + requestBody: Connection; +}; + +export type TestConnectionResponse = ConnectionTest; + +export type GetDagsData = { + /** + * If set, only return DAGs with dag_ids matching this pattern. + * + */ + dagIdPattern?: string; + /** + * List of field for return. + * + */ + fields?: Array; + /** + * The numbers of items to return. + */ + limit?: number; + /** + * The number of items to skip before starting to collect the result set. + */ + offset?: number; + /** + * Only filter active DAGs. + * + * *New in version 2.1.1* + * + */ + onlyActive?: boolean; + /** + * The name of the field to order the results by. + * Prefix a field name with `-` to reverse the sort order. + * + * *New in version 2.1.0* + * + */ + orderBy?: string; + /** + * Only filter paused/unpaused DAGs. If absent or null, it returns paused and unpaused DAGs. + * + * *New in version 2.6.0* + * + */ + paused?: boolean; + /** + * List of tags to filter results. + * + * *New in version 2.2.0* + * + */ + tags?: Array; +}; + +export type GetDagsResponse = DAGCollection; + +export type PatchDagsData = { + /** + * If set, only update DAGs with dag_ids matching this pattern. + * + */ + dagIdPattern: string; + /** + * The numbers of items to return. + */ + limit?: number; + /** + * The number of items to skip before starting to collect the result set. + */ + offset?: number; + /** + * Only filter active DAGs. + * + * *New in version 2.1.1* + * + */ + onlyActive?: boolean; + requestBody: DAG; + /** + * List of tags to filter results. + * + * *New in version 2.2.0* + * + */ + tags?: Array; + /** + * The fields to update on the resource. If absent or empty, all modifiable fields are updated. + * A comma-separated list of fully qualified names of fields. + * + */ + updateMask?: Array; +}; + +export type PatchDagsResponse = DAGCollection; + +export type GetDagData = { + /** + * The DAG ID. + */ + dagId: string; + /** + * List of field for return. + * + */ + fields?: Array; +}; + +export type GetDagResponse = DAG; + +export type PatchDagData = { + /** + * The DAG ID. + */ + dagId: string; + requestBody: DAG; + /** + * The fields to update on the resource. If absent or empty, all modifiable fields are updated. + * A comma-separated list of fully qualified names of fields. + * + */ + updateMask?: Array; +}; + +export type PatchDagResponse = DAG; + +export type DeleteDagData = { + /** + * The DAG ID. + */ + dagId: string; +}; + +export type DeleteDagResponse = void; + +export type PostClearTaskInstancesData = { + /** + * The DAG ID. + */ + dagId: string; + /** + * Parameters of action + */ + requestBody: ClearTaskInstances; +}; + +export type PostClearTaskInstancesResponse = TaskInstanceReferenceCollection; + +export type PostSetTaskInstancesStateData = { + /** + * The DAG ID. + */ + dagId: string; + /** + * Parameters of action + */ + requestBody: UpdateTaskInstancesState; +}; + +export type PostSetTaskInstancesStateResponse = TaskInstanceReferenceCollection; + +export type ReparseDagFileData = { + /** + * The key containing the encrypted path to the file. Encryption and decryption take place only on + * the server. This prevents the client from reading an non-DAG file. This also ensures API + * extensibility, because the format of encrypted data may change. + * + */ + fileToken: string; +}; + +export type ReparseDagFileResponse = unknown; + +export type GetDagDetailsData = { + /** + * The DAG ID. + */ + dagId: string; + /** + * List of field for return. + * + */ + fields?: Array; +}; + +export type GetDagDetailsResponse = DAGDetail; + +export type GetTasksData = { + /** + * The DAG ID. + */ + dagId: string; + /** + * The name of the field to order the results by. + * Prefix a field name with `-` to reverse the sort order. + * + * *New in version 2.1.0* + * + */ + orderBy?: string; +}; + +export type GetTasksResponse = TaskCollection; + +export type GetTaskData = { + /** + * The DAG ID. + */ + dagId: string; + /** + * The task ID. + */ + taskId: string; +}; + +export type GetTaskResponse = Task; + +export type GetDagSourceData = { + /** + * The key containing the encrypted path to the file. Encryption and decryption take place only on + * the server. This prevents the client from reading an non-DAG file. This also ensures API + * extensibility, because the format of encrypted data may change. + * + */ + fileToken: string; +}; + +export type GetDagSourceResponse = { + content?: string; +}; + +export type SetTaskInstanceNoteData = { + /** + * The DAG ID. + */ + dagId: string; + /** + * The DAG run ID. + */ + dagRunId: string; + /** + * Parameters of set Task Instance note. + */ + requestBody: SetTaskInstanceNote; + /** + * The task ID. + */ + taskId: string; +}; + +export type SetTaskInstanceNoteResponse = TaskInstance; + +export type SetMappedTaskInstanceNoteData = { + /** + * The DAG ID. + */ + dagId: string; + /** + * The DAG run ID. + */ + dagRunId: string; + /** + * The map index. + */ + mapIndex: number; + /** + * Parameters of set Task Instance note. + */ + requestBody: SetTaskInstanceNote; + /** + * The task ID. + */ + taskId: string; +}; + +export type SetMappedTaskInstanceNoteResponse = TaskInstance; + +export type GetTaskInstanceDependenciesData = { + /** + * The DAG ID. + */ + dagId: string; + /** + * The DAG run ID. + */ + dagRunId: string; + /** + * The task ID. + */ + taskId: string; +}; + +export type GetTaskInstanceDependenciesResponse = + TaskInstanceDependencyCollection; + +export type GetMappedTaskInstanceDependenciesData = { + /** + * The DAG ID. + */ + dagId: string; + /** + * The DAG run ID. + */ + dagRunId: string; + /** + * The map index. + */ + mapIndex: number; + /** + * The task ID. + */ + taskId: string; +}; + +export type GetMappedTaskInstanceDependenciesResponse = + TaskInstanceDependencyCollection; + +export type GetTaskInstancesData = { + /** + * The DAG ID. + */ + dagId: string; + /** + * The DAG run ID. + */ + dagRunId: string; + /** + * Returns objects greater than or equal to the specified values. + * + * This can be combined with duration_lte parameter to receive only the selected period. + * + */ + durationGte?: number; + /** + * Returns objects less than or equal to the specified values. + * + * This can be combined with duration_gte parameter to receive only the selected range. + * + */ + durationLte?: number; + /** + * Returns objects greater or equal the specified date. + * + * This can be combined with start_date_lte parameter to receive only the selected period. + * + */ + endDateGte?: string; + /** + * Returns objects less than or equal to the specified date. + * + * This can be combined with start_date_gte parameter to receive only the selected period. + * + */ + endDateLte?: string; + /** + * Returns objects greater or equal to the specified date. + * + * This can be combined with execution_date_lte parameter to receive only the selected period. + * + */ + executionDateGte?: string; + /** + * Returns objects less than or equal to the specified date. + * + * This can be combined with execution_date_gte parameter to receive only the selected period. + * + */ + executionDateLte?: string; + /** + * The value can be repeated to retrieve multiple matching values (OR condition). + */ + executor?: Array; + /** + * The numbers of items to return. + */ + limit?: number; + /** + * The number of items to skip before starting to collect the result set. + */ + offset?: number; + /** + * The value can be repeated to retrieve multiple matching values (OR condition). + */ + pool?: Array; + /** + * The value can be repeated to retrieve multiple matching values (OR condition). + */ + queue?: Array; + /** + * Returns objects greater or equal the specified date. + * + * This can be combined with start_date_lte parameter to receive only the selected period. + * + */ + startDateGte?: string; + /** + * Returns objects less or equal the specified date. + * + * This can be combined with start_date_gte parameter to receive only the selected period. + * + */ + startDateLte?: string; + /** + * The value can be repeated to retrieve multiple matching values (OR condition). + */ + state?: Array; + /** + * Returns objects greater or equal the specified date. + * + * This can be combined with updated_at_lte parameter to receive only the selected period. + * + * *New in version 2.6.0* + * + */ + updatedAtGte?: string; + /** + * Returns objects less or equal the specified date. + * + * This can be combined with updated_at_gte parameter to receive only the selected period. + * + * *New in version 2.6.0* + * + */ + updatedAtLte?: string; +}; + +export type GetTaskInstancesResponse = TaskInstanceCollection; + +export type GetTaskInstanceData = { + /** + * The DAG ID. + */ + dagId: string; + /** + * The DAG run ID. + */ + dagRunId: string; + /** + * The task ID. + */ + taskId: string; +}; + +export type GetTaskInstanceResponse = TaskInstance; + +export type PatchTaskInstanceData = { + /** + * The DAG ID. + */ + dagId: string; + /** + * The DAG run ID. + */ + dagRunId: string; + /** + * Parameters of action + */ + requestBody: UpdateTaskInstance; + /** + * The task ID. + */ + taskId: string; +}; + +export type PatchTaskInstanceResponse = TaskInstanceReference; + +export type GetMappedTaskInstanceData = { + /** + * The DAG ID. + */ + dagId: string; + /** + * The DAG run ID. + */ + dagRunId: string; + /** + * The map index. + */ + mapIndex: number; + /** + * The task ID. + */ + taskId: string; +}; + +export type GetMappedTaskInstanceResponse = TaskInstance; + +export type PatchMappedTaskInstanceData = { + /** + * The DAG ID. + */ + dagId: string; + /** + * The DAG run ID. + */ + dagRunId: string; + /** + * The map index. + */ + mapIndex: number; + /** + * Parameters of action + */ + requestBody?: UpdateTaskInstance; + /** + * The task ID. + */ + taskId: string; +}; + +export type PatchMappedTaskInstanceResponse = TaskInstanceReference; + +export type GetMappedTaskInstancesData = { + /** + * The DAG ID. + */ + dagId: string; + /** + * The DAG run ID. + */ + dagRunId: string; + /** + * Returns objects greater than or equal to the specified values. + * + * This can be combined with duration_lte parameter to receive only the selected period. + * + */ + durationGte?: number; + /** + * Returns objects less than or equal to the specified values. + * + * This can be combined with duration_gte parameter to receive only the selected range. + * + */ + durationLte?: number; + /** + * Returns objects greater or equal the specified date. + * + * This can be combined with start_date_lte parameter to receive only the selected period. + * + */ + endDateGte?: string; + /** + * Returns objects less than or equal to the specified date. + * + * This can be combined with start_date_gte parameter to receive only the selected period. + * + */ + endDateLte?: string; + /** + * Returns objects greater or equal to the specified date. + * + * This can be combined with execution_date_lte parameter to receive only the selected period. + * + */ + executionDateGte?: string; + /** + * Returns objects less than or equal to the specified date. + * + * This can be combined with execution_date_gte parameter to receive only the selected period. + * + */ + executionDateLte?: string; + /** + * The value can be repeated to retrieve multiple matching values (OR condition). + */ + executor?: Array; + /** + * The numbers of items to return. + */ + limit?: number; + /** + * The number of items to skip before starting to collect the result set. + */ + offset?: number; + /** + * The name of the field to order the results by. + * Prefix a field name with `-` to reverse the sort order. + * + * *New in version 2.1.0* + * + */ + orderBy?: string; + /** + * The value can be repeated to retrieve multiple matching values (OR condition). + */ + pool?: Array; + /** + * The value can be repeated to retrieve multiple matching values (OR condition). + */ + queue?: Array; + /** + * Returns objects greater or equal the specified date. + * + * This can be combined with start_date_lte parameter to receive only the selected period. + * + */ + startDateGte?: string; + /** + * Returns objects less or equal the specified date. + * + * This can be combined with start_date_gte parameter to receive only the selected period. + * + */ + startDateLte?: string; + /** + * The value can be repeated to retrieve multiple matching values (OR condition). + */ + state?: Array; + /** + * The task ID. + */ + taskId: string; + /** + * Returns objects greater or equal the specified date. + * + * This can be combined with updated_at_lte parameter to receive only the selected period. + * + * *New in version 2.6.0* + * + */ + updatedAtGte?: string; + /** + * Returns objects less or equal the specified date. + * + * This can be combined with updated_at_gte parameter to receive only the selected period. + * + * *New in version 2.6.0* + * + */ + updatedAtLte?: string; +}; + +export type GetMappedTaskInstancesResponse = TaskInstanceCollection; + +export type GetTaskInstancesBatchData = { + requestBody: ListTaskInstanceForm; +}; + +export type GetTaskInstancesBatchResponse = TaskInstanceCollection; + +export type GetTaskInstanceTryDetailsData = { + /** + * The DAG ID. + */ + dagId: string; + /** + * The DAG run ID. + */ + dagRunId: string; + /** + * The task ID. + */ + taskId: string; + /** + * The task try number. + */ + taskTryNumber: number; +}; + +export type GetTaskInstanceTryDetailsResponse = TaskInstance; + +export type GetTaskInstanceTriesData = { + /** + * The DAG ID. + */ + dagId: string; + /** + * The DAG run ID. + */ + dagRunId: string; + /** + * The numbers of items to return. + */ + limit?: number; + /** + * The number of items to skip before starting to collect the result set. + */ + offset?: number; + /** + * The name of the field to order the results by. + * Prefix a field name with `-` to reverse the sort order. + * + * *New in version 2.1.0* + * + */ + orderBy?: string; + /** + * The task ID. + */ + taskId: string; +}; + +export type GetTaskInstanceTriesResponse = TaskInstanceCollection; + +export type GetMappedTaskInstanceTriesData = { + /** + * The DAG ID. + */ + dagId: string; + /** + * The DAG run ID. + */ + dagRunId: string; + /** + * The numbers of items to return. + */ + limit?: number; + /** + * The map index. + */ + mapIndex: number; + /** + * The number of items to skip before starting to collect the result set. + */ + offset?: number; + /** + * The name of the field to order the results by. + * Prefix a field name with `-` to reverse the sort order. + * + * *New in version 2.1.0* + * + */ + orderBy?: string; + /** + * The task ID. + */ + taskId: string; +}; + +export type GetMappedTaskInstanceTriesResponse = TaskInstanceCollection; + +export type GetMappedTaskInstanceTryDetailsData = { + /** + * The DAG ID. + */ + dagId: string; + /** + * The DAG run ID. + */ + dagRunId: string; + /** + * The map index. + */ + mapIndex: number; + /** + * The task ID. + */ + taskId: string; + /** + * The task try number. + */ + taskTryNumber: number; +}; + +export type GetMappedTaskInstanceTryDetailsResponse = TaskInstance; + +export type GetExtraLinksData = { + /** + * The DAG ID. + */ + dagId: string; + /** + * The DAG run ID. + */ + dagRunId: string; + /** + * The task ID. + */ + taskId: string; +}; + +export type GetExtraLinksResponse = ExtraLinkCollection; + +export type GetLogData = { + /** + * The DAG ID. + */ + dagId: string; + /** + * The DAG run ID. + */ + dagRunId: string; + /** + * A full content will be returned. + * By default, only the first fragment will be returned. + * + */ + fullContent?: boolean; + /** + * Filter on map index for mapped task. + */ + mapIndex?: number; + /** + * The task ID. + */ + taskId: string; + /** + * The task try number. + */ + taskTryNumber: number; + /** + * A token that allows you to continue fetching logs. + * If passed, it will specify the location from which the download should be continued. + * + */ + token?: string; +}; + +export type GetLogResponse = { + continuation_token?: string; + content?: string; +}; + +export type GetDagRunsData = { + /** + * The DAG ID. + */ + dagId: string; + /** + * Returns objects greater or equal the specified date. + * + * This can be combined with start_date_lte parameter to receive only the selected period. + * + */ + endDateGte?: string; + /** + * Returns objects less than or equal to the specified date. + * + * This can be combined with start_date_gte parameter to receive only the selected period. + * + */ + endDateLte?: string; + /** + * Returns objects greater or equal to the specified date. + * + * This can be combined with execution_date_lte parameter to receive only the selected period. + * + */ + executionDateGte?: string; + /** + * Returns objects less than or equal to the specified date. + * + * This can be combined with execution_date_gte parameter to receive only the selected period. + * + */ + executionDateLte?: string; + /** + * List of field for return. + * + */ + fields?: Array; + /** + * The numbers of items to return. + */ + limit?: number; + /** + * The number of items to skip before starting to collect the result set. + */ + offset?: number; + /** + * The name of the field to order the results by. + * Prefix a field name with `-` to reverse the sort order. + * + * *New in version 2.1.0* + * + */ + orderBy?: string; + /** + * Returns objects greater or equal the specified date. + * + * This can be combined with start_date_lte parameter to receive only the selected period. + * + */ + startDateGte?: string; + /** + * Returns objects less or equal the specified date. + * + * This can be combined with start_date_gte parameter to receive only the selected period. + * + */ + startDateLte?: string; + /** + * The value can be repeated to retrieve multiple matching values (OR condition). + */ + state?: Array; + /** + * Returns objects greater or equal the specified date. + * + * This can be combined with updated_at_lte parameter to receive only the selected period. + * + * *New in version 2.6.0* + * + */ + updatedAtGte?: string; + /** + * Returns objects less or equal the specified date. + * + * This can be combined with updated_at_gte parameter to receive only the selected period. + * + * *New in version 2.6.0* + * + */ + updatedAtLte?: string; +}; + +export type GetDagRunsResponse = DAGRunCollection; + +export type PostDagRunData = { + /** + * The DAG ID. + */ + dagId: string; + requestBody: DAGRun; +}; + +export type PostDagRunResponse = DAGRun; + +export type GetDagRunsBatchData = { + requestBody: ListDagRunsForm; +}; + +export type GetDagRunsBatchResponse = DAGRunCollection; + +export type GetDagRunData = { + /** + * The DAG ID. + */ + dagId: string; + /** + * The DAG run ID. + */ + dagRunId: string; + /** + * List of field for return. + * + */ + fields?: Array; +}; + +export type GetDagRunResponse = DAGRun; + +export type DeleteDagRunData = { + /** + * The DAG ID. + */ + dagId: string; + /** + * The DAG run ID. + */ + dagRunId: string; +}; + +export type DeleteDagRunResponse = void; + +export type UpdateDagRunStateData = { + /** + * The DAG ID. + */ + dagId: string; + /** + * The DAG run ID. + */ + dagRunId: string; + requestBody: UpdateDagRunState; +}; + +export type UpdateDagRunStateResponse = DAGRun; + +export type ClearDagRunData = { + /** + * The DAG ID. + */ + dagId: string; + /** + * The DAG run ID. + */ + dagRunId: string; + requestBody: ClearDagRun; +}; + +export type ClearDagRunResponse = DAGRun | TaskInstanceCollection; + +export type GetUpstreamDatasetEventsData = { + /** + * The DAG ID. + */ + dagId: string; + /** + * The DAG run ID. + */ + dagRunId: string; +}; + +export type GetUpstreamDatasetEventsResponse = DatasetEventCollection; + +export type SetDagRunNoteData = { + /** + * The DAG ID. + */ + dagId: string; + /** + * The DAG run ID. + */ + dagRunId: string; + /** + * Parameters of set DagRun note. + */ + requestBody: SetDagRunNote; +}; + +export type SetDagRunNoteResponse = DAGRun; + +export type GetDagDatasetQueuedEventData = { + /** + * Timestamp to select event logs occurring before. + */ + before?: string; + /** + * The DAG ID. + */ + dagId: string; + /** + * The encoded Dataset URI + */ + uri: string; +}; + +export type GetDagDatasetQueuedEventResponse = QueuedEvent; + +export type DeleteDagDatasetQueuedEventData = { + /** + * Timestamp to select event logs occurring before. + */ + before?: string; + /** + * The DAG ID. + */ + dagId: string; + /** + * The encoded Dataset URI + */ + uri: string; +}; + +export type DeleteDagDatasetQueuedEventResponse = void; + +export type GetDagDatasetQueuedEventsData = { + /** + * Timestamp to select event logs occurring before. + */ + before?: string; + /** + * The DAG ID. + */ + dagId: string; +}; + +export type GetDagDatasetQueuedEventsResponse = QueuedEventCollection; + +export type DeleteDagDatasetQueuedEventsData = { + /** + * Timestamp to select event logs occurring before. + */ + before?: string; + /** + * The DAG ID. + */ + dagId: string; +}; + +export type DeleteDagDatasetQueuedEventsResponse = void; + +export type GetDatasetQueuedEventsData = { + /** + * Timestamp to select event logs occurring before. + */ + before?: string; + /** + * The encoded Dataset URI + */ + uri: string; +}; + +export type GetDatasetQueuedEventsResponse = QueuedEventCollection; + +export type DeleteDatasetQueuedEventsData = { + /** + * Timestamp to select event logs occurring before. + */ + before?: string; + /** + * The encoded Dataset URI + */ + uri: string; +}; + +export type DeleteDatasetQueuedEventsResponse = void; + +export type GetDatasetsData = { + /** + * One or more DAG IDs separated by commas to filter datasets by associated DAGs either consuming or producing. + * + * *New in version 2.9.0* + * + */ + dagIds?: string; + /** + * The numbers of items to return. + */ + limit?: number; + /** + * The number of items to skip before starting to collect the result set. + */ + offset?: number; + /** + * The name of the field to order the results by. + * Prefix a field name with `-` to reverse the sort order. + * + * *New in version 2.1.0* + * + */ + orderBy?: string; + /** + * If set, only return datasets with uris matching this pattern. + * + */ + uriPattern?: string; +}; + +export type GetDatasetsResponse = DatasetCollection; + +export type GetDatasetData = { + /** + * The encoded Dataset URI + */ + uri: string; +}; + +export type GetDatasetResponse = Dataset; + +export type GetDatasetEventsData = { + /** + * The Dataset ID that updated the dataset. + */ + datasetId?: number; + /** + * The numbers of items to return. + */ + limit?: number; + /** + * The number of items to skip before starting to collect the result set. + */ + offset?: number; + /** + * The name of the field to order the results by. + * Prefix a field name with `-` to reverse the sort order. + * + * *New in version 2.1.0* + * + */ + orderBy?: string; + /** + * The DAG ID that updated the dataset. + */ + sourceDagId?: string; + /** + * The map index that updated the dataset. + */ + sourceMapIndex?: number; + /** + * The DAG run ID that updated the dataset. + */ + sourceRunId?: string; + /** + * The task ID that updated the dataset. + */ + sourceTaskId?: string; +}; + +export type GetDatasetEventsResponse = DatasetEventCollection; + +export type CreateDatasetEventData = { + requestBody: CreateDatasetEvent; +}; + +export type CreateDatasetEventResponse = DatasetEvent; + +export type GetEventLogsData = { + /** + * Timestamp to select event logs occurring after. + */ + after?: string; + /** + * Timestamp to select event logs occurring before. + */ + before?: string; + /** + * Returns objects matched by the DAG ID. + */ + dagId?: string; + /** + * The name of event log. + */ + event?: string; + /** + * One or more event names separated by commas. If set, only return event logs with events that do not match this pattern. + * *New in version 2.9.0* + * + */ + excludedEvents?: string; + /** + * One or more event names separated by commas. If set, only return event logs with events matching this pattern. + * *New in version 2.9.0* + * + */ + includedEvents?: string; + /** + * The numbers of items to return. + */ + limit?: number; + /** + * Filter on map index for mapped task. + */ + mapIndex?: number; + /** + * The number of items to skip before starting to collect the result set. + */ + offset?: number; + /** + * The name of the field to order the results by. + * Prefix a field name with `-` to reverse the sort order. + * + * *New in version 2.1.0* + * + */ + orderBy?: string; + /** + * The owner's name of event log. + */ + owner?: string; + /** + * Returns objects matched by the Run ID. + */ + runId?: string; + /** + * Returns objects matched by the Task ID. + */ + taskId?: string; + /** + * Filter on try_number for task instance. + */ + tryNumber?: number; +}; + +export type GetEventLogsResponse = EventLogCollection; + +export type GetEventLogData = { + /** + * The event log ID. + */ + eventLogId: number; +}; + +export type GetEventLogResponse = EventLog; + +export type GetImportErrorsData = { + /** + * The numbers of items to return. + */ + limit?: number; + /** + * The number of items to skip before starting to collect the result set. + */ + offset?: number; + /** + * The name of the field to order the results by. + * Prefix a field name with `-` to reverse the sort order. + * + * *New in version 2.1.0* + * + */ + orderBy?: string; +}; + +export type GetImportErrorsResponse = ImportErrorCollection; + +export type GetImportErrorData = { + /** + * The import error ID. + */ + importErrorId: number; +}; + +export type GetImportErrorResponse = ImportError; + +export type GetPoolsData = { + /** + * The numbers of items to return. + */ + limit?: number; + /** + * The number of items to skip before starting to collect the result set. + */ + offset?: number; + /** + * The name of the field to order the results by. + * Prefix a field name with `-` to reverse the sort order. + * + * *New in version 2.1.0* + * + */ + orderBy?: string; +}; + +export type GetPoolsResponse = PoolCollection; + +export type PostPoolData = { + requestBody: Pool; +}; + +export type PostPoolResponse = Pool; + +export type GetPoolData = { + /** + * The pool name. + */ + poolName: string; +}; + +export type GetPoolResponse = Pool; + +export type PatchPoolData = { + /** + * The pool name. + */ + poolName: string; + requestBody: Pool; + /** + * The fields to update on the resource. If absent or empty, all modifiable fields are updated. + * A comma-separated list of fully qualified names of fields. + * + */ + updateMask?: Array; +}; + +export type PatchPoolResponse = Pool; + +export type DeletePoolData = { + /** + * The pool name. + */ + poolName: string; +}; + +export type DeletePoolResponse = void; + +export type GetProvidersResponse = ProviderCollection & CollectionInfo; + +export type GetVariablesData = { + /** + * The numbers of items to return. + */ + limit?: number; + /** + * The number of items to skip before starting to collect the result set. + */ + offset?: number; + /** + * The name of the field to order the results by. + * Prefix a field name with `-` to reverse the sort order. + * + * *New in version 2.1.0* + * + */ + orderBy?: string; +}; + +export type GetVariablesResponse = VariableCollection; + +export type PostVariablesData = { + requestBody: Variable; +}; + +export type PostVariablesResponse = Variable; + +export type GetVariableData = { + /** + * The variable Key. + */ + variableKey: string; +}; + +export type GetVariableResponse = Variable; + +export type PatchVariableData = { + requestBody: Variable; + /** + * The fields to update on the resource. If absent or empty, all modifiable fields are updated. + * A comma-separated list of fully qualified names of fields. + * + */ + updateMask?: Array; + /** + * The variable Key. + */ + variableKey: string; +}; + +export type PatchVariableResponse = Variable; + +export type DeleteVariableData = { + /** + * The variable Key. + */ + variableKey: string; +}; + +export type DeleteVariableResponse = void; + +export type GetXcomEntriesData = { + /** + * The DAG ID. + */ + dagId: string; + /** + * The DAG run ID. + */ + dagRunId: string; + /** + * The numbers of items to return. + */ + limit?: number; + /** + * Filter on map index for mapped task. + */ + mapIndex?: number; + /** + * The number of items to skip before starting to collect the result set. + */ + offset?: number; + /** + * The task ID. + */ + taskId: string; + /** + * Only filter the XCom records which have the provided key. + */ + xcomKey?: string; +}; + +export type GetXcomEntriesResponse = XComCollection; + +export type GetXcomEntryData = { + /** + * The DAG ID. + */ + dagId: string; + /** + * The DAG run ID. + */ + dagRunId: string; + /** + * Whether to deserialize an XCom value when using a custom XCom backend. + * + * The XCom API endpoint calls `orm_deserialize_value` by default since an XCom may contain value + * that is potentially expensive to deserialize in the web server. Setting this to true overrides + * the consideration, and calls `deserialize_value` instead. + * + * This parameter is not meaningful when using the default XCom backend. + * + * *New in version 2.4.0* + * + */ + deserialize?: boolean; + /** + * Filter on map index for mapped task. + */ + mapIndex?: number; + /** + * Whether to convert the XCom value to be a string. XCom values can be of Any data type. + * + * If set to true (default) the Any value will be returned as string, e.g. a Python representation + * of a dict. If set to false it will return the raw data as dict, list, string or whatever was stored. + * + * *New in version 2.10.0* + * + */ + stringify?: boolean; + /** + * The task ID. + */ + taskId: string; + /** + * The XCom key. + */ + xcomKey: string; +}; + +export type GetXcomEntryResponse = XCom; + +export type GetDagStatsData = { + /** + * One or more DAG IDs separated by commas to filter relevant Dags. + * + */ + dagIds: string; +}; + +export type GetDagStatsResponse = DagStatsCollectionSchema; + +export type GetDagWarningsData = { + /** + * If set, only return DAG warnings with this dag_id. + */ + dagId?: string; + /** + * The numbers of items to return. + */ + limit?: number; + /** + * The number of items to skip before starting to collect the result set. + */ + offset?: number; + /** + * The name of the field to order the results by. + * Prefix a field name with `-` to reverse the sort order. + * + * *New in version 2.1.0* + * + */ + orderBy?: string; + /** + * If set, only return DAG warnings with this type. + */ + warningType?: string; +}; + +export type GetDagWarningsResponse = DagWarningCollection; + +export type GetConfigData = { + /** + * If given, only return config of this section. + */ + section?: string; +}; + +export type GetConfigResponse = Config; + +export type GetValueData = { + option: string; + section: string; +}; + +export type GetValueResponse = Config; + +export type GetHealthResponse = HealthInfo; + +export type GetVersionResponse = VersionInfo; + +export type GetPluginsData = { + /** + * The numbers of items to return. + */ + limit?: number; + /** + * The number of items to skip before starting to collect the result set. + */ + offset?: number; +}; + +export type GetPluginsResponse = PluginCollection; + +export type GetRolesData = { + /** + * The numbers of items to return. + */ + limit?: number; + /** + * The number of items to skip before starting to collect the result set. + */ + offset?: number; + /** + * The name of the field to order the results by. + * Prefix a field name with `-` to reverse the sort order. + * + * *New in version 2.1.0* + * + */ + orderBy?: string; +}; + +export type GetRolesResponse = RoleCollection; + +export type PostRoleData = { + requestBody: Role; +}; + +export type PostRoleResponse = Role; + +export type GetRoleData = { + /** + * The role name + */ + roleName: string; +}; + +export type GetRoleResponse = Role; + +export type PatchRoleData = { + requestBody: Role; + /** + * The role name + */ + roleName: string; + /** + * The fields to update on the resource. If absent or empty, all modifiable fields are updated. + * A comma-separated list of fully qualified names of fields. + * + */ + updateMask?: Array; +}; + +export type PatchRoleResponse = Role; + +export type DeleteRoleData = { + /** + * The role name + */ + roleName: string; +}; + +export type DeleteRoleResponse = void; + +export type GetPermissionsData = { + /** + * The numbers of items to return. + */ + limit?: number; + /** + * The number of items to skip before starting to collect the result set. + */ + offset?: number; +}; + +export type GetPermissionsResponse = ActionCollection; + +export type GetUsersData = { + /** + * The numbers of items to return. + */ + limit?: number; + /** + * The number of items to skip before starting to collect the result set. + */ + offset?: number; + /** + * The name of the field to order the results by. + * Prefix a field name with `-` to reverse the sort order. + * + * *New in version 2.1.0* + * + */ + orderBy?: string; +}; + +export type GetUsersResponse = UserCollection; + +export type PostUserData = { + requestBody: User; +}; + +export type PostUserResponse = User; + +export type GetUserData = { + /** + * The username of the user. + * + * *New in version 2.1.0* + * + */ + username: string; +}; + +export type GetUserResponse = UserCollectionItem; + +export type PatchUserData = { + requestBody: User; + /** + * The fields to update on the resource. If absent or empty, all modifiable fields are updated. + * A comma-separated list of fully qualified names of fields. + * + */ + updateMask?: Array; + /** + * The username of the user. + * + * *New in version 2.1.0* + * + */ + username: string; +}; + +export type PatchUserResponse = UserCollectionItem; + +export type DeleteUserData = { + /** + * The username of the user. + * + * *New in version 2.1.0* + * + */ + username: string; +}; + +export type DeleteUserResponse = void; + +export type $OpenApiTs = { + "/connections": { + get: { + req: GetConnectionsData; + res: { + /** + * Success. + */ + 200: ConnectionCollection; + /** + * Request not authenticated due to missing, invalid, authentication info. + */ + 401: Error; + /** + * Client does not have sufficient permission. + */ + 403: Error; + }; + }; + post: { + req: PostConnectionData; + res: { + /** + * Success. + */ + 200: Connection; + /** + * Client specified an invalid argument. + */ + 400: Error; + /** + * Request not authenticated due to missing, invalid, authentication info. + */ + 401: Error; + /** + * Client does not have sufficient permission. + */ + 403: Error; + }; + }; + }; + "/connections/{connection_id}": { + get: { + req: GetConnectionData; + res: { + /** + * Success. + */ + 200: Connection; + /** + * Request not authenticated due to missing, invalid, authentication info. + */ + 401: Error; + /** + * Client does not have sufficient permission. + */ + 403: Error; + /** + * A specified resource is not found. + */ + 404: Error; + }; + }; + patch: { + req: PatchConnectionData; + res: { + /** + * Success. + */ + 200: Connection; + /** + * Client specified an invalid argument. + */ + 400: Error; + /** + * Request not authenticated due to missing, invalid, authentication info. + */ + 401: Error; + /** + * Client does not have sufficient permission. + */ + 403: Error; + /** + * A specified resource is not found. + */ + 404: Error; + }; + }; + delete: { + req: DeleteConnectionData; + res: { + /** + * Success. + */ + 204: void; + /** + * Client specified an invalid argument. + */ + 400: Error; + /** + * Request not authenticated due to missing, invalid, authentication info. + */ + 401: Error; + /** + * Client does not have sufficient permission. + */ + 403: Error; + /** + * A specified resource is not found. + */ + 404: Error; + }; + }; + }; + "/connections/test": { + post: { + req: TestConnectionData; + res: { + /** + * Success. + */ + 200: ConnectionTest; + /** + * Client specified an invalid argument. + */ + 400: Error; + /** + * Request not authenticated due to missing, invalid, authentication info. + */ + 401: Error; + /** + * Client does not have sufficient permission. + */ + 403: Error; + /** + * A specified resource is not found. + */ + 404: Error; + }; + }; + }; + "/dags": { + get: { + req: GetDagsData; + res: { + /** + * Success. + */ + 200: DAGCollection; + /** + * Request not authenticated due to missing, invalid, authentication info. + */ + 401: Error; + }; + }; + patch: { + req: PatchDagsData; + res: { + /** + * Success. + */ + 200: DAGCollection; + /** + * Request not authenticated due to missing, invalid, authentication info. + */ + 401: Error; + /** + * Client does not have sufficient permission. + */ + 403: Error; + /** + * A specified resource is not found. + */ + 404: Error; + }; + }; + }; + "/dags/{dag_id}": { + get: { + req: GetDagData; + res: { + /** + * Success. + */ + 200: DAG; + /** + * Request not authenticated due to missing, invalid, authentication info. + */ + 401: Error; + /** + * Client does not have sufficient permission. + */ + 403: Error; + /** + * A specified resource is not found. + */ + 404: Error; + }; + }; + patch: { + req: PatchDagData; + res: { + /** + * Success. + */ + 200: DAG; + /** + * Request not authenticated due to missing, invalid, authentication info. + */ + 401: Error; + /** + * Client does not have sufficient permission. + */ + 403: Error; + /** + * A specified resource is not found. + */ + 404: Error; + }; + }; + delete: { + req: DeleteDagData; + res: { + /** + * Success. + */ + 204: void; + /** + * Client specified an invalid argument. + */ + 400: Error; + /** + * Request not authenticated due to missing, invalid, authentication info. + */ + 401: Error; + /** + * Client does not have sufficient permission. + */ + 403: Error; + /** + * A specified resource is not found. + */ + 404: Error; + /** + * An existing resource conflicts with the request. + */ + 409: Error; + }; + }; + }; + "/dags/{dag_id}/clearTaskInstances": { + post: { + req: PostClearTaskInstancesData; + res: { + /** + * Success. + */ + 200: TaskInstanceReferenceCollection; + /** + * Request not authenticated due to missing, invalid, authentication info. + */ + 401: Error; + /** + * Client does not have sufficient permission. + */ + 403: Error; + /** + * A specified resource is not found. + */ + 404: Error; + }; + }; + }; + "/dags/{dag_id}/updateTaskInstancesState": { + post: { + req: PostSetTaskInstancesStateData; + res: { + /** + * Success. + */ + 200: TaskInstanceReferenceCollection; + /** + * Request not authenticated due to missing, invalid, authentication info. + */ + 401: Error; + /** + * Client does not have sufficient permission. + */ + 403: Error; + /** + * A specified resource is not found. + */ + 404: Error; + }; + }; + }; + "/parseDagFile/{file_token}": { + put: { + req: ReparseDagFileData; + res: { + /** + * Success. + */ + 201: unknown; + /** + * Request not authenticated due to missing, invalid, authentication info. + */ + 401: Error; + /** + * Client does not have sufficient permission. + */ + 403: Error; + /** + * A specified resource is not found. + */ + 404: Error; + }; + }; + }; + "/dags/{dag_id}/details": { + get: { + req: GetDagDetailsData; + res: { + /** + * Success. + */ + 200: DAGDetail; + /** + * Request not authenticated due to missing, invalid, authentication info. + */ + 401: Error; + /** + * Client does not have sufficient permission. + */ + 403: Error; + /** + * A specified resource is not found. + */ + 404: Error; + }; + }; + }; + "/dags/{dag_id}/tasks": { + get: { + req: GetTasksData; + res: { + /** + * Success. + */ + 200: TaskCollection; + /** + * Request not authenticated due to missing, invalid, authentication info. + */ + 401: Error; + /** + * Client does not have sufficient permission. + */ + 403: Error; + /** + * A specified resource is not found. + */ + 404: Error; + }; + }; + }; + "/dags/{dag_id}/tasks/{task_id}": { + get: { + req: GetTaskData; + res: { + /** + * Success. + */ + 200: Task; + /** + * Request not authenticated due to missing, invalid, authentication info. + */ + 401: Error; + /** + * Client does not have sufficient permission. + */ + 403: Error; + /** + * A specified resource is not found. + */ + 404: Error; + }; + }; + }; + "/dagSources/{file_token}": { + get: { + req: GetDagSourceData; + res: { + /** + * Success. + */ + 200: { + content?: string; + }; + /** + * Request not authenticated due to missing, invalid, authentication info. + */ + 401: Error; + /** + * Client does not have sufficient permission. + */ + 403: Error; + /** + * A specified resource is not found. + */ + 404: Error; + /** + * A specified Accept header is not allowed. + */ + 406: Error; + }; + }; + }; + "/dags/{dag_id}/dagRuns/{dag_run_id}/taskInstances/{task_id}/setNote": { + patch: { + req: SetTaskInstanceNoteData; + res: { + /** + * Success. + */ + 200: TaskInstance; + /** + * Client specified an invalid argument. + */ + 400: Error; + /** + * Request not authenticated due to missing, invalid, authentication info. + */ + 401: Error; + /** + * Client does not have sufficient permission. + */ + 403: Error; + /** + * A specified resource is not found. + */ + 404: Error; + }; + }; + }; + "/dags/{dag_id}/dagRuns/{dag_run_id}/taskInstances/{task_id}/{map_index}/setNote": { + patch: { + req: SetMappedTaskInstanceNoteData; + res: { + /** + * Success. + */ + 200: TaskInstance; + /** + * Client specified an invalid argument. + */ + 400: Error; + /** + * Request not authenticated due to missing, invalid, authentication info. + */ + 401: Error; + /** + * Client does not have sufficient permission. + */ + 403: Error; + /** + * A specified resource is not found. + */ + 404: Error; + }; + }; + }; + "/dags/{dag_id}/dagRuns/{dag_run_id}/taskInstances/{task_id}/dependencies": { + get: { + req: GetTaskInstanceDependenciesData; + res: { + /** + * Success. + */ + 200: TaskInstanceDependencyCollection; + /** + * Client specified an invalid argument. + */ + 400: Error; + /** + * Request not authenticated due to missing, invalid, authentication info. + */ + 401: Error; + /** + * Client does not have sufficient permission. + */ + 403: Error; + /** + * A specified resource is not found. + */ + 404: Error; + }; + }; + }; + "/dags/{dag_id}/dagRuns/{dag_run_id}/taskInstances/{task_id}/{map_index}/dependencies": { + get: { + req: GetMappedTaskInstanceDependenciesData; + res: { + /** + * Success. + */ + 200: TaskInstanceDependencyCollection; + /** + * Client specified an invalid argument. + */ + 400: Error; + /** + * Request not authenticated due to missing, invalid, authentication info. + */ + 401: Error; + /** + * Client does not have sufficient permission. + */ + 403: Error; + /** + * A specified resource is not found. + */ + 404: Error; + }; + }; + }; + "/dags/{dag_id}/dagRuns/{dag_run_id}/taskInstances": { + get: { + req: GetTaskInstancesData; + res: { + /** + * Success. + */ + 200: TaskInstanceCollection; + /** + * Request not authenticated due to missing, invalid, authentication info. + */ + 401: Error; + /** + * Client does not have sufficient permission. + */ + 403: Error; + }; + }; + }; + "/dags/{dag_id}/dagRuns/{dag_run_id}/taskInstances/{task_id}": { + get: { + req: GetTaskInstanceData; + res: { + /** + * Success. + */ + 200: TaskInstance; + /** + * Request not authenticated due to missing, invalid, authentication info. + */ + 401: Error; + /** + * Client does not have sufficient permission. + */ + 403: Error; + /** + * A specified resource is not found. + */ + 404: Error; + }; + }; + patch: { + req: PatchTaskInstanceData; + res: { + /** + * Success. + */ + 200: TaskInstanceReference; + /** + * Request not authenticated due to missing, invalid, authentication info. + */ + 401: Error; + /** + * Client does not have sufficient permission. + */ + 403: Error; + /** + * A specified resource is not found. + */ + 404: Error; + }; + }; + }; + "/dags/{dag_id}/dagRuns/{dag_run_id}/taskInstances/{task_id}/{map_index}": { + get: { + req: GetMappedTaskInstanceData; + res: { + /** + * Success. + */ + 200: TaskInstance; + /** + * Request not authenticated due to missing, invalid, authentication info. + */ + 401: Error; + /** + * Client does not have sufficient permission. + */ + 403: Error; + /** + * A specified resource is not found. + */ + 404: Error; + }; + }; + patch: { + req: PatchMappedTaskInstanceData; + res: { + /** + * Success. + */ + 200: TaskInstanceReference; + /** + * Request not authenticated due to missing, invalid, authentication info. + */ + 401: Error; + /** + * Client does not have sufficient permission. + */ + 403: Error; + /** + * A specified resource is not found. + */ + 404: Error; + }; + }; + }; + "/dags/{dag_id}/dagRuns/{dag_run_id}/taskInstances/{task_id}/listMapped": { + get: { + req: GetMappedTaskInstancesData; + res: { + /** + * Success. + */ + 200: TaskInstanceCollection; + /** + * Request not authenticated due to missing, invalid, authentication info. + */ + 401: Error; + /** + * Client does not have sufficient permission. + */ + 403: Error; + /** + * A specified resource is not found. + */ + 404: Error; + }; + }; + }; + "/dags/~/dagRuns/~/taskInstances/list": { + post: { + req: GetTaskInstancesBatchData; + res: { + /** + * Success. + */ + 200: TaskInstanceCollection; + /** + * Request not authenticated due to missing, invalid, authentication info. + */ + 401: Error; + /** + * Client does not have sufficient permission. + */ + 403: Error; + /** + * A specified resource is not found. + */ + 404: Error; + }; + }; + }; + "/dags/{dag_id}/dagRuns/{dag_run_id}/taskInstances/{task_id}/tries/{task_try_number}": { + get: { + req: GetTaskInstanceTryDetailsData; + res: { + /** + * Success. + */ + 200: TaskInstance; + /** + * Request not authenticated due to missing, invalid, authentication info. + */ + 401: Error; + /** + * Client does not have sufficient permission. + */ + 403: Error; + /** + * A specified resource is not found. + */ + 404: Error; + }; + }; + }; + "/dags/{dag_id}/dagRuns/{dag_run_id}/taskInstances/{task_id}/tries": { + get: { + req: GetTaskInstanceTriesData; + res: { + /** + * Success. + */ + 200: TaskInstanceCollection; + /** + * Request not authenticated due to missing, invalid, authentication info. + */ + 401: Error; + /** + * Client does not have sufficient permission. + */ + 403: Error; + /** + * A specified resource is not found. + */ + 404: Error; + }; + }; + }; + "/dags/{dag_id}/dagRuns/{dag_run_id}/taskInstances/{task_id}/{map_index}/tries": { + get: { + req: GetMappedTaskInstanceTriesData; + res: { + /** + * Success. + */ + 200: TaskInstanceCollection; + /** + * Request not authenticated due to missing, invalid, authentication info. + */ + 401: Error; + /** + * Client does not have sufficient permission. + */ + 403: Error; + /** + * A specified resource is not found. + */ + 404: Error; + }; + }; + }; + "/dags/{dag_id}/dagRuns/{dag_run_id}/taskInstances/{task_id}/{map_index}/tries/{task_try_number}": { + get: { + req: GetMappedTaskInstanceTryDetailsData; + res: { + /** + * Success. + */ + 200: TaskInstance; + /** + * Request not authenticated due to missing, invalid, authentication info. + */ + 401: Error; + /** + * Client does not have sufficient permission. + */ + 403: Error; + /** + * A specified resource is not found. + */ + 404: Error; + }; + }; + }; + "/dags/{dag_id}/dagRuns/{dag_run_id}/taskInstances/{task_id}/links": { + get: { + req: GetExtraLinksData; + res: { + /** + * Success. + */ + 200: ExtraLinkCollection; + /** + * Request not authenticated due to missing, invalid, authentication info. + */ + 401: Error; + /** + * Client does not have sufficient permission. + */ + 403: Error; + /** + * A specified resource is not found. + */ + 404: Error; + }; + }; + }; + "/dags/{dag_id}/dagRuns/{dag_run_id}/taskInstances/{task_id}/logs/{task_try_number}": { + get: { + req: GetLogData; + res: { + /** + * Success. + */ + 200: { + continuation_token?: string; + content?: string; + }; + /** + * Client specified an invalid argument. + */ + 400: Error; + /** + * Request not authenticated due to missing, invalid, authentication info. + */ + 401: Error; + /** + * Client does not have sufficient permission. + */ + 403: Error; + /** + * A specified resource is not found. + */ + 404: Error; + }; + }; + }; + "/dags/{dag_id}/dagRuns": { + get: { + req: GetDagRunsData; + res: { + /** + * List of DAG runs. + */ + 200: DAGRunCollection; + /** + * Request not authenticated due to missing, invalid, authentication info. + */ + 401: Error; + }; + }; + post: { + req: PostDagRunData; + res: { + /** + * Success. + */ + 200: DAGRun; + /** + * Client specified an invalid argument. + */ + 400: Error; + /** + * Request not authenticated due to missing, invalid, authentication info. + */ + 401: Error; + /** + * Client does not have sufficient permission. + */ + 403: Error; + /** + * A specified resource is not found. + */ + 404: Error; + /** + * An existing resource conflicts with the request. + */ + 409: Error; + }; + }; + }; + "/dags/~/dagRuns/list": { + post: { + req: GetDagRunsBatchData; + res: { + /** + * Success. + */ + 200: DAGRunCollection; + /** + * Client specified an invalid argument. + */ + 400: Error; + /** + * Request not authenticated due to missing, invalid, authentication info. + */ + 401: Error; + /** + * Client does not have sufficient permission. + */ + 403: Error; + }; + }; + }; + "/dags/{dag_id}/dagRuns/{dag_run_id}": { + get: { + req: GetDagRunData; + res: { + /** + * Success. + */ + 200: DAGRun; + /** + * Request not authenticated due to missing, invalid, authentication info. + */ + 401: Error; + /** + * Client does not have sufficient permission. + */ + 403: Error; + /** + * A specified resource is not found. + */ + 404: Error; + }; + }; + delete: { + req: DeleteDagRunData; + res: { + /** + * Success. + */ + 204: void; + /** + * Client specified an invalid argument. + */ + 400: Error; + /** + * Request not authenticated due to missing, invalid, authentication info. + */ + 401: Error; + /** + * Client does not have sufficient permission. + */ + 403: Error; + /** + * A specified resource is not found. + */ + 404: Error; + }; + }; + patch: { + req: UpdateDagRunStateData; + res: { + /** + * Success. + */ + 200: DAGRun; + /** + * Client specified an invalid argument. + */ + 400: Error; + /** + * Request not authenticated due to missing, invalid, authentication info. + */ + 401: Error; + /** + * Client does not have sufficient permission. + */ + 403: Error; + /** + * A specified resource is not found. + */ + 404: Error; + }; + }; + }; + "/dags/{dag_id}/dagRuns/{dag_run_id}/clear": { + post: { + req: ClearDagRunData; + res: { + /** + * Success. + */ + 200: DAGRun | TaskInstanceCollection; + /** + * Client specified an invalid argument. + */ + 400: Error; + /** + * Request not authenticated due to missing, invalid, authentication info. + */ + 401: Error; + /** + * Client does not have sufficient permission. + */ + 403: Error; + /** + * A specified resource is not found. + */ + 404: Error; + }; + }; + }; + "/dags/{dag_id}/dagRuns/{dag_run_id}/upstreamDatasetEvents": { + get: { + req: GetUpstreamDatasetEventsData; + res: { + /** + * Success. + */ + 200: DatasetEventCollection; + /** + * Request not authenticated due to missing, invalid, authentication info. + */ + 401: Error; + /** + * Client does not have sufficient permission. + */ + 403: Error; + /** + * A specified resource is not found. + */ + 404: Error; + }; + }; + }; + "/dags/{dag_id}/dagRuns/{dag_run_id}/setNote": { + patch: { + req: SetDagRunNoteData; + res: { + /** + * Success. + */ + 200: DAGRun; + /** + * Client specified an invalid argument. + */ + 400: Error; + /** + * Request not authenticated due to missing, invalid, authentication info. + */ + 401: Error; + /** + * Client does not have sufficient permission. + */ + 403: Error; + /** + * A specified resource is not found. + */ + 404: Error; + }; + }; + }; + "/dags/{dag_id}/datasets/queuedEvent/{uri}": { + get: { + req: GetDagDatasetQueuedEventData; + res: { + /** + * Success. + */ + 200: QueuedEvent; + /** + * Request not authenticated due to missing, invalid, authentication info. + */ + 401: Error; + /** + * Client does not have sufficient permission. + */ + 403: Error; + /** + * A specified resource is not found. + */ + 404: Error; + }; + }; + delete: { + req: DeleteDagDatasetQueuedEventData; + res: { + /** + * Success. + */ + 204: void; + /** + * Client specified an invalid argument. + */ + 400: Error; + /** + * Request not authenticated due to missing, invalid, authentication info. + */ + 401: Error; + /** + * Client does not have sufficient permission. + */ + 403: Error; + /** + * A specified resource is not found. + */ + 404: Error; + }; + }; + }; + "/dags/{dag_id}/datasets/queuedEvent": { + get: { + req: GetDagDatasetQueuedEventsData; + res: { + /** + * Success. + */ + 200: QueuedEventCollection; + /** + * Request not authenticated due to missing, invalid, authentication info. + */ + 401: Error; + /** + * Client does not have sufficient permission. + */ + 403: Error; + /** + * A specified resource is not found. + */ + 404: Error; + }; + }; + delete: { + req: DeleteDagDatasetQueuedEventsData; + res: { + /** + * Success. + */ + 204: void; + /** + * Client specified an invalid argument. + */ + 400: Error; + /** + * Request not authenticated due to missing, invalid, authentication info. + */ + 401: Error; + /** + * Client does not have sufficient permission. + */ + 403: Error; + /** + * A specified resource is not found. + */ + 404: Error; + }; + }; + }; + "/datasets/queuedEvent/{uri}": { + get: { + req: GetDatasetQueuedEventsData; + res: { + /** + * Success. + */ + 200: QueuedEventCollection; + /** + * Request not authenticated due to missing, invalid, authentication info. + */ + 401: Error; + /** + * Client does not have sufficient permission. + */ + 403: Error; + /** + * A specified resource is not found. + */ + 404: Error; + }; + }; + delete: { + req: DeleteDatasetQueuedEventsData; + res: { + /** + * Success. + */ + 204: void; + /** + * Client specified an invalid argument. + */ + 400: Error; + /** + * Request not authenticated due to missing, invalid, authentication info. + */ + 401: Error; + /** + * Client does not have sufficient permission. + */ + 403: Error; + /** + * A specified resource is not found. + */ + 404: Error; + }; + }; + }; + "/datasets": { + get: { + req: GetDatasetsData; + res: { + /** + * Success. + */ + 200: DatasetCollection; + /** + * Request not authenticated due to missing, invalid, authentication info. + */ + 401: Error; + /** + * Client does not have sufficient permission. + */ + 403: Error; + }; + }; + }; + "/datasets/{uri}": { + get: { + req: GetDatasetData; + res: { + /** + * Success. + */ + 200: Dataset; + /** + * Request not authenticated due to missing, invalid, authentication info. + */ + 401: Error; + /** + * Client does not have sufficient permission. + */ + 403: Error; + /** + * A specified resource is not found. + */ + 404: Error; + }; + }; + }; + "/datasets/events": { + get: { + req: GetDatasetEventsData; + res: { + /** + * Success. + */ + 200: DatasetEventCollection; + /** + * Request not authenticated due to missing, invalid, authentication info. + */ + 401: Error; + /** + * Client does not have sufficient permission. + */ + 403: Error; + /** + * A specified resource is not found. + */ + 404: Error; + }; + }; + post: { + req: CreateDatasetEventData; + res: { + /** + * Success. + */ + 200: DatasetEvent; + /** + * Client specified an invalid argument. + */ + 400: Error; + /** + * Request not authenticated due to missing, invalid, authentication info. + */ + 401: Error; + /** + * Client does not have sufficient permission. + */ + 403: Error; + /** + * A specified resource is not found. + */ + 404: Error; + }; + }; + }; + "/eventLogs": { + get: { + req: GetEventLogsData; + res: { + /** + * Success. + */ + 200: EventLogCollection; + /** + * Request not authenticated due to missing, invalid, authentication info. + */ + 401: Error; + /** + * Client does not have sufficient permission. + */ + 403: Error; + }; + }; + }; + "/eventLogs/{event_log_id}": { + get: { + req: GetEventLogData; + res: { + /** + * Success. + */ + 200: EventLog; + /** + * Request not authenticated due to missing, invalid, authentication info. + */ + 401: Error; + /** + * Client does not have sufficient permission. + */ + 403: Error; + /** + * A specified resource is not found. + */ + 404: Error; + }; + }; + }; + "/importErrors": { + get: { + req: GetImportErrorsData; + res: { + /** + * Success. + */ + 200: ImportErrorCollection; + /** + * Request not authenticated due to missing, invalid, authentication info. + */ + 401: Error; + /** + * Client does not have sufficient permission. + */ + 403: Error; + }; + }; + }; + "/importErrors/{import_error_id}": { + get: { + req: GetImportErrorData; + res: { + /** + * Success. + */ + 200: ImportError; + /** + * Request not authenticated due to missing, invalid, authentication info. + */ + 401: Error; + /** + * Client does not have sufficient permission. + */ + 403: Error; + /** + * A specified resource is not found. + */ + 404: Error; + }; + }; + }; + "/pools": { + get: { + req: GetPoolsData; + res: { + /** + * List of pools. + */ + 200: PoolCollection; + /** + * Request not authenticated due to missing, invalid, authentication info. + */ + 401: Error; + /** + * Client does not have sufficient permission. + */ + 403: Error; + }; + }; + post: { + req: PostPoolData; + res: { + /** + * Success. + */ + 200: Pool; + /** + * Client specified an invalid argument. + */ + 400: Error; + /** + * Request not authenticated due to missing, invalid, authentication info. + */ + 401: Error; + /** + * Client does not have sufficient permission. + */ + 403: Error; + }; + }; + }; + "/pools/{pool_name}": { + get: { + req: GetPoolData; + res: { + /** + * Success. + */ + 200: Pool; + /** + * Request not authenticated due to missing, invalid, authentication info. + */ + 401: Error; + /** + * Client does not have sufficient permission. + */ + 403: Error; + /** + * A specified resource is not found. + */ + 404: Error; + }; + }; + patch: { + req: PatchPoolData; + res: { + /** + * Success. + */ + 200: Pool; + /** + * Client specified an invalid argument. + */ + 400: Error; + /** + * Request not authenticated due to missing, invalid, authentication info. + */ + 401: Error; + /** + * Client does not have sufficient permission. + */ + 403: Error; + /** + * A specified resource is not found. + */ + 404: Error; + /** + * An existing resource conflicts with the request. + */ + 409: Error; + }; + }; + delete: { + req: DeletePoolData; + res: { + /** + * Success. + */ + 204: void; + /** + * Client specified an invalid argument. + */ + 400: Error; + /** + * Request not authenticated due to missing, invalid, authentication info. + */ + 401: Error; + /** + * Client does not have sufficient permission. + */ + 403: Error; + /** + * A specified resource is not found. + */ + 404: Error; + }; + }; + }; + "/providers": { + get: { + res: { + /** + * List of providers. + */ + 200: ProviderCollection & CollectionInfo; + /** + * Request not authenticated due to missing, invalid, authentication info. + */ + 401: Error; + /** + * Client does not have sufficient permission. + */ + 403: Error; + }; + }; + }; + "/variables": { + get: { + req: GetVariablesData; + res: { + /** + * Success. + */ + 200: VariableCollection; + /** + * Request not authenticated due to missing, invalid, authentication info. + */ + 401: Error; + /** + * Client does not have sufficient permission. + */ + 403: Error; + }; + }; + post: { + req: PostVariablesData; + res: { + /** + * Success. + */ + 200: Variable; + /** + * Client specified an invalid argument. + */ + 400: Error; + /** + * Request not authenticated due to missing, invalid, authentication info. + */ + 401: Error; + /** + * Client does not have sufficient permission. + */ + 403: Error; + }; + }; + }; + "/variables/{variable_key}": { + get: { + req: GetVariableData; + res: { + /** + * Success. + */ + 200: Variable; + /** + * Request not authenticated due to missing, invalid, authentication info. + */ + 401: Error; + /** + * Client does not have sufficient permission. + */ + 403: Error; + /** + * A specified resource is not found. + */ + 404: Error; + }; + }; + patch: { + req: PatchVariableData; + res: { + /** + * Success. + */ + 200: Variable; + /** + * Client specified an invalid argument. + */ + 400: Error; + /** + * Request not authenticated due to missing, invalid, authentication info. + */ + 401: Error; + /** + * Client does not have sufficient permission. + */ + 403: Error; + /** + * A specified resource is not found. + */ + 404: Error; + }; + }; + delete: { + req: DeleteVariableData; + res: { + /** + * Success. + */ + 204: void; + /** + * Client specified an invalid argument. + */ + 400: Error; + /** + * Request not authenticated due to missing, invalid, authentication info. + */ + 401: Error; + /** + * Client does not have sufficient permission. + */ + 403: Error; + /** + * A specified resource is not found. + */ + 404: Error; + }; + }; + }; + "/dags/{dag_id}/dagRuns/{dag_run_id}/taskInstances/{task_id}/xcomEntries": { + get: { + req: GetXcomEntriesData; + res: { + /** + * Success. + */ + 200: XComCollection; + /** + * Request not authenticated due to missing, invalid, authentication info. + */ + 401: Error; + /** + * Client does not have sufficient permission. + */ + 403: Error; + }; + }; + }; + "/dags/{dag_id}/dagRuns/{dag_run_id}/taskInstances/{task_id}/xcomEntries/{xcom_key}": { + get: { + req: GetXcomEntryData; + res: { + /** + * Success. + */ + 200: XCom; + /** + * Request not authenticated due to missing, invalid, authentication info. + */ + 401: Error; + /** + * Client does not have sufficient permission. + */ + 403: Error; + /** + * A specified resource is not found. + */ + 404: Error; + }; + }; + }; + "/dagStats": { + get: { + req: GetDagStatsData; + res: { + /** + * Success. + */ + 200: DagStatsCollectionSchema; + /** + * Request not authenticated due to missing, invalid, authentication info. + */ + 401: Error; + /** + * Client does not have sufficient permission. + */ + 403: Error; + }; + }; + }; + "/dagWarnings": { + get: { + req: GetDagWarningsData; + res: { + /** + * Success. + */ + 200: DagWarningCollection; + /** + * Request not authenticated due to missing, invalid, authentication info. + */ + 401: Error; + /** + * Client does not have sufficient permission. + */ + 403: Error; + }; + }; + }; + "/config": { + get: { + req: GetConfigData; + res: { + /** + * Success. + */ + 200: Config; + /** + * Request not authenticated due to missing, invalid, authentication info. + */ + 401: Error; + /** + * Client does not have sufficient permission. + */ + 403: Error; + /** + * A specified resource is not found. + */ + 404: Error; + }; + }; + }; + "/config/section/{section}/option/{option}": { + get: { + req: GetValueData; + res: { + /** + * Success. + */ + 200: Config; + /** + * Request not authenticated due to missing, invalid, authentication info. + */ + 401: Error; + /** + * Client does not have sufficient permission. + */ + 403: Error; + /** + * A specified resource is not found. + */ + 404: Error; + }; + }; + }; + "/health": { + get: { + res: { + /** + * Success. + */ + 200: HealthInfo; + }; + }; + }; + "/version": { + get: { + res: { + /** + * Success. + */ + 200: VersionInfo; + }; + }; + }; + "/plugins": { + get: { + req: GetPluginsData; + res: { + /** + * Success + */ + 200: PluginCollection; + /** + * Request not authenticated due to missing, invalid, authentication info. + */ + 401: Error; + /** + * Client does not have sufficient permission. + */ + 403: Error; + /** + * A specified resource is not found. + */ + 404: Error; + }; + }; + }; + "/roles": { + get: { + req: GetRolesData; + res: { + /** + * Success. + */ + 200: RoleCollection; + /** + * Request not authenticated due to missing, invalid, authentication info. + */ + 401: Error; + /** + * Client does not have sufficient permission. + */ + 403: Error; + }; + }; + post: { + req: PostRoleData; + res: { + /** + * Success. + */ + 200: Role; + /** + * Client specified an invalid argument. + */ + 400: Error; + /** + * Request not authenticated due to missing, invalid, authentication info. + */ + 401: Error; + /** + * Client does not have sufficient permission. + */ + 403: Error; + }; + }; + }; + "/roles/{role_name}": { + get: { + req: GetRoleData; + res: { + /** + * Success. + */ + 200: Role; + /** + * Request not authenticated due to missing, invalid, authentication info. + */ + 401: Error; + /** + * Client does not have sufficient permission. + */ + 403: Error; + /** + * A specified resource is not found. + */ + 404: Error; + }; + }; + patch: { + req: PatchRoleData; + res: { + /** + * Success. + */ + 200: Role; + /** + * Client specified an invalid argument. + */ + 400: Error; + /** + * Request not authenticated due to missing, invalid, authentication info. + */ + 401: Error; + /** + * Client does not have sufficient permission. + */ + 403: Error; + /** + * A specified resource is not found. + */ + 404: Error; + }; + }; + delete: { + req: DeleteRoleData; + res: { + /** + * Success. + */ + 204: void; + /** + * Client specified an invalid argument. + */ + 400: Error; + /** + * Request not authenticated due to missing, invalid, authentication info. + */ + 401: Error; + /** + * Client does not have sufficient permission. + */ + 403: Error; + /** + * A specified resource is not found. + */ + 404: Error; + }; + }; + }; + "/permissions": { + get: { + req: GetPermissionsData; + res: { + /** + * Success. + */ + 200: ActionCollection; + /** + * Request not authenticated due to missing, invalid, authentication info. + */ + 401: Error; + /** + * Client does not have sufficient permission. + */ + 403: Error; + }; + }; + }; + "/users": { + get: { + req: GetUsersData; + res: { + /** + * Success. + */ + 200: UserCollection; + /** + * Request not authenticated due to missing, invalid, authentication info. + */ + 401: Error; + /** + * Client does not have sufficient permission. + */ + 403: Error; + }; + }; + post: { + req: PostUserData; + res: { + /** + * Success. + */ + 200: User; + /** + * Client specified an invalid argument. + */ + 400: Error; + /** + * Request not authenticated due to missing, invalid, authentication info. + */ + 401: Error; + /** + * Client does not have sufficient permission. + */ + 403: Error; + /** + * An existing resource conflicts with the request. + */ + 409: Error; + }; + }; + }; + "/users/{username}": { + get: { + req: GetUserData; + res: { + /** + * Success. + */ + 200: UserCollectionItem; + /** + * Request not authenticated due to missing, invalid, authentication info. + */ + 401: Error; + /** + * Client does not have sufficient permission. + */ + 403: Error; + /** + * A specified resource is not found. + */ + 404: Error; + }; + }; + patch: { + req: PatchUserData; + res: { + /** + * Success. + */ + 200: UserCollectionItem; + /** + * Client specified an invalid argument. + */ + 400: Error; + /** + * Request not authenticated due to missing, invalid, authentication info. + */ + 401: Error; + /** + * Client does not have sufficient permission. + */ + 403: Error; + /** + * A specified resource is not found. + */ + 404: Error; + }; + }; + delete: { + req: DeleteUserData; + res: { + /** + * Success. + */ + 204: void; + /** + * Client specified an invalid argument. + */ + 400: Error; + /** + * Request not authenticated due to missing, invalid, authentication info. + */ + 401: Error; + /** + * Client does not have sufficient permission. + */ + 403: Error; + /** + * A specified resource is not found. + */ + 404: Error; + }; + }; + }; +}; diff --git a/airflow/ui/package.json b/airflow/ui/package.json new file mode 100644 index 0000000000000..257df8c3dcca6 --- /dev/null +++ b/airflow/ui/package.json @@ -0,0 +1,52 @@ +{ + "name": "ui", + "private": true, + "version": "0.0.0", + "type": "module", + "homepage": "/ui", + "scripts": { + "dev": "vite", + "build": "tsc -b && vite build", + "lint": "eslint . && tsc --p tsconfig.app.json", + "lint:fix": "eslint --fix && tsc --p tsconfig.app.json", + "format": "pnpm prettier --write .", + "preview": "vite preview", + "codegen": "openapi-rq -i \"../api_connexion/openapi/v1.yaml\" -c axios --format prettier -o openapi-gen", + "test": "vitest run" + }, + "dependencies": { + "@chakra-ui/react": "^2.8.2", + "@emotion/react": "^11.13.3", + "@emotion/styled": "^11.13.0", + "@tanstack/react-query": "^5.52.1", + "@tanstack/react-table": "^8.20.1", + "axios": "^1.7.4", + "framer-motion": "^11.3.29", + "react": "^18.3.1", + "react-dom": "^18.3.1", + "react-icons": "^5.3.0" + }, + "devDependencies": { + "@7nohe/openapi-react-query-codegen": "^1.6.0", + "@eslint/js": "^9.9.0", + "@tanstack/eslint-plugin-query": "^5.52.0", + "@testing-library/jest-dom": "^6.4.8", + "@testing-library/react": "^16.0.0", + "@types/react": "^18.3.3", + "@types/react-dom": "^18.3.0", + "@vitejs/plugin-react-swc": "^3.7.0", + "eslint": "^9.9.0", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-prettier": "^5.2.1", + "eslint-plugin-react": "^7.35.0", + "eslint-plugin-react-hooks": "^5.1.0-rc.0", + "eslint-plugin-react-refresh": "^0.4.9", + "globals": "^15.9.0", + "happy-dom": "^15.0.0", + "prettier": "^3.3.3", + "typescript": "^5.5.3", + "typescript-eslint": "^8.2.0", + "vite": "^5.4.1", + "vitest": "^2.0.5" + } +} diff --git a/airflow/ui/pnpm-lock.yaml b/airflow/ui/pnpm-lock.yaml new file mode 100644 index 0000000000000..0ff90475d4acd --- /dev/null +++ b/airflow/ui/pnpm-lock.yaml @@ -0,0 +1,6053 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@chakra-ui/react': + specifier: ^2.8.2 + version: 2.8.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(framer-motion@11.3.29(@emotion/is-prop-valid@1.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@emotion/react': + specifier: ^11.13.3 + version: 11.13.3(@types/react@18.3.4)(react@18.3.1) + '@emotion/styled': + specifier: ^11.13.0 + version: 11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1) + '@tanstack/react-query': + specifier: ^5.52.1 + version: 5.52.1(react@18.3.1) + '@tanstack/react-table': + specifier: ^8.20.1 + version: 8.20.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + axios: + specifier: ^1.7.4 + version: 1.7.4 + framer-motion: + specifier: ^11.3.29 + version: 11.3.29(@emotion/is-prop-valid@1.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: + specifier: ^18.3.1 + version: 18.3.1 + react-dom: + specifier: ^18.3.1 + version: 18.3.1(react@18.3.1) + react-icons: + specifier: ^5.3.0 + version: 5.3.0(react@18.3.1) + devDependencies: + '@7nohe/openapi-react-query-codegen': + specifier: ^1.6.0 + version: 1.6.0(commander@12.1.0)(glob@10.4.5)(ts-morph@22.0.0)(typescript@5.5.4) + '@eslint/js': + specifier: ^9.9.0 + version: 9.9.0 + '@tanstack/eslint-plugin-query': + specifier: ^5.52.0 + version: 5.52.0(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4) + '@testing-library/jest-dom': + specifier: ^6.4.8 + version: 6.4.8 + '@testing-library/react': + specifier: ^16.0.0 + version: 16.0.0(@testing-library/dom@10.4.0)(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@types/react': + specifier: ^18.3.3 + version: 18.3.4 + '@types/react-dom': + specifier: ^18.3.0 + version: 18.3.0 + '@vitejs/plugin-react-swc': + specifier: ^3.7.0 + version: 3.7.0(vite@5.4.2) + eslint: + specifier: ^9.9.0 + version: 9.9.0(jiti@1.21.6) + eslint-config-prettier: + specifier: ^9.1.0 + version: 9.1.0(eslint@9.9.0(jiti@1.21.6)) + eslint-plugin-prettier: + specifier: ^5.2.1 + version: 5.2.1(eslint-config-prettier@9.1.0(eslint@9.9.0(jiti@1.21.6)))(eslint@9.9.0(jiti@1.21.6))(prettier@3.3.3) + eslint-plugin-react: + specifier: ^7.35.0 + version: 7.35.0(eslint@9.9.0(jiti@1.21.6)) + eslint-plugin-react-hooks: + specifier: ^5.1.0-rc.0 + version: 5.1.0-rc-fb9a90fa48-20240614(eslint@9.9.0(jiti@1.21.6)) + eslint-plugin-react-refresh: + specifier: ^0.4.9 + version: 0.4.11(eslint@9.9.0(jiti@1.21.6)) + globals: + specifier: ^15.9.0 + version: 15.9.0 + happy-dom: + specifier: ^15.0.0 + version: 15.0.0 + prettier: + specifier: ^3.3.3 + version: 3.3.3 + typescript: + specifier: ^5.5.3 + version: 5.5.4 + typescript-eslint: + specifier: ^8.2.0 + version: 8.2.0(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4) + vite: + specifier: ^5.4.1 + version: 5.4.2 + vitest: + specifier: ^2.0.5 + version: 2.0.5(happy-dom@15.0.0) + +packages: + + '@7nohe/openapi-react-query-codegen@1.6.0': + resolution: {integrity: sha512-YWHX8LEzy58zfh/fKXZ1CkJY3Agu5H1VLCNcVe4bkKhmsiQbxm39GPeHJM9+qp0MYHxQ5A2apCaU0ERqKCJCmw==} + engines: {node: '>=14', pnpm: '>=9'} + hasBin: true + peerDependencies: + commander: 12.x + glob: 10.x + ts-morph: 22.x + typescript: 5.x + + '@adobe/css-tools@4.4.0': + resolution: {integrity: sha512-Ff9+ksdQQB3rMncgqDK78uLznstjyfIf2Arnh22pW8kBpLs6rpKDwgnZT46hin5Hl1WzazzK64DOrhSwYpS7bQ==} + + '@ampproject/remapping@2.3.0': + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} + engines: {node: '>=6.0.0'} + + '@apidevtools/json-schema-ref-parser@11.6.4': + resolution: {integrity: sha512-9K6xOqeevacvweLGik6LnZCb1fBtCOSIWQs8d096XGeqoLKC33UVMGz9+77Gw44KvbH4pKcQPWo4ZpxkXYj05w==} + engines: {node: '>= 16'} + + '@babel/code-frame@7.24.7': + resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.25.4': + resolution: {integrity: sha512-NFtZmZsyzDPJnk9Zg3BbTfKKc9UlHYzD0E//p2Z3B9nCwwtJW9T0gVbCz8+fBngnn4zf1Dr3IK8PHQQHq0lDQw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.24.7': + resolution: {integrity: sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.24.8': + resolution: {integrity: sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.24.7': + resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} + engines: {node: '>=6.9.0'} + + '@babel/highlight@7.24.7': + resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.25.4': + resolution: {integrity: sha512-nq+eWrOgdtu3jG5Os4TQP3x3cLA8hR8TvJNjD8vnPa20WGycimcparWnLK4jJhElTK6SDyuJo1weMKO/5LpmLA==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/runtime@7.25.4': + resolution: {integrity: sha512-DSgLeL/FNcpXuzav5wfYvHCGvynXkJbn3Zvc3823AEe9nPwW9IK4UoCSS5yGymmQzN0pCPvivtgS6/8U2kkm1w==} + engines: {node: '>=6.9.0'} + + '@babel/template@7.25.0': + resolution: {integrity: sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.25.4': + resolution: {integrity: sha512-VJ4XsrD+nOvlXyLzmLzUs/0qjFS4sK30te5yEFlvbbUNEgKaVb2BHZUpAL+ttLPQAHNrsI3zZisbfha5Cvr8vg==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.25.4': + resolution: {integrity: sha512-zQ1ijeeCXVEh+aNL0RlmkPkG8HUiDcU2pzQQFjtbntgAczRASFzj4H+6+bV+dy1ntKR14I/DypeuRG1uma98iQ==} + engines: {node: '>=6.9.0'} + + '@chakra-ui/accordion@2.3.1': + resolution: {integrity: sha512-FSXRm8iClFyU+gVaXisOSEw0/4Q+qZbFRiuhIAkVU6Boj0FxAMrlo9a8AV5TuF77rgaHytCdHk0Ng+cyUijrag==} + peerDependencies: + '@chakra-ui/system': '>=2.0.0' + framer-motion: '>=4.0.0' + react: '>=18' + + '@chakra-ui/alert@2.2.2': + resolution: {integrity: sha512-jHg4LYMRNOJH830ViLuicjb3F+v6iriE/2G5T+Sd0Hna04nukNJ1MxUmBPE+vI22me2dIflfelu2v9wdB6Pojw==} + peerDependencies: + '@chakra-ui/system': '>=2.0.0' + react: '>=18' + + '@chakra-ui/anatomy@2.2.2': + resolution: {integrity: sha512-MV6D4VLRIHr4PkW4zMyqfrNS1mPlCTiCXwvYGtDFQYr+xHFfonhAuf9WjsSc0nyp2m0OdkSLnzmVKkZFLo25Tg==} + + '@chakra-ui/avatar@2.3.0': + resolution: {integrity: sha512-8gKSyLfygnaotbJbDMHDiJoF38OHXUYVme4gGxZ1fLnQEdPVEaIWfH+NndIjOM0z8S+YEFnT9KyGMUtvPrBk3g==} + peerDependencies: + '@chakra-ui/system': '>=2.0.0' + react: '>=18' + + '@chakra-ui/breadcrumb@2.2.0': + resolution: {integrity: sha512-4cWCG24flYBxjruRi4RJREWTGF74L/KzI2CognAW/d/zWR0CjiScuJhf37Am3LFbCySP6WSoyBOtTIoTA4yLEA==} + peerDependencies: + '@chakra-ui/system': '>=2.0.0' + react: '>=18' + + '@chakra-ui/breakpoint-utils@2.0.8': + resolution: {integrity: sha512-Pq32MlEX9fwb5j5xx8s18zJMARNHlQZH2VH1RZgfgRDpp7DcEgtRW5AInfN5CfqdHLO1dGxA7I3MqEuL5JnIsA==} + + '@chakra-ui/button@2.1.0': + resolution: {integrity: sha512-95CplwlRKmmUXkdEp/21VkEWgnwcx2TOBG6NfYlsuLBDHSLlo5FKIiE2oSi4zXc4TLcopGcWPNcm/NDaSC5pvA==} + peerDependencies: + '@chakra-ui/system': '>=2.0.0' + react: '>=18' + + '@chakra-ui/card@2.2.0': + resolution: {integrity: sha512-xUB/k5MURj4CtPAhdSoXZidUbm8j3hci9vnc+eZJVDqhDOShNlD6QeniQNRPRys4lWAQLCbFcrwL29C8naDi6g==} + peerDependencies: + '@chakra-ui/system': '>=2.0.0' + react: '>=18' + + '@chakra-ui/checkbox@2.3.2': + resolution: {integrity: sha512-85g38JIXMEv6M+AcyIGLh7igNtfpAN6KGQFYxY9tBj0eWvWk4NKQxvqqyVta0bSAyIl1rixNIIezNpNWk2iO4g==} + peerDependencies: + '@chakra-ui/system': '>=2.0.0' + react: '>=18' + + '@chakra-ui/clickable@2.1.0': + resolution: {integrity: sha512-flRA/ClPUGPYabu+/GLREZVZr9j2uyyazCAUHAdrTUEdDYCr31SVGhgh7dgKdtq23bOvAQJpIJjw/0Bs0WvbXw==} + peerDependencies: + react: '>=18' + + '@chakra-ui/close-button@2.1.1': + resolution: {integrity: sha512-gnpENKOanKexswSVpVz7ojZEALl2x5qjLYNqSQGbxz+aP9sOXPfUS56ebyBrre7T7exuWGiFeRwnM0oVeGPaiw==} + peerDependencies: + '@chakra-ui/system': '>=2.0.0' + react: '>=18' + + '@chakra-ui/color-mode@2.2.0': + resolution: {integrity: sha512-niTEA8PALtMWRI9wJ4LL0CSBDo8NBfLNp4GD6/0hstcm3IlbBHTVKxN6HwSaoNYfphDQLxCjT4yG+0BJA5tFpg==} + peerDependencies: + react: '>=18' + + '@chakra-ui/control-box@2.1.0': + resolution: {integrity: sha512-gVrRDyXFdMd8E7rulL0SKeoljkLQiPITFnsyMO8EFHNZ+AHt5wK4LIguYVEq88APqAGZGfHFWXr79RYrNiE3Mg==} + peerDependencies: + '@chakra-ui/system': '>=2.0.0' + react: '>=18' + + '@chakra-ui/counter@2.1.0': + resolution: {integrity: sha512-s6hZAEcWT5zzjNz2JIWUBzRubo9la/oof1W7EKZVVfPYHERnl5e16FmBC79Yfq8p09LQ+aqFKm/etYoJMMgghw==} + peerDependencies: + react: '>=18' + + '@chakra-ui/css-reset@2.3.0': + resolution: {integrity: sha512-cQwwBy5O0jzvl0K7PLTLgp8ijqLPKyuEMiDXwYzl95seD3AoeuoCLyzZcJtVqaUZ573PiBdAbY/IlZcwDOItWg==} + peerDependencies: + '@emotion/react': '>=10.0.35' + react: '>=18' + + '@chakra-ui/descendant@3.1.0': + resolution: {integrity: sha512-VxCIAir08g5w27klLyi7PVo8BxhW4tgU/lxQyujkmi4zx7hT9ZdrcQLAted/dAa+aSIZ14S1oV0Q9lGjsAdxUQ==} + peerDependencies: + react: '>=18' + + '@chakra-ui/dom-utils@2.1.0': + resolution: {integrity: sha512-ZmF2qRa1QZ0CMLU8M1zCfmw29DmPNtfjR9iTo74U5FPr3i1aoAh7fbJ4qAlZ197Xw9eAW28tvzQuoVWeL5C7fQ==} + + '@chakra-ui/editable@3.1.0': + resolution: {integrity: sha512-j2JLrUL9wgg4YA6jLlbU88370eCRyor7DZQD9lzpY95tSOXpTljeg3uF9eOmDnCs6fxp3zDWIfkgMm/ExhcGTg==} + peerDependencies: + '@chakra-ui/system': '>=2.0.0' + react: '>=18' + + '@chakra-ui/event-utils@2.0.8': + resolution: {integrity: sha512-IGM/yGUHS+8TOQrZGpAKOJl/xGBrmRYJrmbHfUE7zrG3PpQyXvbLDP1M+RggkCFVgHlJi2wpYIf0QtQlU0XZfw==} + + '@chakra-ui/focus-lock@2.1.0': + resolution: {integrity: sha512-EmGx4PhWGjm4dpjRqM4Aa+rCWBxP+Rq8Uc/nAVnD4YVqkEhBkrPTpui2lnjsuxqNaZ24fIAZ10cF1hlpemte/w==} + peerDependencies: + react: '>=18' + + '@chakra-ui/form-control@2.2.0': + resolution: {integrity: sha512-wehLC1t4fafCVJ2RvJQT2jyqsAwX7KymmiGqBu7nQoQz8ApTkGABWpo/QwDh3F/dBLrouHDoOvGmYTqft3Mirw==} + peerDependencies: + '@chakra-ui/system': '>=2.0.0' + react: '>=18' + + '@chakra-ui/hooks@2.2.1': + resolution: {integrity: sha512-RQbTnzl6b1tBjbDPf9zGRo9rf/pQMholsOudTxjy4i9GfTfz6kgp5ValGjQm2z7ng6Z31N1cnjZ1AlSzQ//ZfQ==} + peerDependencies: + react: '>=18' + + '@chakra-ui/icon@3.2.0': + resolution: {integrity: sha512-xxjGLvlX2Ys4H0iHrI16t74rG9EBcpFvJ3Y3B7KMQTrnW34Kf7Da/UC8J67Gtx85mTHW020ml85SVPKORWNNKQ==} + peerDependencies: + '@chakra-ui/system': '>=2.0.0' + react: '>=18' + + '@chakra-ui/image@2.1.0': + resolution: {integrity: sha512-bskumBYKLiLMySIWDGcz0+D9Th0jPvmX6xnRMs4o92tT3Od/bW26lahmV2a2Op2ItXeCmRMY+XxJH5Gy1i46VA==} + peerDependencies: + '@chakra-ui/system': '>=2.0.0' + react: '>=18' + + '@chakra-ui/input@2.1.2': + resolution: {integrity: sha512-GiBbb3EqAA8Ph43yGa6Mc+kUPjh4Spmxp1Pkelr8qtudpc3p2PJOOebLpd90mcqw8UePPa+l6YhhPtp6o0irhw==} + peerDependencies: + '@chakra-ui/system': '>=2.0.0' + react: '>=18' + + '@chakra-ui/layout@2.3.1': + resolution: {integrity: sha512-nXuZ6WRbq0WdgnRgLw+QuxWAHuhDtVX8ElWqcTK+cSMFg/52eVP47czYBE5F35YhnoW2XBwfNoNgZ7+e8Z01Rg==} + peerDependencies: + '@chakra-ui/system': '>=2.0.0' + react: '>=18' + + '@chakra-ui/lazy-utils@2.0.5': + resolution: {integrity: sha512-UULqw7FBvcckQk2n3iPO56TMJvDsNv0FKZI6PlUNJVaGsPbsYxK/8IQ60vZgaTVPtVcjY6BE+y6zg8u9HOqpyg==} + + '@chakra-ui/live-region@2.1.0': + resolution: {integrity: sha512-ZOxFXwtaLIsXjqnszYYrVuswBhnIHHP+XIgK1vC6DePKtyK590Wg+0J0slDwThUAd4MSSIUa/nNX84x1GMphWw==} + peerDependencies: + react: '>=18' + + '@chakra-ui/media-query@3.3.0': + resolution: {integrity: sha512-IsTGgFLoICVoPRp9ykOgqmdMotJG0CnPsKvGQeSFOB/dZfIujdVb14TYxDU4+MURXry1MhJ7LzZhv+Ml7cr8/g==} + peerDependencies: + '@chakra-ui/system': '>=2.0.0' + react: '>=18' + + '@chakra-ui/menu@2.2.1': + resolution: {integrity: sha512-lJS7XEObzJxsOwWQh7yfG4H8FzFPRP5hVPN/CL+JzytEINCSBvsCDHrYPQGp7jzpCi8vnTqQQGQe0f8dwnXd2g==} + peerDependencies: + '@chakra-ui/system': '>=2.0.0' + framer-motion: '>=4.0.0' + react: '>=18' + + '@chakra-ui/modal@2.3.1': + resolution: {integrity: sha512-TQv1ZaiJMZN+rR9DK0snx/OPwmtaGH1HbZtlYt4W4s6CzyK541fxLRTjIXfEzIGpvNW+b6VFuFjbcR78p4DEoQ==} + peerDependencies: + '@chakra-ui/system': '>=2.0.0' + framer-motion: '>=4.0.0' + react: '>=18' + react-dom: '>=18' + + '@chakra-ui/number-input@2.1.2': + resolution: {integrity: sha512-pfOdX02sqUN0qC2ysuvgVDiws7xZ20XDIlcNhva55Jgm095xjm8eVdIBfNm3SFbSUNxyXvLTW/YQanX74tKmuA==} + peerDependencies: + '@chakra-ui/system': '>=2.0.0' + react: '>=18' + + '@chakra-ui/number-utils@2.0.7': + resolution: {integrity: sha512-yOGxBjXNvLTBvQyhMDqGU0Oj26s91mbAlqKHiuw737AXHt0aPllOthVUqQMeaYLwLCjGMg0jtI7JReRzyi94Dg==} + + '@chakra-ui/object-utils@2.1.0': + resolution: {integrity: sha512-tgIZOgLHaoti5PYGPTwK3t/cqtcycW0owaiOXoZOcpwwX/vlVb+H1jFsQyWiiwQVPt9RkoSLtxzXamx+aHH+bQ==} + + '@chakra-ui/pin-input@2.1.0': + resolution: {integrity: sha512-x4vBqLStDxJFMt+jdAHHS8jbh294O53CPQJoL4g228P513rHylV/uPscYUHrVJXRxsHfRztQO9k45jjTYaPRMw==} + peerDependencies: + '@chakra-ui/system': '>=2.0.0' + react: '>=18' + + '@chakra-ui/popover@2.2.1': + resolution: {integrity: sha512-K+2ai2dD0ljvJnlrzesCDT9mNzLifE3noGKZ3QwLqd/K34Ym1W/0aL1ERSynrcG78NKoXS54SdEzkhCZ4Gn/Zg==} + peerDependencies: + '@chakra-ui/system': '>=2.0.0' + framer-motion: '>=4.0.0' + react: '>=18' + + '@chakra-ui/popper@3.1.0': + resolution: {integrity: sha512-ciDdpdYbeFG7og6/6J8lkTFxsSvwTdMLFkpVylAF6VNC22jssiWfquj2eyD4rJnzkRFPvIWJq8hvbfhsm+AjSg==} + peerDependencies: + react: '>=18' + + '@chakra-ui/portal@2.1.0': + resolution: {integrity: sha512-9q9KWf6SArEcIq1gGofNcFPSWEyl+MfJjEUg/un1SMlQjaROOh3zYr+6JAwvcORiX7tyHosnmWC3d3wI2aPSQg==} + peerDependencies: + react: '>=18' + react-dom: '>=18' + + '@chakra-ui/progress@2.2.0': + resolution: {integrity: sha512-qUXuKbuhN60EzDD9mHR7B67D7p/ZqNS2Aze4Pbl1qGGZfulPW0PY8Rof32qDtttDQBkzQIzFGE8d9QpAemToIQ==} + peerDependencies: + '@chakra-ui/system': '>=2.0.0' + react: '>=18' + + '@chakra-ui/provider@2.4.2': + resolution: {integrity: sha512-w0Tef5ZCJK1mlJorcSjItCSbyvVuqpvyWdxZiVQmE6fvSJR83wZof42ux0+sfWD+I7rHSfj+f9nzhNaEWClysw==} + peerDependencies: + '@emotion/react': ^11.0.0 + '@emotion/styled': ^11.0.0 + react: '>=18' + react-dom: '>=18' + + '@chakra-ui/radio@2.1.2': + resolution: {integrity: sha512-n10M46wJrMGbonaghvSRnZ9ToTv/q76Szz284gv4QUWvyljQACcGrXIONUnQ3BIwbOfkRqSk7Xl/JgZtVfll+w==} + peerDependencies: + '@chakra-ui/system': '>=2.0.0' + react: '>=18' + + '@chakra-ui/react-children-utils@2.0.6': + resolution: {integrity: sha512-QVR2RC7QsOsbWwEnq9YduhpqSFnZGvjjGREV8ygKi8ADhXh93C8azLECCUVgRJF2Wc+So1fgxmjLcbZfY2VmBA==} + peerDependencies: + react: '>=18' + + '@chakra-ui/react-context@2.1.0': + resolution: {integrity: sha512-iahyStvzQ4AOwKwdPReLGfDesGG+vWJfEsn0X/NoGph/SkN+HXtv2sCfYFFR9k7bb+Kvc6YfpLlSuLvKMHi2+w==} + peerDependencies: + react: '>=18' + + '@chakra-ui/react-env@3.1.0': + resolution: {integrity: sha512-Vr96GV2LNBth3+IKzr/rq1IcnkXv+MLmwjQH6C8BRtn3sNskgDFD5vLkVXcEhagzZMCh8FR3V/bzZPojBOyNhw==} + peerDependencies: + react: '>=18' + + '@chakra-ui/react-types@2.0.7': + resolution: {integrity: sha512-12zv2qIZ8EHwiytggtGvo4iLT0APris7T0qaAWqzpUGS0cdUtR8W+V1BJ5Ocq+7tA6dzQ/7+w5hmXih61TuhWQ==} + peerDependencies: + react: '>=18' + + '@chakra-ui/react-use-animation-state@2.1.0': + resolution: {integrity: sha512-CFZkQU3gmDBwhqy0vC1ryf90BVHxVN8cTLpSyCpdmExUEtSEInSCGMydj2fvn7QXsz/za8JNdO2xxgJwxpLMtg==} + peerDependencies: + react: '>=18' + + '@chakra-ui/react-use-callback-ref@2.1.0': + resolution: {integrity: sha512-efnJrBtGDa4YaxDzDE90EnKD3Vkh5a1t3w7PhnRQmsphLy3g2UieasoKTlT2Hn118TwDjIv5ZjHJW6HbzXA9wQ==} + peerDependencies: + react: '>=18' + + '@chakra-ui/react-use-controllable-state@2.1.0': + resolution: {integrity: sha512-QR/8fKNokxZUs4PfxjXuwl0fj/d71WPrmLJvEpCTkHjnzu7LnYvzoe2wB867IdooQJL0G1zBxl0Dq+6W1P3jpg==} + peerDependencies: + react: '>=18' + + '@chakra-ui/react-use-disclosure@2.1.0': + resolution: {integrity: sha512-Ax4pmxA9LBGMyEZJhhUZobg9C0t3qFE4jVF1tGBsrLDcdBeLR9fwOogIPY9Hf0/wqSlAryAimICbr5hkpa5GSw==} + peerDependencies: + react: '>=18' + + '@chakra-ui/react-use-event-listener@2.1.0': + resolution: {integrity: sha512-U5greryDLS8ISP69DKDsYcsXRtAdnTQT+jjIlRYZ49K/XhUR/AqVZCK5BkR1spTDmO9H8SPhgeNKI70ODuDU/Q==} + peerDependencies: + react: '>=18' + + '@chakra-ui/react-use-focus-effect@2.1.0': + resolution: {integrity: sha512-xzVboNy7J64xveLcxTIJ3jv+lUJKDwRM7Szwn9tNzUIPD94O3qwjV7DDCUzN2490nSYDF4OBMt/wuDBtaR3kUQ==} + peerDependencies: + react: '>=18' + + '@chakra-ui/react-use-focus-on-pointer-down@2.1.0': + resolution: {integrity: sha512-2jzrUZ+aiCG/cfanrolsnSMDykCAbv9EK/4iUyZno6BYb3vziucmvgKuoXbMPAzWNtwUwtuMhkby8rc61Ue+Lg==} + peerDependencies: + react: '>=18' + + '@chakra-ui/react-use-interval@2.1.0': + resolution: {integrity: sha512-8iWj+I/+A0J08pgEXP1J1flcvhLBHkk0ln7ZvGIyXiEyM6XagOTJpwNhiu+Bmk59t3HoV/VyvyJTa+44sEApuw==} + peerDependencies: + react: '>=18' + + '@chakra-ui/react-use-latest-ref@2.1.0': + resolution: {integrity: sha512-m0kxuIYqoYB0va9Z2aW4xP/5b7BzlDeWwyXCH6QpT2PpW3/281L3hLCm1G0eOUcdVlayqrQqOeD6Mglq+5/xoQ==} + peerDependencies: + react: '>=18' + + '@chakra-ui/react-use-merge-refs@2.1.0': + resolution: {integrity: sha512-lERa6AWF1cjEtWSGjxWTaSMvneccnAVH4V4ozh8SYiN9fSPZLlSG3kNxfNzdFvMEhM7dnP60vynF7WjGdTgQbQ==} + peerDependencies: + react: '>=18' + + '@chakra-ui/react-use-outside-click@2.2.0': + resolution: {integrity: sha512-PNX+s/JEaMneijbgAM4iFL+f3m1ga9+6QK0E5Yh4s8KZJQ/bLwZzdhMz8J/+mL+XEXQ5J0N8ivZN28B82N1kNw==} + peerDependencies: + react: '>=18' + + '@chakra-ui/react-use-pan-event@2.1.0': + resolution: {integrity: sha512-xmL2qOHiXqfcj0q7ZK5s9UjTh4Gz0/gL9jcWPA6GVf+A0Od5imEDa/Vz+533yQKWiNSm1QGrIj0eJAokc7O4fg==} + peerDependencies: + react: '>=18' + + '@chakra-ui/react-use-previous@2.1.0': + resolution: {integrity: sha512-pjxGwue1hX8AFcmjZ2XfrQtIJgqbTF3Qs1Dy3d1krC77dEsiCUbQ9GzOBfDc8pfd60DrB5N2tg5JyHbypqh0Sg==} + peerDependencies: + react: '>=18' + + '@chakra-ui/react-use-safe-layout-effect@2.1.0': + resolution: {integrity: sha512-Knbrrx/bcPwVS1TorFdzrK/zWA8yuU/eaXDkNj24IrKoRlQrSBFarcgAEzlCHtzuhufP3OULPkELTzz91b0tCw==} + peerDependencies: + react: '>=18' + + '@chakra-ui/react-use-size@2.1.0': + resolution: {integrity: sha512-tbLqrQhbnqOjzTaMlYytp7wY8BW1JpL78iG7Ru1DlV4EWGiAmXFGvtnEt9HftU0NJ0aJyjgymkxfVGI55/1Z4A==} + peerDependencies: + react: '>=18' + + '@chakra-ui/react-use-timeout@2.1.0': + resolution: {integrity: sha512-cFN0sobKMM9hXUhyCofx3/Mjlzah6ADaEl/AXl5Y+GawB5rgedgAcu2ErAgarEkwvsKdP6c68CKjQ9dmTQlJxQ==} + peerDependencies: + react: '>=18' + + '@chakra-ui/react-use-update-effect@2.1.0': + resolution: {integrity: sha512-ND4Q23tETaR2Qd3zwCKYOOS1dfssojPLJMLvUtUbW5M9uW1ejYWgGUobeAiOVfSplownG8QYMmHTP86p/v0lbA==} + peerDependencies: + react: '>=18' + + '@chakra-ui/react-utils@2.0.12': + resolution: {integrity: sha512-GbSfVb283+YA3kA8w8xWmzbjNWk14uhNpntnipHCftBibl0lxtQ9YqMFQLwuFOO0U2gYVocszqqDWX+XNKq9hw==} + peerDependencies: + react: '>=18' + + '@chakra-ui/react@2.8.2': + resolution: {integrity: sha512-Hn0moyxxyCDKuR9ywYpqgX8dvjqwu9ArwpIb9wHNYjnODETjLwazgNIliCVBRcJvysGRiV51U2/JtJVrpeCjUQ==} + peerDependencies: + '@emotion/react': ^11.0.0 + '@emotion/styled': ^11.0.0 + framer-motion: '>=4.0.0' + react: '>=18' + react-dom: '>=18' + + '@chakra-ui/select@2.1.2': + resolution: {integrity: sha512-ZwCb7LqKCVLJhru3DXvKXpZ7Pbu1TDZ7N0PdQ0Zj1oyVLJyrpef1u9HR5u0amOpqcH++Ugt0f5JSmirjNlctjA==} + peerDependencies: + '@chakra-ui/system': '>=2.0.0' + react: '>=18' + + '@chakra-ui/shared-utils@2.0.5': + resolution: {integrity: sha512-4/Wur0FqDov7Y0nCXl7HbHzCg4aq86h+SXdoUeuCMD3dSj7dpsVnStLYhng1vxvlbUnLpdF4oz5Myt3i/a7N3Q==} + + '@chakra-ui/skeleton@2.1.0': + resolution: {integrity: sha512-JNRuMPpdZGd6zFVKjVQ0iusu3tXAdI29n4ZENYwAJEMf/fN0l12sVeirOxkJ7oEL0yOx2AgEYFSKdbcAgfUsAQ==} + peerDependencies: + '@chakra-ui/system': '>=2.0.0' + react: '>=18' + + '@chakra-ui/skip-nav@2.1.0': + resolution: {integrity: sha512-Hk+FG+vadBSH0/7hwp9LJnLjkO0RPGnx7gBJWI4/SpoJf3e4tZlWYtwGj0toYY4aGKl93jVghuwGbDBEMoHDug==} + peerDependencies: + '@chakra-ui/system': '>=2.0.0' + react: '>=18' + + '@chakra-ui/slider@2.1.0': + resolution: {integrity: sha512-lUOBcLMCnFZiA/s2NONXhELJh6sY5WtbRykPtclGfynqqOo47lwWJx+VP7xaeuhDOPcWSSecWc9Y1BfPOCz9cQ==} + peerDependencies: + '@chakra-ui/system': '>=2.0.0' + react: '>=18' + + '@chakra-ui/spinner@2.1.0': + resolution: {integrity: sha512-hczbnoXt+MMv/d3gE+hjQhmkzLiKuoTo42YhUG7Bs9OSv2lg1fZHW1fGNRFP3wTi6OIbD044U1P9HK+AOgFH3g==} + peerDependencies: + '@chakra-ui/system': '>=2.0.0' + react: '>=18' + + '@chakra-ui/stat@2.1.1': + resolution: {integrity: sha512-LDn0d/LXQNbAn2KaR3F1zivsZCewY4Jsy1qShmfBMKwn6rI8yVlbvu6SiA3OpHS0FhxbsZxQI6HefEoIgtqY6Q==} + peerDependencies: + '@chakra-ui/system': '>=2.0.0' + react: '>=18' + + '@chakra-ui/stepper@2.3.1': + resolution: {integrity: sha512-ky77lZbW60zYkSXhYz7kbItUpAQfEdycT0Q4bkHLxfqbuiGMf8OmgZOQkOB9uM4v0zPwy2HXhe0vq4Dd0xa55Q==} + peerDependencies: + '@chakra-ui/system': '>=2.0.0' + react: '>=18' + + '@chakra-ui/styled-system@2.9.2': + resolution: {integrity: sha512-To/Z92oHpIE+4nk11uVMWqo2GGRS86coeMmjxtpnErmWRdLcp1WVCVRAvn+ZwpLiNR+reWFr2FFqJRsREuZdAg==} + + '@chakra-ui/switch@2.1.2': + resolution: {integrity: sha512-pgmi/CC+E1v31FcnQhsSGjJnOE2OcND4cKPyTE+0F+bmGm48Q/b5UmKD9Y+CmZsrt/7V3h8KNczowupfuBfIHA==} + peerDependencies: + '@chakra-ui/system': '>=2.0.0' + framer-motion: '>=4.0.0' + react: '>=18' + + '@chakra-ui/system@2.6.2': + resolution: {integrity: sha512-EGtpoEjLrUu4W1fHD+a62XR+hzC5YfsWm+6lO0Kybcga3yYEij9beegO0jZgug27V+Rf7vns95VPVP6mFd/DEQ==} + peerDependencies: + '@emotion/react': ^11.0.0 + '@emotion/styled': ^11.0.0 + react: '>=18' + + '@chakra-ui/table@2.1.0': + resolution: {integrity: sha512-o5OrjoHCh5uCLdiUb0Oc0vq9rIAeHSIRScc2ExTC9Qg/uVZl2ygLrjToCaKfaaKl1oQexIeAcZDKvPG8tVkHyQ==} + peerDependencies: + '@chakra-ui/system': '>=2.0.0' + react: '>=18' + + '@chakra-ui/tabs@3.0.0': + resolution: {integrity: sha512-6Mlclp8L9lqXmsGWF5q5gmemZXOiOYuh0SGT/7PgJVNPz3LXREXlXg2an4MBUD8W5oTkduCX+3KTMCwRrVrDYw==} + peerDependencies: + '@chakra-ui/system': '>=2.0.0' + react: '>=18' + + '@chakra-ui/tag@3.1.1': + resolution: {integrity: sha512-Bdel79Dv86Hnge2PKOU+t8H28nm/7Y3cKd4Kfk9k3lOpUh4+nkSGe58dhRzht59lEqa4N9waCgQiBdkydjvBXQ==} + peerDependencies: + '@chakra-ui/system': '>=2.0.0' + react: '>=18' + + '@chakra-ui/textarea@2.1.2': + resolution: {integrity: sha512-ip7tvklVCZUb2fOHDb23qPy/Fr2mzDOGdkrpbNi50hDCiV4hFX02jdQJdi3ydHZUyVgZVBKPOJ+lT9i7sKA2wA==} + peerDependencies: + '@chakra-ui/system': '>=2.0.0' + react: '>=18' + + '@chakra-ui/theme-tools@2.1.2': + resolution: {integrity: sha512-Qdj8ajF9kxY4gLrq7gA+Azp8CtFHGO9tWMN2wfF9aQNgG9AuMhPrUzMq9AMQ0MXiYcgNq/FD3eegB43nHVmXVA==} + peerDependencies: + '@chakra-ui/styled-system': '>=2.0.0' + + '@chakra-ui/theme-utils@2.0.21': + resolution: {integrity: sha512-FjH5LJbT794r0+VSCXB3lT4aubI24bLLRWB+CuRKHijRvsOg717bRdUN/N1fEmEpFnRVrbewttWh/OQs0EWpWw==} + + '@chakra-ui/theme@3.3.1': + resolution: {integrity: sha512-Hft/VaT8GYnItGCBbgWd75ICrIrIFrR7lVOhV/dQnqtfGqsVDlrztbSErvMkoPKt0UgAkd9/o44jmZ6X4U2nZQ==} + peerDependencies: + '@chakra-ui/styled-system': '>=2.8.0' + + '@chakra-ui/toast@7.0.2': + resolution: {integrity: sha512-yvRP8jFKRs/YnkuE41BVTq9nB2v/KDRmje9u6dgDmE5+1bFt3bwjdf9gVbif4u5Ve7F7BGk5E093ARRVtvLvXA==} + peerDependencies: + '@chakra-ui/system': 2.6.2 + framer-motion: '>=4.0.0' + react: '>=18' + react-dom: '>=18' + + '@chakra-ui/tooltip@2.3.1': + resolution: {integrity: sha512-Rh39GBn/bL4kZpuEMPPRwYNnccRCL+w9OqamWHIB3Qboxs6h8cOyXfIdGxjo72lvhu1QI/a4KFqkM3St+WfC0A==} + peerDependencies: + '@chakra-ui/system': '>=2.0.0' + framer-motion: '>=4.0.0' + react: '>=18' + react-dom: '>=18' + + '@chakra-ui/transition@2.1.0': + resolution: {integrity: sha512-orkT6T/Dt+/+kVwJNy7zwJ+U2xAZ3EU7M3XCs45RBvUnZDr/u9vdmaM/3D/rOpmQJWgQBwKPJleUXrYWUagEDQ==} + peerDependencies: + framer-motion: '>=4.0.0' + react: '>=18' + + '@chakra-ui/utils@2.0.15': + resolution: {integrity: sha512-El4+jL0WSaYYs+rJbuYFDbjmfCcfGDmRY95GO4xwzit6YAPZBLcR65rOEwLps+XWluZTy1xdMrusg/hW0c1aAA==} + + '@chakra-ui/visually-hidden@2.2.0': + resolution: {integrity: sha512-KmKDg01SrQ7VbTD3+cPWf/UfpF5MSwm3v7MWi0n5t8HnnadT13MF0MJCDSXbBWnzLv1ZKJ6zlyAOeARWX+DpjQ==} + peerDependencies: + '@chakra-ui/system': '>=2.0.0' + react: '>=18' + + '@emotion/babel-plugin@11.12.0': + resolution: {integrity: sha512-y2WQb+oP8Jqvvclh8Q55gLUyb7UFvgv7eJfsj7td5TToBrIUtPay2kMrZi4xjq9qw2vD0ZR5fSho0yqoFgX7Rw==} + + '@emotion/cache@11.13.1': + resolution: {integrity: sha512-iqouYkuEblRcXmylXIwwOodiEK5Ifl7JcX7o6V4jI3iW4mLXX3dmt5xwBtIkJiQEXFAI+pC8X0i67yiPkH9Ucw==} + + '@emotion/hash@0.9.2': + resolution: {integrity: sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==} + + '@emotion/is-prop-valid@1.3.0': + resolution: {integrity: sha512-SHetuSLvJDzuNbOdtPVbq6yMMMlLoW5Q94uDqJZqy50gcmAjxFkVqmzqSGEFq9gT2iMuIeKV1PXVWmvUhuZLlQ==} + + '@emotion/memoize@0.9.0': + resolution: {integrity: sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==} + + '@emotion/react@11.13.3': + resolution: {integrity: sha512-lIsdU6JNrmYfJ5EbUCf4xW1ovy5wKQ2CkPRM4xogziOxH1nXxBSjpC9YqbFAP7circxMfYp+6x676BqWcEiixg==} + peerDependencies: + '@types/react': '*' + react: '>=16.8.0' + peerDependenciesMeta: + '@types/react': + optional: true + + '@emotion/serialize@1.3.1': + resolution: {integrity: sha512-dEPNKzBPU+vFPGa+z3axPRn8XVDetYORmDC0wAiej+TNcOZE70ZMJa0X7JdeoM6q/nWTMZeLpN/fTnD9o8MQBA==} + + '@emotion/sheet@1.4.0': + resolution: {integrity: sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==} + + '@emotion/styled@11.13.0': + resolution: {integrity: sha512-tkzkY7nQhW/zC4hztlwucpT8QEZ6eUzpXDRhww/Eej4tFfO0FxQYWRyg/c5CCXa4d/f174kqeXYjuQRnhzf6dA==} + peerDependencies: + '@emotion/react': ^11.0.0-rc.0 + '@types/react': '*' + react: '>=16.8.0' + peerDependenciesMeta: + '@types/react': + optional: true + + '@emotion/unitless@0.10.0': + resolution: {integrity: sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==} + + '@emotion/use-insertion-effect-with-fallbacks@1.1.0': + resolution: {integrity: sha512-+wBOcIV5snwGgI2ya3u99D7/FJquOIniQT1IKyDsBmEgwvpxMNeS65Oib7OnE2d2aY+3BU4OiH+0Wchf8yk3Hw==} + peerDependencies: + react: '>=16.8.0' + + '@emotion/utils@1.4.0': + resolution: {integrity: sha512-spEnrA1b6hDR/C68lC2M7m6ALPUHZC0lIY7jAS/B/9DuuO1ZP04eov8SMv/6fwRd8pzmsn2AuJEznRREWlQrlQ==} + + '@emotion/weak-memoize@0.4.0': + resolution: {integrity: sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==} + + '@esbuild/aix-ppc64@0.21.5': + resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.21.5': + resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.21.5': + resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.21.5': + resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.21.5': + resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.21.5': + resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.21.5': + resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.21.5': + resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.21.5': + resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.21.5': + resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.21.5': + resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.21.5': + resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.21.5': + resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.21.5': + resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.21.5': + resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.21.5': + resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.21.5': + resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-x64@0.21.5': + resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-x64@0.21.5': + resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + + '@esbuild/sunos-x64@0.21.5': + resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.21.5': + resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.21.5': + resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.21.5': + resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + + '@eslint-community/eslint-utils@4.4.0': + resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/regexpp@4.11.0': + resolution: {integrity: sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/config-array@0.17.1': + resolution: {integrity: sha512-BlYOpej8AQ8Ev9xVqroV7a02JK3SkBAaN9GfMMH9W6Ch8FlQlkjGw4Ir7+FgYwfirivAf4t+GtzuAxqfukmISA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/eslintrc@3.1.0': + resolution: {integrity: sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/js@9.9.0': + resolution: {integrity: sha512-hhetes6ZHP3BlXLxmd8K2SNgkhNSi+UcecbnwWKwpP7kyi/uC75DJ1lOOBO3xrC4jyojtGE3YxKZPHfk4yrgug==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/object-schema@2.1.4': + resolution: {integrity: sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@hey-api/openapi-ts@0.52.0': + resolution: {integrity: sha512-DA3Zf5ONxMK1PUkK88lAuYbXMgn5BvU5sjJdTAO2YOn6Eu/9ovilBztMzvu8pyY44PmL3n4ex4+f+XIwvgfhvw==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + typescript: ^5.x + + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + '@humanwhocodes/retry@0.3.0': + resolution: {integrity: sha512-d2CGZR2o7fS6sWB7DG/3a95bGKQyHMACZ5aW8qGkkqQpUoZV6C0X7Pc7l4ZNMZkfNBf4VWNe9E1jRsf0G146Ew==} + engines: {node: '>=18.18'} + + '@isaacs/cliui@8.0.2': + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + + '@jridgewell/gen-mapping@0.3.5': + resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} + engines: {node: '>=6.0.0'} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/set-array@1.2.1': + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + + '@jridgewell/trace-mapping@0.3.25': + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + + '@jsdevtools/ono@7.1.3': + resolution: {integrity: sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==} + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@pkgjs/parseargs@0.11.0': + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + + '@pkgr/core@0.1.1': + resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + + '@popperjs/core@2.11.8': + resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} + + '@rollup/rollup-android-arm-eabi@4.21.0': + resolution: {integrity: sha512-WTWD8PfoSAJ+qL87lE7votj3syLavxunWhzCnx3XFxFiI/BA/r3X7MUM8dVrH8rb2r4AiO8jJsr3ZjdaftmnfA==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.21.0': + resolution: {integrity: sha512-a1sR2zSK1B4eYkiZu17ZUZhmUQcKjk2/j9Me2IDjk1GHW7LB5Z35LEzj9iJch6gtUfsnvZs1ZNyDW2oZSThrkA==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.21.0': + resolution: {integrity: sha512-zOnKWLgDld/svhKO5PD9ozmL6roy5OQ5T4ThvdYZLpiOhEGY+dp2NwUmxK0Ld91LrbjrvtNAE0ERBwjqhZTRAA==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.21.0': + resolution: {integrity: sha512-7doS8br0xAkg48SKE2QNtMSFPFUlRdw9+votl27MvT46vo44ATBmdZdGysOevNELmZlfd+NEa0UYOA8f01WSrg==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-linux-arm-gnueabihf@4.21.0': + resolution: {integrity: sha512-pWJsfQjNWNGsoCq53KjMtwdJDmh/6NubwQcz52aEwLEuvx08bzcy6tOUuawAOncPnxz/3siRtd8hiQ32G1y8VA==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm-musleabihf@4.21.0': + resolution: {integrity: sha512-efRIANsz3UHZrnZXuEvxS9LoCOWMGD1rweciD6uJQIx2myN3a8Im1FafZBzh7zk1RJ6oKcR16dU3UPldaKd83w==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm64-gnu@4.21.0': + resolution: {integrity: sha512-ZrPhydkTVhyeGTW94WJ8pnl1uroqVHM3j3hjdquwAcWnmivjAwOYjTEAuEDeJvGX7xv3Z9GAvrBkEzCgHq9U1w==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-arm64-musl@4.21.0': + resolution: {integrity: sha512-cfaupqd+UEFeURmqNP2eEvXqgbSox/LHOyN9/d2pSdV8xTrjdg3NgOFJCtc1vQ/jEke1qD0IejbBfxleBPHnPw==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-powerpc64le-gnu@4.21.0': + resolution: {integrity: sha512-ZKPan1/RvAhrUylwBXC9t7B2hXdpb/ufeu22pG2psV7RN8roOfGurEghw1ySmX/CmDDHNTDDjY3lo9hRlgtaHg==} + cpu: [ppc64] + os: [linux] + + '@rollup/rollup-linux-riscv64-gnu@4.21.0': + resolution: {integrity: sha512-H1eRaCwd5E8eS8leiS+o/NqMdljkcb1d6r2h4fKSsCXQilLKArq6WS7XBLDu80Yz+nMqHVFDquwcVrQmGr28rg==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-s390x-gnu@4.21.0': + resolution: {integrity: sha512-zJ4hA+3b5tu8u7L58CCSI0A9N1vkfwPhWd/puGXwtZlsB5bTkwDNW/+JCU84+3QYmKpLi+XvHdmrlwUwDA6kqw==} + cpu: [s390x] + os: [linux] + + '@rollup/rollup-linux-x64-gnu@4.21.0': + resolution: {integrity: sha512-e2hrvElFIh6kW/UNBQK/kzqMNY5mO+67YtEh9OA65RM5IJXYTWiXjX6fjIiPaqOkBthYF1EqgiZ6OXKcQsM0hg==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-linux-x64-musl@4.21.0': + resolution: {integrity: sha512-1vvmgDdUSebVGXWX2lIcgRebqfQSff0hMEkLJyakQ9JQUbLDkEaMsPTLOmyccyC6IJ/l3FZuJbmrBw/u0A0uCQ==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-win32-arm64-msvc@4.21.0': + resolution: {integrity: sha512-s5oFkZ/hFcrlAyBTONFY1TWndfyre1wOMwU+6KCpm/iatybvrRgmZVM+vCFwxmC5ZhdlgfE0N4XorsDpi7/4XQ==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.21.0': + resolution: {integrity: sha512-G9+TEqRnAA6nbpqyUqgTiopmnfgnMkR3kMukFBDsiyy23LZvUCpiUwjTRx6ezYCjJODXrh52rBR9oXvm+Fp5wg==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.21.0': + resolution: {integrity: sha512-2jsCDZwtQvRhejHLfZ1JY6w6kEuEtfF9nzYsZxzSlNVKDX+DpsDJ+Rbjkm74nvg2rdx0gwBS+IMdvwJuq3S9pQ==} + cpu: [x64] + os: [win32] + + '@swc/core-darwin-arm64@1.7.14': + resolution: {integrity: sha512-V0OUXjOH+hdGxDYG8NkQzy25mKOpcNKFpqtZEzLe5V/CpLJPnpg1+pMz70m14s9ZFda9OxsjlvPbg1FLUwhgIQ==} + engines: {node: '>=10'} + cpu: [arm64] + os: [darwin] + + '@swc/core-darwin-x64@1.7.14': + resolution: {integrity: sha512-9iFvUnxG6FC3An5ogp5jbBfQuUmTTwy8KMB+ZddUoPB3NR1eV+Y9vOh/tfWcenSJbgOKDLgYC5D/b1mHAprsrQ==} + engines: {node: '>=10'} + cpu: [x64] + os: [darwin] + + '@swc/core-linux-arm-gnueabihf@1.7.14': + resolution: {integrity: sha512-zGJsef9qPivKSH8Vv4F/HiBXBTHZ5Hs3ZjVGo/UIdWPJF8fTL9OVADiRrl34Q7zOZEtGXRwEKLUW1SCQcbDvZA==} + engines: {node: '>=10'} + cpu: [arm] + os: [linux] + + '@swc/core-linux-arm64-gnu@1.7.14': + resolution: {integrity: sha512-AxV3MPsoI7i4B8FXOew3dx3N8y00YoJYvIPfxelw07RegeCEH3aHp2U2DtgbP/NV1ugZMx0TL2Z2DEvocmA51g==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux] + + '@swc/core-linux-arm64-musl@1.7.14': + resolution: {integrity: sha512-JDLdNjUj3zPehd4+DrQD8Ltb3B5lD8D05IwePyDWw+uR/YPc7w/TX1FUVci5h3giJnlMCJRvi1IQYV7K1n7KtQ==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux] + + '@swc/core-linux-x64-gnu@1.7.14': + resolution: {integrity: sha512-Siy5OvPCLLWmMdx4msnEs8HvEVUEigSn0+3pbLjv78iwzXd0qSBNHUPZyC1xeurVaUbpNDxZTpPRIwpqNE2+Og==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux] + + '@swc/core-linux-x64-musl@1.7.14': + resolution: {integrity: sha512-FtEGm9mwtRYQNK43WMtUIadxHs/ja2rnDurB99os0ZoFTGG2IHuht2zD97W0wB8JbqEabT1XwSG9Y5wmN+ciEQ==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux] + + '@swc/core-win32-arm64-msvc@1.7.14': + resolution: {integrity: sha512-Jp8KDlfq7Ntt2/BXr0y344cYgB1zf0DaLzDZ1ZJR6rYlAzWYSccLYcxHa97VGnsYhhPspMpmCvHid97oe2hl4A==} + engines: {node: '>=10'} + cpu: [arm64] + os: [win32] + + '@swc/core-win32-ia32-msvc@1.7.14': + resolution: {integrity: sha512-I+cFsXF0OU0J9J4zdWiQKKLURO5dvCujH9Jr8N0cErdy54l9d4gfIxdctfTF+7FyXtWKLTCkp+oby9BQhkFGWA==} + engines: {node: '>=10'} + cpu: [ia32] + os: [win32] + + '@swc/core-win32-x64-msvc@1.7.14': + resolution: {integrity: sha512-NNrprQCK6d28mG436jVo2TD+vACHseUECacEBGZ9Ef0qfOIWS1XIt2MisQKG0Oea2VvLFl6tF/V4Lnx/H0Sn3Q==} + engines: {node: '>=10'} + cpu: [x64] + os: [win32] + + '@swc/core@1.7.14': + resolution: {integrity: sha512-9aeXeifnyuvc2pcuuhPQgVUwdpGEzZ+9nJu0W8/hNl/aESFsJGR5i9uQJRGu0atoNr01gK092fvmqMmQAPcKow==} + engines: {node: '>=10'} + peerDependencies: + '@swc/helpers': '*' + peerDependenciesMeta: + '@swc/helpers': + optional: true + + '@swc/counter@0.1.3': + resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} + + '@swc/types@0.1.12': + resolution: {integrity: sha512-wBJA+SdtkbFhHjTMYH+dEH1y4VpfGdAc2Kw/LK09i9bXd/K6j6PkDcFCEzb6iVfZMkPRrl/q0e3toqTAJdkIVA==} + + '@tanstack/eslint-plugin-query@5.52.0': + resolution: {integrity: sha512-i02fOM3TRURI46AswPNlKb4Gwu+/mAPssI+pVu0AifA7/qzOJRgco17vdqjq/VgChKLLIltd9/KI4MCJFFfWEw==} + peerDependencies: + eslint: ^8 || ^9 + + '@tanstack/query-core@5.52.0': + resolution: {integrity: sha512-U1DOEgltjUwalN6uWYTewSnA14b+tE7lSylOiASKCAO61ENJeCq9VVD/TXHA6O5u9+6v5+UgGYBSccTKDoyMqw==} + + '@tanstack/react-query@5.52.1': + resolution: {integrity: sha512-soyn4dNIUZ8US8NaPVXv06gkZFHaZnPfKWPDjRJjFRW3Y7WZ0jx72eT6zhw3VQlkMPysmXye8l35ewPHspKgbQ==} + peerDependencies: + react: ^18 || ^19 + + '@tanstack/react-table@8.20.1': + resolution: {integrity: sha512-PJK+07qbengObe5l7c8vCdtefXm8cyR4i078acWrHbdm8JKw1ES7YpmOtVt9ALUVEEFAHscdVpGRhRgikgFMbQ==} + engines: {node: '>=12'} + peerDependencies: + react: '>=16.8' + react-dom: '>=16.8' + + '@tanstack/table-core@8.20.1': + resolution: {integrity: sha512-5Ly5TIRHnWH7vSDell9B/OVyV380qqIJVg7H7R7jU4fPEmOD4smqAX7VRflpYI09srWR8aj5OLD2Ccs1pI5mTg==} + engines: {node: '>=12'} + + '@testing-library/dom@10.4.0': + resolution: {integrity: sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==} + engines: {node: '>=18'} + + '@testing-library/jest-dom@6.4.8': + resolution: {integrity: sha512-JD0G+Zc38f5MBHA4NgxQMR5XtO5Jx9g86jqturNTt2WUfRmLDIY7iKkWHDCCTiDuFMre6nxAD5wHw9W5kI4rGw==} + engines: {node: '>=14', npm: '>=6', yarn: '>=1'} + + '@testing-library/react@16.0.0': + resolution: {integrity: sha512-guuxUKRWQ+FgNX0h0NS0FIq3Q3uLtWVpBzcLOggmfMoUpgBnzBzvLLd4fbm6yS8ydJd94cIfY4yP9qUQjM2KwQ==} + engines: {node: '>=18'} + peerDependencies: + '@testing-library/dom': ^10.0.0 + '@types/react': ^18.0.0 + '@types/react-dom': ^18.0.0 + react: ^18.0.0 + react-dom: ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@ts-morph/common@0.23.0': + resolution: {integrity: sha512-m7Lllj9n/S6sOkCkRftpM7L24uvmfXQFedlW/4hENcuJH1HHm9u5EgxZb9uVjQSCGrbBWBkOGgcTxNg36r6ywA==} + + '@types/aria-query@5.0.4': + resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} + + '@types/estree@1.0.5': + resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} + + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + + '@types/lodash.mergewith@4.6.7': + resolution: {integrity: sha512-3m+lkO5CLRRYU0fhGRp7zbsGi6+BZj0uTVSwvcKU+nSlhjA9/QRNfuSGnD2mX6hQA7ZbmcCkzk5h4ZYGOtk14A==} + + '@types/lodash@4.17.7': + resolution: {integrity: sha512-8wTvZawATi/lsmNu10/j2hk1KEP0IvjubqPE3cu1Xz7xfXXt5oCq3SNUz4fMIP4XGF9Ky+Ue2tBA3hcS7LSBlA==} + + '@types/parse-json@4.0.2': + resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} + + '@types/prop-types@15.7.12': + resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} + + '@types/react-dom@18.3.0': + resolution: {integrity: sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==} + + '@types/react@18.3.4': + resolution: {integrity: sha512-J7W30FTdfCxDDjmfRM+/JqLHBIyl7xUIp9kwK637FGmY7+mkSFSe6L4jpZzhj5QMfLssSDP4/i75AKkrdC7/Jw==} + + '@typescript-eslint/eslint-plugin@8.2.0': + resolution: {integrity: sha512-02tJIs655em7fvt9gps/+4k4OsKULYGtLBPJfOsmOq1+3cdClYiF0+d6mHu6qDnTcg88wJBkcPLpQhq7FyDz0A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 + eslint: ^8.57.0 || ^9.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/parser@8.2.0': + resolution: {integrity: sha512-j3Di+o0lHgPrb7FxL3fdEy6LJ/j2NE8u+AP/5cQ9SKb+JLH6V6UHDqJ+e0hXBkHP1wn1YDFjYCS9LBQsZDlDEg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/scope-manager@8.0.0-alpha.30': + resolution: {integrity: sha512-FGW/iPWGyPFamAVZ60oCAthMqQrqafUGebF8UKuq/ha+e9SVG6YhJoRzurlQXOVf8dHfOhJ0ADMXyFnMc53clg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/scope-manager@8.2.0': + resolution: {integrity: sha512-OFn80B38yD6WwpoHU2Tz/fTz7CgFqInllBoC3WP+/jLbTb4gGPTy9HBSTsbDWkMdN55XlVU0mMDYAtgvlUspGw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/type-utils@8.2.0': + resolution: {integrity: sha512-g1CfXGFMQdT5S+0PSO0fvGXUaiSkl73U1n9LTK5aRAFnPlJ8dLKkXr4AaLFvPedW8lVDoMgLLE3JN98ZZfsj0w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/types@8.0.0-alpha.30': + resolution: {integrity: sha512-4WzLlw27SO9pK9UFj/Hu7WGo8WveT0SEiIpFVsV2WwtQmLps6kouwtVCB8GJPZKJyurhZhcqCoQVQFmpv441Vg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/types@8.2.0': + resolution: {integrity: sha512-6a9QSK396YqmiBKPkJtxsgZZZVjYQ6wQ/TlI0C65z7vInaETuC6HAHD98AGLC8DyIPqHytvNuS8bBVvNLKyqvQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/typescript-estree@8.0.0-alpha.30': + resolution: {integrity: sha512-WSXbc9ZcXI+7yC+6q95u77i8FXz6HOLsw3ST+vMUlFy1lFbXyFL/3e6HDKQCm2Clt0krnoCPiTGvIn+GkYPn4Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/typescript-estree@8.2.0': + resolution: {integrity: sha512-kiG4EDUT4dImplOsbh47B1QnNmXSoUqOjWDvCJw/o8LgfD0yr7k2uy54D5Wm0j4t71Ge1NkynGhpWdS0dEIAUA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/utils@8.0.0-alpha.30': + resolution: {integrity: sha512-rfhqfLqFyXhHNDwMnHiVGxl/Z2q/3guQ1jLlGQ0hi9Rb7inmwz42crM+NnLPR+2vEnwyw1P/g7fnQgQ3qvFx4g==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + + '@typescript-eslint/utils@8.2.0': + resolution: {integrity: sha512-O46eaYKDlV3TvAVDNcoDzd5N550ckSe8G4phko++OCSC1dYIb9LTc3HDGYdWqWIAT5qDUKphO6sd9RrpIJJPfg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + + '@typescript-eslint/visitor-keys@8.0.0-alpha.30': + resolution: {integrity: sha512-XZuNurZxBqmr6ZIRIwWFq7j5RZd6ZlkId/HZEWyfciK+CWoyOxSF9Pv2VXH9Rlu2ZG2PfbhLz2Veszl4Pfn7yA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/visitor-keys@8.2.0': + resolution: {integrity: sha512-sbgsPMW9yLvS7IhCi8IpuK1oBmtbWUNP+hBdwl/I9nzqVsszGnNGti5r9dUtF5RLivHUFFIdRvLiTsPhzSyJ3Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@vitejs/plugin-react-swc@3.7.0': + resolution: {integrity: sha512-yrknSb3Dci6svCd/qhHqhFPDSw0QtjumcqdKMoNNzmOl5lMXTTiqzjWtG4Qask2HdvvzaNgSunbQGet8/GrKdA==} + peerDependencies: + vite: ^4 || ^5 + + '@vitest/expect@2.0.5': + resolution: {integrity: sha512-yHZtwuP7JZivj65Gxoi8upUN2OzHTi3zVfjwdpu2WrvCZPLwsJ2Ey5ILIPccoW23dd/zQBlJ4/dhi7DWNyXCpA==} + + '@vitest/pretty-format@2.0.5': + resolution: {integrity: sha512-h8k+1oWHfwTkyTkb9egzwNMfJAEx4veaPSnMeKbVSjp4euqGSbQlm5+6VHwTr7u4FJslVVsUG5nopCaAYdOmSQ==} + + '@vitest/runner@2.0.5': + resolution: {integrity: sha512-TfRfZa6Bkk9ky4tW0z20WKXFEwwvWhRY+84CnSEtq4+3ZvDlJyY32oNTJtM7AW9ihW90tX/1Q78cb6FjoAs+ig==} + + '@vitest/snapshot@2.0.5': + resolution: {integrity: sha512-SgCPUeDFLaM0mIUHfaArq8fD2WbaXG/zVXjRupthYfYGzc8ztbFbu6dUNOblBG7XLMR1kEhS/DNnfCZ2IhdDew==} + + '@vitest/spy@2.0.5': + resolution: {integrity: sha512-c/jdthAhvJdpfVuaexSrnawxZz6pywlTPe84LUB2m/4t3rl2fTo9NFGBG4oWgaD+FTgDDV8hJ/nibT7IfH3JfA==} + + '@vitest/utils@2.0.5': + resolution: {integrity: sha512-d8HKbqIcya+GR67mkZbrzhS5kKhtp8dQLcmRZLGTscGVg7yImT82cIrhtn2L8+VujWcy6KZweApgNmPsTAO/UQ==} + + '@zag-js/dom-query@0.16.0': + resolution: {integrity: sha512-Oqhd6+biWyKnhKwFFuZrrf6lxBz2tX2pRQe6grUnYwO6HJ8BcbqZomy2lpOdr+3itlaUqx+Ywj5E5ZZDr/LBfQ==} + + '@zag-js/element-size@0.10.5': + resolution: {integrity: sha512-uQre5IidULANvVkNOBQ1tfgwTQcGl4hliPSe69Fct1VfYb2Fd0jdAcGzqQgPhfrXFpR62MxLPB7erxJ/ngtL8w==} + + '@zag-js/focus-visible@0.16.0': + resolution: {integrity: sha512-a7U/HSopvQbrDU4GLerpqiMcHKEkQkNPeDZJWz38cw/6Upunh41GjHetq5TB84hxyCaDzJ6q2nEdNoBQfC0FKA==} + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn@8.12.1: + resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==} + engines: {node: '>=0.4.0'} + hasBin: true + + ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-regex@6.0.1: + resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} + engines: {node: '>=12'} + + ansi-styles@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansi-styles@5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} + + ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + aria-hidden@1.2.4: + resolution: {integrity: sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==} + engines: {node: '>=10'} + + aria-query@5.3.0: + resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} + + array-buffer-byte-length@1.0.1: + resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} + engines: {node: '>= 0.4'} + + array-includes@3.1.8: + resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} + engines: {node: '>= 0.4'} + + array-union@2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + + array.prototype.findlast@1.2.5: + resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} + engines: {node: '>= 0.4'} + + array.prototype.flat@1.3.2: + resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} + engines: {node: '>= 0.4'} + + array.prototype.flatmap@1.3.2: + resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} + engines: {node: '>= 0.4'} + + array.prototype.tosorted@1.1.4: + resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==} + engines: {node: '>= 0.4'} + + arraybuffer.prototype.slice@1.0.3: + resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} + engines: {node: '>= 0.4'} + + assertion-error@2.0.1: + resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} + engines: {node: '>=12'} + + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + + available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} + + axios@1.7.4: + resolution: {integrity: sha512-DukmaFRnY6AzAALSH4J2M3k6PkaC+MfaAGdEERRWcC9q3/TWQwLpHR8ZRLKTdQ3aBDL64EdluRDjJqKw+BPZEw==} + + babel-plugin-macros@3.1.0: + resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} + engines: {node: '>=10', npm: '>=6'} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + + brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + c12@1.11.1: + resolution: {integrity: sha512-KDU0TvSvVdaYcQKQ6iPHATGz/7p/KiVjPg4vQrB6Jg/wX9R0yl5RZxWm9IoZqaIHD2+6PZd81+KMGwRr/lRIUg==} + peerDependencies: + magicast: ^0.3.4 + peerDependenciesMeta: + magicast: + optional: true + + cac@6.7.14: + resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} + engines: {node: '>=8'} + + call-bind@1.0.7: + resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} + engines: {node: '>= 0.4'} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + camelcase@8.0.0: + resolution: {integrity: sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==} + engines: {node: '>=16'} + + chai@5.1.1: + resolution: {integrity: sha512-pT1ZgP8rPNqUgieVaEY+ryQr6Q4HXNg8Ei9UnLUrjN4IA7dvQC5JB+/kxVcPNDHyBcc/26CXPkbNzq3qwrOEKA==} + engines: {node: '>=12'} + + chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + + chalk@3.0.0: + resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==} + engines: {node: '>=8'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + check-error@2.1.1: + resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} + engines: {node: '>= 16'} + + chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} + + chownr@2.0.0: + resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} + engines: {node: '>=10'} + + citty@0.1.6: + resolution: {integrity: sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==} + + code-block-writer@13.0.2: + resolution: {integrity: sha512-XfXzAGiStXSmCIwrkdfvc7FS5Dtj8yelCtyOf2p2skCAfvLd6zu0rGzuS9NSCO3bq1JKpFZ7tbKdKlcd5occQA==} + + color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + color2k@2.0.3: + resolution: {integrity: sha512-zW190nQTIoXcGCaU08DvVNFTmQhUpnJfVuAKfWqUQkflXKpaDdpaYoM0iluLS9lgJNHyBF58KKA2FBEwkD7wog==} + + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + + commander@12.1.0: + resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} + engines: {node: '>=18'} + + compute-scroll-into-view@3.0.3: + resolution: {integrity: sha512-nadqwNxghAGTamwIqQSG433W6OADZx2vCo3UXHNrzTRHK/htu+7+L0zhjEoaeaQVNAi3YgqWDv8+tzf0hRfR+A==} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + confbox@0.1.7: + resolution: {integrity: sha512-uJcB/FKZtBMCJpK8MQji6bJHgu1tixKPxRLeGkNzBoOZzpnZUJm0jm2/sBDWcuBx1dYgxV4JU+g5hmNxCyAmdA==} + + consola@3.2.3: + resolution: {integrity: sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==} + engines: {node: ^14.18.0 || >=16.10.0} + + convert-source-map@1.9.0: + resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} + + copy-to-clipboard@3.3.3: + resolution: {integrity: sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==} + + cosmiconfig@7.1.0: + resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} + engines: {node: '>=10'} + + cross-spawn@7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} + + css-box-model@1.2.1: + resolution: {integrity: sha512-a7Vr4Q/kd/aw96bnJG332W9V9LkJO69JRcaCYDUqjp6/z0w6VcZjgAcTbgFxEPfBgdnAwlh3iwu+hLopa+flJw==} + + css.escape@1.5.1: + resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==} + + csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + + data-view-buffer@1.0.1: + resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} + engines: {node: '>= 0.4'} + + data-view-byte-length@1.0.1: + resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} + engines: {node: '>= 0.4'} + + data-view-byte-offset@1.0.0: + resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} + engines: {node: '>= 0.4'} + + debug@4.3.6: + resolution: {integrity: sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + deep-eql@5.0.2: + resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} + engines: {node: '>=6'} + + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + + define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} + + defu@6.1.4: + resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} + + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + + dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + + destr@2.0.3: + resolution: {integrity: sha512-2N3BOUU4gYMpTP24s5rF5iP7BDr7uNTCs4ozw3kf/eKfvWSIu93GEBi5m427YoyJoeOzQ5smuu4nNAPGb8idSQ==} + + detect-node-es@1.1.0: + resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} + + dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + + doctrine@2.1.0: + resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} + engines: {node: '>=0.10.0'} + + dom-accessibility-api@0.5.16: + resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} + + dom-accessibility-api@0.6.3: + resolution: {integrity: sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==} + + dotenv@16.4.5: + resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==} + engines: {node: '>=12'} + + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + + entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + + error-ex@1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + + es-abstract@1.23.3: + resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==} + engines: {node: '>= 0.4'} + + es-define-property@1.0.0: + resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-iterator-helpers@1.0.19: + resolution: {integrity: sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==} + engines: {node: '>= 0.4'} + + es-object-atoms@1.0.0: + resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} + engines: {node: '>= 0.4'} + + es-set-tostringtag@2.0.3: + resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} + engines: {node: '>= 0.4'} + + es-shim-unscopables@1.0.2: + resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} + + es-to-primitive@1.2.1: + resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} + engines: {node: '>= 0.4'} + + esbuild@0.21.5: + resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} + engines: {node: '>=12'} + hasBin: true + + escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + eslint-config-prettier@9.1.0: + resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} + hasBin: true + peerDependencies: + eslint: '>=7.0.0' + + eslint-plugin-prettier@5.2.1: + resolution: {integrity: sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + '@types/eslint': '>=8.0.0' + eslint: '>=8.0.0' + eslint-config-prettier: '*' + prettier: '>=3.0.0' + peerDependenciesMeta: + '@types/eslint': + optional: true + eslint-config-prettier: + optional: true + + eslint-plugin-react-hooks@5.1.0-rc-fb9a90fa48-20240614: + resolution: {integrity: sha512-xsiRwaDNF5wWNC4ZHLut+x/YcAxksUd9Rizt7LaEn3bV8VyYRpXnRJQlLOfYaVy9esk4DFP4zPPnoNVjq5Gc0w==} + engines: {node: '>=10'} + peerDependencies: + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 + + eslint-plugin-react-refresh@0.4.11: + resolution: {integrity: sha512-wrAKxMbVr8qhXTtIKfXqAn5SAtRZt0aXxe5P23Fh4pUAdC6XEsybGLB8P0PI4j1yYqOgUEUlzKAGDfo7rJOjcw==} + peerDependencies: + eslint: '>=7' + + eslint-plugin-react@7.35.0: + resolution: {integrity: sha512-v501SSMOWv8gerHkk+IIQBkcGRGrO2nfybfj5pLxuJNFTPxxA3PSryhXTK+9pNbtkggheDdsC0E9Q8CuPk6JKA==} + engines: {node: '>=4'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 + + eslint-scope@8.0.2: + resolution: {integrity: sha512-6E4xmrTw5wtxnLA5wYL3WDfhZ/1bUBGOXV0zQvVRDOtrR8D0p6W7fs3JweNYhwRYeGvd/1CKX2se0/2s7Q/nJA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-visitor-keys@4.0.0: + resolution: {integrity: sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint@9.9.0: + resolution: {integrity: sha512-JfiKJrbx0506OEerjK2Y1QlldtBxkAlLxT5OEcRF8uaQ86noDe2k31Vw9rnSWv+MXZHj7OOUV/dA0AhdLFcyvA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true + + espree@10.1.0: + resolution: {integrity: sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + esquery@1.6.0: + resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} + engines: {node: '>=0.10'} + + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + execa@8.0.1: + resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} + engines: {node: '>=16.17'} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-diff@1.3.0: + resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} + + fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + engines: {node: '>=8.6.0'} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + fastq@1.17.1: + resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + + file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + find-root@1.1.0: + resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + flat-cache@4.0.1: + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} + + flatted@3.3.1: + resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} + + focus-lock@1.3.5: + resolution: {integrity: sha512-QFaHbhv9WPUeLYBDe/PAuLKJ4Dd9OPvKs9xZBr3yLXnUrDNaVXKu2baDBXe3naPY30hgHYSsf2JW4jzas2mDEQ==} + engines: {node: '>=10'} + + follow-redirects@1.15.6: + resolution: {integrity: sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + + for-each@0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + + foreground-child@3.3.0: + resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} + engines: {node: '>=14'} + + form-data@4.0.0: + resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} + engines: {node: '>= 6'} + + framer-motion@11.3.29: + resolution: {integrity: sha512-uyDuUOeOElJEA3kbkbyoTNEf75Jih1EUg0ouLKYMlGDdt/LaJPmO+FyOGAGxM2HwKhHcAoKFNveR5A8peb7yhw==} + peerDependencies: + '@emotion/is-prop-valid': '*' + react: ^18.0.0 + react-dom: ^18.0.0 + peerDependenciesMeta: + '@emotion/is-prop-valid': + optional: true + react: + optional: true + react-dom: + optional: true + + framesync@6.1.2: + resolution: {integrity: sha512-jBTqhX6KaQVDyus8muwZbBeGGP0XgujBRbQ7gM7BRdS3CadCZIHiawyzYLnafYcvZIh5j8WE7cxZKFn7dXhu9g==} + + fs-minipass@2.1.0: + resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} + engines: {node: '>= 8'} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + function.prototype.name@1.1.6: + resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} + engines: {node: '>= 0.4'} + + functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + + get-func-name@2.0.2: + resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} + + get-intrinsic@1.2.4: + resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} + engines: {node: '>= 0.4'} + + get-nonce@1.0.1: + resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} + engines: {node: '>=6'} + + get-stream@8.0.1: + resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} + engines: {node: '>=16'} + + get-symbol-description@1.0.2: + resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} + engines: {node: '>= 0.4'} + + giget@1.2.3: + resolution: {integrity: sha512-8EHPljDvs7qKykr6uw8b+lqLiUc/vUg+KVTI0uND4s63TdsZM2Xus3mflvF0DDG9SiM4RlCkFGL+7aAjRmV7KA==} + hasBin: true + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + glob@10.4.5: + resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} + hasBin: true + + globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + + globals@14.0.0: + resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} + engines: {node: '>=18'} + + globals@15.9.0: + resolution: {integrity: sha512-SmSKyLLKFbSr6rptvP8izbyxJL4ILwqO9Jg23UA0sDlGlu58V59D1//I3vlc0KJphVdUR7vMjHIplYnzBxorQA==} + engines: {node: '>=18'} + + globalthis@1.0.4: + resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} + engines: {node: '>= 0.4'} + + globby@11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} + + gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + + graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + + handlebars@4.7.8: + resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==} + engines: {node: '>=0.4.7'} + hasBin: true + + happy-dom@15.0.0: + resolution: {integrity: sha512-DsvANUcxxY20iCo3Yllm7dqwzPVPduGfVFxa7mONwMBLczFeQgkN0LpDir1kIY322JMh+hrcPV3aGLyHCESDlA==} + engines: {node: '>=18.0.0'} + + has-bigints@1.0.2: + resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} + + has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + + has-proto@1.0.3: + resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} + engines: {node: '>= 0.4'} + + has-symbols@1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + hoist-non-react-statics@3.3.2: + resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} + + human-signals@5.0.0: + resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} + engines: {node: '>=16.17.0'} + + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + + import-fresh@3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + indent-string@4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} + + internal-slot@1.0.7: + resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} + engines: {node: '>= 0.4'} + + invariant@2.2.4: + resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} + + is-array-buffer@3.0.4: + resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} + engines: {node: '>= 0.4'} + + is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + + is-async-function@2.0.0: + resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} + engines: {node: '>= 0.4'} + + is-bigint@1.0.4: + resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} + + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + + is-boolean-object@1.1.2: + resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} + engines: {node: '>= 0.4'} + + is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + + is-core-module@2.15.1: + resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==} + engines: {node: '>= 0.4'} + + is-data-view@1.0.1: + resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} + engines: {node: '>= 0.4'} + + is-date-object@1.0.5: + resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} + engines: {node: '>= 0.4'} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-finalizationregistry@1.0.2: + resolution: {integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-generator-function@1.0.10: + resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} + engines: {node: '>= 0.4'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-map@2.0.3: + resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} + engines: {node: '>= 0.4'} + + is-negative-zero@2.0.3: + resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} + engines: {node: '>= 0.4'} + + is-number-object@1.0.7: + resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} + engines: {node: '>= 0.4'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-path-inside@3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + + is-regex@1.1.4: + resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} + engines: {node: '>= 0.4'} + + is-set@2.0.3: + resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} + engines: {node: '>= 0.4'} + + is-shared-array-buffer@1.0.3: + resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} + engines: {node: '>= 0.4'} + + is-stream@3.0.0: + resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + is-string@1.0.7: + resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} + engines: {node: '>= 0.4'} + + is-symbol@1.0.4: + resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} + engines: {node: '>= 0.4'} + + is-typed-array@1.1.13: + resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} + engines: {node: '>= 0.4'} + + is-weakmap@2.0.2: + resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} + engines: {node: '>= 0.4'} + + is-weakref@1.0.2: + resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + + is-weakset@2.0.3: + resolution: {integrity: sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==} + engines: {node: '>= 0.4'} + + isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + iterator.prototype@1.1.2: + resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==} + + jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + + jiti@1.21.6: + resolution: {integrity: sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==} + hasBin: true + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + jsesc@2.5.2: + resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} + engines: {node: '>=4'} + hasBin: true + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + + jsx-ast-utils@3.3.5: + resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} + engines: {node: '>=4.0'} + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + + lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + + lodash.mergewith@4.6.2: + resolution: {integrity: sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==} + + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + + loupe@3.1.1: + resolution: {integrity: sha512-edNu/8D5MKVfGVFRhFf8aAxiTM6Wumfz5XsaatSxlD3w4R1d/WEKUTydCdPGbl9K7QG/Ca3GnDV2sIKIpXRQcw==} + + lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + + lz-string@1.5.0: + resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} + hasBin: true + + magic-string@0.30.11: + resolution: {integrity: sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==} + + merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + micromatch@4.0.7: + resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==} + engines: {node: '>=8.6'} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + mimic-fn@4.0.0: + resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} + engines: {node: '>=12'} + + min-indent@1.0.1: + resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} + engines: {node: '>=4'} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} + + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + minipass@3.3.6: + resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} + engines: {node: '>=8'} + + minipass@5.0.0: + resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} + engines: {node: '>=8'} + + minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + engines: {node: '>=16 || 14 >=14.17'} + + minizlib@2.1.2: + resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} + engines: {node: '>= 8'} + + mkdirp@1.0.4: + resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} + engines: {node: '>=10'} + hasBin: true + + mkdirp@3.0.1: + resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==} + engines: {node: '>=10'} + hasBin: true + + mlly@1.7.1: + resolution: {integrity: sha512-rrVRZRELyQzrIUAVMHxP97kv+G786pHmOKzuFII8zDYahFBS7qnHh2AlYSl1GAHhaMPCz6/oHjVMcfFYgFYHgA==} + + ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + + nanoid@3.3.7: + resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + neo-async@2.6.2: + resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} + + node-fetch-native@1.6.4: + resolution: {integrity: sha512-IhOigYzAKHd244OC0JIMIUrjzctirCmPkaIfhDeGcEETWof5zKYUW7e7MYvChGWh/4CJeXEgsRyGzuF334rOOQ==} + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + npm-run-path@5.3.0: + resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + nypm@0.3.9: + resolution: {integrity: sha512-BI2SdqqTHg2d4wJh8P9A1W+bslg33vOE9IZDY6eR2QC+Pu1iNBVZUqczrd43rJb+fMzHU7ltAYKsEFY/kHMFcw==} + engines: {node: ^14.16.0 || >=16.10.0} + hasBin: true + + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + object-inspect@1.13.2: + resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==} + engines: {node: '>= 0.4'} + + object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + + object.assign@4.1.5: + resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} + engines: {node: '>= 0.4'} + + object.entries@1.1.8: + resolution: {integrity: sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==} + engines: {node: '>= 0.4'} + + object.fromentries@2.0.8: + resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} + engines: {node: '>= 0.4'} + + object.values@1.2.0: + resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==} + engines: {node: '>= 0.4'} + + ohash@1.1.3: + resolution: {integrity: sha512-zuHHiGTYTA1sYJ/wZN+t5HKZaH23i4yI1HMwbuXm24Nid7Dv0KcuRlKoNKS9UNfAVSBlnGLcuQrnOKWOZoEGaw==} + + onetime@6.0.0: + resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} + engines: {node: '>=12'} + + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + package-json-from-dist@1.0.0: + resolution: {integrity: sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + + path-browserify@1.0.1: + resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-key@4.0.0: + resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} + engines: {node: '>=12'} + + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} + + path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + + pathe@1.1.2: + resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} + + pathval@2.0.0: + resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} + engines: {node: '>= 14.16'} + + perfect-debounce@1.0.0: + resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} + + picocolors@1.0.1: + resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + pkg-types@1.1.3: + resolution: {integrity: sha512-+JrgthZG6m3ckicaOB74TwQ+tBWsFl3qVQg7mN8ulwSOElJ7gBhKzj2VkCPnZ4NlF6kEquYU+RIYNVAvzd54UA==} + + possible-typed-array-names@1.0.0: + resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} + engines: {node: '>= 0.4'} + + postcss@8.4.41: + resolution: {integrity: sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ==} + engines: {node: ^10 || ^12 || >=14} + + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + + prettier-linter-helpers@1.0.0: + resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} + engines: {node: '>=6.0.0'} + + prettier@3.3.3: + resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==} + engines: {node: '>=14'} + hasBin: true + + pretty-format@27.5.1: + resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + prop-types@15.8.1: + resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + + proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + rc9@2.1.2: + resolution: {integrity: sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==} + + react-clientside-effect@1.2.6: + resolution: {integrity: sha512-XGGGRQAKY+q25Lz9a/4EPqom7WRjz3z9R2k4jhVKA/puQFH/5Nt27vFZYql4m4NVNdUvX8PS3O7r/Zzm7cjUlg==} + peerDependencies: + react: ^15.3.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 + + react-dom@18.3.1: + resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} + peerDependencies: + react: ^18.3.1 + + react-fast-compare@3.2.2: + resolution: {integrity: sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==} + + react-focus-lock@2.12.1: + resolution: {integrity: sha512-lfp8Dve4yJagkHiFrC1bGtib3mF2ktqwPJw4/WGcgPW+pJ/AVQA5X2vI7xgp13FcxFEpYBBHpXai/N2DBNC0Jw==} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + + react-icons@5.3.0: + resolution: {integrity: sha512-DnUk8aFbTyQPSkCfF8dbX6kQjXA9DktMeJqfjrg6cK9vwQVMxmcA3BfP4QoiztVmEHtwlTgLFsPuH2NskKT6eg==} + peerDependencies: + react: '*' + + react-is@16.13.1: + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + + react-is@17.0.2: + resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} + + react-remove-scroll-bar@2.3.6: + resolution: {integrity: sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + + react-remove-scroll@2.5.10: + resolution: {integrity: sha512-m3zvBRANPBw3qxVVjEIPEQinkcwlFZ4qyomuWVpNJdv4c6MvHfXV0C3L9Jx5rr3HeBHKNRX+1jreB5QloDIJjA==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + + react-style-singleton@2.2.1: + resolution: {integrity: sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + + react@18.3.1: + resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} + engines: {node: '>=0.10.0'} + + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + + redent@3.0.0: + resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} + engines: {node: '>=8'} + + reflect.getprototypeof@1.0.6: + resolution: {integrity: sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==} + engines: {node: '>= 0.4'} + + regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + + regexp.prototype.flags@1.5.2: + resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} + engines: {node: '>= 0.4'} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + hasBin: true + + resolve@2.0.0-next.5: + resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} + hasBin: true + + reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rollup@4.21.0: + resolution: {integrity: sha512-vo+S/lfA2lMS7rZ2Qoubi6I5hwZwzXeUIctILZLbHI+laNtvhhOIon2S1JksA5UEDQ7l3vberd0fxK44lTYjbQ==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + safe-array-concat@1.1.2: + resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} + engines: {node: '>=0.4'} + + safe-regex-test@1.0.3: + resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} + engines: {node: '>= 0.4'} + + scheduler@0.23.2: + resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + semver@7.6.3: + resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} + engines: {node: '>=10'} + hasBin: true + + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + + set-function-name@2.0.2: + resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} + engines: {node: '>= 0.4'} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + side-channel@1.0.6: + resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} + engines: {node: '>= 0.4'} + + siginfo@2.0.0: + resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + + source-map-js@1.2.0: + resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} + engines: {node: '>=0.10.0'} + + source-map@0.5.7: + resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} + engines: {node: '>=0.10.0'} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + stackback@0.0.2: + resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} + + std-env@3.7.0: + resolution: {integrity: sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + + string.prototype.matchall@4.0.11: + resolution: {integrity: sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==} + engines: {node: '>= 0.4'} + + string.prototype.repeat@1.0.0: + resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==} + + string.prototype.trim@1.2.9: + resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} + engines: {node: '>= 0.4'} + + string.prototype.trimend@1.0.8: + resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} + + string.prototype.trimstart@1.0.8: + resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} + engines: {node: '>= 0.4'} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + + strip-final-newline@3.0.0: + resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} + engines: {node: '>=12'} + + strip-indent@3.0.0: + resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} + engines: {node: '>=8'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + stylis@4.2.0: + resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==} + + supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + synckit@0.9.1: + resolution: {integrity: sha512-7gr8p9TQP6RAHusBOSLs46F4564ZrjV8xFmw5zCmgmhGUcw2hxsShhJ6CEiHQMgPDwAQ1fWHPM0ypc4RMAig4A==} + engines: {node: ^14.18.0 || >=16.0.0} + + tar@6.2.1: + resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} + engines: {node: '>=10'} + + text-table@0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + + tiny-invariant@1.3.3: + resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} + + tinybench@2.9.0: + resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} + + tinypool@1.0.1: + resolution: {integrity: sha512-URZYihUbRPcGv95En+sz6MfghfIc2OJ1sv/RmhWZLouPY0/8Vo80viwPvg3dlaS9fuq7fQMEfgRRK7BBZThBEA==} + engines: {node: ^18.0.0 || >=20.0.0} + + tinyrainbow@1.2.0: + resolution: {integrity: sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==} + engines: {node: '>=14.0.0'} + + tinyspy@3.0.0: + resolution: {integrity: sha512-q5nmENpTHgiPVd1cJDDc9cVoYN5x4vCvwT3FMilvKPKneCBZAxn2YWQjDF0UMcE9k0Cay1gBiDfTMU0g+mPMQA==} + engines: {node: '>=14.0.0'} + + to-fast-properties@2.0.0: + resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} + engines: {node: '>=4'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + toggle-selection@1.0.6: + resolution: {integrity: sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==} + + ts-api-utils@1.3.0: + resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} + engines: {node: '>=16'} + peerDependencies: + typescript: '>=4.2.0' + + ts-morph@22.0.0: + resolution: {integrity: sha512-M9MqFGZREyeb5fTl6gNHKZLqBQA0TjA1lea+CR48R8EBTDuWrNqW6ccC5QvjNR4s6wDumD3LTCjOFSp9iwlzaw==} + + tslib@2.4.0: + resolution: {integrity: sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==} + + tslib@2.6.3: + resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==} + + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + + typed-array-buffer@1.0.2: + resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} + engines: {node: '>= 0.4'} + + typed-array-byte-length@1.0.1: + resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} + engines: {node: '>= 0.4'} + + typed-array-byte-offset@1.0.2: + resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} + engines: {node: '>= 0.4'} + + typed-array-length@1.0.6: + resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} + engines: {node: '>= 0.4'} + + typescript-eslint@8.2.0: + resolution: {integrity: sha512-DmnqaPcML0xYwUzgNbM1XaKXpEb7BShYf2P1tkUmmcl8hyeG7Pj08Er7R9bNy6AufabywzJcOybQAtnD/c9DGw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + typescript@5.5.4: + resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==} + engines: {node: '>=14.17'} + hasBin: true + + ufo@1.5.4: + resolution: {integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==} + + uglify-js@3.19.2: + resolution: {integrity: sha512-S8KA6DDI47nQXJSi2ctQ629YzwOVs+bQML6DAtvy0wgNdpi+0ySpQK0g2pxBq2xfF2z3YCscu7NNA8nXT9PlIQ==} + engines: {node: '>=0.8.0'} + hasBin: true + + unbox-primitive@1.0.2: + resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + use-callback-ref@1.3.2: + resolution: {integrity: sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.8.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + + use-sidecar@1.1.2: + resolution: {integrity: sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': ^16.9.0 || ^17.0.0 || ^18.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + + vite-node@2.0.5: + resolution: {integrity: sha512-LdsW4pxj0Ot69FAoXZ1yTnA9bjGohr2yNBU7QKRxpz8ITSkhuDl6h3zS/tvgz4qrNjeRnvrWeXQ8ZF7Um4W00Q==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + + vite@5.4.2: + resolution: {integrity: sha512-dDrQTRHp5C1fTFzcSaMxjk6vdpKvT+2/mIdE07Gw2ykehT49O0z/VHS3zZ8iV/Gh8BJJKHWOe5RjaNrW5xf/GA==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + 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 + + vitest@2.0.5: + resolution: {integrity: sha512-8GUxONfauuIdeSl5f9GTgVEpg5BTOlplET4WEDaeY2QBiN8wSm68vxN/tb5z405OwppfoCavnwXafiaYBC/xOA==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@types/node': ^18.0.0 || >=20.0.0 + '@vitest/browser': 2.0.5 + '@vitest/ui': 2.0.5 + happy-dom: '*' + jsdom: '*' + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@types/node': + optional: true + '@vitest/browser': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + + webidl-conversions@7.0.0: + resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} + engines: {node: '>=12'} + + whatwg-mimetype@3.0.0: + resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==} + engines: {node: '>=12'} + + which-boxed-primitive@1.0.2: + resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} + + which-builtin-type@1.1.4: + resolution: {integrity: sha512-bppkmBSsHFmIMSl8BO9TbsyzsvGjVoppt8xUiGzwiu/bhDCGxnpOKCxgqj6GuyHE0mINMDecBFPlOm2hzY084w==} + engines: {node: '>= 0.4'} + + which-collection@1.0.2: + resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} + engines: {node: '>= 0.4'} + + which-typed-array@1.1.15: + resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} + engines: {node: '>= 0.4'} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + why-is-node-running@2.3.0: + resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} + engines: {node: '>=8'} + hasBin: true + + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + + wordwrap@1.0.0: + resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + + yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + + yaml@1.10.2: + resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} + engines: {node: '>= 6'} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + +snapshots: + + '@7nohe/openapi-react-query-codegen@1.6.0(commander@12.1.0)(glob@10.4.5)(ts-morph@22.0.0)(typescript@5.5.4)': + dependencies: + '@hey-api/openapi-ts': 0.52.0(typescript@5.5.4) + commander: 12.1.0 + glob: 10.4.5 + ts-morph: 22.0.0 + typescript: 5.5.4 + transitivePeerDependencies: + - magicast + + '@adobe/css-tools@4.4.0': {} + + '@ampproject/remapping@2.3.0': + dependencies: + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + + '@apidevtools/json-schema-ref-parser@11.6.4': + dependencies: + '@jsdevtools/ono': 7.1.3 + '@types/json-schema': 7.0.15 + js-yaml: 4.1.0 + + '@babel/code-frame@7.24.7': + dependencies: + '@babel/highlight': 7.24.7 + picocolors: 1.0.1 + + '@babel/generator@7.25.4': + dependencies: + '@babel/types': 7.25.4 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 2.5.2 + + '@babel/helper-module-imports@7.24.7': + dependencies: + '@babel/traverse': 7.25.4 + '@babel/types': 7.25.4 + transitivePeerDependencies: + - supports-color + + '@babel/helper-string-parser@7.24.8': {} + + '@babel/helper-validator-identifier@7.24.7': {} + + '@babel/highlight@7.24.7': + dependencies: + '@babel/helper-validator-identifier': 7.24.7 + chalk: 2.4.2 + js-tokens: 4.0.0 + picocolors: 1.0.1 + + '@babel/parser@7.25.4': + dependencies: + '@babel/types': 7.25.4 + + '@babel/runtime@7.25.4': + dependencies: + regenerator-runtime: 0.14.1 + + '@babel/template@7.25.0': + dependencies: + '@babel/code-frame': 7.24.7 + '@babel/parser': 7.25.4 + '@babel/types': 7.25.4 + + '@babel/traverse@7.25.4': + dependencies: + '@babel/code-frame': 7.24.7 + '@babel/generator': 7.25.4 + '@babel/parser': 7.25.4 + '@babel/template': 7.25.0 + '@babel/types': 7.25.4 + debug: 4.3.6 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + '@babel/types@7.25.4': + dependencies: + '@babel/helper-string-parser': 7.24.8 + '@babel/helper-validator-identifier': 7.24.7 + to-fast-properties: 2.0.0 + + '@chakra-ui/accordion@2.3.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(framer-motion@11.3.29(@emotion/is-prop-valid@1.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)': + dependencies: + '@chakra-ui/descendant': 3.1.0(react@18.3.1) + '@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/react-context': 2.1.0(react@18.3.1) + '@chakra-ui/react-use-controllable-state': 2.1.0(react@18.3.1) + '@chakra-ui/react-use-merge-refs': 2.1.0(react@18.3.1) + '@chakra-ui/shared-utils': 2.0.5 + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1) + '@chakra-ui/transition': 2.1.0(framer-motion@11.3.29(@emotion/is-prop-valid@1.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) + framer-motion: 11.3.29(@emotion/is-prop-valid@1.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + + '@chakra-ui/alert@2.2.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(react@18.3.1)': + dependencies: + '@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/react-context': 2.1.0(react@18.3.1) + '@chakra-ui/shared-utils': 2.0.5 + '@chakra-ui/spinner': 2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1) + react: 18.3.1 + + '@chakra-ui/anatomy@2.2.2': {} + + '@chakra-ui/avatar@2.3.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(react@18.3.1)': + dependencies: + '@chakra-ui/image': 2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/react-children-utils': 2.0.6(react@18.3.1) + '@chakra-ui/react-context': 2.1.0(react@18.3.1) + '@chakra-ui/shared-utils': 2.0.5 + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1) + react: 18.3.1 + + '@chakra-ui/breadcrumb@2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(react@18.3.1)': + dependencies: + '@chakra-ui/react-children-utils': 2.0.6(react@18.3.1) + '@chakra-ui/react-context': 2.1.0(react@18.3.1) + '@chakra-ui/shared-utils': 2.0.5 + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1) + react: 18.3.1 + + '@chakra-ui/breakpoint-utils@2.0.8': + dependencies: + '@chakra-ui/shared-utils': 2.0.5 + + '@chakra-ui/button@2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(react@18.3.1)': + dependencies: + '@chakra-ui/react-context': 2.1.0(react@18.3.1) + '@chakra-ui/react-use-merge-refs': 2.1.0(react@18.3.1) + '@chakra-ui/shared-utils': 2.0.5 + '@chakra-ui/spinner': 2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1) + react: 18.3.1 + + '@chakra-ui/card@2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(react@18.3.1)': + dependencies: + '@chakra-ui/shared-utils': 2.0.5 + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1) + react: 18.3.1 + + '@chakra-ui/checkbox@2.3.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(react@18.3.1)': + dependencies: + '@chakra-ui/form-control': 2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/react-context': 2.1.0(react@18.3.1) + '@chakra-ui/react-types': 2.0.7(react@18.3.1) + '@chakra-ui/react-use-callback-ref': 2.1.0(react@18.3.1) + '@chakra-ui/react-use-controllable-state': 2.1.0(react@18.3.1) + '@chakra-ui/react-use-merge-refs': 2.1.0(react@18.3.1) + '@chakra-ui/react-use-safe-layout-effect': 2.1.0(react@18.3.1) + '@chakra-ui/react-use-update-effect': 2.1.0(react@18.3.1) + '@chakra-ui/shared-utils': 2.0.5 + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1) + '@chakra-ui/visually-hidden': 2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@zag-js/focus-visible': 0.16.0 + react: 18.3.1 + + '@chakra-ui/clickable@2.1.0(react@18.3.1)': + dependencies: + '@chakra-ui/react-use-merge-refs': 2.1.0(react@18.3.1) + '@chakra-ui/shared-utils': 2.0.5 + react: 18.3.1 + + '@chakra-ui/close-button@2.1.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(react@18.3.1)': + dependencies: + '@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1) + react: 18.3.1 + + '@chakra-ui/color-mode@2.2.0(react@18.3.1)': + dependencies: + '@chakra-ui/react-use-safe-layout-effect': 2.1.0(react@18.3.1) + react: 18.3.1 + + '@chakra-ui/control-box@2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(react@18.3.1)': + dependencies: + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1) + react: 18.3.1 + + '@chakra-ui/counter@2.1.0(react@18.3.1)': + dependencies: + '@chakra-ui/number-utils': 2.0.7 + '@chakra-ui/react-use-callback-ref': 2.1.0(react@18.3.1) + '@chakra-ui/shared-utils': 2.0.5 + react: 18.3.1 + + '@chakra-ui/css-reset@2.3.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(react@18.3.1)': + dependencies: + '@emotion/react': 11.13.3(@types/react@18.3.4)(react@18.3.1) + react: 18.3.1 + + '@chakra-ui/descendant@3.1.0(react@18.3.1)': + dependencies: + '@chakra-ui/react-context': 2.1.0(react@18.3.1) + '@chakra-ui/react-use-merge-refs': 2.1.0(react@18.3.1) + react: 18.3.1 + + '@chakra-ui/dom-utils@2.1.0': {} + + '@chakra-ui/editable@3.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(react@18.3.1)': + dependencies: + '@chakra-ui/react-context': 2.1.0(react@18.3.1) + '@chakra-ui/react-types': 2.0.7(react@18.3.1) + '@chakra-ui/react-use-callback-ref': 2.1.0(react@18.3.1) + '@chakra-ui/react-use-controllable-state': 2.1.0(react@18.3.1) + '@chakra-ui/react-use-focus-on-pointer-down': 2.1.0(react@18.3.1) + '@chakra-ui/react-use-merge-refs': 2.1.0(react@18.3.1) + '@chakra-ui/react-use-safe-layout-effect': 2.1.0(react@18.3.1) + '@chakra-ui/react-use-update-effect': 2.1.0(react@18.3.1) + '@chakra-ui/shared-utils': 2.0.5 + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1) + react: 18.3.1 + + '@chakra-ui/event-utils@2.0.8': {} + + '@chakra-ui/focus-lock@2.1.0(@types/react@18.3.4)(react@18.3.1)': + dependencies: + '@chakra-ui/dom-utils': 2.1.0 + react: 18.3.1 + react-focus-lock: 2.12.1(@types/react@18.3.4)(react@18.3.1) + transitivePeerDependencies: + - '@types/react' + + '@chakra-ui/form-control@2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(react@18.3.1)': + dependencies: + '@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/react-context': 2.1.0(react@18.3.1) + '@chakra-ui/react-types': 2.0.7(react@18.3.1) + '@chakra-ui/react-use-merge-refs': 2.1.0(react@18.3.1) + '@chakra-ui/shared-utils': 2.0.5 + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1) + react: 18.3.1 + + '@chakra-ui/hooks@2.2.1(react@18.3.1)': + dependencies: + '@chakra-ui/react-utils': 2.0.12(react@18.3.1) + '@chakra-ui/utils': 2.0.15 + compute-scroll-into-view: 3.0.3 + copy-to-clipboard: 3.3.3 + react: 18.3.1 + + '@chakra-ui/icon@3.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(react@18.3.1)': + dependencies: + '@chakra-ui/shared-utils': 2.0.5 + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1) + react: 18.3.1 + + '@chakra-ui/image@2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(react@18.3.1)': + dependencies: + '@chakra-ui/react-use-safe-layout-effect': 2.1.0(react@18.3.1) + '@chakra-ui/shared-utils': 2.0.5 + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1) + react: 18.3.1 + + '@chakra-ui/input@2.1.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(react@18.3.1)': + dependencies: + '@chakra-ui/form-control': 2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/object-utils': 2.1.0 + '@chakra-ui/react-children-utils': 2.0.6(react@18.3.1) + '@chakra-ui/react-context': 2.1.0(react@18.3.1) + '@chakra-ui/shared-utils': 2.0.5 + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1) + react: 18.3.1 + + '@chakra-ui/layout@2.3.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(react@18.3.1)': + dependencies: + '@chakra-ui/breakpoint-utils': 2.0.8 + '@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/object-utils': 2.1.0 + '@chakra-ui/react-children-utils': 2.0.6(react@18.3.1) + '@chakra-ui/react-context': 2.1.0(react@18.3.1) + '@chakra-ui/shared-utils': 2.0.5 + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1) + react: 18.3.1 + + '@chakra-ui/lazy-utils@2.0.5': {} + + '@chakra-ui/live-region@2.1.0(react@18.3.1)': + dependencies: + react: 18.3.1 + + '@chakra-ui/media-query@3.3.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(react@18.3.1)': + dependencies: + '@chakra-ui/breakpoint-utils': 2.0.8 + '@chakra-ui/react-env': 3.1.0(react@18.3.1) + '@chakra-ui/shared-utils': 2.0.5 + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1) + react: 18.3.1 + + '@chakra-ui/menu@2.2.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(framer-motion@11.3.29(@emotion/is-prop-valid@1.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)': + dependencies: + '@chakra-ui/clickable': 2.1.0(react@18.3.1) + '@chakra-ui/descendant': 3.1.0(react@18.3.1) + '@chakra-ui/lazy-utils': 2.0.5 + '@chakra-ui/popper': 3.1.0(react@18.3.1) + '@chakra-ui/react-children-utils': 2.0.6(react@18.3.1) + '@chakra-ui/react-context': 2.1.0(react@18.3.1) + '@chakra-ui/react-use-animation-state': 2.1.0(react@18.3.1) + '@chakra-ui/react-use-controllable-state': 2.1.0(react@18.3.1) + '@chakra-ui/react-use-disclosure': 2.1.0(react@18.3.1) + '@chakra-ui/react-use-focus-effect': 2.1.0(react@18.3.1) + '@chakra-ui/react-use-merge-refs': 2.1.0(react@18.3.1) + '@chakra-ui/react-use-outside-click': 2.2.0(react@18.3.1) + '@chakra-ui/react-use-update-effect': 2.1.0(react@18.3.1) + '@chakra-ui/shared-utils': 2.0.5 + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1) + '@chakra-ui/transition': 2.1.0(framer-motion@11.3.29(@emotion/is-prop-valid@1.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) + framer-motion: 11.3.29(@emotion/is-prop-valid@1.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + + '@chakra-ui/modal@2.3.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(@types/react@18.3.4)(framer-motion@11.3.29(@emotion/is-prop-valid@1.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@chakra-ui/close-button': 2.1.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/focus-lock': 2.1.0(@types/react@18.3.4)(react@18.3.1) + '@chakra-ui/portal': 2.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@chakra-ui/react-context': 2.1.0(react@18.3.1) + '@chakra-ui/react-types': 2.0.7(react@18.3.1) + '@chakra-ui/react-use-merge-refs': 2.1.0(react@18.3.1) + '@chakra-ui/shared-utils': 2.0.5 + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1) + '@chakra-ui/transition': 2.1.0(framer-motion@11.3.29(@emotion/is-prop-valid@1.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) + aria-hidden: 1.2.4 + framer-motion: 11.3.29(@emotion/is-prop-valid@1.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-remove-scroll: 2.5.10(@types/react@18.3.4)(react@18.3.1) + transitivePeerDependencies: + - '@types/react' + + '@chakra-ui/number-input@2.1.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(react@18.3.1)': + dependencies: + '@chakra-ui/counter': 2.1.0(react@18.3.1) + '@chakra-ui/form-control': 2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/react-context': 2.1.0(react@18.3.1) + '@chakra-ui/react-types': 2.0.7(react@18.3.1) + '@chakra-ui/react-use-callback-ref': 2.1.0(react@18.3.1) + '@chakra-ui/react-use-event-listener': 2.1.0(react@18.3.1) + '@chakra-ui/react-use-interval': 2.1.0(react@18.3.1) + '@chakra-ui/react-use-merge-refs': 2.1.0(react@18.3.1) + '@chakra-ui/react-use-safe-layout-effect': 2.1.0(react@18.3.1) + '@chakra-ui/react-use-update-effect': 2.1.0(react@18.3.1) + '@chakra-ui/shared-utils': 2.0.5 + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1) + react: 18.3.1 + + '@chakra-ui/number-utils@2.0.7': {} + + '@chakra-ui/object-utils@2.1.0': {} + + '@chakra-ui/pin-input@2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(react@18.3.1)': + dependencies: + '@chakra-ui/descendant': 3.1.0(react@18.3.1) + '@chakra-ui/react-children-utils': 2.0.6(react@18.3.1) + '@chakra-ui/react-context': 2.1.0(react@18.3.1) + '@chakra-ui/react-use-controllable-state': 2.1.0(react@18.3.1) + '@chakra-ui/react-use-merge-refs': 2.1.0(react@18.3.1) + '@chakra-ui/shared-utils': 2.0.5 + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1) + react: 18.3.1 + + '@chakra-ui/popover@2.2.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(framer-motion@11.3.29(@emotion/is-prop-valid@1.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)': + dependencies: + '@chakra-ui/close-button': 2.1.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/lazy-utils': 2.0.5 + '@chakra-ui/popper': 3.1.0(react@18.3.1) + '@chakra-ui/react-context': 2.1.0(react@18.3.1) + '@chakra-ui/react-types': 2.0.7(react@18.3.1) + '@chakra-ui/react-use-animation-state': 2.1.0(react@18.3.1) + '@chakra-ui/react-use-disclosure': 2.1.0(react@18.3.1) + '@chakra-ui/react-use-focus-effect': 2.1.0(react@18.3.1) + '@chakra-ui/react-use-focus-on-pointer-down': 2.1.0(react@18.3.1) + '@chakra-ui/react-use-merge-refs': 2.1.0(react@18.3.1) + '@chakra-ui/shared-utils': 2.0.5 + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1) + framer-motion: 11.3.29(@emotion/is-prop-valid@1.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + + '@chakra-ui/popper@3.1.0(react@18.3.1)': + dependencies: + '@chakra-ui/react-types': 2.0.7(react@18.3.1) + '@chakra-ui/react-use-merge-refs': 2.1.0(react@18.3.1) + '@popperjs/core': 2.11.8 + react: 18.3.1 + + '@chakra-ui/portal@2.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@chakra-ui/react-context': 2.1.0(react@18.3.1) + '@chakra-ui/react-use-safe-layout-effect': 2.1.0(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@chakra-ui/progress@2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(react@18.3.1)': + dependencies: + '@chakra-ui/react-context': 2.1.0(react@18.3.1) + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1) + react: 18.3.1 + + '@chakra-ui/provider@2.4.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@chakra-ui/css-reset': 2.3.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(react@18.3.1) + '@chakra-ui/portal': 2.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@chakra-ui/react-env': 3.1.0(react@18.3.1) + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1) + '@chakra-ui/utils': 2.0.15 + '@emotion/react': 11.13.3(@types/react@18.3.4)(react@18.3.1) + '@emotion/styled': 11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@chakra-ui/radio@2.1.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(react@18.3.1)': + dependencies: + '@chakra-ui/form-control': 2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/react-context': 2.1.0(react@18.3.1) + '@chakra-ui/react-types': 2.0.7(react@18.3.1) + '@chakra-ui/react-use-merge-refs': 2.1.0(react@18.3.1) + '@chakra-ui/shared-utils': 2.0.5 + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1) + '@zag-js/focus-visible': 0.16.0 + react: 18.3.1 + + '@chakra-ui/react-children-utils@2.0.6(react@18.3.1)': + dependencies: + react: 18.3.1 + + '@chakra-ui/react-context@2.1.0(react@18.3.1)': + dependencies: + react: 18.3.1 + + '@chakra-ui/react-env@3.1.0(react@18.3.1)': + dependencies: + '@chakra-ui/react-use-safe-layout-effect': 2.1.0(react@18.3.1) + react: 18.3.1 + + '@chakra-ui/react-types@2.0.7(react@18.3.1)': + dependencies: + react: 18.3.1 + + '@chakra-ui/react-use-animation-state@2.1.0(react@18.3.1)': + dependencies: + '@chakra-ui/dom-utils': 2.1.0 + '@chakra-ui/react-use-event-listener': 2.1.0(react@18.3.1) + react: 18.3.1 + + '@chakra-ui/react-use-callback-ref@2.1.0(react@18.3.1)': + dependencies: + react: 18.3.1 + + '@chakra-ui/react-use-controllable-state@2.1.0(react@18.3.1)': + dependencies: + '@chakra-ui/react-use-callback-ref': 2.1.0(react@18.3.1) + react: 18.3.1 + + '@chakra-ui/react-use-disclosure@2.1.0(react@18.3.1)': + dependencies: + '@chakra-ui/react-use-callback-ref': 2.1.0(react@18.3.1) + react: 18.3.1 + + '@chakra-ui/react-use-event-listener@2.1.0(react@18.3.1)': + dependencies: + '@chakra-ui/react-use-callback-ref': 2.1.0(react@18.3.1) + react: 18.3.1 + + '@chakra-ui/react-use-focus-effect@2.1.0(react@18.3.1)': + dependencies: + '@chakra-ui/dom-utils': 2.1.0 + '@chakra-ui/react-use-event-listener': 2.1.0(react@18.3.1) + '@chakra-ui/react-use-safe-layout-effect': 2.1.0(react@18.3.1) + '@chakra-ui/react-use-update-effect': 2.1.0(react@18.3.1) + react: 18.3.1 + + '@chakra-ui/react-use-focus-on-pointer-down@2.1.0(react@18.3.1)': + dependencies: + '@chakra-ui/react-use-event-listener': 2.1.0(react@18.3.1) + react: 18.3.1 + + '@chakra-ui/react-use-interval@2.1.0(react@18.3.1)': + dependencies: + '@chakra-ui/react-use-callback-ref': 2.1.0(react@18.3.1) + react: 18.3.1 + + '@chakra-ui/react-use-latest-ref@2.1.0(react@18.3.1)': + dependencies: + react: 18.3.1 + + '@chakra-ui/react-use-merge-refs@2.1.0(react@18.3.1)': + dependencies: + react: 18.3.1 + + '@chakra-ui/react-use-outside-click@2.2.0(react@18.3.1)': + dependencies: + '@chakra-ui/react-use-callback-ref': 2.1.0(react@18.3.1) + react: 18.3.1 + + '@chakra-ui/react-use-pan-event@2.1.0(react@18.3.1)': + dependencies: + '@chakra-ui/event-utils': 2.0.8 + '@chakra-ui/react-use-latest-ref': 2.1.0(react@18.3.1) + framesync: 6.1.2 + react: 18.3.1 + + '@chakra-ui/react-use-previous@2.1.0(react@18.3.1)': + dependencies: + react: 18.3.1 + + '@chakra-ui/react-use-safe-layout-effect@2.1.0(react@18.3.1)': + dependencies: + react: 18.3.1 + + '@chakra-ui/react-use-size@2.1.0(react@18.3.1)': + dependencies: + '@zag-js/element-size': 0.10.5 + react: 18.3.1 + + '@chakra-ui/react-use-timeout@2.1.0(react@18.3.1)': + dependencies: + '@chakra-ui/react-use-callback-ref': 2.1.0(react@18.3.1) + react: 18.3.1 + + '@chakra-ui/react-use-update-effect@2.1.0(react@18.3.1)': + dependencies: + react: 18.3.1 + + '@chakra-ui/react-utils@2.0.12(react@18.3.1)': + dependencies: + '@chakra-ui/utils': 2.0.15 + react: 18.3.1 + + '@chakra-ui/react@2.8.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(framer-motion@11.3.29(@emotion/is-prop-valid@1.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@chakra-ui/accordion': 2.3.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(framer-motion@11.3.29(@emotion/is-prop-valid@1.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/alert': 2.2.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/avatar': 2.3.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/breadcrumb': 2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/button': 2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/card': 2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/checkbox': 2.3.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/close-button': 2.1.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/control-box': 2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/counter': 2.1.0(react@18.3.1) + '@chakra-ui/css-reset': 2.3.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(react@18.3.1) + '@chakra-ui/editable': 3.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/focus-lock': 2.1.0(@types/react@18.3.4)(react@18.3.1) + '@chakra-ui/form-control': 2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/hooks': 2.2.1(react@18.3.1) + '@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/image': 2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/input': 2.1.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/layout': 2.3.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/live-region': 2.1.0(react@18.3.1) + '@chakra-ui/media-query': 3.3.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/menu': 2.2.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(framer-motion@11.3.29(@emotion/is-prop-valid@1.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/modal': 2.3.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(@types/react@18.3.4)(framer-motion@11.3.29(@emotion/is-prop-valid@1.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@chakra-ui/number-input': 2.1.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/pin-input': 2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/popover': 2.2.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(framer-motion@11.3.29(@emotion/is-prop-valid@1.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/popper': 3.1.0(react@18.3.1) + '@chakra-ui/portal': 2.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@chakra-ui/progress': 2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/provider': 2.4.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@chakra-ui/radio': 2.1.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/react-env': 3.1.0(react@18.3.1) + '@chakra-ui/select': 2.1.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/skeleton': 2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/skip-nav': 2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/slider': 2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/spinner': 2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/stat': 2.1.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/stepper': 2.3.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/styled-system': 2.9.2 + '@chakra-ui/switch': 2.1.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(framer-motion@11.3.29(@emotion/is-prop-valid@1.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1) + '@chakra-ui/table': 2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/tabs': 3.0.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/tag': 3.1.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/textarea': 2.1.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/theme': 3.3.1(@chakra-ui/styled-system@2.9.2) + '@chakra-ui/theme-utils': 2.0.21 + '@chakra-ui/toast': 7.0.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(framer-motion@11.3.29(@emotion/is-prop-valid@1.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@chakra-ui/tooltip': 2.3.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(framer-motion@11.3.29(@emotion/is-prop-valid@1.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@chakra-ui/transition': 2.1.0(framer-motion@11.3.29(@emotion/is-prop-valid@1.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/utils': 2.0.15 + '@chakra-ui/visually-hidden': 2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@emotion/react': 11.13.3(@types/react@18.3.4)(react@18.3.1) + '@emotion/styled': 11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1) + framer-motion: 11.3.29(@emotion/is-prop-valid@1.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + transitivePeerDependencies: + - '@types/react' + + '@chakra-ui/select@2.1.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(react@18.3.1)': + dependencies: + '@chakra-ui/form-control': 2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/shared-utils': 2.0.5 + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1) + react: 18.3.1 + + '@chakra-ui/shared-utils@2.0.5': {} + + '@chakra-ui/skeleton@2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(react@18.3.1)': + dependencies: + '@chakra-ui/media-query': 3.3.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/react-use-previous': 2.1.0(react@18.3.1) + '@chakra-ui/shared-utils': 2.0.5 + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1) + react: 18.3.1 + + '@chakra-ui/skip-nav@2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(react@18.3.1)': + dependencies: + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1) + react: 18.3.1 + + '@chakra-ui/slider@2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(react@18.3.1)': + dependencies: + '@chakra-ui/number-utils': 2.0.7 + '@chakra-ui/react-context': 2.1.0(react@18.3.1) + '@chakra-ui/react-types': 2.0.7(react@18.3.1) + '@chakra-ui/react-use-callback-ref': 2.1.0(react@18.3.1) + '@chakra-ui/react-use-controllable-state': 2.1.0(react@18.3.1) + '@chakra-ui/react-use-latest-ref': 2.1.0(react@18.3.1) + '@chakra-ui/react-use-merge-refs': 2.1.0(react@18.3.1) + '@chakra-ui/react-use-pan-event': 2.1.0(react@18.3.1) + '@chakra-ui/react-use-size': 2.1.0(react@18.3.1) + '@chakra-ui/react-use-update-effect': 2.1.0(react@18.3.1) + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1) + react: 18.3.1 + + '@chakra-ui/spinner@2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(react@18.3.1)': + dependencies: + '@chakra-ui/shared-utils': 2.0.5 + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1) + react: 18.3.1 + + '@chakra-ui/stat@2.1.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(react@18.3.1)': + dependencies: + '@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/react-context': 2.1.0(react@18.3.1) + '@chakra-ui/shared-utils': 2.0.5 + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1) + react: 18.3.1 + + '@chakra-ui/stepper@2.3.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(react@18.3.1)': + dependencies: + '@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/react-context': 2.1.0(react@18.3.1) + '@chakra-ui/shared-utils': 2.0.5 + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1) + react: 18.3.1 + + '@chakra-ui/styled-system@2.9.2': + dependencies: + '@chakra-ui/shared-utils': 2.0.5 + csstype: 3.1.3 + lodash.mergewith: 4.6.2 + + '@chakra-ui/switch@2.1.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(framer-motion@11.3.29(@emotion/is-prop-valid@1.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)': + dependencies: + '@chakra-ui/checkbox': 2.3.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/shared-utils': 2.0.5 + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1) + framer-motion: 11.3.29(@emotion/is-prop-valid@1.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + + '@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1)': + dependencies: + '@chakra-ui/color-mode': 2.2.0(react@18.3.1) + '@chakra-ui/object-utils': 2.1.0 + '@chakra-ui/react-utils': 2.0.12(react@18.3.1) + '@chakra-ui/styled-system': 2.9.2 + '@chakra-ui/theme-utils': 2.0.21 + '@chakra-ui/utils': 2.0.15 + '@emotion/react': 11.13.3(@types/react@18.3.4)(react@18.3.1) + '@emotion/styled': 11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1) + react: 18.3.1 + react-fast-compare: 3.2.2 + + '@chakra-ui/table@2.1.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(react@18.3.1)': + dependencies: + '@chakra-ui/react-context': 2.1.0(react@18.3.1) + '@chakra-ui/shared-utils': 2.0.5 + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1) + react: 18.3.1 + + '@chakra-ui/tabs@3.0.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(react@18.3.1)': + dependencies: + '@chakra-ui/clickable': 2.1.0(react@18.3.1) + '@chakra-ui/descendant': 3.1.0(react@18.3.1) + '@chakra-ui/lazy-utils': 2.0.5 + '@chakra-ui/react-children-utils': 2.0.6(react@18.3.1) + '@chakra-ui/react-context': 2.1.0(react@18.3.1) + '@chakra-ui/react-use-controllable-state': 2.1.0(react@18.3.1) + '@chakra-ui/react-use-merge-refs': 2.1.0(react@18.3.1) + '@chakra-ui/react-use-safe-layout-effect': 2.1.0(react@18.3.1) + '@chakra-ui/shared-utils': 2.0.5 + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1) + react: 18.3.1 + + '@chakra-ui/tag@3.1.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(react@18.3.1)': + dependencies: + '@chakra-ui/icon': 3.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/react-context': 2.1.0(react@18.3.1) + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1) + react: 18.3.1 + + '@chakra-ui/textarea@2.1.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(react@18.3.1)': + dependencies: + '@chakra-ui/form-control': 2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/shared-utils': 2.0.5 + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1) + react: 18.3.1 + + '@chakra-ui/theme-tools@2.1.2(@chakra-ui/styled-system@2.9.2)': + dependencies: + '@chakra-ui/anatomy': 2.2.2 + '@chakra-ui/shared-utils': 2.0.5 + '@chakra-ui/styled-system': 2.9.2 + color2k: 2.0.3 + + '@chakra-ui/theme-utils@2.0.21': + dependencies: + '@chakra-ui/shared-utils': 2.0.5 + '@chakra-ui/styled-system': 2.9.2 + '@chakra-ui/theme': 3.3.1(@chakra-ui/styled-system@2.9.2) + lodash.mergewith: 4.6.2 + + '@chakra-ui/theme@3.3.1(@chakra-ui/styled-system@2.9.2)': + dependencies: + '@chakra-ui/anatomy': 2.2.2 + '@chakra-ui/shared-utils': 2.0.5 + '@chakra-ui/styled-system': 2.9.2 + '@chakra-ui/theme-tools': 2.1.2(@chakra-ui/styled-system@2.9.2) + + '@chakra-ui/toast@7.0.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(framer-motion@11.3.29(@emotion/is-prop-valid@1.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@chakra-ui/alert': 2.2.2(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/close-button': 2.1.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(react@18.3.1) + '@chakra-ui/portal': 2.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@chakra-ui/react-context': 2.1.0(react@18.3.1) + '@chakra-ui/react-use-timeout': 2.1.0(react@18.3.1) + '@chakra-ui/react-use-update-effect': 2.1.0(react@18.3.1) + '@chakra-ui/shared-utils': 2.0.5 + '@chakra-ui/styled-system': 2.9.2 + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1) + '@chakra-ui/theme': 3.3.1(@chakra-ui/styled-system@2.9.2) + framer-motion: 11.3.29(@emotion/is-prop-valid@1.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@chakra-ui/tooltip@2.3.1(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(framer-motion@11.3.29(@emotion/is-prop-valid@1.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@chakra-ui/dom-utils': 2.1.0 + '@chakra-ui/popper': 3.1.0(react@18.3.1) + '@chakra-ui/portal': 2.1.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@chakra-ui/react-types': 2.0.7(react@18.3.1) + '@chakra-ui/react-use-disclosure': 2.1.0(react@18.3.1) + '@chakra-ui/react-use-event-listener': 2.1.0(react@18.3.1) + '@chakra-ui/react-use-merge-refs': 2.1.0(react@18.3.1) + '@chakra-ui/shared-utils': 2.0.5 + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1) + framer-motion: 11.3.29(@emotion/is-prop-valid@1.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@chakra-ui/transition@2.1.0(framer-motion@11.3.29(@emotion/is-prop-valid@1.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)': + dependencies: + '@chakra-ui/shared-utils': 2.0.5 + framer-motion: 11.3.29(@emotion/is-prop-valid@1.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react: 18.3.1 + + '@chakra-ui/utils@2.0.15': + dependencies: + '@types/lodash.mergewith': 4.6.7 + css-box-model: 1.2.1 + framesync: 6.1.2 + lodash.mergewith: 4.6.2 + + '@chakra-ui/visually-hidden@2.2.0(@chakra-ui/system@2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1))(react@18.3.1)': + dependencies: + '@chakra-ui/system': 2.6.2(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1))(react@18.3.1) + react: 18.3.1 + + '@emotion/babel-plugin@11.12.0': + dependencies: + '@babel/helper-module-imports': 7.24.7 + '@babel/runtime': 7.25.4 + '@emotion/hash': 0.9.2 + '@emotion/memoize': 0.9.0 + '@emotion/serialize': 1.3.1 + babel-plugin-macros: 3.1.0 + convert-source-map: 1.9.0 + escape-string-regexp: 4.0.0 + find-root: 1.1.0 + source-map: 0.5.7 + stylis: 4.2.0 + transitivePeerDependencies: + - supports-color + + '@emotion/cache@11.13.1': + dependencies: + '@emotion/memoize': 0.9.0 + '@emotion/sheet': 1.4.0 + '@emotion/utils': 1.4.0 + '@emotion/weak-memoize': 0.4.0 + stylis: 4.2.0 + + '@emotion/hash@0.9.2': {} + + '@emotion/is-prop-valid@1.3.0': + dependencies: + '@emotion/memoize': 0.9.0 + + '@emotion/memoize@0.9.0': {} + + '@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1)': + dependencies: + '@babel/runtime': 7.25.4 + '@emotion/babel-plugin': 11.12.0 + '@emotion/cache': 11.13.1 + '@emotion/serialize': 1.3.1 + '@emotion/use-insertion-effect-with-fallbacks': 1.1.0(react@18.3.1) + '@emotion/utils': 1.4.0 + '@emotion/weak-memoize': 0.4.0 + hoist-non-react-statics: 3.3.2 + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.4 + transitivePeerDependencies: + - supports-color + + '@emotion/serialize@1.3.1': + dependencies: + '@emotion/hash': 0.9.2 + '@emotion/memoize': 0.9.0 + '@emotion/unitless': 0.10.0 + '@emotion/utils': 1.4.0 + csstype: 3.1.3 + + '@emotion/sheet@1.4.0': {} + + '@emotion/styled@11.13.0(@emotion/react@11.13.3(@types/react@18.3.4)(react@18.3.1))(@types/react@18.3.4)(react@18.3.1)': + dependencies: + '@babel/runtime': 7.25.4 + '@emotion/babel-plugin': 11.12.0 + '@emotion/is-prop-valid': 1.3.0 + '@emotion/react': 11.13.3(@types/react@18.3.4)(react@18.3.1) + '@emotion/serialize': 1.3.1 + '@emotion/use-insertion-effect-with-fallbacks': 1.1.0(react@18.3.1) + '@emotion/utils': 1.4.0 + react: 18.3.1 + optionalDependencies: + '@types/react': 18.3.4 + transitivePeerDependencies: + - supports-color + + '@emotion/unitless@0.10.0': {} + + '@emotion/use-insertion-effect-with-fallbacks@1.1.0(react@18.3.1)': + dependencies: + react: 18.3.1 + + '@emotion/utils@1.4.0': {} + + '@emotion/weak-memoize@0.4.0': {} + + '@esbuild/aix-ppc64@0.21.5': + optional: true + + '@esbuild/android-arm64@0.21.5': + optional: true + + '@esbuild/android-arm@0.21.5': + optional: true + + '@esbuild/android-x64@0.21.5': + optional: true + + '@esbuild/darwin-arm64@0.21.5': + optional: true + + '@esbuild/darwin-x64@0.21.5': + optional: true + + '@esbuild/freebsd-arm64@0.21.5': + optional: true + + '@esbuild/freebsd-x64@0.21.5': + optional: true + + '@esbuild/linux-arm64@0.21.5': + optional: true + + '@esbuild/linux-arm@0.21.5': + optional: true + + '@esbuild/linux-ia32@0.21.5': + optional: true + + '@esbuild/linux-loong64@0.21.5': + optional: true + + '@esbuild/linux-mips64el@0.21.5': + optional: true + + '@esbuild/linux-ppc64@0.21.5': + optional: true + + '@esbuild/linux-riscv64@0.21.5': + optional: true + + '@esbuild/linux-s390x@0.21.5': + optional: true + + '@esbuild/linux-x64@0.21.5': + optional: true + + '@esbuild/netbsd-x64@0.21.5': + optional: true + + '@esbuild/openbsd-x64@0.21.5': + optional: true + + '@esbuild/sunos-x64@0.21.5': + optional: true + + '@esbuild/win32-arm64@0.21.5': + optional: true + + '@esbuild/win32-ia32@0.21.5': + optional: true + + '@esbuild/win32-x64@0.21.5': + optional: true + + '@eslint-community/eslint-utils@4.4.0(eslint@9.9.0(jiti@1.21.6))': + dependencies: + eslint: 9.9.0(jiti@1.21.6) + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.11.0': {} + + '@eslint/config-array@0.17.1': + dependencies: + '@eslint/object-schema': 2.1.4 + debug: 4.3.6 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + '@eslint/eslintrc@3.1.0': + dependencies: + ajv: 6.12.6 + debug: 4.3.6 + espree: 10.1.0 + globals: 14.0.0 + ignore: 5.3.2 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + '@eslint/js@9.9.0': {} + + '@eslint/object-schema@2.1.4': {} + + '@hey-api/openapi-ts@0.52.0(typescript@5.5.4)': + dependencies: + '@apidevtools/json-schema-ref-parser': 11.6.4 + c12: 1.11.1 + camelcase: 8.0.0 + commander: 12.1.0 + handlebars: 4.7.8 + typescript: 5.5.4 + transitivePeerDependencies: + - magicast + + '@humanwhocodes/module-importer@1.0.1': {} + + '@humanwhocodes/retry@0.3.0': {} + + '@isaacs/cliui@8.0.2': + dependencies: + string-width: 5.1.2 + string-width-cjs: string-width@4.2.3 + strip-ansi: 7.1.0 + strip-ansi-cjs: strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: wrap-ansi@7.0.0 + + '@jridgewell/gen-mapping@0.3.5': + dependencies: + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/trace-mapping': 0.3.25 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/set-array@1.2.1': {} + + '@jridgewell/sourcemap-codec@1.5.0': {} + + '@jridgewell/trace-mapping@0.3.25': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 + + '@jsdevtools/ono@7.1.3': {} + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.17.1 + + '@pkgjs/parseargs@0.11.0': + optional: true + + '@pkgr/core@0.1.1': {} + + '@popperjs/core@2.11.8': {} + + '@rollup/rollup-android-arm-eabi@4.21.0': + optional: true + + '@rollup/rollup-android-arm64@4.21.0': + optional: true + + '@rollup/rollup-darwin-arm64@4.21.0': + optional: true + + '@rollup/rollup-darwin-x64@4.21.0': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.21.0': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.21.0': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.21.0': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.21.0': + optional: true + + '@rollup/rollup-linux-powerpc64le-gnu@4.21.0': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.21.0': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.21.0': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.21.0': + optional: true + + '@rollup/rollup-linux-x64-musl@4.21.0': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.21.0': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.21.0': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.21.0': + optional: true + + '@swc/core-darwin-arm64@1.7.14': + optional: true + + '@swc/core-darwin-x64@1.7.14': + optional: true + + '@swc/core-linux-arm-gnueabihf@1.7.14': + optional: true + + '@swc/core-linux-arm64-gnu@1.7.14': + optional: true + + '@swc/core-linux-arm64-musl@1.7.14': + optional: true + + '@swc/core-linux-x64-gnu@1.7.14': + optional: true + + '@swc/core-linux-x64-musl@1.7.14': + optional: true + + '@swc/core-win32-arm64-msvc@1.7.14': + optional: true + + '@swc/core-win32-ia32-msvc@1.7.14': + optional: true + + '@swc/core-win32-x64-msvc@1.7.14': + optional: true + + '@swc/core@1.7.14': + dependencies: + '@swc/counter': 0.1.3 + '@swc/types': 0.1.12 + optionalDependencies: + '@swc/core-darwin-arm64': 1.7.14 + '@swc/core-darwin-x64': 1.7.14 + '@swc/core-linux-arm-gnueabihf': 1.7.14 + '@swc/core-linux-arm64-gnu': 1.7.14 + '@swc/core-linux-arm64-musl': 1.7.14 + '@swc/core-linux-x64-gnu': 1.7.14 + '@swc/core-linux-x64-musl': 1.7.14 + '@swc/core-win32-arm64-msvc': 1.7.14 + '@swc/core-win32-ia32-msvc': 1.7.14 + '@swc/core-win32-x64-msvc': 1.7.14 + + '@swc/counter@0.1.3': {} + + '@swc/types@0.1.12': + dependencies: + '@swc/counter': 0.1.3 + + '@tanstack/eslint-plugin-query@5.52.0(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4)': + dependencies: + '@typescript-eslint/utils': 8.0.0-alpha.30(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4) + eslint: 9.9.0(jiti@1.21.6) + transitivePeerDependencies: + - supports-color + - typescript + + '@tanstack/query-core@5.52.0': {} + + '@tanstack/react-query@5.52.1(react@18.3.1)': + dependencies: + '@tanstack/query-core': 5.52.0 + react: 18.3.1 + + '@tanstack/react-table@8.20.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@tanstack/table-core': 8.20.1 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + '@tanstack/table-core@8.20.1': {} + + '@testing-library/dom@10.4.0': + dependencies: + '@babel/code-frame': 7.24.7 + '@babel/runtime': 7.25.4 + '@types/aria-query': 5.0.4 + aria-query: 5.3.0 + chalk: 4.1.2 + dom-accessibility-api: 0.5.16 + lz-string: 1.5.0 + pretty-format: 27.5.1 + + '@testing-library/jest-dom@6.4.8': + dependencies: + '@adobe/css-tools': 4.4.0 + '@babel/runtime': 7.25.4 + aria-query: 5.3.0 + chalk: 3.0.0 + css.escape: 1.5.1 + dom-accessibility-api: 0.6.3 + lodash: 4.17.21 + redent: 3.0.0 + + '@testing-library/react@16.0.0(@testing-library/dom@10.4.0)(@types/react-dom@18.3.0)(@types/react@18.3.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@babel/runtime': 7.25.4 + '@testing-library/dom': 10.4.0 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.4 + '@types/react-dom': 18.3.0 + + '@ts-morph/common@0.23.0': + dependencies: + fast-glob: 3.3.2 + minimatch: 9.0.5 + mkdirp: 3.0.1 + path-browserify: 1.0.1 + + '@types/aria-query@5.0.4': {} + + '@types/estree@1.0.5': {} + + '@types/json-schema@7.0.15': {} + + '@types/lodash.mergewith@4.6.7': + dependencies: + '@types/lodash': 4.17.7 + + '@types/lodash@4.17.7': {} + + '@types/parse-json@4.0.2': {} + + '@types/prop-types@15.7.12': {} + + '@types/react-dom@18.3.0': + dependencies: + '@types/react': 18.3.4 + + '@types/react@18.3.4': + dependencies: + '@types/prop-types': 15.7.12 + csstype: 3.1.3 + + '@typescript-eslint/eslint-plugin@8.2.0(@typescript-eslint/parser@8.2.0(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4))(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4)': + dependencies: + '@eslint-community/regexpp': 4.11.0 + '@typescript-eslint/parser': 8.2.0(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4) + '@typescript-eslint/scope-manager': 8.2.0 + '@typescript-eslint/type-utils': 8.2.0(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4) + '@typescript-eslint/utils': 8.2.0(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4) + '@typescript-eslint/visitor-keys': 8.2.0 + eslint: 9.9.0(jiti@1.21.6) + graphemer: 1.4.0 + ignore: 5.3.2 + natural-compare: 1.4.0 + ts-api-utils: 1.3.0(typescript@5.5.4) + optionalDependencies: + typescript: 5.5.4 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@8.2.0(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4)': + dependencies: + '@typescript-eslint/scope-manager': 8.2.0 + '@typescript-eslint/types': 8.2.0 + '@typescript-eslint/typescript-estree': 8.2.0(typescript@5.5.4) + '@typescript-eslint/visitor-keys': 8.2.0 + debug: 4.3.6 + eslint: 9.9.0(jiti@1.21.6) + optionalDependencies: + typescript: 5.5.4 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/scope-manager@8.0.0-alpha.30': + dependencies: + '@typescript-eslint/types': 8.0.0-alpha.30 + '@typescript-eslint/visitor-keys': 8.0.0-alpha.30 + + '@typescript-eslint/scope-manager@8.2.0': + dependencies: + '@typescript-eslint/types': 8.2.0 + '@typescript-eslint/visitor-keys': 8.2.0 + + '@typescript-eslint/type-utils@8.2.0(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4)': + dependencies: + '@typescript-eslint/typescript-estree': 8.2.0(typescript@5.5.4) + '@typescript-eslint/utils': 8.2.0(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4) + debug: 4.3.6 + ts-api-utils: 1.3.0(typescript@5.5.4) + optionalDependencies: + typescript: 5.5.4 + transitivePeerDependencies: + - eslint + - supports-color + + '@typescript-eslint/types@8.0.0-alpha.30': {} + + '@typescript-eslint/types@8.2.0': {} + + '@typescript-eslint/typescript-estree@8.0.0-alpha.30(typescript@5.5.4)': + dependencies: + '@typescript-eslint/types': 8.0.0-alpha.30 + '@typescript-eslint/visitor-keys': 8.0.0-alpha.30 + debug: 4.3.6 + globby: 11.1.0 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.6.3 + ts-api-utils: 1.3.0(typescript@5.5.4) + optionalDependencies: + typescript: 5.5.4 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/typescript-estree@8.2.0(typescript@5.5.4)': + dependencies: + '@typescript-eslint/types': 8.2.0 + '@typescript-eslint/visitor-keys': 8.2.0 + debug: 4.3.6 + globby: 11.1.0 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.6.3 + ts-api-utils: 1.3.0(typescript@5.5.4) + optionalDependencies: + typescript: 5.5.4 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@8.0.0-alpha.30(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4)': + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@9.9.0(jiti@1.21.6)) + '@typescript-eslint/scope-manager': 8.0.0-alpha.30 + '@typescript-eslint/types': 8.0.0-alpha.30 + '@typescript-eslint/typescript-estree': 8.0.0-alpha.30(typescript@5.5.4) + eslint: 9.9.0(jiti@1.21.6) + transitivePeerDependencies: + - supports-color + - typescript + + '@typescript-eslint/utils@8.2.0(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4)': + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@9.9.0(jiti@1.21.6)) + '@typescript-eslint/scope-manager': 8.2.0 + '@typescript-eslint/types': 8.2.0 + '@typescript-eslint/typescript-estree': 8.2.0(typescript@5.5.4) + eslint: 9.9.0(jiti@1.21.6) + transitivePeerDependencies: + - supports-color + - typescript + + '@typescript-eslint/visitor-keys@8.0.0-alpha.30': + dependencies: + '@typescript-eslint/types': 8.0.0-alpha.30 + eslint-visitor-keys: 3.4.3 + + '@typescript-eslint/visitor-keys@8.2.0': + dependencies: + '@typescript-eslint/types': 8.2.0 + eslint-visitor-keys: 3.4.3 + + '@vitejs/plugin-react-swc@3.7.0(vite@5.4.2)': + dependencies: + '@swc/core': 1.7.14 + vite: 5.4.2 + transitivePeerDependencies: + - '@swc/helpers' + + '@vitest/expect@2.0.5': + dependencies: + '@vitest/spy': 2.0.5 + '@vitest/utils': 2.0.5 + chai: 5.1.1 + tinyrainbow: 1.2.0 + + '@vitest/pretty-format@2.0.5': + dependencies: + tinyrainbow: 1.2.0 + + '@vitest/runner@2.0.5': + dependencies: + '@vitest/utils': 2.0.5 + pathe: 1.1.2 + + '@vitest/snapshot@2.0.5': + dependencies: + '@vitest/pretty-format': 2.0.5 + magic-string: 0.30.11 + pathe: 1.1.2 + + '@vitest/spy@2.0.5': + dependencies: + tinyspy: 3.0.0 + + '@vitest/utils@2.0.5': + dependencies: + '@vitest/pretty-format': 2.0.5 + estree-walker: 3.0.3 + loupe: 3.1.1 + tinyrainbow: 1.2.0 + + '@zag-js/dom-query@0.16.0': {} + + '@zag-js/element-size@0.10.5': {} + + '@zag-js/focus-visible@0.16.0': + dependencies: + '@zag-js/dom-query': 0.16.0 + + acorn-jsx@5.3.2(acorn@8.12.1): + dependencies: + acorn: 8.12.1 + + acorn@8.12.1: {} + + ajv@6.12.6: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + + ansi-regex@5.0.1: {} + + ansi-regex@6.0.1: {} + + ansi-styles@3.2.1: + dependencies: + color-convert: 1.9.3 + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + ansi-styles@5.2.0: {} + + ansi-styles@6.2.1: {} + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + argparse@2.0.1: {} + + aria-hidden@1.2.4: + dependencies: + tslib: 2.6.3 + + aria-query@5.3.0: + dependencies: + dequal: 2.0.3 + + array-buffer-byte-length@1.0.1: + dependencies: + call-bind: 1.0.7 + is-array-buffer: 3.0.4 + + array-includes@3.1.8: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 + get-intrinsic: 1.2.4 + is-string: 1.0.7 + + array-union@2.1.0: {} + + array.prototype.findlast@1.2.5: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + es-shim-unscopables: 1.0.2 + + array.prototype.flat@1.3.2: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-shim-unscopables: 1.0.2 + + array.prototype.flatmap@1.3.2: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-shim-unscopables: 1.0.2 + + array.prototype.tosorted@1.1.4: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + es-shim-unscopables: 1.0.2 + + arraybuffer.prototype.slice@1.0.3: + dependencies: + array-buffer-byte-length: 1.0.1 + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + is-array-buffer: 3.0.4 + is-shared-array-buffer: 1.0.3 + + assertion-error@2.0.1: {} + + asynckit@0.4.0: {} + + available-typed-arrays@1.0.7: + dependencies: + possible-typed-array-names: 1.0.0 + + axios@1.7.4: + dependencies: + follow-redirects: 1.15.6 + form-data: 4.0.0 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + + babel-plugin-macros@3.1.0: + dependencies: + '@babel/runtime': 7.25.4 + cosmiconfig: 7.1.0 + resolve: 1.22.8 + + balanced-match@1.0.2: {} + + binary-extensions@2.3.0: {} + + brace-expansion@1.1.11: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + brace-expansion@2.0.1: + dependencies: + balanced-match: 1.0.2 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + c12@1.11.1: + dependencies: + chokidar: 3.6.0 + confbox: 0.1.7 + defu: 6.1.4 + dotenv: 16.4.5 + giget: 1.2.3 + jiti: 1.21.6 + mlly: 1.7.1 + ohash: 1.1.3 + pathe: 1.1.2 + perfect-debounce: 1.0.0 + pkg-types: 1.1.3 + rc9: 2.1.2 + + cac@6.7.14: {} + + call-bind@1.0.7: + dependencies: + 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.2 + + callsites@3.1.0: {} + + camelcase@8.0.0: {} + + chai@5.1.1: + dependencies: + assertion-error: 2.0.1 + check-error: 2.1.1 + deep-eql: 5.0.2 + loupe: 3.1.1 + pathval: 2.0.0 + + chalk@2.4.2: + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + + chalk@3.0.0: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + check-error@2.1.1: {} + + chokidar@3.6.0: + dependencies: + anymatch: 3.1.3 + braces: 3.0.3 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + + chownr@2.0.0: {} + + citty@0.1.6: + dependencies: + consola: 3.2.3 + + code-block-writer@13.0.2: {} + + color-convert@1.9.3: + dependencies: + color-name: 1.1.3 + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.3: {} + + color-name@1.1.4: {} + + color2k@2.0.3: {} + + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 + + commander@12.1.0: {} + + compute-scroll-into-view@3.0.3: {} + + concat-map@0.0.1: {} + + confbox@0.1.7: {} + + consola@3.2.3: {} + + convert-source-map@1.9.0: {} + + copy-to-clipboard@3.3.3: + dependencies: + toggle-selection: 1.0.6 + + cosmiconfig@7.1.0: + dependencies: + '@types/parse-json': 4.0.2 + import-fresh: 3.3.0 + parse-json: 5.2.0 + path-type: 4.0.0 + yaml: 1.10.2 + + cross-spawn@7.0.3: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + css-box-model@1.2.1: + dependencies: + tiny-invariant: 1.3.3 + + css.escape@1.5.1: {} + + csstype@3.1.3: {} + + data-view-buffer@1.0.1: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + + data-view-byte-length@1.0.1: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + + data-view-byte-offset@1.0.0: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + + debug@4.3.6: + dependencies: + ms: 2.1.2 + + deep-eql@5.0.2: {} + + deep-is@0.1.4: {} + + define-data-property@1.1.4: + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + gopd: 1.0.1 + + define-properties@1.2.1: + dependencies: + define-data-property: 1.1.4 + has-property-descriptors: 1.0.2 + object-keys: 1.1.1 + + defu@6.1.4: {} + + delayed-stream@1.0.0: {} + + dequal@2.0.3: {} + + destr@2.0.3: {} + + detect-node-es@1.1.0: {} + + dir-glob@3.0.1: + dependencies: + path-type: 4.0.0 + + doctrine@2.1.0: + dependencies: + esutils: 2.0.3 + + dom-accessibility-api@0.5.16: {} + + dom-accessibility-api@0.6.3: {} + + dotenv@16.4.5: {} + + eastasianwidth@0.2.0: {} + + emoji-regex@8.0.0: {} + + emoji-regex@9.2.2: {} + + entities@4.5.0: {} + + error-ex@1.3.2: + dependencies: + is-arrayish: 0.2.1 + + es-abstract@1.23.3: + dependencies: + array-buffer-byte-length: 1.0.1 + arraybuffer.prototype.slice: 1.0.3 + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + data-view-buffer: 1.0.1 + data-view-byte-length: 1.0.1 + data-view-byte-offset: 1.0.0 + es-define-property: 1.0.0 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + es-set-tostringtag: 2.0.3 + es-to-primitive: 1.2.1 + function.prototype.name: 1.1.6 + get-intrinsic: 1.2.4 + get-symbol-description: 1.0.2 + globalthis: 1.0.4 + gopd: 1.0.1 + has-property-descriptors: 1.0.2 + has-proto: 1.0.3 + has-symbols: 1.0.3 + hasown: 2.0.2 + internal-slot: 1.0.7 + is-array-buffer: 3.0.4 + is-callable: 1.2.7 + is-data-view: 1.0.1 + is-negative-zero: 2.0.3 + is-regex: 1.1.4 + is-shared-array-buffer: 1.0.3 + is-string: 1.0.7 + is-typed-array: 1.1.13 + is-weakref: 1.0.2 + object-inspect: 1.13.2 + object-keys: 1.1.1 + object.assign: 4.1.5 + regexp.prototype.flags: 1.5.2 + safe-array-concat: 1.1.2 + safe-regex-test: 1.0.3 + string.prototype.trim: 1.2.9 + string.prototype.trimend: 1.0.8 + string.prototype.trimstart: 1.0.8 + typed-array-buffer: 1.0.2 + typed-array-byte-length: 1.0.1 + typed-array-byte-offset: 1.0.2 + typed-array-length: 1.0.6 + unbox-primitive: 1.0.2 + which-typed-array: 1.1.15 + + es-define-property@1.0.0: + dependencies: + get-intrinsic: 1.2.4 + + es-errors@1.3.0: {} + + es-iterator-helpers@1.0.19: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + es-set-tostringtag: 2.0.3 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + globalthis: 1.0.4 + has-property-descriptors: 1.0.2 + has-proto: 1.0.3 + has-symbols: 1.0.3 + internal-slot: 1.0.7 + iterator.prototype: 1.1.2 + safe-array-concat: 1.1.2 + + es-object-atoms@1.0.0: + dependencies: + es-errors: 1.3.0 + + es-set-tostringtag@2.0.3: + dependencies: + get-intrinsic: 1.2.4 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + + es-shim-unscopables@1.0.2: + dependencies: + hasown: 2.0.2 + + es-to-primitive@1.2.1: + dependencies: + is-callable: 1.2.7 + is-date-object: 1.0.5 + is-symbol: 1.0.4 + + esbuild@0.21.5: + 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 + + escape-string-regexp@1.0.5: {} + + escape-string-regexp@4.0.0: {} + + eslint-config-prettier@9.1.0(eslint@9.9.0(jiti@1.21.6)): + dependencies: + eslint: 9.9.0(jiti@1.21.6) + + eslint-plugin-prettier@5.2.1(eslint-config-prettier@9.1.0(eslint@9.9.0(jiti@1.21.6)))(eslint@9.9.0(jiti@1.21.6))(prettier@3.3.3): + dependencies: + eslint: 9.9.0(jiti@1.21.6) + prettier: 3.3.3 + prettier-linter-helpers: 1.0.0 + synckit: 0.9.1 + optionalDependencies: + eslint-config-prettier: 9.1.0(eslint@9.9.0(jiti@1.21.6)) + + eslint-plugin-react-hooks@5.1.0-rc-fb9a90fa48-20240614(eslint@9.9.0(jiti@1.21.6)): + dependencies: + eslint: 9.9.0(jiti@1.21.6) + + eslint-plugin-react-refresh@0.4.11(eslint@9.9.0(jiti@1.21.6)): + dependencies: + eslint: 9.9.0(jiti@1.21.6) + + eslint-plugin-react@7.35.0(eslint@9.9.0(jiti@1.21.6)): + dependencies: + array-includes: 3.1.8 + array.prototype.findlast: 1.2.5 + array.prototype.flatmap: 1.3.2 + array.prototype.tosorted: 1.1.4 + doctrine: 2.1.0 + es-iterator-helpers: 1.0.19 + eslint: 9.9.0(jiti@1.21.6) + estraverse: 5.3.0 + hasown: 2.0.2 + jsx-ast-utils: 3.3.5 + minimatch: 3.1.2 + object.entries: 1.1.8 + object.fromentries: 2.0.8 + object.values: 1.2.0 + prop-types: 15.8.1 + resolve: 2.0.0-next.5 + semver: 6.3.1 + string.prototype.matchall: 4.0.11 + string.prototype.repeat: 1.0.0 + + eslint-scope@8.0.2: + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + + eslint-visitor-keys@3.4.3: {} + + eslint-visitor-keys@4.0.0: {} + + eslint@9.9.0(jiti@1.21.6): + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@9.9.0(jiti@1.21.6)) + '@eslint-community/regexpp': 4.11.0 + '@eslint/config-array': 0.17.1 + '@eslint/eslintrc': 3.1.0 + '@eslint/js': 9.9.0 + '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.3.0 + '@nodelib/fs.walk': 1.2.8 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.3 + debug: 4.3.6 + escape-string-regexp: 4.0.0 + eslint-scope: 8.0.2 + eslint-visitor-keys: 4.0.0 + espree: 10.1.0 + esquery: 1.6.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 8.0.0 + find-up: 5.0.0 + glob-parent: 6.0.2 + ignore: 5.3.2 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + is-path-inside: 3.0.3 + 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.4 + strip-ansi: 6.0.1 + text-table: 0.2.0 + optionalDependencies: + jiti: 1.21.6 + transitivePeerDependencies: + - supports-color + + espree@10.1.0: + dependencies: + acorn: 8.12.1 + acorn-jsx: 5.3.2(acorn@8.12.1) + eslint-visitor-keys: 4.0.0 + + esquery@1.6.0: + dependencies: + estraverse: 5.3.0 + + esrecurse@4.3.0: + dependencies: + estraverse: 5.3.0 + + estraverse@5.3.0: {} + + estree-walker@3.0.3: + dependencies: + '@types/estree': 1.0.5 + + esutils@2.0.3: {} + + execa@8.0.1: + dependencies: + 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.3.0 + onetime: 6.0.0 + signal-exit: 4.1.0 + strip-final-newline: 3.0.0 + + fast-deep-equal@3.1.3: {} + + fast-diff@1.3.0: {} + + fast-glob@3.3.2: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.7 + + fast-json-stable-stringify@2.1.0: {} + + fast-levenshtein@2.0.6: {} + + fastq@1.17.1: + dependencies: + reusify: 1.0.4 + + file-entry-cache@8.0.0: + dependencies: + flat-cache: 4.0.1 + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + find-root@1.1.0: {} + + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + flat-cache@4.0.1: + dependencies: + flatted: 3.3.1 + keyv: 4.5.4 + + flatted@3.3.1: {} + + focus-lock@1.3.5: + dependencies: + tslib: 2.6.3 + + follow-redirects@1.15.6: {} + + for-each@0.3.3: + dependencies: + is-callable: 1.2.7 + + foreground-child@3.3.0: + dependencies: + cross-spawn: 7.0.3 + signal-exit: 4.1.0 + + form-data@4.0.0: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + + framer-motion@11.3.29(@emotion/is-prop-valid@1.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + dependencies: + tslib: 2.6.3 + optionalDependencies: + '@emotion/is-prop-valid': 1.3.0 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + + framesync@6.1.2: + dependencies: + tslib: 2.4.0 + + fs-minipass@2.1.0: + dependencies: + minipass: 3.3.6 + + fsevents@2.3.3: + optional: true + + function-bind@1.1.2: {} + + function.prototype.name@1.1.6: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + functions-have-names: 1.2.3 + + functions-have-names@1.2.3: {} + + get-func-name@2.0.2: {} + + get-intrinsic@1.2.4: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + has-proto: 1.0.3 + has-symbols: 1.0.3 + hasown: 2.0.2 + + get-nonce@1.0.1: {} + + get-stream@8.0.1: {} + + get-symbol-description@1.0.2: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + + giget@1.2.3: + dependencies: + citty: 0.1.6 + consola: 3.2.3 + defu: 6.1.4 + node-fetch-native: 1.6.4 + nypm: 0.3.9 + ohash: 1.1.3 + pathe: 1.1.2 + tar: 6.2.1 + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + + glob@10.4.5: + dependencies: + foreground-child: 3.3.0 + jackspeak: 3.4.3 + minimatch: 9.0.5 + minipass: 7.1.2 + package-json-from-dist: 1.0.0 + path-scurry: 1.11.1 + + globals@11.12.0: {} + + globals@14.0.0: {} + + globals@15.9.0: {} + + globalthis@1.0.4: + dependencies: + define-properties: 1.2.1 + gopd: 1.0.1 + + globby@11.1.0: + dependencies: + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.3.2 + ignore: 5.3.2 + merge2: 1.4.1 + slash: 3.0.0 + + gopd@1.0.1: + dependencies: + get-intrinsic: 1.2.4 + + graphemer@1.4.0: {} + + handlebars@4.7.8: + dependencies: + minimist: 1.2.8 + neo-async: 2.6.2 + source-map: 0.6.1 + wordwrap: 1.0.0 + optionalDependencies: + uglify-js: 3.19.2 + + happy-dom@15.0.0: + dependencies: + entities: 4.5.0 + webidl-conversions: 7.0.0 + whatwg-mimetype: 3.0.0 + + has-bigints@1.0.2: {} + + has-flag@3.0.0: {} + + has-flag@4.0.0: {} + + has-property-descriptors@1.0.2: + dependencies: + es-define-property: 1.0.0 + + has-proto@1.0.3: {} + + has-symbols@1.0.3: {} + + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.0.3 + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + hoist-non-react-statics@3.3.2: + dependencies: + react-is: 16.13.1 + + human-signals@5.0.0: {} + + ignore@5.3.2: {} + + import-fresh@3.3.0: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + imurmurhash@0.1.4: {} + + indent-string@4.0.0: {} + + internal-slot@1.0.7: + dependencies: + es-errors: 1.3.0 + hasown: 2.0.2 + side-channel: 1.0.6 + + invariant@2.2.4: + dependencies: + loose-envify: 1.4.0 + + is-array-buffer@3.0.4: + dependencies: + call-bind: 1.0.7 + get-intrinsic: 1.2.4 + + is-arrayish@0.2.1: {} + + is-async-function@2.0.0: + dependencies: + has-tostringtag: 1.0.2 + + is-bigint@1.0.4: + dependencies: + has-bigints: 1.0.2 + + is-binary-path@2.1.0: + dependencies: + binary-extensions: 2.3.0 + + is-boolean-object@1.1.2: + dependencies: + call-bind: 1.0.7 + has-tostringtag: 1.0.2 + + is-callable@1.2.7: {} + + is-core-module@2.15.1: + dependencies: + hasown: 2.0.2 + + is-data-view@1.0.1: + dependencies: + is-typed-array: 1.1.13 + + is-date-object@1.0.5: + dependencies: + has-tostringtag: 1.0.2 + + is-extglob@2.1.1: {} + + is-finalizationregistry@1.0.2: + dependencies: + call-bind: 1.0.7 + + is-fullwidth-code-point@3.0.0: {} + + is-generator-function@1.0.10: + dependencies: + has-tostringtag: 1.0.2 + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-map@2.0.3: {} + + is-negative-zero@2.0.3: {} + + is-number-object@1.0.7: + dependencies: + has-tostringtag: 1.0.2 + + is-number@7.0.0: {} + + is-path-inside@3.0.3: {} + + is-regex@1.1.4: + dependencies: + call-bind: 1.0.7 + has-tostringtag: 1.0.2 + + is-set@2.0.3: {} + + is-shared-array-buffer@1.0.3: + dependencies: + call-bind: 1.0.7 + + is-stream@3.0.0: {} + + is-string@1.0.7: + dependencies: + has-tostringtag: 1.0.2 + + is-symbol@1.0.4: + dependencies: + has-symbols: 1.0.3 + + is-typed-array@1.1.13: + dependencies: + which-typed-array: 1.1.15 + + is-weakmap@2.0.2: {} + + is-weakref@1.0.2: + dependencies: + call-bind: 1.0.7 + + is-weakset@2.0.3: + dependencies: + call-bind: 1.0.7 + get-intrinsic: 1.2.4 + + isarray@2.0.5: {} + + isexe@2.0.0: {} + + iterator.prototype@1.1.2: + dependencies: + define-properties: 1.2.1 + get-intrinsic: 1.2.4 + has-symbols: 1.0.3 + reflect.getprototypeof: 1.0.6 + set-function-name: 2.0.2 + + jackspeak@3.4.3: + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + + jiti@1.21.6: {} + + js-tokens@4.0.0: {} + + js-yaml@4.1.0: + dependencies: + argparse: 2.0.1 + + jsesc@2.5.2: {} + + json-buffer@3.0.1: {} + + json-parse-even-better-errors@2.3.1: {} + + json-schema-traverse@0.4.1: {} + + json-stable-stringify-without-jsonify@1.0.1: {} + + jsx-ast-utils@3.3.5: + dependencies: + array-includes: 3.1.8 + array.prototype.flat: 1.3.2 + object.assign: 4.1.5 + object.values: 1.2.0 + + keyv@4.5.4: + dependencies: + json-buffer: 3.0.1 + + levn@0.4.1: + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + + lines-and-columns@1.2.4: {} + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + lodash.merge@4.6.2: {} + + lodash.mergewith@4.6.2: {} + + lodash@4.17.21: {} + + loose-envify@1.4.0: + dependencies: + js-tokens: 4.0.0 + + loupe@3.1.1: + dependencies: + get-func-name: 2.0.2 + + lru-cache@10.4.3: {} + + lz-string@1.5.0: {} + + magic-string@0.30.11: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.0 + + merge-stream@2.0.0: {} + + merge2@1.4.1: {} + + micromatch@4.0.7: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + + mime-db@1.52.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + mimic-fn@4.0.0: {} + + min-indent@1.0.1: {} + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.11 + + minimatch@9.0.5: + dependencies: + brace-expansion: 2.0.1 + + minimist@1.2.8: {} + + minipass@3.3.6: + dependencies: + yallist: 4.0.0 + + minipass@5.0.0: {} + + minipass@7.1.2: {} + + minizlib@2.1.2: + dependencies: + minipass: 3.3.6 + yallist: 4.0.0 + + mkdirp@1.0.4: {} + + mkdirp@3.0.1: {} + + mlly@1.7.1: + dependencies: + acorn: 8.12.1 + pathe: 1.1.2 + pkg-types: 1.1.3 + ufo: 1.5.4 + + ms@2.1.2: {} + + nanoid@3.3.7: {} + + natural-compare@1.4.0: {} + + neo-async@2.6.2: {} + + node-fetch-native@1.6.4: {} + + normalize-path@3.0.0: {} + + npm-run-path@5.3.0: + dependencies: + path-key: 4.0.0 + + nypm@0.3.9: + dependencies: + citty: 0.1.6 + consola: 3.2.3 + execa: 8.0.1 + pathe: 1.1.2 + pkg-types: 1.1.3 + ufo: 1.5.4 + + object-assign@4.1.1: {} + + object-inspect@1.13.2: {} + + object-keys@1.1.1: {} + + object.assign@4.1.5: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + has-symbols: 1.0.3 + object-keys: 1.1.1 + + object.entries@1.1.8: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-object-atoms: 1.0.0 + + object.fromentries@2.0.8: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 + + object.values@1.2.0: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-object-atoms: 1.0.0 + + ohash@1.1.3: {} + + onetime@6.0.0: + dependencies: + mimic-fn: 4.0.0 + + optionator@0.9.4: + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.5 + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + + package-json-from-dist@1.0.0: {} + + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 + + parse-json@5.2.0: + dependencies: + '@babel/code-frame': 7.24.7 + error-ex: 1.3.2 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + + path-browserify@1.0.1: {} + + path-exists@4.0.0: {} + + path-key@3.1.1: {} + + path-key@4.0.0: {} + + path-parse@1.0.7: {} + + path-scurry@1.11.1: + dependencies: + lru-cache: 10.4.3 + minipass: 7.1.2 + + path-type@4.0.0: {} + + pathe@1.1.2: {} + + pathval@2.0.0: {} + + perfect-debounce@1.0.0: {} + + picocolors@1.0.1: {} + + picomatch@2.3.1: {} + + pkg-types@1.1.3: + dependencies: + confbox: 0.1.7 + mlly: 1.7.1 + pathe: 1.1.2 + + possible-typed-array-names@1.0.0: {} + + postcss@8.4.41: + dependencies: + nanoid: 3.3.7 + picocolors: 1.0.1 + source-map-js: 1.2.0 + + prelude-ls@1.2.1: {} + + prettier-linter-helpers@1.0.0: + dependencies: + fast-diff: 1.3.0 + + prettier@3.3.3: {} + + pretty-format@27.5.1: + dependencies: + ansi-regex: 5.0.1 + ansi-styles: 5.2.0 + react-is: 17.0.2 + + prop-types@15.8.1: + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + react-is: 16.13.1 + + proxy-from-env@1.1.0: {} + + punycode@2.3.1: {} + + queue-microtask@1.2.3: {} + + rc9@2.1.2: + dependencies: + defu: 6.1.4 + destr: 2.0.3 + + react-clientside-effect@1.2.6(react@18.3.1): + dependencies: + '@babel/runtime': 7.25.4 + react: 18.3.1 + + react-dom@18.3.1(react@18.3.1): + dependencies: + loose-envify: 1.4.0 + react: 18.3.1 + scheduler: 0.23.2 + + react-fast-compare@3.2.2: {} + + react-focus-lock@2.12.1(@types/react@18.3.4)(react@18.3.1): + dependencies: + '@babel/runtime': 7.25.4 + focus-lock: 1.3.5 + prop-types: 15.8.1 + react: 18.3.1 + react-clientside-effect: 1.2.6(react@18.3.1) + use-callback-ref: 1.3.2(@types/react@18.3.4)(react@18.3.1) + use-sidecar: 1.1.2(@types/react@18.3.4)(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.4 + + react-icons@5.3.0(react@18.3.1): + dependencies: + react: 18.3.1 + + react-is@16.13.1: {} + + react-is@17.0.2: {} + + react-remove-scroll-bar@2.3.6(@types/react@18.3.4)(react@18.3.1): + dependencies: + react: 18.3.1 + react-style-singleton: 2.2.1(@types/react@18.3.4)(react@18.3.1) + tslib: 2.6.3 + optionalDependencies: + '@types/react': 18.3.4 + + react-remove-scroll@2.5.10(@types/react@18.3.4)(react@18.3.1): + dependencies: + react: 18.3.1 + react-remove-scroll-bar: 2.3.6(@types/react@18.3.4)(react@18.3.1) + react-style-singleton: 2.2.1(@types/react@18.3.4)(react@18.3.1) + tslib: 2.6.3 + use-callback-ref: 1.3.2(@types/react@18.3.4)(react@18.3.1) + use-sidecar: 1.1.2(@types/react@18.3.4)(react@18.3.1) + optionalDependencies: + '@types/react': 18.3.4 + + react-style-singleton@2.2.1(@types/react@18.3.4)(react@18.3.1): + dependencies: + get-nonce: 1.0.1 + invariant: 2.2.4 + react: 18.3.1 + tslib: 2.6.3 + optionalDependencies: + '@types/react': 18.3.4 + + react@18.3.1: + dependencies: + loose-envify: 1.4.0 + + readdirp@3.6.0: + dependencies: + picomatch: 2.3.1 + + redent@3.0.0: + dependencies: + indent-string: 4.0.0 + strip-indent: 3.0.0 + + reflect.getprototypeof@1.0.6: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + globalthis: 1.0.4 + which-builtin-type: 1.1.4 + + regenerator-runtime@0.14.1: {} + + regexp.prototype.flags@1.5.2: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-errors: 1.3.0 + set-function-name: 2.0.2 + + resolve-from@4.0.0: {} + + resolve@1.22.8: + dependencies: + is-core-module: 2.15.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + resolve@2.0.0-next.5: + dependencies: + is-core-module: 2.15.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + reusify@1.0.4: {} + + rollup@4.21.0: + dependencies: + '@types/estree': 1.0.5 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.21.0 + '@rollup/rollup-android-arm64': 4.21.0 + '@rollup/rollup-darwin-arm64': 4.21.0 + '@rollup/rollup-darwin-x64': 4.21.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.21.0 + '@rollup/rollup-linux-arm-musleabihf': 4.21.0 + '@rollup/rollup-linux-arm64-gnu': 4.21.0 + '@rollup/rollup-linux-arm64-musl': 4.21.0 + '@rollup/rollup-linux-powerpc64le-gnu': 4.21.0 + '@rollup/rollup-linux-riscv64-gnu': 4.21.0 + '@rollup/rollup-linux-s390x-gnu': 4.21.0 + '@rollup/rollup-linux-x64-gnu': 4.21.0 + '@rollup/rollup-linux-x64-musl': 4.21.0 + '@rollup/rollup-win32-arm64-msvc': 4.21.0 + '@rollup/rollup-win32-ia32-msvc': 4.21.0 + '@rollup/rollup-win32-x64-msvc': 4.21.0 + fsevents: 2.3.3 + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + safe-array-concat@1.1.2: + dependencies: + call-bind: 1.0.7 + get-intrinsic: 1.2.4 + has-symbols: 1.0.3 + isarray: 2.0.5 + + safe-regex-test@1.0.3: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-regex: 1.1.4 + + scheduler@0.23.2: + dependencies: + loose-envify: 1.4.0 + + semver@6.3.1: {} + + semver@7.6.3: {} + + set-function-length@1.2.2: + 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 + + set-function-name@2.0.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + functions-have-names: 1.2.3 + has-property-descriptors: 1.0.2 + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + side-channel@1.0.6: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + object-inspect: 1.13.2 + + siginfo@2.0.0: {} + + signal-exit@4.1.0: {} + + slash@3.0.0: {} + + source-map-js@1.2.0: {} + + source-map@0.5.7: {} + + source-map@0.6.1: {} + + stackback@0.0.2: {} + + std-env@3.7.0: {} + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + string-width@5.1.2: + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.1.0 + + string.prototype.matchall@4.0.11: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + get-intrinsic: 1.2.4 + gopd: 1.0.1 + has-symbols: 1.0.3 + internal-slot: 1.0.7 + regexp.prototype.flags: 1.5.2 + set-function-name: 2.0.2 + side-channel: 1.0.6 + + string.prototype.repeat@1.0.0: + dependencies: + define-properties: 1.2.1 + es-abstract: 1.23.3 + + string.prototype.trim@1.2.9: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 + + string.prototype.trimend@1.0.8: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-object-atoms: 1.0.0 + + string.prototype.trimstart@1.0.8: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-object-atoms: 1.0.0 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-ansi@7.1.0: + dependencies: + ansi-regex: 6.0.1 + + strip-final-newline@3.0.0: {} + + strip-indent@3.0.0: + dependencies: + min-indent: 1.0.1 + + strip-json-comments@3.1.1: {} + + stylis@4.2.0: {} + + supports-color@5.5.0: + dependencies: + has-flag: 3.0.0 + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + supports-preserve-symlinks-flag@1.0.0: {} + + synckit@0.9.1: + dependencies: + '@pkgr/core': 0.1.1 + tslib: 2.6.3 + + tar@6.2.1: + dependencies: + chownr: 2.0.0 + fs-minipass: 2.1.0 + minipass: 5.0.0 + minizlib: 2.1.2 + mkdirp: 1.0.4 + yallist: 4.0.0 + + text-table@0.2.0: {} + + tiny-invariant@1.3.3: {} + + tinybench@2.9.0: {} + + tinypool@1.0.1: {} + + tinyrainbow@1.2.0: {} + + tinyspy@3.0.0: {} + + to-fast-properties@2.0.0: {} + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + toggle-selection@1.0.6: {} + + ts-api-utils@1.3.0(typescript@5.5.4): + dependencies: + typescript: 5.5.4 + + ts-morph@22.0.0: + dependencies: + '@ts-morph/common': 0.23.0 + code-block-writer: 13.0.2 + + tslib@2.4.0: {} + + tslib@2.6.3: {} + + type-check@0.4.0: + dependencies: + prelude-ls: 1.2.1 + + typed-array-buffer@1.0.2: + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-typed-array: 1.1.13 + + typed-array-byte-length@1.0.1: + dependencies: + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 + + typed-array-byte-offset@1.0.2: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 + + typed-array-length@1.0.6: + dependencies: + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 + possible-typed-array-names: 1.0.0 + + typescript-eslint@8.2.0(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4): + dependencies: + '@typescript-eslint/eslint-plugin': 8.2.0(@typescript-eslint/parser@8.2.0(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4))(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4) + '@typescript-eslint/parser': 8.2.0(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4) + '@typescript-eslint/utils': 8.2.0(eslint@9.9.0(jiti@1.21.6))(typescript@5.5.4) + optionalDependencies: + typescript: 5.5.4 + transitivePeerDependencies: + - eslint + - supports-color + + typescript@5.5.4: {} + + ufo@1.5.4: {} + + uglify-js@3.19.2: + optional: true + + unbox-primitive@1.0.2: + dependencies: + call-bind: 1.0.7 + has-bigints: 1.0.2 + has-symbols: 1.0.3 + which-boxed-primitive: 1.0.2 + + uri-js@4.4.1: + dependencies: + punycode: 2.3.1 + + use-callback-ref@1.3.2(@types/react@18.3.4)(react@18.3.1): + dependencies: + react: 18.3.1 + tslib: 2.6.3 + optionalDependencies: + '@types/react': 18.3.4 + + use-sidecar@1.1.2(@types/react@18.3.4)(react@18.3.1): + dependencies: + detect-node-es: 1.1.0 + react: 18.3.1 + tslib: 2.6.3 + optionalDependencies: + '@types/react': 18.3.4 + + vite-node@2.0.5: + dependencies: + cac: 6.7.14 + debug: 4.3.6 + pathe: 1.1.2 + tinyrainbow: 1.2.0 + vite: 5.4.2 + transitivePeerDependencies: + - '@types/node' + - less + - lightningcss + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + + vite@5.4.2: + dependencies: + esbuild: 0.21.5 + postcss: 8.4.41 + rollup: 4.21.0 + optionalDependencies: + fsevents: 2.3.3 + + vitest@2.0.5(happy-dom@15.0.0): + dependencies: + '@ampproject/remapping': 2.3.0 + '@vitest/expect': 2.0.5 + '@vitest/pretty-format': 2.0.5 + '@vitest/runner': 2.0.5 + '@vitest/snapshot': 2.0.5 + '@vitest/spy': 2.0.5 + '@vitest/utils': 2.0.5 + chai: 5.1.1 + debug: 4.3.6 + execa: 8.0.1 + magic-string: 0.30.11 + pathe: 1.1.2 + std-env: 3.7.0 + tinybench: 2.9.0 + tinypool: 1.0.1 + tinyrainbow: 1.2.0 + vite: 5.4.2 + vite-node: 2.0.5 + why-is-node-running: 2.3.0 + optionalDependencies: + happy-dom: 15.0.0 + transitivePeerDependencies: + - less + - lightningcss + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + + webidl-conversions@7.0.0: {} + + whatwg-mimetype@3.0.0: {} + + which-boxed-primitive@1.0.2: + dependencies: + is-bigint: 1.0.4 + is-boolean-object: 1.1.2 + is-number-object: 1.0.7 + is-string: 1.0.7 + is-symbol: 1.0.4 + + which-builtin-type@1.1.4: + dependencies: + function.prototype.name: 1.1.6 + has-tostringtag: 1.0.2 + is-async-function: 2.0.0 + is-date-object: 1.0.5 + is-finalizationregistry: 1.0.2 + is-generator-function: 1.0.10 + is-regex: 1.1.4 + is-weakref: 1.0.2 + isarray: 2.0.5 + which-boxed-primitive: 1.0.2 + which-collection: 1.0.2 + which-typed-array: 1.1.15 + + which-collection@1.0.2: + dependencies: + is-map: 2.0.3 + is-set: 2.0.3 + is-weakmap: 2.0.2 + is-weakset: 2.0.3 + + which-typed-array@1.1.15: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-tostringtag: 1.0.2 + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + why-is-node-running@2.3.0: + dependencies: + siginfo: 2.0.0 + stackback: 0.0.2 + + word-wrap@1.2.5: {} + + wordwrap@1.0.0: {} + + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@8.1.0: + dependencies: + ansi-styles: 6.2.1 + string-width: 5.1.2 + strip-ansi: 7.1.0 + + yallist@4.0.0: {} + + yaml@1.10.2: {} + + yocto-queue@0.1.0: {} diff --git a/airflow/ui/public/pin_32.png b/airflow/ui/public/pin_32.png new file mode 100644 index 0000000000000..244ffc5bab501 Binary files /dev/null and b/airflow/ui/public/pin_32.png differ diff --git a/airflow/ui/src/app.test.tsx b/airflow/ui/src/app.test.tsx new file mode 100644 index 0000000000000..070f8678f972e --- /dev/null +++ b/airflow/ui/src/app.test.tsx @@ -0,0 +1,129 @@ +/*! + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { afterEach, beforeEach, describe, it, vi } from "vitest"; +import { App, AppSimple } from "./app"; +import { render } from "@testing-library/react"; + +import * as openapiQueriesModule from "openapi/queries"; +import { Wrapper } from "./utils/test"; +import { DAGCollection } from "openapi/requests/types.gen"; +import { QueryObserverSuccessResult } from "@tanstack/react-query"; + +const mockListDags = { + dags: [ + { + dag_display_name: "nested_groups", + dag_id: "nested_groups", + default_view: "grid", + description: null, + file_token: + "Ii9maWxlcy9kYWdzL25lc3RlZF90YXNrX2dyb3Vwcy5weSI.G3EkdxmDUDQsVb7AIZww1TSGlFE", + fileloc: "/files/dags/nested_task_groups.py", + has_import_errors: false, + has_task_concurrency_limits: false, + is_active: true, + is_paused: false, + last_expired: null, + last_parsed_time: "2024-08-22T13:50:10.372238+00:00", + last_pickled: null, + max_active_runs: 16, + max_active_tasks: 16, + max_consecutive_failed_dag_runs: 0, + next_dagrun: "2024-08-22T00:00:00+00:00", + next_dagrun_create_after: "2024-08-23T00:00:00+00:00", + next_dagrun_data_interval_end: "2024-08-23T00:00:00+00:00", + next_dagrun_data_interval_start: "2024-08-22T00:00:00+00:00", + owners: ["airflow"], + pickle_id: null, + schedule_interval: { + __type: "TimeDelta", + days: 1, + microseconds: 0, + seconds: 0, + }, + scheduler_lock: null, + tags: [], + timetable_description: "", + }, + { + dag_display_name: "simple_bash_operator", + dag_id: "simple_bash_operator", + default_view: "grid", + description: null, + file_token: + "Ii9maWxlcy9kYWdzL3NpbXBsZV9iYXNoX29wZXJhdG9yLnB5Ig.RteaxTC78ceHlgMkfU3lfznlcLI", + fileloc: "/files/dags/simple_bash_operator.py", + has_import_errors: false, + has_task_concurrency_limits: false, + is_active: true, + is_paused: false, + last_expired: null, + last_parsed_time: "2024-08-22T13:50:10.368561+00:00", + last_pickled: null, + max_active_runs: 16, + max_active_tasks: 16, + max_consecutive_failed_dag_runs: 0, + next_dagrun: "2024-08-22T00:00:00+00:00", + next_dagrun_create_after: "2024-08-23T00:00:00+00:00", + next_dagrun_data_interval_end: "2024-08-23T00:00:00+00:00", + next_dagrun_data_interval_start: "2024-08-22T00:00:00+00:00", + owners: ["airflow"], + pickle_id: null, + schedule_interval: { + __type: "CronExpression", + value: "0 0 * * *", + }, + scheduler_lock: null, + tags: [ + { + name: "example2", + }, + { + name: "example", + }, + ], + timetable_description: "At 00:00", + }, + ], + total_entries: 2, +}; +beforeEach(() => { + const returnValue = { + data: mockListDags, + isLoading: false, + } as QueryObserverSuccessResult; + vi.spyOn(openapiQueriesModule, "useDagServiceGetDags").mockImplementation( + () => returnValue + ); +}); + +afterEach(() => { + vi.restoreAllMocks(); +}); + +describe("App", () => { + it("App component should render", () => { + render(, { wrapper: Wrapper }); + }); + + it("AppSimple", () => { + render(); + }); +}); diff --git a/airflow/ui/src/app.tsx b/airflow/ui/src/app.tsx new file mode 100644 index 0000000000000..d5d582c7902e7 --- /dev/null +++ b/airflow/ui/src/app.tsx @@ -0,0 +1,40 @@ +/*! + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { Box, Spinner } from "@chakra-ui/react"; + +import { useDagServiceGetDags } from "openapi/queries"; +import { DagsList } from "src/dagsList"; +import { Nav } from "src/nav"; + +export const App = () => { + const { data, isLoading } = useDagServiceGetDags(); + + return ( + +