diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 52211ba..c10ea7d 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -129,8 +129,8 @@ jobs:
config:
- {
name: 'Macos Clang',
- cc: $(brew --prefix llvm@21)/bin/clang,
- cxx: $(brew --prefix llvm@21)/bin/clang++,
+ cc: $(brew --prefix llvm@22)/bin/clang,
+ cxx: $(brew --prefix llvm@22)/bin/clang++,
profiles: '-pr:h conan/clang21 -pr:h conan/libc++'
}
steps:
@@ -156,7 +156,7 @@ jobs:
- name: Install dependencies
run: |
- brew install llvm@21
+ brew install llvm@22
uv sync
uv run conan profile detect
@@ -196,7 +196,7 @@ jobs:
- name: Collect test coverage
if: matrix.build.type == 'Debug'
- run: GCOV="$(brew --prefix llvm@21)/bin/llvm-cov gcov" uv run gcovr
+ run: GCOV="$(brew --prefix llvm@22)/bin/llvm-cov gcov" uv run gcovr
build_windows:
name: ${{ matrix.config.name }} ${{ matrix.build.type }}
diff --git a/README.md b/README.md
index 06425c4..410623b 100644
--- a/README.md
+++ b/README.md
@@ -1,24 +1,198 @@
-# My Leetcode Solution in C++
+# cpp-project-template
-NOTE: Insipired by [original repository](https://github.com/tan-wei/leetcode-rust), thanks the original author and contributors of it!
+[](https://github.com/b1ackviking/cpp-project-template/actions/workflows/ci.yml)
+[](https://pre-commit.com)
-## How to use
+## About cpp-project-template
-We use `just` to make it easy to install, run and test:
- 1. `just setup`: Setup all enviroment with `uv`
- 2. `just conan-install`: Install all dependencies by `conan`
- 3. `just configure`: Do configure for `CMake`
- 4. `just build`: Build the whole project
- 5. `just run`: Run the main problem get program, fetch and solve them!
- 6. `just test`: Run tests for whole projects
- 7. `just cppcheck`: Run cppcheck
- 8. `just clean-all`: Remove all generated files
+This is a template of a cross-platform CMake-based C++ project.
+- Run [Cppcheck](http://cppcheck.net/) and [Clang-Tidy](https://clang.llvm.org/extra/clang-tidy/).
+- Ensure clean and robust code with a pre-configured set of warnings for Clang, GCC, and MSVC.
+- Create sanitizer-instrumented builds by changing a single flag.
+- Validate files structure and follow
+the [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/)
+specification with [pre-commit](https://pre-commit.com/) hooks.
+- Build and test your project with [GitHub Actions](https://github.com/features/actions).
-## Usage
+## Required software
-* Remove all the solution .cpp
-* Clean all files in *src/solution*
-* Start your leetcode journey in rust by typing `just run` and then input the question id
-* To solve a problem (we should start the problem first), input `solve {question_id}`
-* To passby cloudflare, please `cp .env.smaple .env`, and set `LEETCODE_COOKIE` with your cookie (could be find in Firefox or Chrome console)
+- Common
+ - [Git](https://git-scm.com/)
+ - [CMake](https://cmake.org/)
+ - [Ninja](https://ninja-build.org/)
+ - [uv](https://github.com/astral-sh/uv)
+ - [LLVM](https://releases.llvm.org/)
+- Windows
+ - [PowerShell](https://github.com/PowerShell/PowerShell)
+ - [Visual Studio Build Tools (Desktop development with C++ workload)](https://visualstudio.microsoft.com/downloads/)
+ - [OpenCppCoverage](https://community.chocolatey.org/packages/opencppcoverage)
+ - Install with [Chocolatey](https://chocolatey.org/)
+- Optional
+ - [cppcheck](https://github.com/danmar/cppcheck)
+ - [Node.js](https://nodejs.dev/download/)
+ - [Commitlint](https://commitlint.js.org/)
+ - [Semantic Release](https://github.com/semantic-release/semantic-release)
+
+Run the following commands in the root of the repository after cloning:
+
+```bash
+uv venv
+uv sync
+uv run pre-commit install
+uv run conan profile detect
+```
+
+## Building the project
+
+
+On Linux/Mac
+
+```bash
+source .venv/bin/activate
+
+# install libraries
+conan install -pr:a default \
+ -pr:h conan/ \
+ -c:a tools.cmake.cmaketoolchain:generator= \
+ -c:h tools.build:compiler_executables='{"c": "", "cpp": ""}' \
+ -c:h tools.build:skip_test= \
+ -s:h build_type= -b missing .
+
+# activate build env
+source build//generators/conanbuild.sh
+
+# configure
+cmake --preset \
+ -D ENABLE_CPPCHECK= \
+ -D ENABLE_CLANG_TIDY= \
+ -D ENABLE_IPO= \
+ -D ENABLE_CACHE= \
+ -D CACHE_OPTION= \
+ -D ENABLE_COVERAGE= \
+ -D ENABLE_HARDENINGS= \
+ -D ENABLE_FORTIFY_SOURCE= \
+ -D ENABLE_ASAN= \
+ -D ENABLE_LSAN= \
+ -D ENABLE_UBSAN= \
+ -D ENABLE_TSAN=
+
+# build
+cmake --build --preset
+
+# to make sure your library headers are self-contained
+cmake --build --preset --target all_verify_interface_header_sets
+
+# run tests
+ctest --preset
+
+# collect test coverage if ENABLE_COVERAGE == TRUE
+GCOV=<"gcov" for GCC, "llvm-cov gcov" for Clang> gcovr
+```
+
+
+
+On Windows
+
+```powershell
+.venv\Scripts\activate.ps1
+
+# install libraries
+conan install -pr:a default \
+ -pr:h conan/ \
+ -c:a tools.cmake.cmaketoolchain:generator= \
+ -c:h tools.env.virtualenv:powershell=pwsh \
+ -c:h tools.build:compiler_executables='{"c": "", "cpp": ""}' \
+ -c:h tools.build:skip_test= \
+ -s:h build_type= -b missing .
+
+# activate build env
+build//generators/conanbuild.ps1
+
+# configure
+cmake --preset \
+ -D ENABLE_CPPCHECK= \
+ -D ENABLE_CLANG_TIDY= \
+ -D ENABLE_IPO= \
+ -D ENABLE_CACHE= \
+ -D CACHE_OPTION= \
+ -D ENABLE_COVERAGE= \
+ -D ENABLE_HARDENINGS= \
+ -D ENABLE_FORTIFY_SOURCE= \
+ -D ENABLE_ASAN=
+
+# build
+cmake --build --preset
+
+# to make sure your library headers are self-contained
+cmake --build --preset --target all_verify_interface_header_sets
+
+# run tests and collect test coverage (Windows)
+OpenCppCoverage.exe --export_type cobertura:coverage.xml --cover_children -- ctest --preset
+```
+
+
+## Customization checklist
+
+- [ ] Change the LICENSE file
+- [ ] Write a `README.md`
+- [ ] Fill in the community health files
+ - [ ] Edit `.github/CONTRIBUTING.md` (don't forget to update links)
+ - [ ] Edit `.github/CODE_OF_CONDUCT.md`
+ - [ ] Edit `.github/SECURITY.md`
+- [ ] Clean the `.git-blame-ignore-revs` file
+- [ ] Configure the `pyproject.toml` file
+- [ ] Configure CODEOWNERS (`.github/CODEOWNERS`)
+- [ ] Configure Dependabot (`.github/dependabot.yml`)
+
+### Select an appropriate LICENSE
+
+The template uses the Unlicense license.
+A license with no conditions whatsoever which dedicates works to the public domain.
+Unlicensed works, modifications and larger works may be distributed
+under different terms and without source code.
+You likely want to use another license for your project.
+If you are not yet sure which one to use,
+[this](https://choosealicense.com/) resource can help you.
+
+### Create a README
+
+Describe your project to the audience.
+People interested in your project don't need to read this text :)
+
+And don't forget to update badge URLs if you decide to keep them.
+
+### Fill in the community health files
+
+Apart from README, there are a number of files in the .github directory
+that help people to interact with your project:
+submit issues and pull requests, security vulnerabilities.
+Please update the contents of these files with the links to your repository and contact methods.
+
+### Clean the `.git-blame-ignore-revs` file
+
+The `.git-blame-ignore-revs` file contains commit SHAs that you may want to skip
+while viewing the git blame on GitHub as if using `git blame --ignore-revs-file=.git-blame-ignore-revs`.
+
+### Configure the `pyproject.toml` file
+
+The `pyproject.toml` file is a main configuration file for `uv`.
+This template is not a python project, however, using `uv` makes it
+very convenient to bring tool dependencies,
+such as recent versions of `conan`, `cmake`, `pre-commit`, etc.
+Also, keeping them contained in a virtual environment does not pollute
+your system and provides a simple way to setup them on a CI pipeline.
+
+Besides specifying tool dependencies, you may want to also update
+the `name`, `version`, `description`, `authors`, and `license` fields.
+
+### Configure CODEOWNERS
+
+Code owners are automatically requested for review
+when someone opens a pull request that modifies code that they own.
+Code owners are not automatically requested to review draft pull requests.
+
+### Configure Dependabot
+
+Dependabot is a GitHub bot that helps you keep dependencies up to date.
+Configure dependency scanning in the `.github/dependabot.yml` file.
diff --git a/cmake/defaults.cmake b/cmake/defaults.cmake
index b405b7a..1055916 100644
--- a/cmake/defaults.cmake
+++ b/cmake/defaults.cmake
@@ -16,18 +16,20 @@ endif()
option(ENABLE_HARDENINGS "Enable hardenings" OFF)
# Useful CMake defaults
+set(CMAKE_ERROR_DEPRECATED ON)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
set(CMAKE_FIND_PACKAGE_PREFER_CONFIG ON)
set(CMAKE_COMPILE_WARNING_AS_ERROR ON)
set(CMAKE_C_EXTENSIONS OFF)
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_CXX_SCAN_FOR_MODULES ON)
+set(CMAKE_VERIFY_INTERFACE_HEADER_SETS ON)
+set(CMAKE_VERIFY_PRIVATE_HEADER_SETS ON)
set(CMAKE_LINK_WHAT_YOU_USE TRUE)
set(CMAKE_VS_JUST_MY_CODE_DEBUGGING ON)
set(CMAKE_COLOR_DIAGNOSTICS ON)
set(CMAKE_GTEST_DISCOVER_TESTS_DISCOVERY_MODE PRE_TEST)
-set(CMAKE_CTEST_ARGUMENTS --progress --output-on-failure)
-list(APPEND CMAKE_CTEST_ARGUMENTS --parallel)
+set(CMAKE_CTEST_ARGUMENTS --progress --output-on-failure --parallel)
# Set a default build type if none was specified
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
@@ -66,8 +68,11 @@ if(ENABLE_CPPCHECK)
-v
--enable=all
--check-level=exhaustive
+ --disable=unusedFunction
--inline-suppr
--error-exitcode=42
+ --checkers-report=${CMAKE_BINARY_DIR}/cppcheck.report
+ --suppress=checkersReport # see cppcheck.report for details
--suppressions-list=${CMAKE_SOURCE_DIR}/cppcheck.suppressions)
set(CMAKE_C_CPPCHECK ${CMAKE_CXX_CPPCHECK})
else()
@@ -122,6 +127,7 @@ endif()
# Apply the default set of warnings to the target
function(set_target_warnings target_name)
set(msvc_warnings
+ # gersemi: off
/W4 # Baseline reasonable warnings
/w14242 # 'identifier': conversion from 'type1' to 'type1', possible loss
# of data
@@ -153,8 +159,10 @@ function(set_target_warnings target_name)
/w14928 # illegal copy-initialization; more than one user-defined
# conversion has been implicitly applied
/permissive- # standards conformance mode for MSVC compiler.
+ # gersemi: on
)
set(clang_warnings
+ # gersemi: off
-Wall
-Wextra # reasonable and standard
-Wpedantic # warn if non-standard C++ is used
@@ -174,9 +182,11 @@ function(set_target_warnings target_name)
-Wdouble-promotion # warn if float is implicit promoted to double
-Wformat=2 # warn on security issues around functions that format output
# (ie printf)
+ # gersemi: on
)
set(gcc_warnings
${clang_warnings}
+ # gersemi: off
-Wmisleading-indentation # warn if indentation implies blocks where blocks
# do not exist
-Wduplicated-cond # warn if if / else chain has duplicated conditions
@@ -184,6 +194,7 @@ function(set_target_warnings target_name)
-Wlogical-op # warn about logical operations being used where bitwise were
# probably wanted
-Wuseless-cast # warn if you perform a cast to the same type
+ # gersemi: on
)
if(MSVC)
set(warnings ${msvc_warnings})
diff --git a/conan/clang22 b/conan/clang22
new file mode 100644
index 0000000..075dc80
--- /dev/null
+++ b/conan/clang22
@@ -0,0 +1,5 @@
+include(cppstd)
+
+[settings]
+compiler=clang
+compiler.version=22
diff --git a/package-lock.json b/package-lock.json
index f6d8d02..6e9cd95 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -11,7 +11,7 @@
"@semantic-release/commit-analyzer": "*",
"@semantic-release/git": "*",
"@semantic-release/release-notes-generator": "*",
- "conventional-changelog-conventionalcommits": "latest",
+ "conventional-changelog-conventionalcommits": "*",
"semantic-release": "*"
}
},
@@ -91,17 +91,17 @@
}
},
"node_modules/@commitlint/cli": {
- "version": "20.4.2",
- "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-20.4.2.tgz",
- "integrity": "sha512-YjYSX2yj/WsVoxh9mNiymfFS2ADbg2EK4+1WAsMuckwKMCqJ5PDG0CJU/8GvmHWcv4VRB2V02KqSiecRksWqZQ==",
+ "version": "20.5.0",
+ "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-20.5.0.tgz",
+ "integrity": "sha512-yNkyN/tuKTJS3wdVfsZ2tXDM4G4Gi7z+jW54Cki8N8tZqwKBltbIvUUrSbT4hz1bhW/h0CdR+5sCSpXD+wMKaQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@commitlint/format": "^20.4.0",
- "@commitlint/lint": "^20.4.2",
- "@commitlint/load": "^20.4.0",
- "@commitlint/read": "^20.4.0",
- "@commitlint/types": "^20.4.0",
+ "@commitlint/format": "^20.5.0",
+ "@commitlint/lint": "^20.5.0",
+ "@commitlint/load": "^20.5.0",
+ "@commitlint/read": "^20.5.0",
+ "@commitlint/types": "^20.5.0",
"tinyexec": "^1.0.0",
"yargs": "^17.0.0"
},
@@ -113,27 +113,27 @@
}
},
"node_modules/@commitlint/config-conventional": {
- "version": "20.4.2",
- "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-20.4.2.tgz",
- "integrity": "sha512-rwkTF55q7Q+6dpSKUmJoScV0f3EpDlWKw2UPzklkLS4o5krMN1tPWAVOgHRtyUTMneIapLeQwaCjn44Td6OzBQ==",
+ "version": "20.5.0",
+ "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-20.5.0.tgz",
+ "integrity": "sha512-t3Ni88rFw1XMa4nZHgOKJ8fIAT9M2j5TnKyTqJzsxea7FUetlNdYFus9dz+MhIRZmc16P0PPyEfh6X2d/qw8SA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@commitlint/types": "^20.4.0",
- "conventional-changelog-conventionalcommits": "^9.1.0"
+ "@commitlint/types": "^20.5.0",
+ "conventional-changelog-conventionalcommits": "^9.2.0"
},
"engines": {
"node": ">=v18"
}
},
"node_modules/@commitlint/config-validator": {
- "version": "20.4.0",
- "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-20.4.0.tgz",
- "integrity": "sha512-zShmKTF+sqyNOfAE0vKcqnpvVpG0YX8F9G/ZIQHI2CoKyK+PSdladXMSns400aZ5/QZs+0fN75B//3Q5CHw++w==",
+ "version": "20.5.0",
+ "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-20.5.0.tgz",
+ "integrity": "sha512-T/Uh6iJUzyx7j35GmHWdIiGRQB+ouZDk0pwAaYq4SXgB54KZhFdJ0vYmxiW6AMYICTIWuyMxDBl1jK74oFp/Gw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@commitlint/types": "^20.4.0",
+ "@commitlint/types": "^20.5.0",
"ajv": "^8.11.0"
},
"engines": {
@@ -141,13 +141,13 @@
}
},
"node_modules/@commitlint/ensure": {
- "version": "20.4.1",
- "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-20.4.1.tgz",
- "integrity": "sha512-WLQqaFx1pBooiVvBrA1YfJNFqZF8wS/YGOtr5RzApDbV9tQ52qT5VkTsY65hFTnXhW8PcDfZLaknfJTmPejmlw==",
+ "version": "20.5.0",
+ "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-20.5.0.tgz",
+ "integrity": "sha512-IpHqAUesBeW1EDDdjzJeaOxU9tnogLAyXLRBn03SHlj1SGENn2JGZqSWGkFvBJkJzfXAuCNtsoYzax+ZPS+puw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@commitlint/types": "^20.4.0",
+ "@commitlint/types": "^20.5.0",
"lodash.camelcase": "^4.3.0",
"lodash.kebabcase": "^4.1.1",
"lodash.snakecase": "^4.1.1",
@@ -169,13 +169,13 @@
}
},
"node_modules/@commitlint/format": {
- "version": "20.4.0",
- "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-20.4.0.tgz",
- "integrity": "sha512-i3ki3WR0rgolFVX6r64poBHXM1t8qlFel1G1eCBvVgntE3fCJitmzSvH5JD/KVJN/snz6TfaX2CLdON7+s4WVQ==",
+ "version": "20.5.0",
+ "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-20.5.0.tgz",
+ "integrity": "sha512-TI9EwFU/qZWSK7a5qyXMpKPPv3qta7FO4tKW+Wt2al7sgMbLWTsAcDpX1cU8k16TRdsiiet9aOw0zpvRXNJu7Q==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@commitlint/types": "^20.4.0",
+ "@commitlint/types": "^20.5.0",
"picocolors": "^1.1.1"
},
"engines": {
@@ -183,13 +183,13 @@
}
},
"node_modules/@commitlint/is-ignored": {
- "version": "20.4.1",
- "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-20.4.1.tgz",
- "integrity": "sha512-In5EO4JR1lNsAv1oOBBO24V9ND1IqdAJDKZiEpdfjDl2HMasAcT7oA+5BKONv1pRoLG380DGPE2W2RIcUwdgLA==",
+ "version": "20.5.0",
+ "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-20.5.0.tgz",
+ "integrity": "sha512-JWLarAsurHJhPozbuAH6GbP4p/hdOCoqS9zJMfqwswne+/GPs5V0+rrsfOkP68Y8PSLphwtFXV0EzJ+GTXTTGg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@commitlint/types": "^20.4.0",
+ "@commitlint/types": "^20.5.0",
"semver": "^7.6.0"
},
"engines": {
@@ -197,33 +197,33 @@
}
},
"node_modules/@commitlint/lint": {
- "version": "20.4.2",
- "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-20.4.2.tgz",
- "integrity": "sha512-buquzNRtFng6xjXvBU1abY/WPEEjCgUipNQrNmIWe8QuJ6LWLtei/LDBAzEe5ASm45+Q9L2Xi3/GVvlj50GAug==",
+ "version": "20.5.0",
+ "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-20.5.0.tgz",
+ "integrity": "sha512-jiM3hNUdu04jFBf1VgPdjtIPvbuVfDTBAc6L98AWcoLjF5sYqkulBHBzlVWll4rMF1T5zeQFB6r//a+s+BBKlA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@commitlint/is-ignored": "^20.4.1",
- "@commitlint/parse": "^20.4.1",
- "@commitlint/rules": "^20.4.2",
- "@commitlint/types": "^20.4.0"
+ "@commitlint/is-ignored": "^20.5.0",
+ "@commitlint/parse": "^20.5.0",
+ "@commitlint/rules": "^20.5.0",
+ "@commitlint/types": "^20.5.0"
},
"engines": {
"node": ">=v18"
}
},
"node_modules/@commitlint/load": {
- "version": "20.4.0",
- "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-20.4.0.tgz",
- "integrity": "sha512-Dauup/GfjwffBXRJUdlX/YRKfSVXsXZLnINXKz0VZkXdKDcaEILAi9oflHGbfydonJnJAbXEbF3nXPm9rm3G6A==",
+ "version": "20.5.0",
+ "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-20.5.0.tgz",
+ "integrity": "sha512-sLhhYTL/KxeOTZjjabKDhwidGZan84XKK1+XFkwDYL/4883kIajcz/dZFAhBJmZPtL8+nBx6bnkzA95YxPeDPw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@commitlint/config-validator": "^20.4.0",
+ "@commitlint/config-validator": "^20.5.0",
"@commitlint/execute-rule": "^20.0.0",
- "@commitlint/resolve-extends": "^20.4.0",
- "@commitlint/types": "^20.4.0",
- "cosmiconfig": "^9.0.0",
+ "@commitlint/resolve-extends": "^20.5.0",
+ "@commitlint/types": "^20.5.0",
+ "cosmiconfig": "^9.0.1",
"cosmiconfig-typescript-loader": "^6.1.0",
"is-plain-obj": "^4.1.0",
"lodash.mergewith": "^4.6.2",
@@ -234,9 +234,9 @@
}
},
"node_modules/@commitlint/message": {
- "version": "20.4.0",
- "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-20.4.0.tgz",
- "integrity": "sha512-B5lGtvHgiLAIsK5nLINzVW0bN5hXv+EW35sKhYHE8F7V9Uz1fR4tx3wt7mobA5UNhZKUNgB/+ldVMQE6IHZRyA==",
+ "version": "20.4.3",
+ "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-20.4.3.tgz",
+ "integrity": "sha512-6akwCYrzcrFcTYz9GyUaWlhisY4lmQ3KvrnabmhoeAV8nRH4dXJAh4+EUQ3uArtxxKQkvxJS78hNX2EU3USgxQ==",
"dev": true,
"license": "MIT",
"engines": {
@@ -244,30 +244,30 @@
}
},
"node_modules/@commitlint/parse": {
- "version": "20.4.1",
- "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-20.4.1.tgz",
- "integrity": "sha512-XNtZjeRcFuAfUnhYrCY02+mpxwY4OmnvD3ETbVPs25xJFFz1nRo/25nHj+5eM+zTeRFvWFwD4GXWU2JEtoK1/w==",
+ "version": "20.5.0",
+ "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-20.5.0.tgz",
+ "integrity": "sha512-SeKWHBMk7YOTnnEWUhx+d1a9vHsjjuo6Uo1xRfPNfeY4bdYFasCH1dDpAv13Lyn+dDPOels+jP6D2GRZqzc5fA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@commitlint/types": "^20.4.0",
- "conventional-changelog-angular": "^8.1.0",
- "conventional-commits-parser": "^6.2.1"
+ "@commitlint/types": "^20.5.0",
+ "conventional-changelog-angular": "^8.2.0",
+ "conventional-commits-parser": "^6.3.0"
},
"engines": {
"node": ">=v18"
}
},
"node_modules/@commitlint/read": {
- "version": "20.4.0",
- "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-20.4.0.tgz",
- "integrity": "sha512-QfpFn6/I240ySEGv7YWqho4vxqtPpx40FS7kZZDjUJ+eHxu3azfhy7fFb5XzfTqVNp1hNoI3tEmiEPbDB44+cg==",
+ "version": "20.5.0",
+ "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-20.5.0.tgz",
+ "integrity": "sha512-JDEIJ2+GnWpK8QqwfmW7O42h0aycJEWNqcdkJnyzLD11nf9dW2dWLTVEa8Wtlo4IZFGLPATjR5neA5QlOvIH1w==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@commitlint/top-level": "^20.4.0",
- "@commitlint/types": "^20.4.0",
- "git-raw-commits": "^4.0.0",
+ "@commitlint/top-level": "^20.4.3",
+ "@commitlint/types": "^20.5.0",
+ "git-raw-commits": "^5.0.0",
"minimist": "^1.2.8",
"tinyexec": "^1.0.0"
},
@@ -276,14 +276,14 @@
}
},
"node_modules/@commitlint/resolve-extends": {
- "version": "20.4.0",
- "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-20.4.0.tgz",
- "integrity": "sha512-ay1KM8q0t+/OnlpqXJ+7gEFQNlUtSU5Gxr8GEwnVf2TPN3+ywc5DzL3JCxmpucqxfHBTFwfRMXxPRRnR5Ki20g==",
+ "version": "20.5.0",
+ "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-20.5.0.tgz",
+ "integrity": "sha512-3SHPWUW2v0tyspCTcfSsYml0gses92l6TlogwzvM2cbxDgmhSRc+fldDjvGkCXJrjSM87BBaWYTPWwwyASZRrg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@commitlint/config-validator": "^20.4.0",
- "@commitlint/types": "^20.4.0",
+ "@commitlint/config-validator": "^20.5.0",
+ "@commitlint/types": "^20.5.0",
"global-directory": "^4.0.1",
"import-meta-resolve": "^4.0.0",
"lodash.mergewith": "^4.6.2",
@@ -294,16 +294,16 @@
}
},
"node_modules/@commitlint/rules": {
- "version": "20.4.2",
- "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-20.4.2.tgz",
- "integrity": "sha512-oz83pnp5Yq6uwwTAabuVQPNlPfeD2Y5ZjMb7Wx8FSUlu4sLYJjbBWt8031Z0osCFPfHzAwSYrjnfDFKtuSMdKg==",
+ "version": "20.5.0",
+ "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-20.5.0.tgz",
+ "integrity": "sha512-5NdQXQEdnDPT5pK8O39ZA7HohzPRHEsDGU23cyVCNPQy4WegAbAwrQk3nIu7p2sl3dutPk8RZd91yKTrMTnRkQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@commitlint/ensure": "^20.4.1",
- "@commitlint/message": "^20.4.0",
+ "@commitlint/ensure": "^20.5.0",
+ "@commitlint/message": "^20.4.3",
"@commitlint/to-lines": "^20.0.0",
- "@commitlint/types": "^20.4.0"
+ "@commitlint/types": "^20.5.0"
},
"engines": {
"node": ">=v18"
@@ -320,9 +320,9 @@
}
},
"node_modules/@commitlint/top-level": {
- "version": "20.4.0",
- "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-20.4.0.tgz",
- "integrity": "sha512-NDzq8Q6jmFaIIBC/GG6n1OQEaHdmaAAYdrZRlMgW6glYWGZ+IeuXmiymDvQNXPc82mVxq2KiE3RVpcs+1OeDeA==",
+ "version": "20.4.3",
+ "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-20.4.3.tgz",
+ "integrity": "sha512-qD9xfP6dFg5jQ3NMrOhG0/w5y3bBUsVGyJvXxdWEwBm8hyx4WOk3kKXw28T5czBYvyeCVJgJJ6aoJZUWDpaacQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -333,19 +333,46 @@
}
},
"node_modules/@commitlint/types": {
- "version": "20.4.0",
- "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-20.4.0.tgz",
- "integrity": "sha512-aO5l99BQJ0X34ft8b0h7QFkQlqxC6e7ZPVmBKz13xM9O8obDaM1Cld4sQlJDXXU/VFuUzQ30mVtHjVz74TuStw==",
+ "version": "20.5.0",
+ "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-20.5.0.tgz",
+ "integrity": "sha512-ZJoS8oSq2CAZEpc/YI9SulLrdiIyXeHb/OGqGrkUP6Q7YV+0ouNAa7GjqRdXeQPncHQIDz/jbCTlHScvYvO/gA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "conventional-commits-parser": "^6.2.1",
+ "conventional-commits-parser": "^6.3.0",
"picocolors": "^1.1.1"
},
"engines": {
"node": ">=v18"
}
},
+ "node_modules/@conventional-changelog/git-client": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/@conventional-changelog/git-client/-/git-client-2.6.0.tgz",
+ "integrity": "sha512-T+uPDciKf0/ioNNDpMGc8FDsehJClZP0yR3Q5MN6wE/Y/1QZ7F+80OgznnTCOlMEG4AV0LvH2UJi3C/nBnaBUg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@simple-libs/child-process-utils": "^1.0.0",
+ "@simple-libs/stream-utils": "^1.2.0",
+ "semver": "^7.5.2"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "peerDependencies": {
+ "conventional-commits-filter": "^5.0.0",
+ "conventional-commits-parser": "^6.3.0"
+ },
+ "peerDependenciesMeta": {
+ "conventional-commits-filter": {
+ "optional": true
+ },
+ "conventional-commits-parser": {
+ "optional": true
+ }
+ }
+ },
"node_modules/@fastify/busboy": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz",
@@ -973,6 +1000,35 @@
"semantic-release": ">=20.1.0"
}
},
+ "node_modules/@simple-libs/child-process-utils": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@simple-libs/child-process-utils/-/child-process-utils-1.0.2.tgz",
+ "integrity": "sha512-/4R8QKnd/8agJynkNdJmNw2MBxuFTRcNFnE5Sg/G+jkSsV8/UBgULMzhizWWW42p8L5H7flImV2ATi79Ove2Tw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@simple-libs/stream-utils": "^1.2.0"
+ },
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://ko-fi.com/dangreen"
+ }
+ },
+ "node_modules/@simple-libs/stream-utils": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@simple-libs/stream-utils/-/stream-utils-1.2.0.tgz",
+ "integrity": "sha512-KxXvfapcixpz6rVEB6HPjOUZT22yN6v0vI0urQSk1L8MlEWPDFCZkhw2xmkyoTGYeFw7tWTZd7e3lVzRZRN/EA==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">=18"
+ },
+ "funding": {
+ "url": "https://ko-fi.com/dangreen"
+ }
+ },
"node_modules/@sindresorhus/is": {
"version": "4.6.0",
"resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz",
@@ -1000,14 +1056,14 @@
}
},
"node_modules/@types/node": {
- "version": "25.2.0",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-25.2.0.tgz",
- "integrity": "sha512-DZ8VwRFUNzuqJ5khrvwMXHmvPe+zGayJhr2CDNiKB1WBE1ST8Djl00D0IC4vvNmHMdj6DlbYRIaFE7WHjlDl5w==",
+ "version": "25.5.0",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-25.5.0.tgz",
+ "integrity": "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw==",
"dev": true,
"license": "MIT",
"peer": true,
"dependencies": {
- "undici-types": "~7.16.0"
+ "undici-types": "~7.18.0"
}
},
"node_modules/@types/normalize-package-data": {
@@ -1042,9 +1098,9 @@
}
},
"node_modules/ajv": {
- "version": "8.17.1",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
- "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
+ "version": "8.18.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz",
+ "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1362,9 +1418,9 @@
"license": "ISC"
},
"node_modules/conventional-changelog-angular": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-8.1.0.tgz",
- "integrity": "sha512-GGf2Nipn1RUCAktxuVauVr1e3r8QrLP/B0lEUsFktmGqc3ddbQkhoJZHJctVU829U1c6mTSWftrVOCHaL85Q3w==",
+ "version": "8.2.0",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-8.2.0.tgz",
+ "integrity": "sha512-4YB1zEXqB17oBI8yRsAs1T+ZhbdsOgJqkl6Trz+GXt/eKf1e4jnA0oW+sOd9BEENzEViuNW0DNoFFjSf3CeC5Q==",
"dev": true,
"license": "ISC",
"dependencies": {
@@ -1375,9 +1431,9 @@
}
},
"node_modules/conventional-changelog-conventionalcommits": {
- "version": "9.2.0",
- "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-9.2.0.tgz",
- "integrity": "sha512-fCf+ODjseueTV09wVBoC0HXLi3OyuBJ+HfE3L63Khxqnr99f9nUcnQh3a15lCWHlGLihyZShW/mVVkBagr9JvQ==",
+ "version": "9.3.1",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-9.3.1.tgz",
+ "integrity": "sha512-dTYtpIacRpcZgrvBYvBfArMmK2xvIpv2TaxM0/ZI5CBtNUzvF2x0t15HsbRABWprS6UPmvj+PzHVjSx4qAVKyw==",
"dev": true,
"license": "ISC",
"dependencies": {
@@ -1417,12 +1473,13 @@
}
},
"node_modules/conventional-commits-parser": {
- "version": "6.2.1",
- "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-6.2.1.tgz",
- "integrity": "sha512-20pyHgnO40rvfI0NGF/xiEoFMkXDtkF8FwHvk5BokoFoCuTQRI8vrNCNFWUOfuolKJMm1tPCHc8GgYEtr1XRNA==",
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-6.3.0.tgz",
+ "integrity": "sha512-RfOq/Cqy9xV9bOA8N+ZH6DlrDR+5S3Mi0B5kACEjESpE+AviIpAptx9a9cFpWCCvgRtWT+0BbUw+e1BZfts9jg==",
"dev": true,
"license": "MIT",
"dependencies": {
+ "@simple-libs/stream-utils": "^1.2.0",
"meow": "^13.0.0"
},
"bin": {
@@ -1453,9 +1510,9 @@
"license": "MIT"
},
"node_modules/cosmiconfig": {
- "version": "9.0.0",
- "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz",
- "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==",
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.1.tgz",
+ "integrity": "sha512-hr4ihw+DBqcvrsEDioRO31Z17x71pUYoNe/4h6Z0wB72p7MU7/9gH8Q3s12NFhHPfYBBOV3qyfUxmr/Yn3shnQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -1541,19 +1598,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/dargs": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/dargs/-/dargs-8.1.0.tgz",
- "integrity": "sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/debug": {
"version": "4.4.3",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
@@ -2084,34 +2128,20 @@
}
},
"node_modules/git-raw-commits": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-4.0.0.tgz",
- "integrity": "sha512-ICsMM1Wk8xSGMowkOmPrzo2Fgmfo4bMHLNX6ytHjajRJUqvHOw/TFapQ+QG75c3X/tTDDhOSRPGC52dDbNM8FQ==",
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-5.0.1.tgz",
+ "integrity": "sha512-Y+csSm2GD/PCSh6Isd/WiMjNAydu0VBiG9J7EdQsNA5P9uXvLayqjmTsNlK5Gs9IhblFZqOU0yid5Il5JPoLiQ==",
"dev": true,
"license": "MIT",
"dependencies": {
- "dargs": "^8.0.0",
- "meow": "^12.0.1",
- "split2": "^4.0.0"
+ "@conventional-changelog/git-client": "^2.6.0",
+ "meow": "^13.0.0"
},
"bin": {
- "git-raw-commits": "cli.mjs"
+ "git-raw-commits": "src/cli.js"
},
"engines": {
- "node": ">=16"
- }
- },
- "node_modules/git-raw-commits/node_modules/meow": {
- "version": "12.1.1",
- "resolved": "https://registry.npmjs.org/meow/-/meow-12.1.1.tgz",
- "integrity": "sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=16.10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "node": ">=18"
}
},
"node_modules/global-directory": {
@@ -2138,9 +2168,9 @@
"license": "ISC"
},
"node_modules/handlebars": {
- "version": "4.7.8",
- "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz",
- "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==",
+ "version": "4.7.9",
+ "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.9.tgz",
+ "integrity": "sha512-4E71E0rpOaQuJR2A3xDZ+GM1HyWYv1clR58tC8emQNeQe3RH7MAzSbat+V0wG78LQBo6m6bzSG/L4pBuCsgnUQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -2571,16 +2601,16 @@
}
},
"node_modules/lodash": {
- "version": "4.17.23",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz",
- "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==",
+ "version": "4.18.1",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz",
+ "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==",
"dev": true,
"license": "MIT"
},
"node_modules/lodash-es": {
- "version": "4.17.23",
- "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.23.tgz",
- "integrity": "sha512-kVI48u3PZr38HdYz98UmfPnXl2DXrpdctLrFLCd3kOx1xUkOmpFPx7gCWWM5MPkL/fD8zb+Ph0QzjGFs4+hHWg==",
+ "version": "4.18.1",
+ "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.18.1.tgz",
+ "integrity": "sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A==",
"dev": true,
"license": "MIT"
},
@@ -2869,9 +2899,9 @@
}
},
"node_modules/npm": {
- "version": "11.8.0",
- "resolved": "https://registry.npmjs.org/npm/-/npm-11.8.0.tgz",
- "integrity": "sha512-n19sJeW+RGKdkHo8SCc5xhSwkKhQUFfZaFzSc+EsYXLjSqIV0tl72aDYQVuzVvfrbysGwdaQsNLNy58J10EBSQ==",
+ "version": "11.11.1",
+ "resolved": "https://registry.npmjs.org/npm/-/npm-11.11.1.tgz",
+ "integrity": "sha512-asazCodkFdz1ReQzukyzS/DD77uGCIqUFeRG3gtaT8b9UR0ne1m9QOBuMgT72ij1rt7TRrOox4A1WzntMWIuEg==",
"bundleDependencies": [
"@isaacs/string-locale-compare",
"@npmcli/arborist",
@@ -2889,7 +2919,6 @@
"cacache",
"chalk",
"ci-info",
- "cli-columns",
"fastest-levenshtein",
"fs-minipass",
"glob",
@@ -2951,47 +2980,46 @@
],
"dependencies": {
"@isaacs/string-locale-compare": "^1.1.0",
- "@npmcli/arborist": "^9.1.10",
- "@npmcli/config": "^10.5.0",
+ "@npmcli/arborist": "^9.4.1",
+ "@npmcli/config": "^10.7.1",
"@npmcli/fs": "^5.0.0",
"@npmcli/map-workspaces": "^5.0.3",
"@npmcli/metavuln-calculator": "^9.0.3",
- "@npmcli/package-json": "^7.0.4",
+ "@npmcli/package-json": "^7.0.5",
"@npmcli/promise-spawn": "^9.0.1",
"@npmcli/redact": "^4.0.0",
- "@npmcli/run-script": "^10.0.3",
+ "@npmcli/run-script": "^10.0.4",
"@sigstore/tuf": "^4.0.1",
"abbrev": "^4.0.0",
"archy": "~1.0.0",
"cacache": "^20.0.3",
"chalk": "^5.6.2",
- "ci-info": "^4.3.1",
- "cli-columns": "^4.0.0",
+ "ci-info": "^4.4.0",
"fastest-levenshtein": "^1.0.16",
"fs-minipass": "^3.0.3",
- "glob": "^13.0.0",
+ "glob": "^13.0.6",
"graceful-fs": "^4.2.11",
"hosted-git-info": "^9.0.2",
"ini": "^6.0.0",
- "init-package-json": "^8.2.4",
- "is-cidr": "^6.0.1",
+ "init-package-json": "^8.2.5",
+ "is-cidr": "^6.0.3",
"json-parse-even-better-errors": "^5.0.0",
"libnpmaccess": "^10.0.3",
- "libnpmdiff": "^8.0.13",
- "libnpmexec": "^10.1.12",
- "libnpmfund": "^7.0.13",
+ "libnpmdiff": "^8.1.4",
+ "libnpmexec": "^10.2.4",
+ "libnpmfund": "^7.0.18",
"libnpmorg": "^8.0.1",
- "libnpmpack": "^9.0.13",
+ "libnpmpack": "^9.1.4",
"libnpmpublish": "^11.1.3",
"libnpmsearch": "^9.0.1",
"libnpmteam": "^8.0.2",
"libnpmversion": "^8.0.3",
- "make-fetch-happen": "^15.0.3",
- "minimatch": "^10.1.1",
- "minipass": "^7.1.1",
+ "make-fetch-happen": "^15.0.4",
+ "minimatch": "^10.2.4",
+ "minipass": "^7.1.3",
"minipass-pipeline": "^1.2.4",
"ms": "^2.1.2",
- "node-gyp": "^12.1.0",
+ "node-gyp": "^12.2.0",
"nopt": "^9.0.0",
"npm-audit-report": "^7.0.0",
"npm-install-checks": "^8.0.0",
@@ -3001,21 +3029,21 @@
"npm-registry-fetch": "^19.1.1",
"npm-user-validate": "^4.0.0",
"p-map": "^7.0.4",
- "pacote": "^21.0.4",
+ "pacote": "^21.5.0",
"parse-conflict-json": "^5.0.1",
"proc-log": "^6.1.0",
"qrcode-terminal": "^0.12.0",
"read": "^5.0.1",
- "semver": "^7.7.3",
+ "semver": "^7.7.4",
"spdx-expression-parse": "^4.0.0",
- "ssri": "^13.0.0",
+ "ssri": "^13.0.1",
"supports-color": "^10.2.2",
- "tar": "^7.5.4",
+ "tar": "^7.5.11",
"text-table": "~0.2.0",
"tiny-relative-date": "^2.0.2",
"treeverse": "^3.0.0",
"validate-npm-package-name": "^7.0.2",
- "which": "^6.0.0"
+ "which": "^6.0.1"
},
"bin": {
"npm": "bin/npm-cli.js",
@@ -3038,25 +3066,25 @@
"node": ">=8"
}
},
- "node_modules/npm/node_modules/@isaacs/balanced-match": {
- "version": "4.0.1",
+ "node_modules/npm/node_modules/@gar/promise-retry": {
+ "version": "1.0.2",
"dev": true,
"inBundle": true,
"license": "MIT",
+ "dependencies": {
+ "retry": "^0.13.1"
+ },
"engines": {
- "node": "20 || >=22"
+ "node": "^20.17.0 || >=22.9.0"
}
},
- "node_modules/npm/node_modules/@isaacs/brace-expansion": {
- "version": "5.0.0",
+ "node_modules/npm/node_modules/@gar/promise-retry/node_modules/retry": {
+ "version": "0.13.1",
"dev": true,
"inBundle": true,
"license": "MIT",
- "dependencies": {
- "@isaacs/balanced-match": "^4.0.1"
- },
"engines": {
- "node": "20 || >=22"
+ "node": ">= 4"
}
},
"node_modules/npm/node_modules/@isaacs/fs-minipass": {
@@ -3094,11 +3122,12 @@
}
},
"node_modules/npm/node_modules/@npmcli/arborist": {
- "version": "9.1.10",
+ "version": "9.4.1",
"dev": true,
"inBundle": true,
"license": "ISC",
"dependencies": {
+ "@gar/promise-retry": "^1.0.0",
"@isaacs/string-locale-compare": "^1.1.0",
"@npmcli/fs": "^5.0.0",
"@npmcli/installed-package-contents": "^4.0.0",
@@ -3141,7 +3170,7 @@
}
},
"node_modules/npm/node_modules/@npmcli/config": {
- "version": "10.5.0",
+ "version": "10.7.1",
"dev": true,
"inBundle": true,
"license": "ISC",
@@ -3172,17 +3201,17 @@
}
},
"node_modules/npm/node_modules/@npmcli/git": {
- "version": "7.0.1",
+ "version": "7.0.2",
"dev": true,
"inBundle": true,
"license": "ISC",
"dependencies": {
+ "@gar/promise-retry": "^1.0.0",
"@npmcli/promise-spawn": "^9.0.0",
"ini": "^6.0.0",
"lru-cache": "^11.2.1",
"npm-pick-manifest": "^11.0.1",
"proc-log": "^6.0.0",
- "promise-retry": "^2.0.1",
"semver": "^7.3.5",
"which": "^6.0.0"
},
@@ -3256,7 +3285,7 @@
}
},
"node_modules/npm/node_modules/@npmcli/package-json": {
- "version": "7.0.4",
+ "version": "7.0.5",
"dev": true,
"inBundle": true,
"license": "ISC",
@@ -3267,7 +3296,7 @@
"json-parse-even-better-errors": "^5.0.0",
"proc-log": "^6.0.0",
"semver": "^7.5.3",
- "validate-npm-package-license": "^3.0.4"
+ "spdx-expression-parse": "^4.0.0"
},
"engines": {
"node": "^20.17.0 || >=22.9.0"
@@ -3307,7 +3336,7 @@
}
},
"node_modules/npm/node_modules/@npmcli/run-script": {
- "version": "10.0.3",
+ "version": "10.0.4",
"dev": true,
"inBundle": true,
"license": "ISC",
@@ -3316,8 +3345,7 @@
"@npmcli/package-json": "^7.0.0",
"@npmcli/promise-spawn": "^9.0.0",
"node-gyp": "^12.1.0",
- "proc-log": "^6.0.0",
- "which": "^6.0.0"
+ "proc-log": "^6.0.0"
},
"engines": {
"node": "^20.17.0 || >=22.9.0"
@@ -3437,15 +3465,6 @@
"node": ">= 14"
}
},
- "node_modules/npm/node_modules/ansi-regex": {
- "version": "5.0.1",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/npm/node_modules/aproba": {
"version": "2.1.0",
"dev": true,
@@ -3458,6 +3477,15 @@
"inBundle": true,
"license": "MIT"
},
+ "node_modules/npm/node_modules/balanced-match": {
+ "version": "4.0.4",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "engines": {
+ "node": "18 || 20 || >=22"
+ }
+ },
"node_modules/npm/node_modules/bin-links": {
"version": "6.0.0",
"dev": true,
@@ -3486,6 +3514,18 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/npm/node_modules/brace-expansion": {
+ "version": "5.0.4",
+ "dev": true,
+ "inBundle": true,
+ "license": "MIT",
+ "dependencies": {
+ "balanced-match": "^4.0.2"
+ },
+ "engines": {
+ "node": "18 || 20 || >=22"
+ }
+ },
"node_modules/npm/node_modules/cacache": {
"version": "20.0.3",
"dev": true,
@@ -3530,7 +3570,7 @@
}
},
"node_modules/npm/node_modules/ci-info": {
- "version": "4.3.1",
+ "version": "4.4.0",
"dev": true,
"funding": [
{
@@ -3545,30 +3585,14 @@
}
},
"node_modules/npm/node_modules/cidr-regex": {
- "version": "5.0.1",
+ "version": "5.0.3",
"dev": true,
"inBundle": true,
"license": "BSD-2-Clause",
- "dependencies": {
- "ip-regex": "5.0.0"
- },
"engines": {
"node": ">=20"
}
},
- "node_modules/npm/node_modules/cli-columns": {
- "version": "4.0.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "string-width": "^4.2.3",
- "strip-ansi": "^6.0.1"
- },
- "engines": {
- "node": ">= 10"
- }
- },
"node_modules/npm/node_modules/cmd-shim": {
"version": "8.0.0",
"dev": true,
@@ -3625,22 +3649,6 @@
"node": ">=0.3.1"
}
},
- "node_modules/npm/node_modules/emoji-regex": {
- "version": "8.0.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT"
- },
- "node_modules/npm/node_modules/encoding": {
- "version": "0.1.13",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "iconv-lite": "^0.6.2"
- }
- },
"node_modules/npm/node_modules/env-paths": {
"version": "2.2.1",
"dev": true,
@@ -3684,17 +3692,17 @@
}
},
"node_modules/npm/node_modules/glob": {
- "version": "13.0.0",
+ "version": "13.0.6",
"dev": true,
"inBundle": true,
"license": "BlueOak-1.0.0",
"dependencies": {
- "minimatch": "^10.1.1",
- "minipass": "^7.1.2",
- "path-scurry": "^2.0.0"
+ "minimatch": "^10.2.2",
+ "minipass": "^7.1.3",
+ "path-scurry": "^2.0.2"
},
"engines": {
- "node": "20 || >=22"
+ "node": "18 || 20 || >=22"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
@@ -3751,7 +3759,7 @@
}
},
"node_modules/npm/node_modules/iconv-lite": {
- "version": "0.6.3",
+ "version": "0.7.2",
"dev": true,
"inBundle": true,
"license": "MIT",
@@ -3761,6 +3769,10 @@
},
"engines": {
"node": ">=0.10.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/express"
}
},
"node_modules/npm/node_modules/ignore-walk": {
@@ -3794,7 +3806,7 @@
}
},
"node_modules/npm/node_modules/init-package-json": {
- "version": "8.2.4",
+ "version": "8.2.5",
"dev": true,
"inBundle": true,
"license": "ISC",
@@ -3804,7 +3816,6 @@
"promzard": "^3.0.1",
"read": "^5.0.1",
"semver": "^7.7.2",
- "validate-npm-package-license": "^3.0.4",
"validate-npm-package-name": "^7.0.0"
},
"engines": {
@@ -3820,46 +3831,25 @@
"node": ">= 12"
}
},
- "node_modules/npm/node_modules/ip-regex": {
- "version": "5.0.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/npm/node_modules/is-cidr": {
- "version": "6.0.1",
+ "version": "6.0.3",
"dev": true,
"inBundle": true,
"license": "BSD-2-Clause",
"dependencies": {
- "cidr-regex": "5.0.1"
+ "cidr-regex": "^5.0.1"
},
"engines": {
"node": ">=20"
}
},
- "node_modules/npm/node_modules/is-fullwidth-code-point": {
- "version": "3.0.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/npm/node_modules/isexe": {
- "version": "3.1.1",
+ "version": "4.0.0",
"dev": true,
"inBundle": true,
- "license": "ISC",
+ "license": "BlueOak-1.0.0",
"engines": {
- "node": ">=16"
+ "node": ">=20"
}
},
"node_modules/npm/node_modules/json-parse-even-better-errors": {
@@ -3915,12 +3905,12 @@
}
},
"node_modules/npm/node_modules/libnpmdiff": {
- "version": "8.0.13",
+ "version": "8.1.4",
"dev": true,
"inBundle": true,
"license": "ISC",
"dependencies": {
- "@npmcli/arborist": "^9.1.10",
+ "@npmcli/arborist": "^9.4.1",
"@npmcli/installed-package-contents": "^4.0.0",
"binary-extensions": "^3.0.0",
"diff": "^8.0.2",
@@ -3934,19 +3924,19 @@
}
},
"node_modules/npm/node_modules/libnpmexec": {
- "version": "10.1.12",
+ "version": "10.2.4",
"dev": true,
"inBundle": true,
"license": "ISC",
"dependencies": {
- "@npmcli/arborist": "^9.1.10",
+ "@gar/promise-retry": "^1.0.0",
+ "@npmcli/arborist": "^9.4.1",
"@npmcli/package-json": "^7.0.0",
"@npmcli/run-script": "^10.0.0",
"ci-info": "^4.0.0",
"npm-package-arg": "^13.0.0",
"pacote": "^21.0.2",
"proc-log": "^6.0.0",
- "promise-retry": "^2.0.1",
"read": "^5.0.1",
"semver": "^7.3.7",
"signal-exit": "^4.1.0",
@@ -3957,12 +3947,12 @@
}
},
"node_modules/npm/node_modules/libnpmfund": {
- "version": "7.0.13",
+ "version": "7.0.18",
"dev": true,
"inBundle": true,
"license": "ISC",
"dependencies": {
- "@npmcli/arborist": "^9.1.10"
+ "@npmcli/arborist": "^9.4.1"
},
"engines": {
"node": "^20.17.0 || >=22.9.0"
@@ -3982,12 +3972,12 @@
}
},
"node_modules/npm/node_modules/libnpmpack": {
- "version": "9.0.13",
+ "version": "9.1.4",
"dev": true,
"inBundle": true,
"license": "ISC",
"dependencies": {
- "@npmcli/arborist": "^9.1.10",
+ "@npmcli/arborist": "^9.4.1",
"@npmcli/run-script": "^10.0.0",
"npm-package-arg": "^13.0.0",
"pacote": "^21.0.2"
@@ -4057,7 +4047,7 @@
}
},
"node_modules/npm/node_modules/lru-cache": {
- "version": "11.2.4",
+ "version": "11.2.6",
"dev": true,
"inBundle": true,
"license": "BlueOak-1.0.0",
@@ -4066,11 +4056,12 @@
}
},
"node_modules/npm/node_modules/make-fetch-happen": {
- "version": "15.0.3",
+ "version": "15.0.4",
"dev": true,
"inBundle": true,
"license": "ISC",
"dependencies": {
+ "@gar/promise-retry": "^1.0.0",
"@npmcli/agent": "^4.0.0",
"cacache": "^20.0.1",
"http-cache-semantics": "^4.1.1",
@@ -4080,7 +4071,6 @@
"minipass-pipeline": "^1.2.4",
"negotiator": "^1.0.0",
"proc-log": "^6.0.0",
- "promise-retry": "^2.0.1",
"ssri": "^13.0.0"
},
"engines": {
@@ -4088,25 +4078,25 @@
}
},
"node_modules/npm/node_modules/minimatch": {
- "version": "10.1.1",
+ "version": "10.2.4",
"dev": true,
"inBundle": true,
"license": "BlueOak-1.0.0",
"dependencies": {
- "@isaacs/brace-expansion": "^5.0.0"
+ "brace-expansion": "^5.0.2"
},
"engines": {
- "node": "20 || >=22"
+ "node": "18 || 20 || >=22"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/npm/node_modules/minipass": {
- "version": "7.1.2",
+ "version": "7.1.3",
"dev": true,
"inBundle": true,
- "license": "ISC",
+ "license": "BlueOak-1.0.0",
"engines": {
"node": ">=16 || 14 >=14.17"
}
@@ -4124,20 +4114,20 @@
}
},
"node_modules/npm/node_modules/minipass-fetch": {
- "version": "5.0.0",
+ "version": "5.0.2",
"dev": true,
"inBundle": true,
"license": "MIT",
"dependencies": {
"minipass": "^7.0.3",
- "minipass-sized": "^1.0.3",
+ "minipass-sized": "^2.0.0",
"minizlib": "^3.0.1"
},
"engines": {
"node": "^20.17.0 || >=22.9.0"
},
"optionalDependencies": {
- "encoding": "^0.1.13"
+ "iconv-lite": "^0.7.2"
}
},
"node_modules/npm/node_modules/minipass-flush": {
@@ -4164,6 +4154,12 @@
"node": ">=8"
}
},
+ "node_modules/npm/node_modules/minipass-flush/node_modules/yallist": {
+ "version": "4.0.0",
+ "dev": true,
+ "inBundle": true,
+ "license": "ISC"
+ },
"node_modules/npm/node_modules/minipass-pipeline": {
"version": "1.2.4",
"dev": true,
@@ -4188,25 +4184,19 @@
"node": ">=8"
}
},
- "node_modules/npm/node_modules/minipass-sized": {
- "version": "1.0.3",
+ "node_modules/npm/node_modules/minipass-pipeline/node_modules/yallist": {
+ "version": "4.0.0",
"dev": true,
"inBundle": true,
- "license": "ISC",
- "dependencies": {
- "minipass": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- }
+ "license": "ISC"
},
- "node_modules/npm/node_modules/minipass-sized/node_modules/minipass": {
- "version": "3.3.6",
+ "node_modules/npm/node_modules/minipass-sized": {
+ "version": "2.0.0",
"dev": true,
"inBundle": true,
"license": "ISC",
"dependencies": {
- "yallist": "^4.0.0"
+ "minipass": "^7.1.2"
},
"engines": {
"node": ">=8"
@@ -4249,7 +4239,7 @@
}
},
"node_modules/npm/node_modules/node-gyp": {
- "version": "12.1.0",
+ "version": "12.2.0",
"dev": true,
"inBundle": true,
"license": "MIT",
@@ -4261,7 +4251,7 @@
"nopt": "^9.0.0",
"proc-log": "^6.0.0",
"semver": "^7.3.5",
- "tar": "^7.5.2",
+ "tar": "^7.5.4",
"tinyglobby": "^0.2.12",
"which": "^6.0.0"
},
@@ -4345,7 +4335,7 @@
}
},
"node_modules/npm/node_modules/npm-packlist": {
- "version": "10.0.3",
+ "version": "10.0.4",
"dev": true,
"inBundle": true,
"license": "ISC",
@@ -4426,11 +4416,12 @@
}
},
"node_modules/npm/node_modules/pacote": {
- "version": "21.0.4",
+ "version": "21.5.0",
"dev": true,
"inBundle": true,
"license": "ISC",
"dependencies": {
+ "@gar/promise-retry": "^1.0.0",
"@npmcli/git": "^7.0.0",
"@npmcli/installed-package-contents": "^4.0.0",
"@npmcli/package-json": "^7.0.0",
@@ -4444,7 +4435,6 @@
"npm-pick-manifest": "^11.0.1",
"npm-registry-fetch": "^19.0.0",
"proc-log": "^6.0.0",
- "promise-retry": "^2.0.1",
"sigstore": "^4.0.0",
"ssri": "^13.0.0",
"tar": "^7.4.3"
@@ -4471,7 +4461,7 @@
}
},
"node_modules/npm/node_modules/path-scurry": {
- "version": "2.0.1",
+ "version": "2.0.2",
"dev": true,
"inBundle": true,
"license": "BlueOak-1.0.0",
@@ -4480,7 +4470,7 @@
"minipass": "^7.1.2"
},
"engines": {
- "node": "20 || >=22"
+ "node": "18 || 20 || >=22"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
@@ -4606,7 +4596,7 @@
"optional": true
},
"node_modules/npm/node_modules/semver": {
- "version": "7.7.3",
+ "version": "7.7.4",
"dev": true,
"inBundle": true,
"license": "ISC",
@@ -4684,26 +4674,6 @@
"node": ">= 14"
}
},
- "node_modules/npm/node_modules/spdx-correct": {
- "version": "3.2.0",
- "dev": true,
- "inBundle": true,
- "license": "Apache-2.0",
- "dependencies": {
- "spdx-expression-parse": "^3.0.0",
- "spdx-license-ids": "^3.0.0"
- }
- },
- "node_modules/npm/node_modules/spdx-correct/node_modules/spdx-expression-parse": {
- "version": "3.0.1",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "spdx-exceptions": "^2.1.0",
- "spdx-license-ids": "^3.0.0"
- }
- },
"node_modules/npm/node_modules/spdx-exceptions": {
"version": "2.5.0",
"dev": true,
@@ -4721,13 +4691,13 @@
}
},
"node_modules/npm/node_modules/spdx-license-ids": {
- "version": "3.0.22",
+ "version": "3.0.23",
"dev": true,
"inBundle": true,
"license": "CC0-1.0"
},
"node_modules/npm/node_modules/ssri": {
- "version": "13.0.0",
+ "version": "13.0.1",
"dev": true,
"inBundle": true,
"license": "ISC",
@@ -4738,32 +4708,6 @@
"node": "^20.17.0 || >=22.9.0"
}
},
- "node_modules/npm/node_modules/string-width": {
- "version": "4.2.3",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/npm/node_modules/strip-ansi": {
- "version": "6.0.1",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "ansi-regex": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/npm/node_modules/supports-color": {
"version": "10.2.2",
"dev": true,
@@ -4777,7 +4721,7 @@
}
},
"node_modules/npm/node_modules/tar": {
- "version": "7.5.4",
+ "version": "7.5.11",
"dev": true,
"inBundle": true,
"license": "BlueOak-1.0.0",
@@ -4792,15 +4736,6 @@
"node": ">=18"
}
},
- "node_modules/npm/node_modules/tar/node_modules/yallist": {
- "version": "5.0.0",
- "dev": true,
- "inBundle": true,
- "license": "BlueOak-1.0.0",
- "engines": {
- "node": ">=18"
- }
- },
"node_modules/npm/node_modules/text-table": {
"version": "0.2.0",
"dev": true,
@@ -4911,26 +4846,6 @@
"inBundle": true,
"license": "MIT"
},
- "node_modules/npm/node_modules/validate-npm-package-license": {
- "version": "3.0.4",
- "dev": true,
- "inBundle": true,
- "license": "Apache-2.0",
- "dependencies": {
- "spdx-correct": "^3.0.0",
- "spdx-expression-parse": "^3.0.0"
- }
- },
- "node_modules/npm/node_modules/validate-npm-package-license/node_modules/spdx-expression-parse": {
- "version": "3.0.1",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "dependencies": {
- "spdx-exceptions": "^2.1.0",
- "spdx-license-ids": "^3.0.0"
- }
- },
"node_modules/npm/node_modules/validate-npm-package-name": {
"version": "7.0.2",
"dev": true,
@@ -4950,12 +4865,12 @@
}
},
"node_modules/npm/node_modules/which": {
- "version": "6.0.0",
+ "version": "6.0.1",
"dev": true,
"inBundle": true,
"license": "ISC",
"dependencies": {
- "isexe": "^3.1.1"
+ "isexe": "^4.0.0"
},
"bin": {
"node-which": "bin/which.js"
@@ -4965,12 +4880,11 @@
}
},
"node_modules/npm/node_modules/write-file-atomic": {
- "version": "7.0.0",
+ "version": "7.0.1",
"dev": true,
"inBundle": true,
"license": "ISC",
"dependencies": {
- "imurmurhash": "^0.1.4",
"signal-exit": "^4.0.1"
},
"engines": {
@@ -4978,10 +4892,13 @@
}
},
"node_modules/npm/node_modules/yallist": {
- "version": "4.0.0",
+ "version": "5.0.0",
"dev": true,
"inBundle": true,
- "license": "ISC"
+ "license": "BlueOak-1.0.0",
+ "engines": {
+ "node": ">=18"
+ }
},
"node_modules/object-assign": {
"version": "4.1.1",
@@ -5207,9 +5124,9 @@
"license": "ISC"
},
"node_modules/picomatch": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
- "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz",
+ "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==",
"dev": true,
"license": "MIT",
"engines": {
@@ -6208,16 +6125,6 @@
"dev": true,
"license": "CC0-1.0"
},
- "node_modules/split2": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz",
- "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==",
- "dev": true,
- "license": "ISC",
- "engines": {
- "node": ">= 10.x"
- }
- },
"node_modules/stream-combiner2": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz",
@@ -6474,9 +6381,9 @@
}
},
"node_modules/tinyexec": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.2.tgz",
- "integrity": "sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==",
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.4.tgz",
+ "integrity": "sha512-u9r3uZC0bdpGOXtlxUIdwf9pkmvhqJdrVCH9fapQtgy/OeTTMZ1nqH7agtvEfmGui6e1XxjcdrlxvxJvc3sMqw==",
"dev": true,
"license": "MIT",
"engines": {
@@ -6519,9 +6426,9 @@
}
},
"node_modules/tinyglobby/node_modules/picomatch": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
- "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz",
+ "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
"dev": true,
"license": "MIT",
"engines": {
@@ -6623,9 +6530,9 @@
}
},
"node_modules/undici-types": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz",
- "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==",
+ "version": "7.18.2",
+ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz",
+ "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==",
"dev": true,
"license": "MIT",
"peer": true
diff --git a/uv.lock b/uv.lock
index bec9562..9b7b6fe 100644
--- a/uv.lock
+++ b/uv.lock
@@ -4,45 +4,61 @@ requires-python = ">=3.14"
[[package]]
name = "certifi"
-version = "2025.11.12"
+version = "2026.2.25"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/a2/8c/58f469717fa48465e4a50c014a0400602d3c437d7c0c468e17ada824da3a/certifi-2025.11.12.tar.gz", hash = "sha256:d8ab5478f2ecd78af242878415affce761ca6bc54a22a27e026d7c25357c3316", size = 160538, upload-time = "2025-11-12T02:54:51.517Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/af/2d/7bf41579a8986e348fa033a31cdd0e4121114f6bce2457e8876010b092dd/certifi-2026.2.25.tar.gz", hash = "sha256:e887ab5cee78ea814d3472169153c2d12cd43b14bd03329a39a9c6e2e80bfba7", size = 155029, upload-time = "2026-02-25T02:54:17.342Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/70/7d/9bc192684cea499815ff478dfcdc13835ddf401365057044fb721ec6bddb/certifi-2025.11.12-py3-none-any.whl", hash = "sha256:97de8790030bbd5c2d96b7ec782fc2f7820ef8dba6db909ccf95449f2d062d4b", size = 159438, upload-time = "2025-11-12T02:54:49.735Z" },
+ { url = "https://files.pythonhosted.org/packages/9a/3c/c17fb3ca2d9c3acff52e30b309f538586f9f5b9c9cf454f3845fc9af4881/certifi-2026.2.25-py3-none-any.whl", hash = "sha256:027692e4402ad994f1c42e52a4997a9763c646b73e4096e4d5d6db8af1d6f0fa", size = 153684, upload-time = "2026-02-25T02:54:15.766Z" },
]
[[package]]
name = "cfgv"
-version = "3.4.0"
+version = "3.5.0"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/11/74/539e56497d9bd1d484fd863dd69cbbfa653cd2aa27abfe35653494d85e94/cfgv-3.4.0.tar.gz", hash = "sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560", size = 7114, upload-time = "2023-08-12T20:38:17.776Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/4e/b5/721b8799b04bf9afe054a3899c6cf4e880fcf8563cc71c15610242490a0c/cfgv-3.5.0.tar.gz", hash = "sha256:d5b1034354820651caa73ede66a6294d6e95c1b00acc5e9b098e917404669132", size = 7334, upload-time = "2025-11-19T20:55:51.612Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/c5/55/51844dd50c4fc7a33b653bfaba4c2456f06955289ca770a5dbd5fd267374/cfgv-3.4.0-py2.py3-none-any.whl", hash = "sha256:b7265b1f29fd3316bfcd2b330d63d024f2bfd8bcb8b0272f8e19a504856c48f9", size = 7249, upload-time = "2023-08-12T20:38:16.269Z" },
+ { url = "https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl", hash = "sha256:a8dc6b26ad22ff227d2634a65cb388215ce6cc96bbcc5cfde7641ae87e8dacc0", size = 7445, upload-time = "2025-11-19T20:55:50.744Z" },
]
[[package]]
name = "charset-normalizer"
-version = "3.4.4"
+version = "3.4.6"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/13/69/33ddede1939fdd074bce5434295f38fae7136463422fe4fd3e0e89b98062/charset_normalizer-3.4.4.tar.gz", hash = "sha256:94537985111c35f28720e43603b8e7b43a6ecfb2ce1d3058bbe955b73404e21a", size = 129418, upload-time = "2025-10-14T04:42:32.879Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/7b/60/e3bec1881450851b087e301bedc3daa9377a4d45f1c26aa90b0b235e38aa/charset_normalizer-3.4.6.tar.gz", hash = "sha256:1ae6b62897110aa7c79ea2f5dd38d1abca6db663687c0b1ad9aed6f6bae3d9d6", size = 143363, upload-time = "2026-03-15T18:53:25.478Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/2a/35/7051599bd493e62411d6ede36fd5af83a38f37c4767b92884df7301db25d/charset_normalizer-3.4.4-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:da3326d9e65ef63a817ecbcc0df6e94463713b754fe293eaa03da99befb9a5bd", size = 207746, upload-time = "2025-10-14T04:41:33.773Z" },
- { url = "https://files.pythonhosted.org/packages/10/9a/97c8d48ef10d6cd4fcead2415523221624bf58bcf68a802721a6bc807c8f/charset_normalizer-3.4.4-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8af65f14dc14a79b924524b1e7fffe304517b2bff5a58bf64f30b98bbc5079eb", size = 147889, upload-time = "2025-10-14T04:41:34.897Z" },
- { url = "https://files.pythonhosted.org/packages/10/bf/979224a919a1b606c82bd2c5fa49b5c6d5727aa47b4312bb27b1734f53cd/charset_normalizer-3.4.4-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:74664978bb272435107de04e36db5a9735e78232b85b77d45cfb38f758efd33e", size = 143641, upload-time = "2025-10-14T04:41:36.116Z" },
- { url = "https://files.pythonhosted.org/packages/ba/33/0ad65587441fc730dc7bd90e9716b30b4702dc7b617e6ba4997dc8651495/charset_normalizer-3.4.4-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:752944c7ffbfdd10c074dc58ec2d5a8a4cd9493b314d367c14d24c17684ddd14", size = 160779, upload-time = "2025-10-14T04:41:37.229Z" },
- { url = "https://files.pythonhosted.org/packages/67/ed/331d6b249259ee71ddea93f6f2f0a56cfebd46938bde6fcc6f7b9a3d0e09/charset_normalizer-3.4.4-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d1f13550535ad8cff21b8d757a3257963e951d96e20ec82ab44bc64aeb62a191", size = 159035, upload-time = "2025-10-14T04:41:38.368Z" },
- { url = "https://files.pythonhosted.org/packages/67/ff/f6b948ca32e4f2a4576aa129d8bed61f2e0543bf9f5f2b7fc3758ed005c9/charset_normalizer-3.4.4-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ecaae4149d99b1c9e7b88bb03e3221956f68fd6d50be2ef061b2381b61d20838", size = 152542, upload-time = "2025-10-14T04:41:39.862Z" },
- { url = "https://files.pythonhosted.org/packages/16/85/276033dcbcc369eb176594de22728541a925b2632f9716428c851b149e83/charset_normalizer-3.4.4-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:cb6254dc36b47a990e59e1068afacdcd02958bdcce30bb50cc1700a8b9d624a6", size = 149524, upload-time = "2025-10-14T04:41:41.319Z" },
- { url = "https://files.pythonhosted.org/packages/9e/f2/6a2a1f722b6aba37050e626530a46a68f74e63683947a8acff92569f979a/charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c8ae8a0f02f57a6e61203a31428fa1d677cbe50c93622b4149d5c0f319c1d19e", size = 150395, upload-time = "2025-10-14T04:41:42.539Z" },
- { url = "https://files.pythonhosted.org/packages/60/bb/2186cb2f2bbaea6338cad15ce23a67f9b0672929744381e28b0592676824/charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:47cc91b2f4dd2833fddaedd2893006b0106129d4b94fdb6af1f4ce5a9965577c", size = 143680, upload-time = "2025-10-14T04:41:43.661Z" },
- { url = "https://files.pythonhosted.org/packages/7d/a5/bf6f13b772fbb2a90360eb620d52ed8f796f3c5caee8398c3b2eb7b1c60d/charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:82004af6c302b5d3ab2cfc4cc5f29db16123b1a8417f2e25f9066f91d4411090", size = 162045, upload-time = "2025-10-14T04:41:44.821Z" },
- { url = "https://files.pythonhosted.org/packages/df/c5/d1be898bf0dc3ef9030c3825e5d3b83f2c528d207d246cbabe245966808d/charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:2b7d8f6c26245217bd2ad053761201e9f9680f8ce52f0fcd8d0755aeae5b2152", size = 149687, upload-time = "2025-10-14T04:41:46.442Z" },
- { url = "https://files.pythonhosted.org/packages/a5/42/90c1f7b9341eef50c8a1cb3f098ac43b0508413f33affd762855f67a410e/charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:799a7a5e4fb2d5898c60b640fd4981d6a25f1c11790935a44ce38c54e985f828", size = 160014, upload-time = "2025-10-14T04:41:47.631Z" },
- { url = "https://files.pythonhosted.org/packages/76/be/4d3ee471e8145d12795ab655ece37baed0929462a86e72372fd25859047c/charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:99ae2cffebb06e6c22bdc25801d7b30f503cc87dbd283479e7b606f70aff57ec", size = 154044, upload-time = "2025-10-14T04:41:48.81Z" },
- { url = "https://files.pythonhosted.org/packages/b0/6f/8f7af07237c34a1defe7defc565a9bc1807762f672c0fde711a4b22bf9c0/charset_normalizer-3.4.4-cp314-cp314-win32.whl", hash = "sha256:f9d332f8c2a2fcbffe1378594431458ddbef721c1769d78e2cbc06280d8155f9", size = 99940, upload-time = "2025-10-14T04:41:49.946Z" },
- { url = "https://files.pythonhosted.org/packages/4b/51/8ade005e5ca5b0d80fb4aff72a3775b325bdc3d27408c8113811a7cbe640/charset_normalizer-3.4.4-cp314-cp314-win_amd64.whl", hash = "sha256:8a6562c3700cce886c5be75ade4a5db4214fda19fede41d9792d100288d8f94c", size = 107104, upload-time = "2025-10-14T04:41:51.051Z" },
- { url = "https://files.pythonhosted.org/packages/da/5f/6b8f83a55bb8278772c5ae54a577f3099025f9ade59d0136ac24a0df4bde/charset_normalizer-3.4.4-cp314-cp314-win_arm64.whl", hash = "sha256:de00632ca48df9daf77a2c65a484531649261ec9f25489917f09e455cb09ddb2", size = 100743, upload-time = "2025-10-14T04:41:52.122Z" },
- { url = "https://files.pythonhosted.org/packages/0a/4c/925909008ed5a988ccbb72dcc897407e5d6d3bd72410d69e051fc0c14647/charset_normalizer-3.4.4-py3-none-any.whl", hash = "sha256:7a32c560861a02ff789ad905a2fe94e3f840803362c84fecf1851cb4cf3dc37f", size = 53402, upload-time = "2025-10-14T04:42:31.76Z" },
+ { url = "https://files.pythonhosted.org/packages/25/6f/ffe1e1259f384594063ea1869bfb6be5cdb8bc81020fc36c3636bc8302a1/charset_normalizer-3.4.6-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:9cc6e6d9e571d2f863fa77700701dae73ed5f78881efc8b3f9a4398772ff53e8", size = 294458, upload-time = "2026-03-15T18:51:41.134Z" },
+ { url = "https://files.pythonhosted.org/packages/56/60/09bb6c13a8c1016c2ed5c6a6488e4ffef506461aa5161662bd7636936fb1/charset_normalizer-3.4.6-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ef5960d965e67165d75b7c7ffc60a83ec5abfc5c11b764ec13ea54fbef8b4421", size = 199277, upload-time = "2026-03-15T18:51:42.953Z" },
+ { url = "https://files.pythonhosted.org/packages/00/50/dcfbb72a5138bbefdc3332e8d81a23494bf67998b4b100703fd15fa52d81/charset_normalizer-3.4.6-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:b3694e3f87f8ac7ce279d4355645b3c878d24d1424581b46282f24b92f5a4ae2", size = 218758, upload-time = "2026-03-15T18:51:44.339Z" },
+ { url = "https://files.pythonhosted.org/packages/03/b3/d79a9a191bb75f5aa81f3aaaa387ef29ce7cb7a9e5074ba8ea095cc073c2/charset_normalizer-3.4.6-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5d11595abf8dd942a77883a39d81433739b287b6aa71620f15164f8096221b30", size = 215299, upload-time = "2026-03-15T18:51:45.871Z" },
+ { url = "https://files.pythonhosted.org/packages/76/7e/bc8911719f7084f72fd545f647601ea3532363927f807d296a8c88a62c0d/charset_normalizer-3.4.6-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7bda6eebafd42133efdca535b04ccb338ab29467b3f7bf79569883676fc628db", size = 206811, upload-time = "2026-03-15T18:51:47.308Z" },
+ { url = "https://files.pythonhosted.org/packages/e2/40/c430b969d41dda0c465aa36cc7c2c068afb67177bef50905ac371b28ccc7/charset_normalizer-3.4.6-cp314-cp314-manylinux_2_31_armv7l.whl", hash = "sha256:bbc8c8650c6e51041ad1be191742b8b421d05bbd3410f43fa2a00c8db87678e8", size = 193706, upload-time = "2026-03-15T18:51:48.849Z" },
+ { url = "https://files.pythonhosted.org/packages/48/15/e35e0590af254f7df984de1323640ef375df5761f615b6225ba8deb9799a/charset_normalizer-3.4.6-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:22c6f0c2fbc31e76c3b8a86fba1a56eda6166e238c29cdd3d14befdb4a4e4815", size = 202706, upload-time = "2026-03-15T18:51:50.257Z" },
+ { url = "https://files.pythonhosted.org/packages/5e/bd/f736f7b9cc5e93a18b794a50346bb16fbfd6b37f99e8f306f7951d27c17c/charset_normalizer-3.4.6-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7edbed096e4a4798710ed6bc75dcaa2a21b68b6c356553ac4823c3658d53743a", size = 202497, upload-time = "2026-03-15T18:51:52.012Z" },
+ { url = "https://files.pythonhosted.org/packages/9d/ba/2cc9e3e7dfdf7760a6ed8da7446d22536f3d0ce114ac63dee2a5a3599e62/charset_normalizer-3.4.6-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:7f9019c9cb613f084481bd6a100b12e1547cf2efe362d873c2e31e4035a6fa43", size = 193511, upload-time = "2026-03-15T18:51:53.723Z" },
+ { url = "https://files.pythonhosted.org/packages/9e/cb/5be49b5f776e5613be07298c80e1b02a2d900f7a7de807230595c85a8b2e/charset_normalizer-3.4.6-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:58c948d0d086229efc484fe2f30c2d382c86720f55cd9bc33591774348ad44e0", size = 220133, upload-time = "2026-03-15T18:51:55.333Z" },
+ { url = "https://files.pythonhosted.org/packages/83/43/99f1b5dad345accb322c80c7821071554f791a95ee50c1c90041c157ae99/charset_normalizer-3.4.6-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:419a9d91bd238052642a51938af8ac05da5b3343becde08d5cdeab9046df9ee1", size = 203035, upload-time = "2026-03-15T18:51:56.736Z" },
+ { url = "https://files.pythonhosted.org/packages/87/9a/62c2cb6a531483b55dddff1a68b3d891a8b498f3ca555fbcf2978e804d9d/charset_normalizer-3.4.6-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:5273b9f0b5835ff0350c0828faea623c68bfa65b792720c453e22b25cc72930f", size = 216321, upload-time = "2026-03-15T18:51:58.17Z" },
+ { url = "https://files.pythonhosted.org/packages/6e/79/94a010ff81e3aec7c293eb82c28f930918e517bc144c9906a060844462eb/charset_normalizer-3.4.6-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:0e901eb1049fdb80f5bd11ed5ea1e498ec423102f7a9b9e4645d5b8204ff2815", size = 208973, upload-time = "2026-03-15T18:51:59.998Z" },
+ { url = "https://files.pythonhosted.org/packages/2a/57/4ecff6d4ec8585342f0c71bc03efaa99cb7468f7c91a57b105bcd561cea8/charset_normalizer-3.4.6-cp314-cp314-win32.whl", hash = "sha256:b4ff1d35e8c5bd078be89349b6f3a845128e685e751b6ea1169cf2160b344c4d", size = 144610, upload-time = "2026-03-15T18:52:02.213Z" },
+ { url = "https://files.pythonhosted.org/packages/80/94/8434a02d9d7f168c25767c64671fead8d599744a05d6a6c877144c754246/charset_normalizer-3.4.6-cp314-cp314-win_amd64.whl", hash = "sha256:74119174722c4349af9708993118581686f343adc1c8c9c007d59be90d077f3f", size = 154962, upload-time = "2026-03-15T18:52:03.658Z" },
+ { url = "https://files.pythonhosted.org/packages/46/4c/48f2cdbfd923026503dfd67ccea45c94fd8fe988d9056b468579c66ed62b/charset_normalizer-3.4.6-cp314-cp314-win_arm64.whl", hash = "sha256:e5bcc1a1ae744e0bb59641171ae53743760130600da8db48cbb6e4918e186e4e", size = 143595, upload-time = "2026-03-15T18:52:05.123Z" },
+ { url = "https://files.pythonhosted.org/packages/31/93/8878be7569f87b14f1d52032946131bcb6ebbd8af3e20446bc04053dc3f1/charset_normalizer-3.4.6-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:ad8faf8df23f0378c6d527d8b0b15ea4a2e23c89376877c598c4870d1b2c7866", size = 314828, upload-time = "2026-03-15T18:52:06.831Z" },
+ { url = "https://files.pythonhosted.org/packages/06/b6/fae511ca98aac69ecc35cde828b0a3d146325dd03d99655ad38fc2cc3293/charset_normalizer-3.4.6-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f5ea69428fa1b49573eef0cc44a1d43bebd45ad0c611eb7d7eac760c7ae771bc", size = 208138, upload-time = "2026-03-15T18:52:08.239Z" },
+ { url = "https://files.pythonhosted.org/packages/54/57/64caf6e1bf07274a1e0b7c160a55ee9e8c9ec32c46846ce59b9c333f7008/charset_normalizer-3.4.6-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:06a7e86163334edfc5d20fe104db92fcd666e5a5df0977cb5680a506fe26cc8e", size = 224679, upload-time = "2026-03-15T18:52:10.043Z" },
+ { url = "https://files.pythonhosted.org/packages/aa/cb/9ff5a25b9273ef160861b41f6937f86fae18b0792fe0a8e75e06acb08f1d/charset_normalizer-3.4.6-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:e1f6e2f00a6b8edb562826e4632e26d063ac10307e80f7461f7de3ad8ef3f077", size = 223475, upload-time = "2026-03-15T18:52:11.854Z" },
+ { url = "https://files.pythonhosted.org/packages/fc/97/440635fc093b8d7347502a377031f9605a1039c958f3cd18dcacffb37743/charset_normalizer-3.4.6-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:95b52c68d64c1878818687a473a10547b3292e82b6f6fe483808fb1468e2f52f", size = 215230, upload-time = "2026-03-15T18:52:13.325Z" },
+ { url = "https://files.pythonhosted.org/packages/cd/24/afff630feb571a13f07c8539fbb502d2ab494019492aaffc78ef41f1d1d0/charset_normalizer-3.4.6-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:7504e9b7dc05f99a9bbb4525c67a2c155073b44d720470a148b34166a69c054e", size = 199045, upload-time = "2026-03-15T18:52:14.752Z" },
+ { url = "https://files.pythonhosted.org/packages/e5/17/d1399ecdaf7e0498c327433e7eefdd862b41236a7e484355b8e0e5ebd64b/charset_normalizer-3.4.6-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:172985e4ff804a7ad08eebec0a1640ece87ba5041d565fff23c8f99c1f389484", size = 211658, upload-time = "2026-03-15T18:52:16.278Z" },
+ { url = "https://files.pythonhosted.org/packages/b5/38/16baa0affb957b3d880e5ac2144caf3f9d7de7bc4a91842e447fbb5e8b67/charset_normalizer-3.4.6-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:4be9f4830ba8741527693848403e2c457c16e499100963ec711b1c6f2049b7c7", size = 210769, upload-time = "2026-03-15T18:52:17.782Z" },
+ { url = "https://files.pythonhosted.org/packages/05/34/c531bc6ac4c21da9ddfddb3107be2287188b3ea4b53b70fc58f2a77ac8d8/charset_normalizer-3.4.6-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:79090741d842f564b1b2827c0b82d846405b744d31e84f18d7a7b41c20e473ff", size = 201328, upload-time = "2026-03-15T18:52:19.553Z" },
+ { url = "https://files.pythonhosted.org/packages/fa/73/a5a1e9ca5f234519c1953608a03fe109c306b97fdfb25f09182babad51a7/charset_normalizer-3.4.6-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:87725cfb1a4f1f8c2fc9890ae2f42094120f4b44db9360be5d99a4c6b0e03a9e", size = 225302, upload-time = "2026-03-15T18:52:21.043Z" },
+ { url = "https://files.pythonhosted.org/packages/ba/f6/cd782923d112d296294dea4bcc7af5a7ae0f86ab79f8fefbda5526b6cfc0/charset_normalizer-3.4.6-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:fcce033e4021347d80ed9c66dcf1e7b1546319834b74445f561d2e2221de5659", size = 211127, upload-time = "2026-03-15T18:52:22.491Z" },
+ { url = "https://files.pythonhosted.org/packages/0e/c5/0b6898950627af7d6103a449b22320372c24c6feda91aa24e201a478d161/charset_normalizer-3.4.6-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:ca0276464d148c72defa8bb4390cce01b4a0e425f3b50d1435aa6d7a18107602", size = 222840, upload-time = "2026-03-15T18:52:24.113Z" },
+ { url = "https://files.pythonhosted.org/packages/7d/25/c4bba773bef442cbdc06111d40daa3de5050a676fa26e85090fc54dd12f0/charset_normalizer-3.4.6-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:197c1a244a274bb016dd8b79204850144ef77fe81c5b797dc389327adb552407", size = 216890, upload-time = "2026-03-15T18:52:25.541Z" },
+ { url = "https://files.pythonhosted.org/packages/35/1a/05dacadb0978da72ee287b0143097db12f2e7e8d3ffc4647da07a383b0b7/charset_normalizer-3.4.6-cp314-cp314t-win32.whl", hash = "sha256:2a24157fa36980478dd1770b585c0f30d19e18f4fb0c47c13aa568f871718579", size = 155379, upload-time = "2026-03-15T18:52:27.05Z" },
+ { url = "https://files.pythonhosted.org/packages/5d/7a/d269d834cb3a76291651256f3b9a5945e81d0a49ab9f4a498964e83c0416/charset_normalizer-3.4.6-cp314-cp314t-win_amd64.whl", hash = "sha256:cd5e2801c89992ed8c0a3f0293ae83c159a60d9a5d685005383ef4caca77f2c4", size = 169043, upload-time = "2026-03-15T18:52:28.502Z" },
+ { url = "https://files.pythonhosted.org/packages/23/06/28b29fba521a37a8932c6a84192175c34d49f84a6d4773fa63d05f9aff22/charset_normalizer-3.4.6-cp314-cp314t-win_arm64.whl", hash = "sha256:47955475ac79cc504ef2704b192364e51d0d473ad452caedd0002605f780101c", size = 148523, upload-time = "2026-03-15T18:52:29.956Z" },
+ { url = "https://files.pythonhosted.org/packages/2a/68/687187c7e26cb24ccbd88e5069f5ef00eba804d36dde11d99aad0838ab45/charset_normalizer-3.4.6-py3-none-any.whl", hash = "sha256:947cf925bc916d90adba35a64c82aace04fa39b46b52d4630ece166655905a69", size = 61455, upload-time = "2026-03-15T18:53:23.833Z" },
]
[[package]]
@@ -172,11 +188,11 @@ wheels = [
[[package]]
name = "distro"
-version = "1.8.0"
+version = "1.9.0"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/4b/89/eaa3a3587ebf8bed93e45aa79be8c2af77d50790d15b53f6dfc85b57f398/distro-1.8.0.tar.gz", hash = "sha256:02e111d1dc6a50abb8eed6bf31c3e48ed8b0830d1ea2a1b78c61765c2513fdd8", size = 59428, upload-time = "2022-10-10T15:30:33.395Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/fc/f8/98eea607f65de6527f8a2e8885fc8015d3e6f5775df186e443e0964a11c3/distro-1.9.0.tar.gz", hash = "sha256:2fa77c6fd8940f116ee1d6b94a2f90b13b5ea8d019b98bc8bafdcabcdd9bdbed", size = 60722, upload-time = "2023-12-24T09:54:32.31Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/f4/2c/c90a3adaf0ddb70afe193f5ebfb539612af57cffe677c3126be533df3098/distro-1.8.0-py3-none-any.whl", hash = "sha256:99522ca3e365cac527b44bde033f64c6945d90eb9f769703caaec52b09bbd3ff", size = 20315, upload-time = "2022-10-10T15:30:26.903Z" },
+ { url = "https://files.pythonhosted.org/packages/12/b3/231ffd4ab1fc9d679809f356cebee130ac7daa00d6d6f3206dd4fd137e9e/distro-1.9.0-py3-none-any.whl", hash = "sha256:7bffd925d65168f85027d8da9af6bddab658135b840670a223589bc0c8ef02b2", size = 20277, upload-time = "2023-12-24T09:54:30.421Z" },
]
[[package]]
@@ -190,11 +206,11 @@ wheels = [
[[package]]
name = "filelock"
-version = "3.20.3"
+version = "3.25.2"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/1d/65/ce7f1b70157833bf3cb851b556a37d4547ceafc158aa9b34b36782f23696/filelock-3.20.3.tar.gz", hash = "sha256:18c57ee915c7ec61cff0ecf7f0f869936c7c30191bb0cf406f1341778d0834e1", size = 19485, upload-time = "2026-01-09T17:55:05.421Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/94/b8/00651a0f559862f3bb7d6f7477b192afe3f583cc5e26403b44e59a55ab34/filelock-3.25.2.tar.gz", hash = "sha256:b64ece2b38f4ca29dd3e810287aa8c48182bbecd1ae6e9ae126c9b35f1382694", size = 40480, upload-time = "2026-03-11T20:45:38.487Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/b5/36/7fb70f04bf00bc646cd5bb45aa9eddb15e19437a28b8fb2b4a5249fac770/filelock-3.20.3-py3-none-any.whl", hash = "sha256:4b0dda527ee31078689fc205ec4f1c1bf7d56cf88b6dc9426c4f230e46c2dce1", size = 16701, upload-time = "2026-01-09T17:55:04.334Z" },
+ { url = "https://files.pythonhosted.org/packages/a4/a5/842ae8f0c08b61d6484b52f99a03510a3a72d23141942d216ebe81fefbce/filelock-3.25.2-py3-none-any.whl", hash = "sha256:ca8afb0da15f229774c9ad1b455ed96e85a81373065fb10446672f64444ddf70", size = 26759, upload-time = "2026-03-11T20:45:37.437Z" },
]
[[package]]
@@ -214,11 +230,11 @@ wheels = [
[[package]]
name = "identify"
-version = "2.6.15"
+version = "2.6.18"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/ff/e7/685de97986c916a6d93b3876139e00eef26ad5bbbd61925d670ae8013449/identify-2.6.15.tar.gz", hash = "sha256:e4f4864b96c6557ef2a1e1c951771838f4edc9df3a72ec7118b338801b11c7bf", size = 99311, upload-time = "2025-10-02T17:43:40.631Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/46/c4/7fb4db12296cdb11893d61c92048fe617ee853f8523b9b296ac03b43757e/identify-2.6.18.tar.gz", hash = "sha256:873ac56a5e3fd63e7438a7ecbc4d91aca692eb3fefa4534db2b7913f3fc352fd", size = 99580, upload-time = "2026-03-15T18:39:50.319Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/0f/1c/e5fd8f973d4f375adb21565739498e2e9a1e54c858a97b9a8ccfdc81da9b/identify-2.6.15-py2.py3-none-any.whl", hash = "sha256:1181ef7608e00704db228516541eb83a88a9f94433a8c80bb9b5bd54b1d81757", size = 99183, upload-time = "2025-10-02T17:43:39.137Z" },
+ { url = "https://files.pythonhosted.org/packages/46/33/92ef41c6fad0233e41d3d84ba8e8ad18d1780f1e5d99b3c683e6d7f98b63/identify-2.6.18-py2.py3-none-any.whl", hash = "sha256:8db9d3c8ea9079db92cafb0ebf97abdc09d52e97f4dcf773a2e694048b7cd737", size = 99394, upload-time = "2026-03-15T18:39:48.915Z" },
]
[[package]]
@@ -344,11 +360,11 @@ wheels = [
[[package]]
name = "nodeenv"
-version = "1.9.1"
+version = "1.10.0"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/43/16/fc88b08840de0e0a72a2f9d8c6bae36be573e475a6326ae854bcc549fc45/nodeenv-1.9.1.tar.gz", hash = "sha256:6ec12890a2dab7946721edbfbcd91f3319c6ccc9aec47be7c7e6b7011ee6645f", size = 47437, upload-time = "2024-06-04T18:44:11.171Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/24/bf/d1bda4f6168e0b2e9e5958945e01910052158313224ada5ce1fb2e1113b8/nodeenv-1.10.0.tar.gz", hash = "sha256:996c191ad80897d076bdfba80a41994c2b47c68e224c542b48feba42ba00f8bb", size = 55611, upload-time = "2025-12-20T14:08:54.006Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/d2/1d/1b658dbd2b9fa9c4c9f32accbfc0205d532c8c6194dc0f2a4c0428e7128a/nodeenv-1.9.1-py2.py3-none-any.whl", hash = "sha256:ba11c9782d29c27c70ffbdda2d7415098754709be8a7056d79a737cd901155c9", size = 22314, upload-time = "2024-06-04T18:44:08.352Z" },
+ { url = "https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl", hash = "sha256:5bb13e3eed2923615535339b3c620e76779af4cb4c6a90deccc9e36b274d3827", size = 23438, upload-time = "2025-12-20T14:08:52.782Z" },
]
[[package]]
@@ -359,11 +375,11 @@ sdist = { url = "https://files.pythonhosted.org/packages/ee/c0/53a2f017ac5b5397a
[[package]]
name = "platformdirs"
-version = "4.5.0"
+version = "4.9.4"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/61/33/9611380c2bdb1225fdef633e2a9610622310fed35ab11dac9620972ee088/platformdirs-4.5.0.tar.gz", hash = "sha256:70ddccdd7c99fc5942e9fc25636a8b34d04c24b335100223152c2803e4063312", size = 21632, upload-time = "2025-10-08T17:44:48.791Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/19/56/8d4c30c8a1d07013911a8fdbd8f89440ef9f08d07a1b50ab8ca8be5a20f9/platformdirs-4.9.4.tar.gz", hash = "sha256:1ec356301b7dc906d83f371c8f487070e99d3ccf9e501686456394622a01a934", size = 28737, upload-time = "2026-03-05T18:34:13.271Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/73/cb/ac7874b3e5d58441674fb70742e6c374b28b0c7cb988d37d991cde47166c/platformdirs-4.5.0-py3-none-any.whl", hash = "sha256:e578a81bb873cbb89a41fcc904c7ef523cc18284b7e3b3ccf06aca1403b7ebd3", size = 18651, upload-time = "2025-10-08T17:44:47.223Z" },
+ { url = "https://files.pythonhosted.org/packages/63/d7/97f7e3a6abb67d8080dd406fd4df842c2be0efaf712d1c899c32a075027c/platformdirs-4.9.4-py3-none-any.whl", hash = "sha256:68a9a4619a666ea6439f2ff250c12a853cd1cbd5158d258bd824a7df6be2f868", size = 21216, upload-time = "2026-03-05T18:34:12.172Z" },
]
[[package]]
@@ -384,11 +400,11 @@ wheels = [
[[package]]
name = "pygments"
-version = "2.19.2"
+version = "2.20.0"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/b0/77/a5b8c569bf593b0140bde72ea885a803b82086995367bf2037de0159d924/pygments-2.19.2.tar.gz", hash = "sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887", size = 4968631, upload-time = "2025-06-21T13:39:12.283Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/c3/b2/bc9c9196916376152d655522fdcebac55e66de6603a76a02bca1b6414f6c/pygments-2.20.0.tar.gz", hash = "sha256:6757cd03768053ff99f3039c1a36d6c0aa0b263438fcab17520b30a303a82b5f", size = 4955991, upload-time = "2026-03-29T13:29:33.898Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl", hash = "sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b", size = 1225217, upload-time = "2025-06-21T13:39:07.939Z" },
+ { url = "https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl", hash = "sha256:81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176", size = 1231151, upload-time = "2026-03-29T13:29:30.038Z" },
]
[[package]]
@@ -403,6 +419,19 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892, upload-time = "2024-03-01T18:36:18.57Z" },
]
+[[package]]
+name = "python-discovery"
+version = "1.2.1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "filelock" },
+ { name = "platformdirs" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/b9/88/815e53084c5079a59df912825a279f41dd2e0df82281770eadc732f5352c/python_discovery-1.2.1.tar.gz", hash = "sha256:180c4d114bff1c32462537eac5d6a332b768242b76b69c0259c7d14b1b680c9e", size = 58457, upload-time = "2026-03-26T22:30:44.496Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/67/0f/019d3949a40280f6193b62bc010177d4ce702d0fce424322286488569cd3/python_discovery-1.2.1-py3-none-any.whl", hash = "sha256:b6a957b24c1cd79252484d3566d1b49527581d46e789aaf43181005e56201502", size = 31674, upload-time = "2026-03-26T22:30:43.396Z" },
+]
+
[[package]]
name = "pyyaml"
version = "6.0.3"
@@ -431,7 +460,7 @@ wheels = [
[[package]]
name = "requests"
-version = "2.32.5"
+version = "2.33.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "certifi" },
@@ -439,9 +468,9 @@ dependencies = [
{ name = "idna" },
{ name = "urllib3" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/c9/74/b3ff8e6c8446842c3f5c837e9c3dfcfe2018ea6ecef224c710c85ef728f4/requests-2.32.5.tar.gz", hash = "sha256:dbba0bac56e100853db0ea71b82b4dfd5fe2bf6d3754a8893c3af500cec7d7cf", size = 134517, upload-time = "2025-08-18T20:46:02.573Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/5f/a4/98b9c7c6428a668bf7e42ebb7c79d576a1c3c1e3ae2d47e674b468388871/requests-2.33.1.tar.gz", hash = "sha256:18817f8c57c6263968bc123d237e3b8b08ac046f5456bd1e307ee8f4250d3517", size = 134120, upload-time = "2026-03-30T16:09:15.531Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/1e/db/4254e3eabe8020b458f1a747140d32277ec7a271daf1d235b70dc0b4e6e3/requests-2.32.5-py3-none-any.whl", hash = "sha256:2462f94637a34fd532264295e186976db0f5d453d1cdd31473c85a6a161affb6", size = 64738, upload-time = "2025-08-18T20:46:00.542Z" },
+ { url = "https://files.pythonhosted.org/packages/d7/8e/7540e8a2036f79a125c1d2ebadf69ed7901608859186c856fa0388ef4197/requests-2.33.1-py3-none-any.whl", hash = "sha256:4e6d1ef462f3626a1f0a0a9c42dd93c63bad33f9f1c1937509b8c5c8718ab56a", size = 64947, upload-time = "2026-03-30T16:09:13.83Z" },
]
[[package]]
@@ -464,14 +493,15 @@ wheels = [
[[package]]
name = "virtualenv"
-version = "20.36.1"
+version = "21.2.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "distlib" },
{ name = "filelock" },
{ name = "platformdirs" },
+ { name = "python-discovery" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/aa/a3/4d310fa5f00863544e1d0f4de93bddec248499ccf97d4791bc3122c9d4f3/virtualenv-20.36.1.tar.gz", hash = "sha256:8befb5c81842c641f8ee658481e42641c68b5eab3521d8e092d18320902466ba", size = 6032239, upload-time = "2026-01-09T18:21:01.296Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/aa/92/58199fe10049f9703c2666e809c4f686c54ef0a68b0f6afccf518c0b1eb9/virtualenv-21.2.0.tar.gz", hash = "sha256:1720dc3a62ef5b443092e3f499228599045d7fea4c79199770499df8becf9098", size = 5840618, upload-time = "2026-03-09T17:24:38.013Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/6a/2a/dc2228b2888f51192c7dc766106cd475f1b768c10caaf9727659726f7391/virtualenv-20.36.1-py3-none-any.whl", hash = "sha256:575a8d6b124ef88f6f51d56d656132389f961062a9177016a50e4f507bbcc19f", size = 6008258, upload-time = "2026-01-09T18:20:59.425Z" },
+ { url = "https://files.pythonhosted.org/packages/c6/59/7d02447a55b2e55755011a647479041bc92a82e143f96a8195cb33bd0a1c/virtualenv-21.2.0-py3-none-any.whl", hash = "sha256:1bd755b504931164a5a496d217c014d098426cddc79363ad66ac78125f9d908f", size = 5825084, upload-time = "2026-03-09T17:24:35.378Z" },
]