diff --git a/.air.toml b/.air.toml
index 8854041a25..6e3c5bdc83 100644
--- a/.air.toml
+++ b/.air.toml
@@ -4,7 +4,7 @@ tmp_dir = ".air"
[build]
pre_cmd = ["killall -9 gitea 2>/dev/null || true"] # kill off potential zombie processes from previous runs
cmd = "make --no-print-directory backend"
-bin = "gitea"
+entrypoint = ["./gitea"]
delay = 2000
include_ext = ["go", "tmpl"]
include_file = ["main.go"]
diff --git a/.editorconfig b/.editorconfig
index 13aa8d50f0..bf1cf757cc 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -25,6 +25,10 @@ insert_final_newline = false
[templates/user/auth/oidc_wellknown.tmpl]
indent_style = space
+[templates/shared/actions/runner_badge_*.tmpl]
+# editconfig lint requires these XML-like files to have charset defined, but the files don't have.
+charset = unset
+
[Makefile]
indent_style = tab
diff --git a/.github/workflows/pull-e2e-tests.yml b/.github/workflows/pull-e2e-tests.yml
deleted file mode 100644
index 4f806e93bd..0000000000
--- a/.github/workflows/pull-e2e-tests.yml
+++ /dev/null
@@ -1,35 +0,0 @@
-name: e2e-tests
-
-on:
- pull_request:
-
-concurrency:
- group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
- cancel-in-progress: true
-
-jobs:
- files-changed:
- uses: ./.github/workflows/files-changed.yml
-
- test-e2e:
- # the "test-e2e" won't pass, and it seems that there is no useful test, so skip
- # if: needs.files-changed.outputs.backend == 'true' || needs.files-changed.outputs.frontend == 'true' || needs.files-changed.outputs.actions == 'true'
- if: false
- needs: files-changed
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v5
- - uses: actions/setup-go@v6
- with:
- go-version-file: go.mod
- check-latest: true
- - uses: pnpm/action-setup@v4
- - uses: actions/setup-node@v5
- with:
- node-version: 24
- - run: make deps-frontend frontend deps-backend
- - run: pnpm exec playwright install --with-deps
- - run: make test-e2e-sqlite
- timeout-minutes: 40
- env:
- USE_REPO_TEST_DIR: 1
diff --git a/.golangci.yml b/.golangci.yml
index 60482c415f..2f1587a1e6 100644
--- a/.golangci.yml
+++ b/.golangci.yml
@@ -114,6 +114,10 @@ linters:
- stringsbuilder
perfsprint:
concat-loop: false
+ govet:
+ enable:
+ - nilness
+ - unusedwrite
exclusions:
generated: lax
presets:
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 96e05c578f..9d696bf6b1 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -166,19 +166,19 @@ Here's how to run the test suite:
- code lint
-| | |
-| :-------------------- | :---------------------------------------------------------------- |
+| | |
+| :-------------------- | :--------------------------------------------------------------------------- |
|``make lint`` | lint everything (not needed if you only change the front- **or** backend) |
-|``make lint-frontend`` | lint frontend files |
-|``make lint-backend`` | lint backend files |
+|``make lint-frontend`` | lint frontend files |
+|``make lint-backend`` | lint backend files |
- run tests (we suggest running them on Linux)
-| Command | Action | |
-| :------------------------------------- | :----------------------------------------------- | ------------ |
-|``make test[\#SpecificTestName]`` | run unit test(s) | |
-|``make test-sqlite[\#SpecificTestName]``| run [integration](tests/integration) test(s) for SQLite |[More details](tests/integration/README.md) |
-|``make test-e2e-sqlite[\#SpecificTestName]``| run [end-to-end](tests/e2e) test(s) for SQLite |[More details](tests/e2e/README.md) |
+| Command | Action | |
+| :------------------------------------------ | :------------------------------------------------------- | ------------------------------------------- |
+|``make test[\#SpecificTestName]`` | run unit test(s) | |
+|``make test-sqlite[\#SpecificTestName]`` | run [integration](tests/integration) test(s) for SQLite | [More details](tests/integration/README.md) |
+|``make test-e2e-sqlite[\#SpecificTestName]`` | run [end-to-end](tests/e2e) test(s) for SQLite | [More details](tests/e2e/README.md) |
## Translation
diff --git a/Makefile b/Makefile
index 5dbf141723..647ab38e14 100644
--- a/Makefile
+++ b/Makefile
@@ -39,8 +39,7 @@ SWAGGER_PACKAGE ?= github.com/go-swagger/go-swagger/cmd/swagger@v0.33.1
XGO_PACKAGE ?= src.techknowlogick.com/xgo@latest
GO_LICENSES_PACKAGE ?= github.com/google/go-licenses@v1
GOVULNCHECK_PACKAGE ?= golang.org/x/vuln/cmd/govulncheck@v1
-ACTIONLINT_PACKAGE ?= github.com/rhysd/actionlint/cmd/actionlint@v1
-GOPLS_PACKAGE ?= golang.org/x/tools/gopls@v0.20.0
+ACTIONLINT_PACKAGE ?= github.com/rhysd/actionlint/cmd/actionlint@v1.7.9
DOCKER_IMAGE ?= gitea/gitea
DOCKER_TAG ?= latest
@@ -333,7 +332,7 @@ lint-frontend: lint-js lint-css ## lint frontend files
lint-frontend-fix: lint-js-fix lint-css-fix ## lint frontend files and fix issues
.PHONY: lint-backend
-lint-backend: lint-go lint-go-gitea-vet lint-go-gopls lint-editorconfig ## lint backend files
+lint-backend: lint-go lint-go-gitea-vet lint-editorconfig ## lint backend files
.PHONY: lint-backend-fix
lint-backend-fix: lint-go-fix lint-go-gitea-vet lint-editorconfig ## lint backend files and fix issues
@@ -364,6 +363,10 @@ lint-swagger: node_modules ## lint swagger files
lint-md: node_modules ## lint markdown files
$(NODE_VARS) pnpm exec markdownlint *.md
+.PHONY: lint-md-fix
+lint-md-fix: node_modules ## lint markdown files and fix issues
+ $(NODE_VARS) pnpm exec markdownlint --fix *.md
+
.PHONY: lint-spell
lint-spell: ## lint spelling
@go run $(MISSPELL_PACKAGE) -dict assets/misspellings.csv -error $(SPELLCHECK_FILES)
@@ -392,11 +395,6 @@ lint-go-gitea-vet: ## lint go files with gitea-vet
@echo "Running gitea-vet..."
@$(GO) vet -vettool="$(shell GOOS= GOARCH= go tool -n gitea-vet)" ./...
-.PHONY: lint-go-gopls
-lint-go-gopls: ## lint go files with gopls
- @echo "Running gopls check..."
- @GO=$(GO) GOPLS_PACKAGE=$(GOPLS_PACKAGE) tools/lint-go-gopls.sh $(GO_SOURCES)
-
.PHONY: lint-editorconfig
lint-editorconfig:
@echo "Running editorconfig check..."
@@ -840,7 +838,6 @@ deps-tools: ## install tool dependencies
$(GO) install $(GO_LICENSES_PACKAGE) & \
$(GO) install $(GOVULNCHECK_PACKAGE) & \
$(GO) install $(ACTIONLINT_PACKAGE) & \
- $(GO) install $(GOPLS_PACKAGE) & \
wait
node_modules: pnpm-lock.yaml
diff --git a/custom/conf/app.example.ini b/custom/conf/app.example.ini
index 33bfe752a0..2ade845590 100644
--- a/custom/conf/app.example.ini
+++ b/custom/conf/app.example.ini
@@ -2334,7 +2334,7 @@ LEVEL = Info
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; Resynchronize pre-receive, update and post-receive hooks of all repositories.
+;; Resynchronize git hooks of all repositories (pre-receive, update, post-receive, proc-receive, ...)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;[cron.resync_all_hooks]
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
diff --git a/eslint.config.ts b/eslint.config.ts
index ed2bc65245..c849cdbc62 100644
--- a/eslint.config.ts
+++ b/eslint.config.ts
@@ -3,7 +3,6 @@ import comments from '@eslint-community/eslint-plugin-eslint-comments';
import github from 'eslint-plugin-github';
import globals from 'globals';
import importPlugin from 'eslint-plugin-import-x';
-import noUseExtendNative from 'eslint-plugin-no-use-extend-native';
import playwright from 'eslint-plugin-playwright';
import regexp from 'eslint-plugin-regexp';
import sonarjs from 'eslint-plugin-sonarjs';
@@ -58,7 +57,6 @@ export default defineConfig([
'array-func': arrayFunc,
// @ts-expect-error -- https://github.com/un-ts/eslint-plugin-import-x/issues/203
'import-x': importPlugin,
- 'no-use-extend-native': noUseExtendNative,
regexp,
sonarjs,
unicorn,
@@ -155,7 +153,7 @@ export default defineConfig([
'@typescript-eslint/ban-tslint-comment': [0],
'@typescript-eslint/class-literal-property-style': [0],
'@typescript-eslint/class-methods-use-this': [0],
- '@typescript-eslint/consistent-generic-constructors': [0],
+ '@typescript-eslint/consistent-generic-constructors': [2, 'constructor'],
'@typescript-eslint/consistent-indexed-object-style': [0],
'@typescript-eslint/consistent-return': [0],
'@typescript-eslint/consistent-type-assertions': [2, {assertionStyle: 'as', objectLiteralTypeAssertions: 'allow'}],
@@ -207,7 +205,7 @@ export default defineConfig([
'@typescript-eslint/no-non-null-asserted-optional-chain': [2],
'@typescript-eslint/no-non-null-assertion': [0],
'@typescript-eslint/no-redeclare': [0],
- '@typescript-eslint/no-redundant-type-constituents': [2],
+ '@typescript-eslint/no-redundant-type-constituents': [0], // rule does not properly work without strickNullChecks
'@typescript-eslint/no-require-imports': [2],
'@typescript-eslint/no-restricted-imports': [0],
'@typescript-eslint/no-restricted-types': [0],
@@ -231,6 +229,7 @@ export default defineConfig([
'@typescript-eslint/no-unsafe-return': [0],
'@typescript-eslint/no-unsafe-unary-minus': [2],
'@typescript-eslint/no-unused-expressions': [0],
+ '@typescript-eslint/no-unused-private-class-members': [2],
'@typescript-eslint/no-unused-vars': [2, {vars: 'all', args: 'all', caughtErrors: 'all', ignoreRestSiblings: false, argsIgnorePattern: '^_', varsIgnorePattern: '^_', caughtErrorsIgnorePattern: '^_', destructuredArrayIgnorePattern: '^_'}],
'@typescript-eslint/no-use-before-define': [2, {functions: false, classes: true, variables: true, allowNamedExports: true, typedefs: false, enums: false, ignoreTypeReferences: true}],
'@typescript-eslint/no-useless-constructor': [0],
@@ -587,10 +586,9 @@ export default defineConfig([
'no-unsafe-negation': [2],
'no-unused-expressions': [2],
'no-unused-labels': [2],
- 'no-unused-private-class-members': [2],
+ 'no-unused-private-class-members': [0], // handled by @typescript-eslint/no-unused-private-class-members
'no-unused-vars': [0], // handled by @typescript-eslint/no-unused-vars
'no-use-before-define': [0], // handled by @typescript-eslint/no-use-before-define
- 'no-use-extend-native/no-use-extend-native': [2],
'no-useless-assignment': [2],
'no-useless-backreference': [2],
'no-useless-call': [2],
@@ -935,7 +933,6 @@ export default defineConfig([
},
{
files: ['**/*.test.ts', 'web_src/js/test/setup.ts'],
- // @ts-expect-error - https://github.com/vitest-dev/eslint-plugin-vitest/issues/737
plugins: {vitest},
languageOptions: {globals: globals.vitest},
rules: {
diff --git a/go.mod b/go.mod
index 11ab491946..51cf47b2d3 100644
--- a/go.mod
+++ b/go.mod
@@ -17,7 +17,7 @@ require (
gitea.com/go-chi/binding v0.0.0-20240430071103-39a851e106ed
gitea.com/go-chi/cache v0.2.1
gitea.com/go-chi/captcha v0.0.0-20240315150714-fb487f629098
- gitea.com/go-chi/session v0.0.0-20250926004215-636cadd82e15
+ gitea.com/go-chi/session v0.0.0-20251124165456-68e0254e989e
gitea.com/lunny/dingtalk_webhook v0.0.0-20171025031554-e3534c89ef96
gitea.com/lunny/levelqueue v0.4.2-0.20230414023320-3c0159fe0fe4
github.com/42wim/httpsig v1.2.3
@@ -117,13 +117,13 @@ require (
github.com/yuin/goldmark-highlighting/v2 v2.0.0-20230729083705-37449abec8cc
github.com/yuin/goldmark-meta v1.1.0
gitlab.com/gitlab-org/api/client-go v0.142.4
- golang.org/x/crypto v0.43.0
+ golang.org/x/crypto v0.45.0
golang.org/x/image v0.30.0
- golang.org/x/net v0.45.0
+ golang.org/x/net v0.47.0
golang.org/x/oauth2 v0.30.0
- golang.org/x/sync v0.17.0
- golang.org/x/sys v0.37.0
- golang.org/x/text v0.30.0
+ golang.org/x/sync v0.18.0
+ golang.org/x/sys v0.38.0
+ golang.org/x/text v0.31.0
google.golang.org/grpc v1.75.0
google.golang.org/protobuf v1.36.8
gopkg.in/ini.v1 v1.67.0
@@ -281,9 +281,9 @@ require (
go.uber.org/zap/exp v0.3.0 // indirect
go4.org v0.0.0-20230225012048-214862532bf5 // indirect
golang.org/x/exp v0.0.0-20250819193227-8b4c13bb791b // indirect
- golang.org/x/mod v0.28.0 // indirect
+ golang.org/x/mod v0.29.0 // indirect
golang.org/x/time v0.12.0 // indirect
- golang.org/x/tools v0.37.0 // indirect
+ golang.org/x/tools v0.38.0 // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20250826171959-ef028d996bc1 // indirect
gopkg.in/warnings.v0 v0.1.2 // indirect
gopkg.in/yaml.v2 v2.4.0 // indirect
diff --git a/go.sum b/go.sum
index 29f5ba745f..86fe782ae7 100644
--- a/go.sum
+++ b/go.sum
@@ -41,8 +41,8 @@ gitea.com/go-chi/cache v0.2.1 h1:bfAPkvXlbcZxPCpcmDVCWoHgiBSBmZN/QosnZvEC0+g=
gitea.com/go-chi/cache v0.2.1/go.mod h1:Qic0HZ8hOHW62ETGbonpwz8WYypj9NieU9659wFUJ8Q=
gitea.com/go-chi/captcha v0.0.0-20240315150714-fb487f629098 h1:p2ki+WK0cIeNQuqjR98IP2KZQKRzJJiV7aTeMAFwaWo=
gitea.com/go-chi/captcha v0.0.0-20240315150714-fb487f629098/go.mod h1:LjzIOHlRemuUyO7WR12fmm18VZIlCAaOt9L3yKw40pk=
-gitea.com/go-chi/session v0.0.0-20250926004215-636cadd82e15 h1:qFYmz05u/s9664o7+XEgrlHXSPQ4uHO8/ccZGUb1uxA=
-gitea.com/go-chi/session v0.0.0-20250926004215-636cadd82e15/go.mod h1:0iEpFKnwO5dG0aF98O4eq6FMsAiXkNBaDIlUOlq4BtM=
+gitea.com/go-chi/session v0.0.0-20251124165456-68e0254e989e h1:4bugwPyGMLvblEm3pZ8fZProSPVxE4l0UXF2Kv6IJoY=
+gitea.com/go-chi/session v0.0.0-20251124165456-68e0254e989e/go.mod h1:KDvcfMUoXfATPHs2mbMoXFTXT45/FAFAS39waz9tPk0=
gitea.com/lunny/dingtalk_webhook v0.0.0-20171025031554-e3534c89ef96 h1:+wWBi6Qfruqu7xJgjOIrKVQGiLUZdpKYCZewJ4clqhw=
gitea.com/lunny/dingtalk_webhook v0.0.0-20171025031554-e3534c89ef96/go.mod h1:VyMQP6ue6MKHM8UsOXfNfuMKD0oSAWZdXVcpHIN2yaY=
gitea.com/lunny/levelqueue v0.4.2-0.20230414023320-3c0159fe0fe4 h1:IFT+hup2xejHqdhS7keYWioqfmxdnfblFDTGoOwcZ+o=
@@ -840,8 +840,8 @@ golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDf
golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8=
golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk=
golang.org/x/crypto v0.32.0/go.mod h1:ZnnJkOaASj8g0AjIduWNlq2NRxL0PlBrbKVyZ6V/Ugc=
-golang.org/x/crypto v0.43.0 h1:dduJYIi3A3KOfdGOHX8AVZ/jGiyPa3IbBozJ5kNuE04=
-golang.org/x/crypto v0.43.0/go.mod h1:BFbav4mRNlXJL4wNeejLpWxB7wMbc79PdRGhWKncxR0=
+golang.org/x/crypto v0.45.0 h1:jMBrvKuj23MTlT0bQEOBcAE0mjg8mK9RXFhRH6nyF3Q=
+golang.org/x/crypto v0.45.0/go.mod h1:XTGrrkGJve7CYK7J8PEww4aY7gM3qMCElcJQ8n8JdX4=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
@@ -878,8 +878,8 @@ golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/mod v0.15.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
-golang.org/x/mod v0.28.0 h1:gQBtGhjxykdjY9YhZpSlZIsbnaE2+PgjfLWUQTnoZ1U=
-golang.org/x/mod v0.28.0/go.mod h1:yfB/L0NOf/kmEbXjzCPOx1iK1fRutOydrCMsqRhEBxI=
+golang.org/x/mod v0.29.0 h1:HV8lRxZC4l2cr3Zq1LvtOsi/ThTgWnUk/y64QSs8GwA=
+golang.org/x/mod v0.29.0/go.mod h1:NyhrlYXJ2H4eJiRy/WDBO6HMqZQ6q9nk4JzS3NuCK+w=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -908,8 +908,8 @@ golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk=
golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44=
golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM=
golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4=
-golang.org/x/net v0.45.0 h1:RLBg5JKixCy82FtLJpeNlVM0nrSqpCRYzVU1n8kj0tM=
-golang.org/x/net v0.45.0/go.mod h1:ECOoLqd5U3Lhyeyo/QDCEVQ4sNgYsqvCZ722XogGieY=
+golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY=
+golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
@@ -932,8 +932,8 @@ golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=
golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
-golang.org/x/sync v0.17.0 h1:l60nONMj9l5drqw6jlhIELNv9I0A4OFgRsG9k2oT9Ug=
-golang.org/x/sync v0.17.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
+golang.org/x/sync v0.18.0 h1:kr88TuHDroi+UVf+0hZnirlk8o8T+4MrK6mr60WkH/I=
+golang.org/x/sync v0.18.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@@ -975,8 +975,8 @@ golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
-golang.org/x/sys v0.37.0 h1:fdNQudmxPjkdUTPnLn5mdQv7Zwvbvpaxqs831goi9kQ=
-golang.org/x/sys v0.37.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
+golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc=
+golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
golang.org/x/telemetry v0.0.0-20240228155512-f48c80bd79b2/go.mod h1:TeRTkGYfJXctD9OcfyVLyj2J3IxLnKwHJR8f4D8a3YE=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
@@ -987,8 +987,8 @@ golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk=
golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY=
golang.org/x/term v0.27.0/go.mod h1:iMsnZpn0cago0GOrHO2+Y7u7JPn5AylBrcoWkElMTSM=
golang.org/x/term v0.28.0/go.mod h1:Sw/lC2IAUZ92udQNf3WodGtn4k/XoLyZoh8v/8uiwek=
-golang.org/x/term v0.36.0 h1:zMPR+aF8gfksFprF/Nc/rd1wRS1EI6nDBGyWAvDzx2Q=
-golang.org/x/term v0.36.0/go.mod h1:Qu394IJq6V6dCBRgwqshf3mPF85AqzYEzofzRdZkWss=
+golang.org/x/term v0.37.0 h1:8EGAD0qCmHYZg6J17DvsMy9/wJ7/D/4pV/wfnld5lTU=
+golang.org/x/term v0.37.0/go.mod h1:5pB4lxRNYYVZuTLmy8oR2BH8dflOR+IbTYFD8fi3254=
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
@@ -1002,8 +1002,8 @@ golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ=
-golang.org/x/text v0.30.0 h1:yznKA/E9zq54KzlzBEAWn1NXSQ8DIp/NYMy88xJjl4k=
-golang.org/x/text v0.30.0/go.mod h1:yDdHFIX9t+tORqspjENWgzaCVXgk0yYnYuSZ8UzzBVM=
+golang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM=
+golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM=
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.12.0 h1:ScB/8o8olJvc+CQPWrK3fPZNfh7qgwCrY0zJmoEQLSE=
@@ -1039,8 +1039,8 @@ golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc
golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58=
golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk=
-golang.org/x/tools v0.37.0 h1:DVSRzp7FwePZW356yEAChSdNcQo6Nsp+fex1SUW09lE=
-golang.org/x/tools v0.37.0/go.mod h1:MBN5QPQtLMHVdvsbtarmTNukZDdgwdwlO5qGacAzF0w=
+golang.org/x/tools v0.38.0 h1:Hx2Xv8hISq8Lm16jvBZ2VQf+RLmbd7wVUsALibYI/IQ=
+golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
diff --git a/models/pull/review_state.go b/models/pull/review_state.go
index e8b759c0cc..a0f5548dd4 100644
--- a/models/pull/review_state.go
+++ b/models/pull/review_state.go
@@ -73,18 +73,18 @@ func GetReviewState(ctx context.Context, userID, pullID int64, commitSHA string)
// UpdateReviewState updates the given review inside the database, regardless of whether it existed before or not
// The given map of files with their viewed state will be merged with the previous review, if present
-func UpdateReviewState(ctx context.Context, userID, pullID int64, commitSHA string, updatedFiles map[string]ViewedState) error {
+func UpdateReviewState(ctx context.Context, userID, pullID int64, commitSHA string, updatedFiles map[string]ViewedState) (*ReviewState, error) {
log.Trace("Updating review for user %d, repo %d, commit %s with the updated files %v.", userID, pullID, commitSHA, updatedFiles)
review, exists, err := GetReviewState(ctx, userID, pullID, commitSHA)
if err != nil {
- return err
+ return nil, err
}
if exists {
review.UpdatedFiles = mergeFiles(review.UpdatedFiles, updatedFiles)
} else if previousReview, err := getNewestReviewStateApartFrom(ctx, userID, pullID, commitSHA); err != nil {
- return err
+ return nil, err
// Overwrite the viewed files of the previous review if present
} else if previousReview != nil {
@@ -98,11 +98,11 @@ func UpdateReviewState(ctx context.Context, userID, pullID int64, commitSHA stri
if !exists {
log.Trace("Inserting new review for user %d, repo %d, commit %s with the updated files %v.", userID, pullID, commitSHA, review.UpdatedFiles)
_, err := engine.Insert(review)
- return err
+ return nil, err
}
log.Trace("Updating already existing review with ID %d (user %d, repo %d, commit %s) with the updated files %v.", review.ID, userID, pullID, commitSHA, review.UpdatedFiles)
- _, err = engine.ID(review.ID).Update(&ReviewState{UpdatedFiles: review.UpdatedFiles})
- return err
+ _, err = engine.ID(review.ID).Cols("updated_files").Update(review)
+ return review, err
}
// mergeFiles merges the given maps of files with their viewing state into one map.
diff --git a/modules/auth/webauthn/webauthn.go b/modules/auth/webauthn/webauthn.go
index cbf5279c65..86f55c6b24 100644
--- a/modules/auth/webauthn/webauthn.go
+++ b/modules/auth/webauthn/webauthn.go
@@ -22,7 +22,7 @@ var WebAuthn *webauthn.WebAuthn
// Init initializes the WebAuthn instance from the config.
func Init() {
- gob.Register(&webauthn.SessionData{})
+ gob.Register(&webauthn.SessionData{}) // TODO: CHI-SESSION-GOB-REGISTER.
appURL, _ := protocol.FullyQualifiedOrigin(setting.AppURL)
diff --git a/modules/packages/composer/metadata.go b/modules/packages/composer/metadata.go
index 6035eae8ca..3aac7058aa 100644
--- a/modules/packages/composer/metadata.go
+++ b/modules/packages/composer/metadata.go
@@ -4,8 +4,13 @@
package composer
import (
+ "archive/tar"
"archive/zip"
+ "compress/bzip2"
+ "compress/gzip"
+ "errors"
"io"
+ "io/fs"
"path"
"regexp"
"strings"
@@ -29,8 +34,10 @@ var (
ErrInvalidVersion = util.NewInvalidArgumentErrorf("package version is invalid")
)
-// Package represents a Composer package
-type Package struct {
+// PackageInfo represents Composer package info
+type PackageInfo struct {
+ Filename string
+
Name string
Version string
Type string
@@ -44,7 +51,7 @@ type Metadata struct {
Description string `json:"description,omitempty"`
Readme string `json:"readme,omitempty"`
Keywords []string `json:"keywords,omitempty"`
- Comments Comments `json:"_comments,omitempty"`
+ Comments Comments `json:"_comment,omitempty"`
Homepage string `json:"homepage,omitempty"`
License Licenses `json:"license,omitempty"`
Authors []Author `json:"authors,omitempty"`
@@ -75,7 +82,7 @@ func (l *Licenses) UnmarshalJSON(data []byte) error {
if err := json.Unmarshal(data, &values); err != nil {
return err
}
- *l = Licenses(values)
+ *l = values
}
return nil
}
@@ -97,7 +104,7 @@ func (c *Comments) UnmarshalJSON(data []byte) error {
if err := json.Unmarshal(data, &values); err != nil {
return err
}
- *c = Comments(values)
+ *c = values
}
return nil
}
@@ -111,39 +118,121 @@ type Author struct {
var nameMatch = regexp.MustCompile(`\A[a-z0-9]([_\.-]?[a-z0-9]+)*/[a-z0-9](([_\.]?|-{0,2})[a-z0-9]+)*\z`)
-// ParsePackage parses the metadata of a Composer package file
-func ParsePackage(r io.ReaderAt, size int64) (*Package, error) {
- archive, err := zip.NewReader(r, size)
+type ReadSeekAt interface {
+ io.Reader
+ io.ReaderAt
+ io.Seeker
+ Size() int64
+}
+
+func readPackageFileZip(r ReadSeekAt, filename string, limit int) ([]byte, error) {
+ archive, err := zip.NewReader(r, r.Size())
if err != nil {
return nil, err
}
for _, file := range archive.File {
- if strings.Count(file.Name, "/") > 1 {
- continue
- }
- if strings.HasSuffix(strings.ToLower(file.Name), "composer.json") {
+ filePath := path.Clean(file.Name)
+ if util.AsciiEqualFold(filePath, filename) {
f, err := archive.Open(file.Name)
if err != nil {
return nil, err
}
defer f.Close()
- return ParseComposerFile(archive, path.Dir(file.Name), f)
+ return util.ReadWithLimit(f, limit)
}
}
- return nil, ErrMissingComposerFile
+ return nil, fs.ErrNotExist
}
-// ParseComposerFile parses a composer.json file to retrieve the metadata of a Composer package
-func ParseComposerFile(archive *zip.Reader, pathPrefix string, r io.Reader) (*Package, error) {
+func readPackageFileTar(r io.Reader, filename string, limit int) ([]byte, error) {
+ tarReader := tar.NewReader(r)
+ for {
+ header, err := tarReader.Next()
+ if err == io.EOF {
+ break
+ } else if err != nil {
+ return nil, err
+ }
+
+ filePath := path.Clean(header.Name)
+ if util.AsciiEqualFold(filePath, filename) {
+ return util.ReadWithLimit(tarReader, limit)
+ }
+ }
+ return nil, fs.ErrNotExist
+}
+
+const (
+ pkgExtZip = ".zip"
+ pkgExtTarGz = ".tar.gz"
+ pkgExtTarBz2 = ".tar.bz2"
+)
+
+func detectPackageExtName(r ReadSeekAt) (string, error) {
+ headBytes := make([]byte, 4)
+ _, err := r.ReadAt(headBytes, 0)
+ if err != nil {
+ return "", err
+ }
+ _, err = r.Seek(0, io.SeekStart)
+ if err != nil {
+ return "", err
+ }
+ switch {
+ case headBytes[0] == 'P' && headBytes[1] == 'K':
+ return pkgExtZip, nil
+ case string(headBytes[:3]) == "BZh":
+ return pkgExtTarBz2, nil
+ case headBytes[0] == 0x1f && headBytes[1] == 0x8b:
+ return pkgExtTarGz, nil
+ }
+ return "", util.NewInvalidArgumentErrorf("not a valid package file")
+}
+
+func readPackageFile(pkgExt string, r ReadSeekAt, filename string, limit int) ([]byte, error) {
+ _, err := r.Seek(0, io.SeekStart)
+ if err != nil {
+ return nil, err
+ }
+
+ switch pkgExt {
+ case pkgExtZip:
+ return readPackageFileZip(r, filename, limit)
+ case pkgExtTarBz2:
+ bzip2Reader := bzip2.NewReader(r)
+ return readPackageFileTar(bzip2Reader, filename, limit)
+ case pkgExtTarGz:
+ gzReader, err := gzip.NewReader(r)
+ if err != nil {
+ return nil, err
+ }
+ return readPackageFileTar(gzReader, filename, limit)
+ }
+ return nil, util.NewInvalidArgumentErrorf("not a valid package file")
+}
+
+// ParsePackage parses the metadata of a Composer package file
+func ParsePackage(r ReadSeekAt, optVersion ...string) (*PackageInfo, error) {
+ pkgExt, err := detectPackageExtName(r)
+ if err != nil {
+ return nil, err
+ }
+ dataComposerJSON, err := readPackageFile(pkgExt, r, "composer.json", 10*1024*1024)
+ if errors.Is(err, fs.ErrNotExist) {
+ return nil, ErrMissingComposerFile
+ } else if err != nil {
+ return nil, err
+ }
+
var cj struct {
Name string `json:"name"`
Version string `json:"version"`
Type string `json:"type"`
Metadata
}
- if err := json.NewDecoder(r).Decode(&cj); err != nil {
+ if err := json.Unmarshal(dataComposerJSON, &cj); err != nil {
return nil, err
}
@@ -151,6 +240,9 @@ func ParseComposerFile(archive *zip.Reader, pathPrefix string, r io.Reader) (*Pa
return nil, ErrInvalidName
}
+ if cj.Version == "" {
+ cj.Version = util.OptionalArg(optVersion)
+ }
if cj.Version != "" {
if _, err := version.NewSemver(cj.Version); err != nil {
return nil, ErrInvalidVersion
@@ -168,17 +260,23 @@ func ParseComposerFile(archive *zip.Reader, pathPrefix string, r io.Reader) (*Pa
if cj.Readme == "" {
cj.Readme = "README.md"
}
- f, err := archive.Open(path.Join(pathPrefix, cj.Readme))
- if err == nil {
- // 10kb limit for readme content
- buf, _ := io.ReadAll(io.LimitReader(f, 10*1024))
- cj.Readme = string(buf)
- _ = f.Close()
- } else {
+ dataReadmeMd, _ := readPackageFile(pkgExt, r, cj.Readme, 10*1024)
+
+ // FIXME: legacy problem, the "Readme" field is abused, it should always be the path to the readme file
+ if len(dataReadmeMd) == 0 {
cj.Readme = ""
+ } else {
+ cj.Readme = string(dataReadmeMd)
}
- return &Package{
+ // FIXME: legacy format: strings.ToLower(fmt.Sprintf("%s.%s.zip", strings.ReplaceAll(cp.Name, "/", "-"), cp.Version)), doesn't read good
+ pkgFilename := strings.ReplaceAll(cj.Name, "/", "-")
+ if cj.Version != "" {
+ pkgFilename += "." + cj.Version
+ }
+ pkgFilename += pkgExt
+ return &PackageInfo{
+ Filename: pkgFilename,
Name: cj.Name,
Version: cj.Version,
Type: cj.Type,
diff --git a/modules/packages/composer/metadata_test.go b/modules/packages/composer/metadata_test.go
index a5e317daf1..4eca4d92e7 100644
--- a/modules/packages/composer/metadata_test.go
+++ b/modules/packages/composer/metadata_test.go
@@ -4,14 +4,19 @@
package composer
import (
+ "archive/tar"
"archive/zip"
"bytes"
+ "compress/gzip"
+ "io"
"strings"
"testing"
"code.gitea.io/gitea/modules/json"
+ "github.com/dsnet/compress/bzip2"
"github.com/stretchr/testify/assert"
+ "github.com/stretchr/testify/require"
)
const (
@@ -26,8 +31,10 @@ const (
license = "MIT"
)
-const composerContent = `{
+func buildComposerContent(version string) string {
+ return `{
"name": "` + name + `",
+ "version": "` + version + `",
"description": "` + description + `",
"type": "` + packageType + `",
"license": "` + license + `",
@@ -44,8 +51,9 @@ const composerContent = `{
"require": {
"php": ">=7.2 || ^8.0"
},
- "_comments": "` + comments + `"
+ "_comment": "` + comments + `"
}`
+}
func TestLicenseUnmarshal(t *testing.T) {
var l Licenses
@@ -73,16 +81,34 @@ func TestParsePackage(t *testing.T) {
archive := zip.NewWriter(&buf)
for name, content := range files {
w, _ := archive.Create(name)
- w.Write([]byte(content))
+ _, _ = w.Write([]byte(content))
}
- archive.Close()
+ _ = archive.Close()
+ return buf.Bytes()
+ }
+
+ createArchiveTar := func(comp func(io.Writer) io.WriteCloser, files map[string]string) []byte {
+ var buf bytes.Buffer
+ w := comp(&buf)
+ archive := tar.NewWriter(w)
+ for name, content := range files {
+ hdr := &tar.Header{
+ Name: name,
+ Mode: 0o600,
+ Size: int64(len(content)),
+ }
+ _ = archive.WriteHeader(hdr)
+ _, _ = archive.Write([]byte(content))
+ }
+ _ = w.Close()
+ _ = archive.Close()
return buf.Bytes()
}
t.Run("MissingComposerFile", func(t *testing.T) {
data := createArchive(map[string]string{"dummy.txt": ""})
- cp, err := ParsePackage(bytes.NewReader(data), int64(len(data)))
+ cp, err := ParsePackage(bytes.NewReader(data))
assert.Nil(t, cp)
assert.ErrorIs(t, err, ErrMissingComposerFile)
})
@@ -90,7 +116,7 @@ func TestParsePackage(t *testing.T) {
t.Run("MissingComposerFileInRoot", func(t *testing.T) {
data := createArchive(map[string]string{"sub/sub/composer.json": ""})
- cp, err := ParsePackage(bytes.NewReader(data), int64(len(data)))
+ cp, err := ParsePackage(bytes.NewReader(data))
assert.Nil(t, cp)
assert.ErrorIs(t, err, ErrMissingComposerFile)
})
@@ -98,7 +124,7 @@ func TestParsePackage(t *testing.T) {
t.Run("InvalidComposerFile", func(t *testing.T) {
data := createArchive(map[string]string{"composer.json": ""})
- cp, err := ParsePackage(bytes.NewReader(data), int64(len(data)))
+ cp, err := ParsePackage(bytes.NewReader(data))
assert.Nil(t, cp)
assert.Error(t, err)
})
@@ -106,7 +132,7 @@ func TestParsePackage(t *testing.T) {
t.Run("InvalidPackageName", func(t *testing.T) {
data := createArchive(map[string]string{"composer.json": "{}"})
- cp, err := ParsePackage(bytes.NewReader(data), int64(len(data)))
+ cp, err := ParsePackage(bytes.NewReader(data))
assert.Nil(t, cp)
assert.ErrorIs(t, err, ErrInvalidName)
})
@@ -114,7 +140,7 @@ func TestParsePackage(t *testing.T) {
t.Run("InvalidPackageVersion", func(t *testing.T) {
data := createArchive(map[string]string{"composer.json": `{"name": "gitea/composer-package", "version": "1.a.3"}`})
- cp, err := ParsePackage(bytes.NewReader(data), int64(len(data)))
+ cp, err := ParsePackage(bytes.NewReader(data))
assert.Nil(t, cp)
assert.ErrorIs(t, err, ErrInvalidVersion)
})
@@ -122,22 +148,21 @@ func TestParsePackage(t *testing.T) {
t.Run("InvalidReadmePath", func(t *testing.T) {
data := createArchive(map[string]string{"composer.json": `{"name": "gitea/composer-package", "readme": "sub/README.md"}`})
- cp, err := ParsePackage(bytes.NewReader(data), int64(len(data)))
+ cp, err := ParsePackage(bytes.NewReader(data))
assert.NoError(t, err)
assert.NotNil(t, cp)
assert.Empty(t, cp.Metadata.Readme)
})
- t.Run("Valid", func(t *testing.T) {
- data := createArchive(map[string]string{"composer.json": composerContent, "README.md": readme})
-
- cp, err := ParsePackage(bytes.NewReader(data), int64(len(data)))
- assert.NoError(t, err)
+ assertValidPackage := func(t *testing.T, data []byte, version, filename string) {
+ cp, err := ParsePackage(bytes.NewReader(data))
+ require.NoError(t, err)
assert.NotNil(t, cp)
+ assert.Equal(t, filename, cp.Filename)
assert.Equal(t, name, cp.Name)
- assert.Empty(t, cp.Version)
+ assert.Equal(t, version, cp.Version)
assert.Equal(t, description, cp.Metadata.Description)
assert.Equal(t, readme, cp.Metadata.Readme)
assert.Len(t, cp.Metadata.Comments, 1)
@@ -149,5 +174,25 @@ func TestParsePackage(t *testing.T) {
assert.Equal(t, packageType, cp.Type)
assert.Len(t, cp.Metadata.License, 1)
assert.Equal(t, license, cp.Metadata.License[0])
+ }
+
+ t.Run("ValidZip", func(t *testing.T) {
+ data := createArchive(map[string]string{"composer.json": buildComposerContent(""), "README.md": readme})
+ assertValidPackage(t, data, "", "gitea-composer-package.zip")
+ })
+
+ t.Run("ValidTarBz2", func(t *testing.T) {
+ data := createArchiveTar(func(w io.Writer) io.WriteCloser {
+ bz2Writer, _ := bzip2.NewWriter(w, nil)
+ return bz2Writer
+ }, map[string]string{"composer.json": buildComposerContent("1.0"), "README.md": readme})
+ assertValidPackage(t, data, "1.0", "gitea-composer-package.1.0.tar.bz2")
+ })
+
+ t.Run("ValidTarGz", func(t *testing.T) {
+ data := createArchiveTar(func(w io.Writer) io.WriteCloser {
+ return gzip.NewWriter(w)
+ }, map[string]string{"composer.json": buildComposerContent(""), "README.md": readme})
+ assertValidPackage(t, data, "", "gitea-composer-package.tar.gz")
})
}
diff --git a/options/fileicon/material-icon-rules.json b/options/fileicon/material-icon-rules.json
index a9e3ad74f5..6b17e5be67 100644
--- a/options/fileicon/material-icon-rules.json
+++ b/options/fileicon/material-icon-rules.json
@@ -592,10 +592,10 @@
".settings": "folder-config",
"_settings": "folder-config",
"__settings__": "folder-config",
- "META-INF": "folder-config",
- ".META-INF": "folder-config",
- "_META-INF": "folder-config",
- "__META-INF__": "folder-config",
+ "meta-inf": "folder-config",
+ ".meta-inf": "folder-config",
+ "_meta-inf": "folder-config",
+ "__meta-inf__": "folder-config",
"option": "folder-config",
".option": "folder-config",
"_option": "folder-config",
@@ -2196,14 +2196,14 @@
".templates": "folder-template",
"_templates": "folder-template",
"__templates__": "folder-template",
- "github/ISSUE_TEMPLATE": "folder-template",
- ".github/ISSUE_TEMPLATE": "folder-template",
- "_github/ISSUE_TEMPLATE": "folder-template",
- "__github/ISSUE_TEMPLATE__": "folder-template",
- "github/PULL_REQUEST_TEMPLATE": "folder-template",
- ".github/PULL_REQUEST_TEMPLATE": "folder-template",
- "_github/PULL_REQUEST_TEMPLATE": "folder-template",
- "__github/PULL_REQUEST_TEMPLATE__": "folder-template",
+ "github/issue_template": "folder-template",
+ ".github/issue_template": "folder-template",
+ "_github/issue_template": "folder-template",
+ "__github/issue_template__": "folder-template",
+ "github/pull_request_template": "folder-template",
+ ".github/pull_request_template": "folder-template",
+ "_github/pull_request_template": "folder-template",
+ "__github/pull_request_template__": "folder-template",
"util": "folder-utils",
".util": "folder-utils",
"_util": "folder-utils",
@@ -2328,22 +2328,22 @@
".osx": "folder-macos",
"_osx": "folder-macos",
"__osx__": "folder-macos",
- "DS_Store": "folder-macos",
- ".DS_Store": "folder-macos",
- "_DS_Store": "folder-macos",
- "__DS_Store__": "folder-macos",
- "iPhone": "folder-macos",
- ".iPhone": "folder-macos",
- "_iPhone": "folder-macos",
- "__iPhone__": "folder-macos",
- "iPad": "folder-macos",
- ".iPad": "folder-macos",
- "_iPad": "folder-macos",
- "__iPad__": "folder-macos",
- "iPod": "folder-macos",
- ".iPod": "folder-macos",
- "_iPod": "folder-macos",
- "__iPod__": "folder-macos",
+ "ds_store": "folder-macos",
+ ".ds_store": "folder-macos",
+ "_ds_store": "folder-macos",
+ "__ds_store__": "folder-macos",
+ "iphone": "folder-macos",
+ ".iphone": "folder-macos",
+ "_iphone": "folder-macos",
+ "__iphone__": "folder-macos",
+ "ipad": "folder-macos",
+ ".ipad": "folder-macos",
+ "_ipad": "folder-macos",
+ "__ipad__": "folder-macos",
+ "ipod": "folder-macos",
+ ".ipod": "folder-macos",
+ "_ipod": "folder-macos",
+ "__ipod__": "folder-macos",
"macbook": "folder-macos",
".macbook": "folder-macos",
"_macbook": "folder-macos",
@@ -3219,6 +3219,22 @@
".favicons": "folder-favicon",
"_favicons": "folder-favicon",
"__favicons__": "folder-favicon",
+ "feature": "folder-features",
+ ".feature": "folder-features",
+ "_feature": "folder-features",
+ "__feature__": "folder-features",
+ "features": "folder-features",
+ ".features": "folder-features",
+ "_features": "folder-features",
+ "__features__": "folder-features",
+ "feat": "folder-features",
+ ".feat": "folder-features",
+ "_feat": "folder-features",
+ "__feat__": "folder-features",
+ "feats": "folder-features",
+ ".feats": "folder-features",
+ "_feats": "folder-features",
+ "__feats__": "folder-features",
"lefthook": "folder-lefthook",
".lefthook": "folder-lefthook",
"_lefthook": "folder-lefthook",
@@ -3475,34 +3491,14 @@
".cues": "folder-cue",
"_cues": "folder-cue",
"__cues__": "folder-cue",
- "meta-inf": "folder-config",
- ".meta-inf": "folder-config",
- "_meta-inf": "folder-config",
- "__meta-inf__": "folder-config",
- "github/issue_template": "folder-template",
- ".github/issue_template": "folder-template",
- "_github/issue_template": "folder-template",
- "__github/issue_template__": "folder-template",
- "github/pull_request_template": "folder-template",
- ".github/pull_request_template": "folder-template",
- "_github/pull_request_template": "folder-template",
- "__github/pull_request_template__": "folder-template",
- "ds_store": "folder-macos",
- ".ds_store": "folder-macos",
- "_ds_store": "folder-macos",
- "__ds_store__": "folder-macos",
- "iphone": "folder-macos",
- ".iphone": "folder-macos",
- "_iphone": "folder-macos",
- "__iphone__": "folder-macos",
- "ipad": "folder-macos",
- ".ipad": "folder-macos",
- "_ipad": "folder-macos",
- "__ipad__": "folder-macos",
- "ipod": "folder-macos",
- ".ipod": "folder-macos",
- "_ipod": "folder-macos",
- "__ipod__": "folder-macos"
+ "license": "folder-license",
+ ".license": "folder-license",
+ "_license": "folder-license",
+ "__license__": "folder-license",
+ "licenses": "folder-license",
+ ".licenses": "folder-license",
+ "_licenses": "folder-license",
+ "__licenses__": "folder-license"
},
"folderNamesExpanded": {
"rust": "folder-rust-open",
@@ -6724,6 +6720,22 @@
".favicons": "folder-favicon-open",
"_favicons": "folder-favicon-open",
"__favicons__": "folder-favicon-open",
+ "feature": "folder-features-open",
+ ".feature": "folder-features-open",
+ "_feature": "folder-features-open",
+ "__feature__": "folder-features-open",
+ "features": "folder-features-open",
+ ".features": "folder-features-open",
+ "_features": "folder-features-open",
+ "__features__": "folder-features-open",
+ "feat": "folder-features-open",
+ ".feat": "folder-features-open",
+ "_feat": "folder-features-open",
+ "__feat__": "folder-features-open",
+ "feats": "folder-features-open",
+ ".feats": "folder-features-open",
+ "_feats": "folder-features-open",
+ "__feats__": "folder-features-open",
"lefthook": "folder-lefthook-open",
".lefthook": "folder-lefthook-open",
"_lefthook": "folder-lefthook-open",
@@ -6979,7 +6991,15 @@
"cues": "folder-cue-open",
".cues": "folder-cue-open",
"_cues": "folder-cue-open",
- "__cues__": "folder-cue-open"
+ "__cues__": "folder-cue-open",
+ "license": "folder-license-open",
+ ".license": "folder-license-open",
+ "_license": "folder-license-open",
+ "__license__": "folder-license-open",
+ "licenses": "folder-license-open",
+ ".licenses": "folder-license-open",
+ "_licenses": "folder-license-open",
+ "__licenses__": "folder-license-open"
},
"rootFolderNames": {},
"rootFolderNamesExpanded": {},
@@ -7021,7 +7041,7 @@
"twee": "twine",
"yml.dist": "yaml",
"yaml.dist": "yaml",
- "YAML-tmLanguage": "yaml",
+ "yaml-tmlanguage": "yaml",
"xml": "xml",
"plist": "xml",
"xsd": "xml",
@@ -7031,7 +7051,7 @@
"resx": "xml",
"iml": "xml",
"xquery": "xml",
- "tmLanguage": "xml",
+ "tmlanguage": "xml",
"manifest": "xml",
"project": "xml",
"xml.dist": "xml",
@@ -7130,6 +7150,8 @@
"srf": "image",
"srw": "image",
"x3f": "image",
+ "ktx": "image",
+ "ktx2": "image",
"pal": "palette",
"gpl": "palette",
"act": "palette",
@@ -7315,6 +7337,7 @@
"cp": "cpp",
"mii": "cpp",
"ii": "cpp",
+ "cppm": "cpp",
"hh": "hpp",
"hpp": "hpp",
"hxx": "hpp",
@@ -7401,6 +7424,11 @@
"fsi": "fsharp",
"fsproj": "fsharp",
"swift": "swift",
+ "xcplayground": "swift",
+ "swiftdeps": "swift",
+ "swiftdoc": "swift",
+ "swiftmodule": "swift",
+ "swiftsourceinfo": "swift",
"ino": "arduino",
"dockerignore": "docker",
"dockerfile": "docker",
@@ -8133,12 +8161,10 @@
"css.jsx": "vanilla-extract",
"toc": "toc",
"cue": "cue",
- "yaml-tmlanguage": "yaml",
- "tmlanguage": "xml",
+ "lean": "lean",
"cljx": "clojure",
"clojure": "clojure",
"edn": "clojure",
- "cppm": "cpp",
"ccm": "cpp",
"cxxm": "cpp",
"c++m": "cpp",
@@ -8442,36 +8468,36 @@
"gradlew": "gradle",
"gradle-wrapper.properties": "gradle",
"gradlew.bat": "gradle",
- "copying": "certificate",
- "copying.md": "certificate",
- "copying.rst": "certificate",
- "copying.txt": "certificate",
- "copyright": "certificate",
- "copyright.md": "certificate",
- "copyright.rst": "certificate",
- "copyright.txt": "certificate",
- "license": "certificate",
- "license-agpl": "certificate",
- "license-apache": "certificate",
- "license-bsd": "certificate",
- "license-mit": "certificate",
- "license-gpl": "certificate",
- "license-lgpl": "certificate",
- "license.md": "certificate",
- "license.rst": "certificate",
- "license.txt": "certificate",
- "licence": "certificate",
- "licence-agpl": "certificate",
- "licence-apache": "certificate",
- "licence-bsd": "certificate",
- "licence-mit": "certificate",
- "licence-gpl": "certificate",
- "licence-lgpl": "certificate",
- "licence.md": "certificate",
- "licence.rst": "certificate",
- "licence.txt": "certificate",
- "unlicense": "certificate",
- "unlicense.txt": "certificate",
+ "copying": "license",
+ "copying.md": "license",
+ "copying.rst": "license",
+ "copying.txt": "license",
+ "copyright": "license",
+ "copyright.md": "license",
+ "copyright.rst": "license",
+ "copyright.txt": "license",
+ "license": "license",
+ "license-agpl": "license",
+ "license-apache": "license",
+ "license-bsd": "license",
+ "license-mit": "license",
+ "license-gpl": "license",
+ "license-lgpl": "license",
+ "license.md": "license",
+ "license.rst": "license",
+ "license.txt": "license",
+ "licence": "license",
+ "licence-agpl": "license",
+ "licence-apache": "license",
+ "licence-bsd": "license",
+ "licence-mit": "license",
+ "licence-gpl": "license",
+ "licence-lgpl": "license",
+ "licence.md": "license",
+ "licence.rst": "license",
+ "licence.txt": "license",
+ "unlicense": "unlicense",
+ "unlicense.txt": "unlicense",
".htpasswd": "key",
"sha256sums": "key",
".secrets": "key",
@@ -8487,6 +8513,7 @@
".rspec": "rspec",
".swift-format": "swift",
".swift-version": "swift",
+ ".swiftformat": "swift",
"dockerfile": "docker",
"dockerfile.prod": "docker",
"dockerfile.production": "docker",
@@ -8624,7 +8651,7 @@
"graphql.config.mts": "graphql",
"graphql.config.cts": "graphql",
".graphqlconfig": "graphql",
- "XamlStyler.json": "xaml",
+ "xamlstyler.json": "xaml",
".happo.js": "happo",
".happo.mjs": "happo",
".happo.cjs": "happo",
@@ -8648,11 +8675,11 @@
".git-for-windows-updater": "git",
"git-history": "git",
".luacheckrc": "lua",
- ".Rhistory": "r",
+ ".rhistory": "r",
".pubignore": "dart",
"cmakelists.txt": "cmake",
"cmakecache.txt": "cmake",
- "CMakePresets.json": "cmake",
+ "cmakepresets.json": "cmake",
"semgrep.yml": "semgrep",
".semgrepignore": "semgrep",
"vue.config.js": "vue-config",
@@ -8783,7 +8810,7 @@
"cabal.project": "cabal",
"cabal.project.freeze": "cabal",
"cabal.project.local": "cabal",
- "CNAME": "http",
+ "cname": "http",
"project.graphcool": "graphcool",
"webpack.base.js": "webpack",
"webpack.base.mjs": "webpack",
@@ -9023,6 +9050,12 @@
"rspress.config.ts": "rstack",
"rslint.json": "rstack",
"rslint.jsonc": "rstack",
+ "lynx.config.js": "lynx",
+ "lynx.config.mjs": "lynx",
+ "lynx.config.cjs": "lynx",
+ "lynx.config.ts": "lynx",
+ "lynx.config.mts": "lynx",
+ "lynx.config.cts": "lynx",
"ionic.config.json": "ionic",
".io-config.json": "ionic",
"gulpfile.js": "gulp",
@@ -9215,7 +9248,7 @@
"sonar-project.properties": "sonarcloud",
".sonarcloud.properties": "sonarcloud",
"sonarcloud.yaml": "sonarcloud",
- "SonarQube.Analysis.xml": "sonarcloud",
+ "sonarqube.analysis.xml": "sonarcloud",
"protractor.conf.js": "protractor",
"protractor.conf.ts": "protractor",
"protractor.conf.coffee": "protractor",
@@ -9577,7 +9610,7 @@
".gitpod.yml": "gitpod",
".stackblitzrc": "stackblitz",
"codeowners": "codeowners",
- "OWNERS": "codeowners",
+ "owners": "codeowners",
".gcloudignore": "gcp",
"amplify.yml": "amplify",
".huskyrc": "husky",
@@ -9752,6 +9785,18 @@
"vitest.config.ts": "vitest",
"vitest.config.mts": "vitest",
"vitest.config.cts": "vitest",
+ "vitest.unit.config.js": "vitest",
+ "vitest.unit.config.mjs": "vitest",
+ "vitest.unit.config.cjs": "vitest",
+ "vitest.unit.config.ts": "vitest",
+ "vitest.unit.config.mts": "vitest",
+ "vitest.unit.config.cts": "vitest",
+ "vitest.e2e.config.js": "vitest",
+ "vitest.e2e.config.mjs": "vitest",
+ "vitest.e2e.config.cjs": "vitest",
+ "vitest.e2e.config.ts": "vitest",
+ "vitest.e2e.config.mts": "vitest",
+ "vitest.e2e.config.cts": "vitest",
"velite.config.js": "velite",
"velite.config.mjs": "velite",
"velite.config.cjs": "velite",
@@ -9939,7 +9984,7 @@
"steadybit.yml": "steadybit",
".steadybit.yaml": "steadybit",
"steadybit.yaml": "steadybit",
- "Caddyfile": "caddy",
+ "caddyfile": "caddy",
"openapi.json": "openapi",
"openapi.yml": "openapi",
"openapi.yaml": "openapi",
@@ -10157,8 +10202,8 @@
"project.garden.yml": "garden",
"project.garden.yaml": "garden",
".gardenignore": "garden",
- "PklProject": "pkl",
- "PklProject.deps.json": "pkl",
+ "pklproject": "pkl",
+ "pklproject.deps.json": "pkl",
"k8s.yml": "kubernetes",
"k8s.yaml": "kubernetes",
"kubernetes.yml": "kubernetes",
@@ -10199,6 +10244,7 @@
".coderabbit.yml": "coderabbit-ai",
".coderabbit.yaml": "coderabbit-ai",
".aiexclude": "gemini-ai",
+ "gemini.md": "gemini-ai",
"taze.config.js": "taze",
"taze.config.mjs": "taze",
"taze.config.cjs": "taze",
@@ -10266,7 +10312,7 @@
".histoire.cts": "histoire",
"install": "installation",
"installation": "installation",
- ".github/FUNDING.yml": "github-sponsors",
+ ".github/funding.yml": "github-sponsors",
"fabric.mod.json": "minecraft-fabric",
".umirc.js": "umi",
".umirc.mjs": "umi",
@@ -10297,15 +10343,18 @@
"packship.config.mjs": "packship",
"packship.config.mts": "packship",
"packship.config.json": "packship",
- "Snakefile": "snakemake",
+ "snakefile": "snakemake",
".hadolint.yaml": "hadolint",
".hadolint.yml": "hadolint",
"hadolint.yaml": "hadolint",
"hadolint.yml": "hadolint",
"tsdoc.json": "tsdoc",
- ".oxlintrc.json": "oxlint",
- "CLAUDE.md": "claude",
- "CLAUDE.local.md": "claude",
+ ".oxlintrc.json": "oxc",
+ ".oxlintrc.jsonc": "oxc",
+ ".oxfmtrc.json": "oxc",
+ ".oxfmtrc.jsonc": "oxc",
+ "claude.md": "claude",
+ "claude.local.md": "claude",
".cursorignore": "cursor",
".cursorindexingignore": "cursor",
".cursorrules": "cursor",
@@ -10323,23 +10372,10 @@
"src/bashly-strings.yaml": "bashly-strings",
"src/bashly-strings.yml": "bashly-strings",
"google-services.json": "google",
- "GoogleService-Info.plist": "google",
+ "googleservice-info.plist": "google",
".shellcheckrc": "shellcheck",
"shellcheckrc": "shellcheck",
- "xamlstyler.json": "xaml",
- ".rhistory": "r",
- "cmakepresets.json": "cmake",
- "cname": "http",
- "sonarqube.analysis.xml": "sonarcloud",
- "owners": "codeowners",
- "caddyfile": "caddy",
- "pklproject": "pkl",
- "pklproject.deps.json": "pkl",
- ".github/funding.yml": "github-sponsors",
- "snakefile": "snakemake",
- "claude.md": "claude",
- "claude.local.md": "claude",
- "googleservice-info.plist": "google",
+ "warp.md": "warp",
"language-configuration.json": "jsonc",
"icon-theme.json": "jsonc",
"color-theme.json": "jsonc",
@@ -10366,6 +10402,7 @@
"toml": "toml",
"diff": "diff",
"json": "json",
+ "jsonl": "json",
"jsonc": "json",
"json5": "json",
"blink": "blink",
@@ -10541,7 +10578,8 @@
"gnuplot": "gnuplot",
"helm": "helm",
"nginx": "nginx",
- "cue": "cue"
+ "cue": "cue",
+ "lean": "lean"
},
"light": {
"fileExtensions": {
@@ -10749,7 +10787,8 @@
"src/bashly-strings.yaml": "bashly-strings_light",
"src/bashly-strings.yml": "bashly-strings_light",
".shellcheckrc": "shellcheck_light",
- "shellcheckrc": "shellcheck_light"
+ "shellcheckrc": "shellcheck_light",
+ "warp.md": "warp_light"
},
"languageIds": {
"toml": "toml_light",
diff --git a/options/fileicon/material-icon-svgs.json b/options/fileicon/material-icon-svgs.json
index 61524074fd..f5254099ad 100644
--- a/options/fileicon/material-icon-svgs.json
+++ b/options/fileicon/material-icon-svgs.json
@@ -92,7 +92,7 @@
"capnp": " ",
"cbx": " ",
"cds": " ",
- "certificate": " ",
+ "certificate": " ",
"changelog": " ",
"chess": " ",
"chess_light": " ",
@@ -359,6 +359,8 @@
"folder-fastlane": " ",
"folder-favicon-open": " ",
"folder-favicon": " ",
+ "folder-features-open": " ",
+ "folder-features": " ",
"folder-filter-open": " ",
"folder-filter": " ",
"folder-firebase-open": " ",
@@ -459,6 +461,8 @@
"folder-less": " ",
"folder-lib-open": " ",
"folder-lib": " ",
+ "folder-license-open": " ",
+ "folder-license": " ",
"folder-link-open": " ",
"folder-link": " ",
"folder-linux-open": " ",
@@ -829,11 +833,13 @@
"latex.clone": " ",
"latexmk": " ",
"lbx": " ",
+ "lean": " ",
"lefthook": " ",
"lerna": " ",
"less": " ",
"liara": " ",
"lib": " ",
+ "license": " ",
"lighthouse": " ",
"lilypond": " ",
"lintstaged": " ",
@@ -846,6 +852,7 @@
"lottie": " ",
"lua": " ",
"luau": " ",
+ "lynx": " ",
"lyric": " ",
"makefile": " ",
"markdoc-config": " ",
@@ -922,7 +929,7 @@
"opentofu": " ",
"opentofu_light": " ",
"otne": " ",
- "oxlint": " ",
+ "oxc": " ",
"packship": " ",
"palette": " ",
"panda": " ",
@@ -971,7 +978,7 @@
"python": " ",
"pytorch": " ",
"qsharp": " ",
- "quarto": " ",
+ "quarto": " ",
"quasar": " ",
"quokka": " ",
"qwik": " ",
@@ -1126,6 +1133,7 @@
"uml": " ",
"uml_light": " ",
"unity": " ",
+ "unlicense": " ",
"unocss": " ",
"url": " ",
"uv": " ",
@@ -1159,6 +1167,8 @@
"wakatime_light": " ",
"wallaby": " ",
"wally": " ",
+ "warp": " ",
+ "warp_light": " ",
"watchman": " ",
"webassembly": " ",
"webhint": " ",
diff --git a/options/locale/locale_en-US.ini b/options/locale/locale_en-US.ini
index ddc12aefaa..6712250924 100644
--- a/options/locale/locale_en-US.ini
+++ b/options/locale/locale_en-US.ini
@@ -1354,8 +1354,11 @@ editor.this_file_locked = File is locked
editor.must_be_on_a_branch = You must be on a branch to make or propose changes to this file.
editor.fork_before_edit = You must fork this repository to make or propose changes to this file.
editor.delete_this_file = Delete File
+editor.delete_this_directory = Delete Directory
editor.must_have_write_access = You must have write access to make or propose changes to this file.
editor.file_delete_success = File "%s" has been deleted.
+editor.directory_delete_success = Directory "%s" has been deleted.
+editor.delete_directory = Delete directory '%s'
editor.name_your_file = Name your file…
editor.filename_help = Add a directory by typing its name followed by a slash ('/'). Remove a directory by typing backspace at the beginning of the input field.
editor.or = or
@@ -1482,6 +1485,7 @@ projects.column.new_submit = "Create Column"
projects.column.new = "New Column"
projects.column.set_default = "Set Default"
projects.column.set_default_desc = "Set this column as default for uncategorized issues and pulls"
+projects.column.default_column_hint = "New issues added to this project will be added to this column"
projects.column.delete = "Delete Column"
projects.column.deletion_desc = "Deleting a project column moves all related issues to the default column. Continue?"
projects.column.color = "Color"
@@ -3038,7 +3042,7 @@ dashboard.update_migration_poster_id = Update migration poster IDs
dashboard.git_gc_repos = Garbage-collect all repositories
dashboard.resync_all_sshkeys = Update the '.ssh/authorized_keys' file with Gitea SSH keys
dashboard.resync_all_sshprincipals = Update the '.ssh/authorized_principals' file with Gitea SSH principals
-dashboard.resync_all_hooks = Resynchronize pre-receive, update and post-receive hooks of all repositories
+dashboard.resync_all_hooks = Resynchronize git hooks of all repositories (pre-receive, update, post-receive, proc-receive, ...)
dashboard.reinit_missing_repos = Reinitialize all missing Git repositories for which records exist
dashboard.sync_external_users = Synchronize external user data
dashboard.cleanup_hook_task_table = Clean up hook_task table
diff --git a/options/locale/locale_fr-FR.ini b/options/locale/locale_fr-FR.ini
index 4ee11f3b5d..221abb5d1f 100644
--- a/options/locale/locale_fr-FR.ini
+++ b/options/locale/locale_fr-FR.ini
@@ -3038,7 +3038,6 @@ dashboard.update_migration_poster_id=Actualiser les ID des affiches de migration
dashboard.git_gc_repos=Exécuter le ramasse-miette des dépôts
dashboard.resync_all_sshkeys=Mettre à jour le fichier « ssh/authorized_keys » avec les clés SSH Gitea.
dashboard.resync_all_sshprincipals=Mettre à jour le fichier « .ssh/authorized_principals » avec les principaux de Gitea SSH.
-dashboard.resync_all_hooks=Re-synchroniser les déclencheurs Git pre-receive, update et post-receive de tous les dépôts.
dashboard.reinit_missing_repos=Réinitialiser tous les dépôts Git manquants pour lesquels un enregistrement existe
dashboard.sync_external_users=Synchroniser les données de l’utilisateur externe
dashboard.cleanup_hook_task_table=Nettoyer la table hook_task
diff --git a/options/locale/locale_ga-IE.ini b/options/locale/locale_ga-IE.ini
index 045fb14f8b..6b9ae41e9b 100644
--- a/options/locale/locale_ga-IE.ini
+++ b/options/locale/locale_ga-IE.ini
@@ -1354,8 +1354,11 @@ editor.this_file_locked=Tá an comhad faoi ghlas
editor.must_be_on_a_branch=Caithfidh tú a bheith ar bhrainse chun athruithe a dhéanamh nó a mholadh ar an gcomhad seo.
editor.fork_before_edit=Ní mór duit an stór seo a fhorcáil chun athruithe a dhéanamh nó a mholadh ar an gcomhad seo.
editor.delete_this_file=Scrios Comhad
+editor.delete_this_directory=Scrios Eolaire
editor.must_have_write_access=Caithfidh rochtain scríofa a bheith agat chun athruithe a dhéanamh nó a mholadh ar an gcomhad seo.
editor.file_delete_success=Tá an comhad "%s" scriosta.
+editor.directory_delete_success=Scriosadh an eolaire "%s".
+editor.delete_directory=Scrios an eolaire '%s'
editor.name_your_file=Ainmnigh do chomhad…
editor.filename_help=Cuir eolaire leis trína ainm a chlóscríobh ina dhiaidh sin le slash ('/'). Bain eolaire trí backspace a chlóscríobh ag tús an réimse ionchuir.
editor.or=nó
@@ -1482,6 +1485,7 @@ projects.column.new_submit=Cruthaigh Colún
projects.column.new=Colún Nua
projects.column.set_default=Socraigh Réamhshocrú
projects.column.set_default_desc=Socraigh an colún seo mar réamhshocrú le haghaidh saincheisteanna agus tarraingtí gan chatagóir
+projects.column.default_column_hint=Cuirfear saincheisteanna nua a chuirtear leis an tionscadal seo leis an gcolún seo
projects.column.delete=Scrios Colún
projects.column.deletion_desc=Ag scriosadh colún tionscadail aistríonn gach saincheist ghaolmhar chuig an gcolún. Lean ar aghaidh?
projects.column.color=Dath
@@ -3038,7 +3042,7 @@ dashboard.update_migration_poster_id=Nuashonraigh ID póstaer imir
dashboard.git_gc_repos=Bailitheoir bruscair gach stórais
dashboard.resync_all_sshkeys=Nuashonraigh an comhad '.ssh/authorized_keys' le heochracha SSH Gitea
dashboard.resync_all_sshprincipals=Nuashonraigh an comhad '.ssh/authorized_principals' le príomhoidí SSH Gitea
-dashboard.resync_all_hooks=Athshioncrónaigh crúcaí réamhghlactha, nuashonraithe agus iarghlactha na stórais uile
+dashboard.resync_all_hooks=Athshioncrónaigh crúcaí git na stórtha uile (réamhghlacadh, nuashonrú, iarghlacadh, próiseasghlacadh, ...)
dashboard.reinit_missing_repos=Aththosaigh gach stórais Git atá in easnamh a bhfuil taifid ann dóibh
dashboard.sync_external_users=Sioncrónaigh sonraí úsáideoirí seachtracha
dashboard.cleanup_hook_task_table=Glan suas an tábla hook_task
diff --git a/options/locale/locale_ja-JP.ini b/options/locale/locale_ja-JP.ini
index 0d7df0647b..32d7b51ae9 100644
--- a/options/locale/locale_ja-JP.ini
+++ b/options/locale/locale_ja-JP.ini
@@ -3038,7 +3038,6 @@ dashboard.update_migration_poster_id=移行する投稿者IDの更新
dashboard.git_gc_repos=すべてのリポジトリでガベージコレクションを実行
dashboard.resync_all_sshkeys='.ssh/authorized_keys' ファイルをGitea上のSSHキーで更新
dashboard.resync_all_sshprincipals='.ssh/authorized_principals' ファイルをGitea上のSSHプリンシパルで更新
-dashboard.resync_all_hooks=すべてのリポジトリの pre-receive, update, post-receive フックを再同期する
dashboard.reinit_missing_repos=レコードが存在するが見当たらないすべてのGitリポジトリを再初期化する
dashboard.sync_external_users=外部ユーザーデータの同期
dashboard.cleanup_hook_task_table=hook_taskテーブルのクリーンアップ
diff --git a/options/locale/locale_pt-PT.ini b/options/locale/locale_pt-PT.ini
index 95ac1fb5a4..0b2e57ea00 100644
--- a/options/locale/locale_pt-PT.ini
+++ b/options/locale/locale_pt-PT.ini
@@ -1354,8 +1354,11 @@ editor.this_file_locked=Ficheiro bloqueado
editor.must_be_on_a_branch=Tem que estar num ramo para fazer ou propor modificações neste ficheiro.
editor.fork_before_edit=Tem que fazer uma derivação deste repositório para fazer ou propor modificações neste ficheiro.
editor.delete_this_file=Eliminar ficheiro
+editor.delete_this_directory=Eliminar pasta
editor.must_have_write_access=Tem que ter permissões de escrita para fazer ou propor modificações neste ficheiro.
editor.file_delete_success=O ficheiro "%s" foi eliminado.
+editor.directory_delete_success=A pasta "%s" foi eliminada.
+editor.delete_directory=Eliminar a pasta '%s'
editor.name_your_file=Nomeie o seu ficheiro…
editor.filename_help=Adicione uma pasta escrevendo o nome dessa pasta seguido de uma barra('/'). Remova uma pasta carregando na tecla de apagar ('←') no início do campo.
editor.or=ou
@@ -1482,6 +1485,7 @@ projects.column.new_submit=Criar coluna
projects.column.new=Nova coluna
projects.column.set_default=Tornar predefinida
projects.column.set_default_desc=Definir esta coluna como a predefinida para questões e pedidos de integração não categorizados
+projects.column.default_column_hint=Novas questões adicionadas a este planeamento serão adicionadas a esta coluna
projects.column.delete=Eliminar coluna
projects.column.deletion_desc=Eliminar uma coluna de um planeamento faz com que todas as questões que nela constam sejam movidas para a coluna predefinida. Continuar?
projects.column.color=Colorido
@@ -3038,7 +3042,6 @@ dashboard.update_migration_poster_id=Sincronizar os IDs do remetente da migraç
dashboard.git_gc_repos=Fazer a recolha do lixo em todos os repositórios
dashboard.resync_all_sshkeys=Sincronizar o ficheiro '.ssh/authorized_keys' com as chaves SSH do Gitea
dashboard.resync_all_sshprincipals=Modificar o ficheiro '.ssh/authorized_principals' com os protagonistas SSH do Gitea
-dashboard.resync_all_hooks=Voltar a sincronizar automatismos de pré-acolhimento, modificação e pós-acolhimento de todos os repositórios
dashboard.reinit_missing_repos=Reinicializar todos os repositórios Git em falta para os quais existam registos
dashboard.sync_external_users=Sincronizar dados externos do utilizador
dashboard.cleanup_hook_task_table=Limpar a tabela hook_task
diff --git a/options/locale/locale_tr-TR.ini b/options/locale/locale_tr-TR.ini
index 8be6a587fb..654e610cab 100644
--- a/options/locale/locale_tr-TR.ini
+++ b/options/locale/locale_tr-TR.ini
@@ -3032,7 +3032,6 @@ dashboard.update_migration_poster_id=Taşıma poster kimliklerini güncelle
dashboard.git_gc_repos=Tüm depolardaki atıkları temizle
dashboard.resync_all_sshkeys='.ssh/authority_keys' dosyasını Gitea SSH anahtarlarıyla güncelle
dashboard.resync_all_sshprincipals='.ssh/authorized_principals' dosyasını Gitea SSH sorumlularıyla güncelleyin
-dashboard.resync_all_hooks=Tüm depoların alma öncesi, güncelleme ve alma sonrası kancalarını yeniden senkronize edin
dashboard.reinit_missing_repos=Kayıtları bulunanlar için tüm eksik Git depolarını yeniden başlat
dashboard.sync_external_users=Harici kullanıcı verisini senkronize et
dashboard.cleanup_hook_task_table=Hook_task tablosunu temizle
diff --git a/options/locale/locale_zh-CN.ini b/options/locale/locale_zh-CN.ini
index 9db58e71ac..73e5b41f4e 100644
--- a/options/locale/locale_zh-CN.ini
+++ b/options/locale/locale_zh-CN.ini
@@ -426,7 +426,7 @@ need_account=需要一个帐户?
sign_up_tip=您正在系统中注册第一个帐户,它拥有管理员权限。请仔细记住您的用户名和密码。 如果您忘记了用户名或密码,请参阅 Gitea 文档以恢复账户。
sign_up_now=立即注册。
sign_up_successful=帐户创建成功。欢迎!
-confirmation_mail_sent_prompt_ex=一封新的确认邮件已经发送到 %s 。请在下一个 %s 中检查您的收件箱以完成注册流程。 如果您的注册邮箱地址不正确,您可以重新登录并更改它。
+confirmation_mail_sent_prompt_ex=一封新的确认邮件已经发送到 %s 。请在 %s 内检查您的收件箱以完成注册流程。 如果您的注册邮箱地址不正确,您可以重新登录并更改它。
must_change_password=更新您的密码
allow_password_change=要求用户更改密码(推荐)
reset_password_mail_sent_prompt=确认邮件已被发送到 %s 。请您在 %s 内检查您的收件箱 ,完成密码重置流程。
@@ -1483,6 +1483,7 @@ projects.column.new_submit=创建列
projects.column.new=创建列
projects.column.set_default=设为默认
projects.column.set_default_desc=设置此列为未分类问题和合并请求的默认值
+projects.column.default_column_hint=添加到此项目的新议题将被添加到此列
projects.column.delete=删除列
projects.column.deletion_desc=删除项目列会将所有相关问题移至默认列。是否继续?
projects.column.color=颜色
@@ -1970,6 +1971,9 @@ pulls.status_checks_requested=必须
pulls.status_checks_details=详情
pulls.status_checks_hide_all=隐藏所有检查
pulls.status_checks_show_all=显示所有检查
+pulls.status_checks_approve_all=批准所有工作流
+pulls.status_checks_need_approvals=%d 个工作流等待批准
+pulls.status_checks_need_approvals_helper=此工作流在仓库维护者批准后才会运行。
pulls.update_branch=通过合并更新分支
pulls.update_branch_rebase=通过变基更新分支
pulls.update_branch_success=分支更新成功
@@ -3071,7 +3075,7 @@ dashboard.total_gc_time=GC 暂停时间总量
dashboard.total_gc_pause=GC 暂停时间总量
dashboard.last_gc_pause=上次 GC 暂停时间
dashboard.gc_times=GC 执行次数
-dashboard.delete_old_actions=从数据库中删除所有旧工作流记录
+dashboard.delete_old_actions=从数据库中删除所有旧操作记录
dashboard.delete_old_actions.started=已开始从数据库中删除所有旧工作流记录。
dashboard.update_checker=更新检查器
dashboard.delete_old_system_notices=从数据库中删除所有旧系统通知
@@ -3891,6 +3895,7 @@ workflow.has_workflow_dispatch=此工作流有一个 workflow_dispatch 事件触
workflow.has_no_workflow_dispatch=工作流「%s」没有 workflow_dispatch 事件触发器。
need_approval_desc=该工作流由派生仓库的合并请求所触发,需要批准方可运行。
+approve_all_success=已成功批准所有工作流运行。
variables=变量
variables.management=变量管理
@@ -3911,6 +3916,14 @@ variables.update.success=变量已编辑。
logs.always_auto_scroll=总是自动滚动日志
logs.always_expand_running=总是展开运行日志
+general=常规
+general.enable_actions=启用工作流
+general.collaborative_owners_management=协作所有者管理
+general.collaborative_owners_management_help=协作所有者是指其私有仓库有权访问此仓库的工作流的用户或组织。
+general.add_collaborative_owner=添加协作所有者
+general.collaborative_owner_not_exist=协作所有者不存在。
+general.remove_collaborative_owner=移除协作所有者
+general.remove_collaborative_owner_desc=移除协作所有者将阻止该所有者的其他仓库访问此仓库中的工作流。是否继续?
[projects]
deleted.display_name=已删除项目
diff --git a/package.json b/package.json
index 015e87f478..99cb2d5b13 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"type": "module",
- "packageManager": "pnpm@10.19.0",
+ "packageManager": "pnpm@10.23.0",
"engines": {
"node": ">= 22.6.0",
"pnpm": ">= 10.0.0"
@@ -12,10 +12,10 @@
"@citation-js/plugin-software-formats": "0.6.1",
"@github/markdown-toolbar-element": "2.2.3",
"@github/paste-markdown": "1.5.3",
- "@github/relative-time-element": "4.5.0",
+ "@github/relative-time-element": "4.5.1",
"@github/text-expander-element": "2.9.2",
"@mcaptcha/vanilla-glue": "0.1.0-alpha-3",
- "@primer/octicons": "19.19.0",
+ "@primer/octicons": "19.21.0",
"@resvg/resvg-wasm": "2.6.2",
"@silverwind/vue3-calendar-heatmap": "2.0.6",
"@techknowlogick/license-checker-webpack-plugin": "0.3.0",
@@ -25,10 +25,10 @@
"chart.js": "4.5.1",
"chartjs-adapter-dayjs-4": "1.0.4",
"chartjs-plugin-zoom": "2.2.0",
- "clippie": "4.1.8",
+ "clippie": "4.1.9",
"cropperjs": "1.6.2",
"css-loader": "7.1.2",
- "dayjs": "1.11.18",
+ "dayjs": "1.11.19",
"dropzone": "6.0.0-beta.2",
"easymde": "2.20.0",
"esbuild-loader": "4.4.0",
@@ -38,7 +38,7 @@
"katex": "0.16.25",
"mermaid": "11.12.1",
"mini-css-extract-plugin": "2.9.4",
- "monaco-editor": "0.54.0",
+ "monaco-editor": "0.55.1",
"monaco-editor-webpack-plugin": "7.1.1",
"online-3d-viewer": "0.16.0",
"pdfobject": "2.3.1",
@@ -46,7 +46,7 @@
"postcss": "8.5.6",
"postcss-loader": "8.2.0",
"sortablejs": "1.15.6",
- "swagger-ui-dist": "5.30.0",
+ "swagger-ui-dist": "5.30.3",
"tailwindcss": "3.4.17",
"throttle-debounce": "5.0.2",
"tinycolor2": "1.6.0",
@@ -56,18 +56,18 @@
"typescript": "5.9.3",
"uint8-to-base64": "0.2.1",
"vanilla-colorful": "0.7.2",
- "vue": "3.5.22",
+ "vue": "3.5.25",
"vue-bar-graph": "2.2.0",
- "vue-chartjs": "5.3.2",
+ "vue-chartjs": "5.3.3",
"vue-loader": "17.4.2",
- "webpack": "5.102.1",
+ "webpack": "5.103.0",
"webpack-cli": "6.0.1",
"wrap-ansi": "9.0.2"
},
"devDependencies": {
"@eslint-community/eslint-plugin-eslint-comments": "4.5.0",
- "@playwright/test": "1.56.1",
- "@stylistic/eslint-plugin": "5.5.0",
+ "@playwright/test": "1.57.0",
+ "@stylistic/eslint-plugin": "5.6.1",
"@stylistic/stylelint-plugin": "4.0.0",
"@types/codemirror": "5.60.17",
"@types/dropzone": "5.7.9",
@@ -79,40 +79,39 @@
"@types/throttle-debounce": "5.0.2",
"@types/tinycolor2": "1.4.6",
"@types/toastify-js": "1.12.4",
- "@typescript-eslint/parser": "8.46.2",
- "@vitejs/plugin-vue": "6.0.1",
- "@vitest/eslint-plugin": "1.3.26",
- "eslint": "9.38.0",
+ "@typescript-eslint/parser": "8.48.0",
+ "@vitejs/plugin-vue": "6.0.2",
+ "@vitest/eslint-plugin": "1.5.0",
+ "eslint": "9.39.1",
"eslint-import-resolver-typescript": "4.4.4",
"eslint-plugin-array-func": "5.1.0",
"eslint-plugin-github": "6.0.0",
"eslint-plugin-import-x": "4.16.1",
- "eslint-plugin-no-use-extend-native": "0.7.2",
- "eslint-plugin-playwright": "2.2.2",
+ "eslint-plugin-playwright": "2.3.0",
"eslint-plugin-regexp": "2.10.0",
"eslint-plugin-sonarjs": "3.0.5",
"eslint-plugin-unicorn": "62.0.0",
- "eslint-plugin-vue": "10.5.1",
+ "eslint-plugin-vue": "10.6.1",
"eslint-plugin-vue-scoped-css": "2.12.0",
"eslint-plugin-wc": "3.0.2",
- "globals": "16.4.0",
- "happy-dom": "20.0.8",
- "markdownlint-cli": "0.45.0",
- "material-icon-theme": "5.28.0",
+ "globals": "16.5.0",
+ "happy-dom": "20.0.10",
+ "markdownlint-cli": "0.46.0",
+ "material-icon-theme": "5.29.0",
"nolyfill": "1.0.44",
"postcss-html": "1.8.0",
"spectral-cli-bundle": "1.0.3",
- "stylelint": "16.25.0",
+ "stylelint": "16.26.0",
"stylelint-config-recommended": "17.0.0",
"stylelint-declaration-block-no-ignored-properties": "2.8.0",
"stylelint-declaration-strict-value": "1.10.11",
"stylelint-value-no-unknown-custom-properties": "6.0.1",
"svgo": "4.0.0",
- "typescript-eslint": "8.46.2",
- "updates": "16.9.1",
- "vite-string-plugin": "1.4.6",
- "vitest": "4.0.4",
- "vue-tsc": "3.1.2"
+ "typescript-eslint": "8.48.0",
+ "updates": "16.9.2",
+ "vite-string-plugin": "1.4.9",
+ "vitest": "4.0.14",
+ "vue-tsc": "3.1.5"
},
"browserslist": [
"defaults"
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index a41481869c..b2016b53cc 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -45,8 +45,8 @@ importers:
specifier: 1.5.3
version: 1.5.3
'@github/relative-time-element':
- specifier: 4.5.0
- version: 4.5.0
+ specifier: 4.5.1
+ version: 4.5.1
'@github/text-expander-element':
specifier: 2.9.2
version: 2.9.2
@@ -54,20 +54,20 @@ importers:
specifier: 0.1.0-alpha-3
version: 0.1.0-alpha-3
'@primer/octicons':
- specifier: 19.19.0
- version: 19.19.0
+ specifier: 19.21.0
+ version: 19.21.0
'@resvg/resvg-wasm':
specifier: 2.6.2
version: 2.6.2
'@silverwind/vue3-calendar-heatmap':
specifier: 2.0.6
- version: 2.0.6(tippy.js@6.3.7)(vue@3.5.22(typescript@5.9.3))
+ version: 2.0.6(tippy.js@6.3.7)(vue@3.5.25(typescript@5.9.3))
'@techknowlogick/license-checker-webpack-plugin':
specifier: 0.3.0
- version: 0.3.0(webpack@5.102.1)
+ version: 0.3.0(webpack@5.103.0)
add-asset-webpack-plugin:
specifier: 3.1.1
- version: 3.1.1(webpack@5.102.1)
+ version: 3.1.1(webpack@5.103.0)
ansi_up:
specifier: 6.0.6
version: 6.0.6
@@ -79,22 +79,22 @@ importers:
version: 4.5.1
chartjs-adapter-dayjs-4:
specifier: 1.0.4
- version: 1.0.4(chart.js@4.5.1)(dayjs@1.11.18)
+ version: 1.0.4(chart.js@4.5.1)(dayjs@1.11.19)
chartjs-plugin-zoom:
specifier: 2.2.0
version: 2.2.0(chart.js@4.5.1)
clippie:
- specifier: 4.1.8
- version: 4.1.8
+ specifier: 4.1.9
+ version: 4.1.9
cropperjs:
specifier: 1.6.2
version: 1.6.2
css-loader:
specifier: 7.1.2
- version: 7.1.2(webpack@5.102.1)
+ version: 7.1.2(webpack@5.103.0)
dayjs:
- specifier: 1.11.18
- version: 1.11.18
+ specifier: 1.11.19
+ version: 1.11.19
dropzone:
specifier: 6.0.0-beta.2
version: 6.0.0-beta.2
@@ -103,7 +103,7 @@ importers:
version: 2.20.0
esbuild-loader:
specifier: 4.4.0
- version: 4.4.0(webpack@5.102.1)
+ version: 4.4.0(webpack@5.103.0)
htmx.org:
specifier: 2.0.8
version: 2.0.8
@@ -121,13 +121,13 @@ importers:
version: 11.12.1
mini-css-extract-plugin:
specifier: 2.9.4
- version: 2.9.4(webpack@5.102.1)
+ version: 2.9.4(webpack@5.103.0)
monaco-editor:
- specifier: 0.54.0
- version: 0.54.0
+ specifier: 0.55.1
+ version: 0.55.1
monaco-editor-webpack-plugin:
specifier: 7.1.1
- version: 7.1.1(monaco-editor@0.54.0)(webpack@5.102.1)
+ version: 7.1.1(monaco-editor@0.55.1)(webpack@5.103.0)
online-3d-viewer:
specifier: 0.16.0
version: 0.16.0
@@ -142,13 +142,13 @@ importers:
version: 8.5.6
postcss-loader:
specifier: 8.2.0
- version: 8.2.0(postcss@8.5.6)(typescript@5.9.3)(webpack@5.102.1)
+ version: 8.2.0(postcss@8.5.6)(typescript@5.9.3)(webpack@5.103.0)
sortablejs:
specifier: 1.15.6
version: 1.15.6
swagger-ui-dist:
- specifier: 5.30.0
- version: 5.30.0
+ specifier: 5.30.3
+ version: 5.30.3
tailwindcss:
specifier: 3.4.17
version: 3.4.17
@@ -177,39 +177,39 @@ importers:
specifier: 0.7.2
version: 0.7.2
vue:
- specifier: 3.5.22
- version: 3.5.22(typescript@5.9.3)
+ specifier: 3.5.25
+ version: 3.5.25(typescript@5.9.3)
vue-bar-graph:
specifier: 2.2.0
version: 2.2.0(typescript@5.9.3)
vue-chartjs:
- specifier: 5.3.2
- version: 5.3.2(chart.js@4.5.1)(vue@3.5.22(typescript@5.9.3))
+ specifier: 5.3.3
+ version: 5.3.3(chart.js@4.5.1)(vue@3.5.25(typescript@5.9.3))
vue-loader:
specifier: 17.4.2
- version: 17.4.2(vue@3.5.22(typescript@5.9.3))(webpack@5.102.1)
+ version: 17.4.2(vue@3.5.25(typescript@5.9.3))(webpack@5.103.0)
webpack:
- specifier: 5.102.1
- version: 5.102.1(webpack-cli@6.0.1)
+ specifier: 5.103.0
+ version: 5.103.0(webpack-cli@6.0.1)
webpack-cli:
specifier: 6.0.1
- version: 6.0.1(webpack@5.102.1)
+ version: 6.0.1(webpack@5.103.0)
wrap-ansi:
specifier: 9.0.2
version: 9.0.2
devDependencies:
'@eslint-community/eslint-plugin-eslint-comments':
specifier: 4.5.0
- version: 4.5.0(eslint@9.38.0(jiti@2.6.1))
+ version: 4.5.0(eslint@9.39.1(jiti@2.6.1))
'@playwright/test':
- specifier: 1.56.1
- version: 1.56.1
+ specifier: 1.57.0
+ version: 1.57.0
'@stylistic/eslint-plugin':
- specifier: 5.5.0
- version: 5.5.0(eslint@9.38.0(jiti@2.6.1))
+ specifier: 5.6.1
+ version: 5.6.1(eslint@9.39.1(jiti@2.6.1))
'@stylistic/stylelint-plugin':
specifier: 4.0.0
- version: 4.0.0(stylelint@16.25.0(typescript@5.9.3))
+ version: 4.0.0(stylelint@16.26.0(typescript@5.9.3))
'@types/codemirror':
specifier: 5.60.17
version: 5.60.17
@@ -241,65 +241,62 @@ importers:
specifier: 1.12.4
version: 1.12.4
'@typescript-eslint/parser':
- specifier: 8.46.2
- version: 8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)
+ specifier: 8.48.0
+ version: 8.48.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)
'@vitejs/plugin-vue':
- specifier: 6.0.1
- version: 6.0.1(vite@7.1.12(@types/node@24.9.1)(jiti@2.6.1)(stylus@0.57.0)(terser@5.44.0)(yaml@2.8.1))(vue@3.5.22(typescript@5.9.3))
+ specifier: 6.0.2
+ version: 6.0.2(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(stylus@0.57.0)(terser@5.44.1)(yaml@2.8.1))(vue@3.5.25(typescript@5.9.3))
'@vitest/eslint-plugin':
- specifier: 1.3.26
- version: 1.3.26(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)(vitest@4.0.4(@types/debug@4.1.12)(@types/node@24.9.1)(happy-dom@20.0.8)(jiti@2.6.1)(stylus@0.57.0)(terser@5.44.0)(yaml@2.8.1))
+ specifier: 1.5.0
+ version: 1.5.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)(vitest@4.0.14(@types/node@24.10.1)(happy-dom@20.0.10)(jiti@2.6.1)(stylus@0.57.0)(terser@5.44.1)(yaml@2.8.1))
eslint:
- specifier: 9.38.0
- version: 9.38.0(jiti@2.6.1)
+ specifier: 9.39.1
+ version: 9.39.1(jiti@2.6.1)
eslint-import-resolver-typescript:
specifier: 4.4.4
- version: 4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@9.38.0(jiti@2.6.1)))(eslint-plugin-import@2.32.0)(eslint@9.38.0(jiti@2.6.1))
+ version: 4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.48.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@9.39.1(jiti@2.6.1)))(eslint-plugin-import@2.32.0)(eslint@9.39.1(jiti@2.6.1))
eslint-plugin-array-func:
specifier: 5.1.0
- version: 5.1.0(eslint@9.38.0(jiti@2.6.1))
+ version: 5.1.0(eslint@9.39.1(jiti@2.6.1))
eslint-plugin-github:
specifier: 6.0.0
- version: 6.0.0(@types/eslint@9.6.1)(eslint-import-resolver-typescript@4.4.4)(eslint@9.38.0(jiti@2.6.1))
+ version: 6.0.0(@types/eslint@9.6.1)(eslint-import-resolver-typescript@4.4.4)(eslint@9.39.1(jiti@2.6.1))
eslint-plugin-import-x:
specifier: 4.16.1
- version: 4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@9.38.0(jiti@2.6.1))
- eslint-plugin-no-use-extend-native:
- specifier: 0.7.2
- version: 0.7.2(eslint@9.38.0(jiti@2.6.1))
+ version: 4.16.1(@typescript-eslint/utils@8.48.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@9.39.1(jiti@2.6.1))
eslint-plugin-playwright:
- specifier: 2.2.2
- version: 2.2.2(eslint@9.38.0(jiti@2.6.1))
+ specifier: 2.3.0
+ version: 2.3.0(eslint@9.39.1(jiti@2.6.1))
eslint-plugin-regexp:
specifier: 2.10.0
- version: 2.10.0(eslint@9.38.0(jiti@2.6.1))
+ version: 2.10.0(eslint@9.39.1(jiti@2.6.1))
eslint-plugin-sonarjs:
specifier: 3.0.5
- version: 3.0.5(eslint@9.38.0(jiti@2.6.1))
+ version: 3.0.5(eslint@9.39.1(jiti@2.6.1))
eslint-plugin-unicorn:
specifier: 62.0.0
- version: 62.0.0(eslint@9.38.0(jiti@2.6.1))
+ version: 62.0.0(eslint@9.39.1(jiti@2.6.1))
eslint-plugin-vue:
- specifier: 10.5.1
- version: 10.5.1(@stylistic/eslint-plugin@5.5.0(eslint@9.38.0(jiti@2.6.1)))(@typescript-eslint/parser@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(vue-eslint-parser@10.2.0(eslint@9.38.0(jiti@2.6.1)))
+ specifier: 10.6.1
+ version: 10.6.1(@stylistic/eslint-plugin@5.6.1(eslint@9.39.1(jiti@2.6.1)))(@typescript-eslint/parser@8.48.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(vue-eslint-parser@10.2.0(eslint@9.39.1(jiti@2.6.1)))
eslint-plugin-vue-scoped-css:
specifier: 2.12.0
- version: 2.12.0(eslint@9.38.0(jiti@2.6.1))(vue-eslint-parser@10.2.0(eslint@9.38.0(jiti@2.6.1)))
+ version: 2.12.0(eslint@9.39.1(jiti@2.6.1))(vue-eslint-parser@10.2.0(eslint@9.39.1(jiti@2.6.1)))
eslint-plugin-wc:
specifier: 3.0.2
- version: 3.0.2(eslint@9.38.0(jiti@2.6.1))
+ version: 3.0.2(eslint@9.39.1(jiti@2.6.1))
globals:
- specifier: 16.4.0
- version: 16.4.0
+ specifier: 16.5.0
+ version: 16.5.0
happy-dom:
- specifier: 20.0.8
- version: 20.0.8
+ specifier: 20.0.10
+ version: 20.0.10
markdownlint-cli:
- specifier: 0.45.0
- version: 0.45.0
+ specifier: 0.46.0
+ version: 0.46.0
material-icon-theme:
- specifier: 5.28.0
- version: 5.28.0
+ specifier: 5.29.0
+ version: 5.29.0
nolyfill:
specifier: 1.0.44
version: 1.0.44
@@ -310,38 +307,38 @@ importers:
specifier: 1.0.3
version: 1.0.3
stylelint:
- specifier: 16.25.0
- version: 16.25.0(typescript@5.9.3)
+ specifier: 16.26.0
+ version: 16.26.0(typescript@5.9.3)
stylelint-config-recommended:
specifier: 17.0.0
- version: 17.0.0(stylelint@16.25.0(typescript@5.9.3))
+ version: 17.0.0(stylelint@16.26.0(typescript@5.9.3))
stylelint-declaration-block-no-ignored-properties:
specifier: 2.8.0
- version: 2.8.0(stylelint@16.25.0(typescript@5.9.3))
+ version: 2.8.0(stylelint@16.26.0(typescript@5.9.3))
stylelint-declaration-strict-value:
specifier: 1.10.11
- version: 1.10.11(stylelint@16.25.0(typescript@5.9.3))
+ version: 1.10.11(stylelint@16.26.0(typescript@5.9.3))
stylelint-value-no-unknown-custom-properties:
specifier: 6.0.1
- version: 6.0.1(stylelint@16.25.0(typescript@5.9.3))
+ version: 6.0.1(stylelint@16.26.0(typescript@5.9.3))
svgo:
specifier: 4.0.0
version: 4.0.0
typescript-eslint:
- specifier: 8.46.2
- version: 8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)
+ specifier: 8.48.0
+ version: 8.48.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)
updates:
- specifier: 16.9.1
- version: 16.9.1
+ specifier: 16.9.2
+ version: 16.9.2
vite-string-plugin:
- specifier: 1.4.6
- version: 1.4.6
+ specifier: 1.4.9
+ version: 1.4.9
vitest:
- specifier: 4.0.4
- version: 4.0.4(@types/debug@4.1.12)(@types/node@24.9.1)(happy-dom@20.0.8)(jiti@2.6.1)(stylus@0.57.0)(terser@5.44.0)(yaml@2.8.1)
+ specifier: 4.0.14
+ version: 4.0.14(@types/node@24.10.1)(happy-dom@20.0.10)(jiti@2.6.1)(stylus@0.57.0)(terser@5.44.1)(yaml@2.8.1)
vue-tsc:
- specifier: 3.1.2
- version: 3.1.2(typescript@5.9.3)
+ specifier: 3.1.5
+ version: 3.1.5(typescript@5.9.3)
packages:
@@ -383,14 +380,11 @@ packages:
'@braintree/sanitize-url@7.1.1':
resolution: {integrity: sha512-i1L7noDNxtFyL5DmZafWy1wRVhGehQmzZaz1HiN5e7iylJMSZR7ekOV7NsIqa5qBldlLrsKv4HbgFUVlQrz8Mw==}
- '@cacheable/memoize@2.0.3':
- resolution: {integrity: sha512-hl9wfQgpiydhQEIv7fkjEzTGE+tcosCXLKFDO707wYJ/78FVOlowb36djex5GdbSyeHnG62pomYLMuV/OT8Pbw==}
+ '@cacheable/memory@2.0.5':
+ resolution: {integrity: sha512-fkiAxCvssEyJZ5fxX4tcdZFRmW9JehSTGvvqmXn6rTzG5cH6V/3C4ad8yb01vOjp2xBydHkHrgpW0qeGtzt6VQ==}
- '@cacheable/memory@2.0.3':
- resolution: {integrity: sha512-R3UKy/CKOyb1LZG/VRCTMcpiMDyLH7SH3JrraRdK6kf3GweWCOU3sgvE13W3TiDRbxnDKylzKJvhUAvWl9LQOA==}
-
- '@cacheable/utils@2.1.0':
- resolution: {integrity: sha512-ZdxfOiaarMqMj+H7qwlt5EBKWaeGihSYVHdQv5lUsbn8MJJOTW82OIwirQ39U5tMZkNvy3bQE+ryzC+xTAb9/g==}
+ '@cacheable/utils@2.3.1':
+ resolution: {integrity: sha512-38NJXjIr4W1Sghun8ju+uYWD8h2c61B4dKwfnQHVDFpAJ9oS28RpfqZQJ6Dgd3RceGkILDY9YT+72HJR3LoeSQ==}
'@chevrotain/cst-dts-gen@11.0.3':
resolution: {integrity: sha512-BvIKpRLeS/8UbfxXxgC33xOumsacaeCKAjAeLyOn7Pcp95HiRbrpl14S+9vaZLolnbssPIUuiUd8IvgkRyt6NQ==}
@@ -485,167 +479,167 @@ packages:
'@dual-bundle/import-meta-resolve@4.2.1':
resolution: {integrity: sha512-id+7YRUgoUX6CgV0DtuhirQWodeeA7Lf4i2x71JS/vtA5pRb/hIGWlw+G6MeXvsM+MXrz0VAydTGElX1rAfgPg==}
- '@emnapi/core@1.6.0':
- resolution: {integrity: sha512-zq/ay+9fNIJJtJiZxdTnXS20PllcYMX3OE23ESc4HK/bdYu3cOWYVhsOhVnXALfU/uqJIxn5NBPd9z4v+SfoSg==}
+ '@emnapi/core@1.7.1':
+ resolution: {integrity: sha512-o1uhUASyo921r2XtHYOHy7gdkGLge8ghBEQHMWmyJFoXlpU58kIrhhN3w26lpQb6dspetweapMn2CSNwQ8I4wg==}
- '@emnapi/runtime@1.6.0':
- resolution: {integrity: sha512-obtUmAHTMjll499P+D9A3axeJFlhdjOWdKUNs/U6QIGT7V5RjcUW1xToAzjvmgTSQhDbYn/NwfTRoJcQ2rNBxA==}
+ '@emnapi/runtime@1.7.1':
+ resolution: {integrity: sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==}
'@emnapi/wasi-threads@1.1.0':
resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==}
- '@esbuild/aix-ppc64@0.25.11':
- resolution: {integrity: sha512-Xt1dOL13m8u0WE8iplx9Ibbm+hFAO0GsU2P34UNoDGvZYkY8ifSiy6Zuc1lYxfG7svWE2fzqCUmFp5HCn51gJg==}
+ '@esbuild/aix-ppc64@0.25.12':
+ resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==}
engines: {node: '>=18'}
cpu: [ppc64]
os: [aix]
- '@esbuild/android-arm64@0.25.11':
- resolution: {integrity: sha512-9slpyFBc4FPPz48+f6jyiXOx/Y4v34TUeDDXJpZqAWQn/08lKGeD8aDp9TMn9jDz2CiEuHwfhRmGBvpnd/PWIQ==}
+ '@esbuild/android-arm64@0.25.12':
+ resolution: {integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==}
engines: {node: '>=18'}
cpu: [arm64]
os: [android]
- '@esbuild/android-arm@0.25.11':
- resolution: {integrity: sha512-uoa7dU+Dt3HYsethkJ1k6Z9YdcHjTrSb5NUy66ZfZaSV8hEYGD5ZHbEMXnqLFlbBflLsl89Zke7CAdDJ4JI+Gg==}
+ '@esbuild/android-arm@0.25.12':
+ resolution: {integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==}
engines: {node: '>=18'}
cpu: [arm]
os: [android]
- '@esbuild/android-x64@0.25.11':
- resolution: {integrity: sha512-Sgiab4xBjPU1QoPEIqS3Xx+R2lezu0LKIEcYe6pftr56PqPygbB7+szVnzoShbx64MUupqoE0KyRlN7gezbl8g==}
+ '@esbuild/android-x64@0.25.12':
+ resolution: {integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==}
engines: {node: '>=18'}
cpu: [x64]
os: [android]
- '@esbuild/darwin-arm64@0.25.11':
- resolution: {integrity: sha512-VekY0PBCukppoQrycFxUqkCojnTQhdec0vevUL/EDOCnXd9LKWqD/bHwMPzigIJXPhC59Vd1WFIL57SKs2mg4w==}
+ '@esbuild/darwin-arm64@0.25.12':
+ resolution: {integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==}
engines: {node: '>=18'}
cpu: [arm64]
os: [darwin]
- '@esbuild/darwin-x64@0.25.11':
- resolution: {integrity: sha512-+hfp3yfBalNEpTGp9loYgbknjR695HkqtY3d3/JjSRUyPg/xd6q+mQqIb5qdywnDxRZykIHs3axEqU6l1+oWEQ==}
+ '@esbuild/darwin-x64@0.25.12':
+ resolution: {integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==}
engines: {node: '>=18'}
cpu: [x64]
os: [darwin]
- '@esbuild/freebsd-arm64@0.25.11':
- resolution: {integrity: sha512-CmKjrnayyTJF2eVuO//uSjl/K3KsMIeYeyN7FyDBjsR3lnSJHaXlVoAK8DZa7lXWChbuOk7NjAc7ygAwrnPBhA==}
+ '@esbuild/freebsd-arm64@0.25.12':
+ resolution: {integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==}
engines: {node: '>=18'}
cpu: [arm64]
os: [freebsd]
- '@esbuild/freebsd-x64@0.25.11':
- resolution: {integrity: sha512-Dyq+5oscTJvMaYPvW3x3FLpi2+gSZTCE/1ffdwuM6G1ARang/mb3jvjxs0mw6n3Lsw84ocfo9CrNMqc5lTfGOw==}
+ '@esbuild/freebsd-x64@0.25.12':
+ resolution: {integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==}
engines: {node: '>=18'}
cpu: [x64]
os: [freebsd]
- '@esbuild/linux-arm64@0.25.11':
- resolution: {integrity: sha512-Qr8AzcplUhGvdyUF08A1kHU3Vr2O88xxP0Tm8GcdVOUm25XYcMPp2YqSVHbLuXzYQMf9Bh/iKx7YPqECs6ffLA==}
+ '@esbuild/linux-arm64@0.25.12':
+ resolution: {integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==}
engines: {node: '>=18'}
cpu: [arm64]
os: [linux]
- '@esbuild/linux-arm@0.25.11':
- resolution: {integrity: sha512-TBMv6B4kCfrGJ8cUPo7vd6NECZH/8hPpBHHlYI3qzoYFvWu2AdTvZNuU/7hsbKWqu/COU7NIK12dHAAqBLLXgw==}
+ '@esbuild/linux-arm@0.25.12':
+ resolution: {integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==}
engines: {node: '>=18'}
cpu: [arm]
os: [linux]
- '@esbuild/linux-ia32@0.25.11':
- resolution: {integrity: sha512-TmnJg8BMGPehs5JKrCLqyWTVAvielc615jbkOirATQvWWB1NMXY77oLMzsUjRLa0+ngecEmDGqt5jiDC6bfvOw==}
+ '@esbuild/linux-ia32@0.25.12':
+ resolution: {integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==}
engines: {node: '>=18'}
cpu: [ia32]
os: [linux]
- '@esbuild/linux-loong64@0.25.11':
- resolution: {integrity: sha512-DIGXL2+gvDaXlaq8xruNXUJdT5tF+SBbJQKbWy/0J7OhU8gOHOzKmGIlfTTl6nHaCOoipxQbuJi7O++ldrxgMw==}
+ '@esbuild/linux-loong64@0.25.12':
+ resolution: {integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==}
engines: {node: '>=18'}
cpu: [loong64]
os: [linux]
- '@esbuild/linux-mips64el@0.25.11':
- resolution: {integrity: sha512-Osx1nALUJu4pU43o9OyjSCXokFkFbyzjXb6VhGIJZQ5JZi8ylCQ9/LFagolPsHtgw6himDSyb5ETSfmp4rpiKQ==}
+ '@esbuild/linux-mips64el@0.25.12':
+ resolution: {integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==}
engines: {node: '>=18'}
cpu: [mips64el]
os: [linux]
- '@esbuild/linux-ppc64@0.25.11':
- resolution: {integrity: sha512-nbLFgsQQEsBa8XSgSTSlrnBSrpoWh7ioFDUmwo158gIm5NNP+17IYmNWzaIzWmgCxq56vfr34xGkOcZ7jX6CPw==}
+ '@esbuild/linux-ppc64@0.25.12':
+ resolution: {integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==}
engines: {node: '>=18'}
cpu: [ppc64]
os: [linux]
- '@esbuild/linux-riscv64@0.25.11':
- resolution: {integrity: sha512-HfyAmqZi9uBAbgKYP1yGuI7tSREXwIb438q0nqvlpxAOs3XnZ8RsisRfmVsgV486NdjD7Mw2UrFSw51lzUk1ww==}
+ '@esbuild/linux-riscv64@0.25.12':
+ resolution: {integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==}
engines: {node: '>=18'}
cpu: [riscv64]
os: [linux]
- '@esbuild/linux-s390x@0.25.11':
- resolution: {integrity: sha512-HjLqVgSSYnVXRisyfmzsH6mXqyvj0SA7pG5g+9W7ESgwA70AXYNpfKBqh1KbTxmQVaYxpzA/SvlB9oclGPbApw==}
+ '@esbuild/linux-s390x@0.25.12':
+ resolution: {integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==}
engines: {node: '>=18'}
cpu: [s390x]
os: [linux]
- '@esbuild/linux-x64@0.25.11':
- resolution: {integrity: sha512-HSFAT4+WYjIhrHxKBwGmOOSpphjYkcswF449j6EjsjbinTZbp8PJtjsVK1XFJStdzXdy/jaddAep2FGY+wyFAQ==}
+ '@esbuild/linux-x64@0.25.12':
+ resolution: {integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==}
engines: {node: '>=18'}
cpu: [x64]
os: [linux]
- '@esbuild/netbsd-arm64@0.25.11':
- resolution: {integrity: sha512-hr9Oxj1Fa4r04dNpWr3P8QKVVsjQhqrMSUzZzf+LZcYjZNqhA3IAfPQdEh1FLVUJSiu6sgAwp3OmwBfbFgG2Xg==}
+ '@esbuild/netbsd-arm64@0.25.12':
+ resolution: {integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==}
engines: {node: '>=18'}
cpu: [arm64]
os: [netbsd]
- '@esbuild/netbsd-x64@0.25.11':
- resolution: {integrity: sha512-u7tKA+qbzBydyj0vgpu+5h5AeudxOAGncb8N6C9Kh1N4n7wU1Xw1JDApsRjpShRpXRQlJLb9wY28ELpwdPcZ7A==}
+ '@esbuild/netbsd-x64@0.25.12':
+ resolution: {integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==}
engines: {node: '>=18'}
cpu: [x64]
os: [netbsd]
- '@esbuild/openbsd-arm64@0.25.11':
- resolution: {integrity: sha512-Qq6YHhayieor3DxFOoYM1q0q1uMFYb7cSpLD2qzDSvK1NAvqFi8Xgivv0cFC6J+hWVw2teCYltyy9/m/14ryHg==}
+ '@esbuild/openbsd-arm64@0.25.12':
+ resolution: {integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==}
engines: {node: '>=18'}
cpu: [arm64]
os: [openbsd]
- '@esbuild/openbsd-x64@0.25.11':
- resolution: {integrity: sha512-CN+7c++kkbrckTOz5hrehxWN7uIhFFlmS/hqziSFVWpAzpWrQoAG4chH+nN3Be+Kzv/uuo7zhX716x3Sn2Jduw==}
+ '@esbuild/openbsd-x64@0.25.12':
+ resolution: {integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==}
engines: {node: '>=18'}
cpu: [x64]
os: [openbsd]
- '@esbuild/openharmony-arm64@0.25.11':
- resolution: {integrity: sha512-rOREuNIQgaiR+9QuNkbkxubbp8MSO9rONmwP5nKncnWJ9v5jQ4JxFnLu4zDSRPf3x4u+2VN4pM4RdyIzDty/wQ==}
+ '@esbuild/openharmony-arm64@0.25.12':
+ resolution: {integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==}
engines: {node: '>=18'}
cpu: [arm64]
os: [openharmony]
- '@esbuild/sunos-x64@0.25.11':
- resolution: {integrity: sha512-nq2xdYaWxyg9DcIyXkZhcYulC6pQ2FuCgem3LI92IwMgIZ69KHeY8T4Y88pcwoLIjbed8n36CyKoYRDygNSGhA==}
+ '@esbuild/sunos-x64@0.25.12':
+ resolution: {integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==}
engines: {node: '>=18'}
cpu: [x64]
os: [sunos]
- '@esbuild/win32-arm64@0.25.11':
- resolution: {integrity: sha512-3XxECOWJq1qMZ3MN8srCJ/QfoLpL+VaxD/WfNRm1O3B4+AZ/BnLVgFbUV3eiRYDMXetciH16dwPbbHqwe1uU0Q==}
+ '@esbuild/win32-arm64@0.25.12':
+ resolution: {integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==}
engines: {node: '>=18'}
cpu: [arm64]
os: [win32]
- '@esbuild/win32-ia32@0.25.11':
- resolution: {integrity: sha512-3ukss6gb9XZ8TlRyJlgLn17ecsK4NSQTmdIXRASVsiS2sQ6zPPZklNJT5GR5tE/MUarymmy8kCEf5xPCNCqVOA==}
+ '@esbuild/win32-ia32@0.25.12':
+ resolution: {integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==}
engines: {node: '>=18'}
cpu: [ia32]
os: [win32]
- '@esbuild/win32-x64@0.25.11':
- resolution: {integrity: sha512-D7Hpz6A2L4hzsRpPaCYkQnGOotdUpDzSGRIv9I+1ITdHROSFUWW95ZPZWQmGka1Fg7W3zFJowyn9WGwMJ0+KPA==}
+ '@esbuild/win32-x64@0.25.12':
+ resolution: {integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==}
engines: {node: '>=18'}
cpu: [x64]
os: [win32]
@@ -670,8 +664,8 @@ packages:
resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==}
engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
- '@eslint/compat@1.4.0':
- resolution: {integrity: sha512-DEzm5dKeDBPm3r08Ixli/0cmxr8LkRdwxMRUIJBlSCpAwSrvFEJpVBzV+66JhDxiaqKxnRzCXhtiMiczF7Hglg==}
+ '@eslint/compat@1.4.1':
+ resolution: {integrity: sha512-cfO82V9zxxGBxcQDr1lfaYB7wykTa0b00mGa36FrJl7iTFd0Z2cHfEYuxcBRP/iNijCsWsEkA+jzT8hGYmv33w==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.40 || 9
@@ -683,28 +677,28 @@ packages:
resolution: {integrity: sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@eslint/config-helpers@0.4.1':
- resolution: {integrity: sha512-csZAzkNhsgwb0I/UAV6/RGFTbiakPCf0ZrGmrIxQpYvGZ00PhTkSnyKNolphgIvmnJeGw6rcGVEXfTzUnFuEvw==}
+ '@eslint/config-helpers@0.4.2':
+ resolution: {integrity: sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@eslint/core@0.16.0':
- resolution: {integrity: sha512-nmC8/totwobIiFcGkDza3GIKfAw1+hLiYVrh3I1nIomQ8PEr5cxg34jnkmGawul/ep52wGRAcyeDCNtWKSOj4Q==}
+ '@eslint/core@0.17.0':
+ resolution: {integrity: sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@eslint/eslintrc@3.3.1':
resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@eslint/js@9.38.0':
- resolution: {integrity: sha512-UZ1VpFvXf9J06YG9xQBdnzU+kthors6KjhMAl6f4gH4usHyh31rUf2DLGInT8RFYIReYXNSydgPY0V2LuWgl7A==}
+ '@eslint/js@9.39.1':
+ resolution: {integrity: sha512-S26Stp4zCy88tH94QbBv3XCuzRQiZ9yXofEILmglYTh/Ug/a9/umqvgFtYBAo3Lp0nsI/5/qH1CCrbdK3AP1Tw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@eslint/object-schema@2.1.7':
resolution: {integrity: sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@eslint/plugin-kit@0.4.0':
- resolution: {integrity: sha512-sB5uyeq+dwCWyPi31B2gQlVlo+j5brPlWx4yZBrEaRo/nhdDE8Xke1gsGgtiBdaBTxuTkceLVuVt/pclrasb0A==}
+ '@eslint/plugin-kit@0.4.1':
+ resolution: {integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@github/browserslist-config@1.0.0':
@@ -719,8 +713,8 @@ packages:
'@github/paste-markdown@1.5.3':
resolution: {integrity: sha512-PzZ1b3PaqBzYqbT4fwKEhiORf38h2OcGp2+JdXNNM7inZ7egaSmfmhyNkQILpqWfS0AYtRS3CDq6z03eZ8yOMQ==}
- '@github/relative-time-element@4.5.0':
- resolution: {integrity: sha512-zKC/tUHeDDdbODBuZh3CkT5pCy41M8mGuUplzhtBMuiEQ5+qY/l/iu0X1IBY/6QhNeP/xdQIVkLYKh2O5En4dg==}
+ '@github/relative-time-element@4.5.1':
+ resolution: {integrity: sha512-uxCxCwe9vdwUDmRmM84tN0UERlj8MosLV44+r/VDj7DZUVUSTP4vyWlE9mRK6vHelOmT8DS3RMlaMrLlg1h1PQ==}
'@github/text-expander-element@2.9.2':
resolution: {integrity: sha512-XY8EUMqM4GAloNxXNA1Py1ny+engWwYntbgsnpstQN4piaTI9rIlfYldyd0nnPXhxjGCVqHPmP6yg17Q0/n9Vg==}
@@ -755,10 +749,6 @@ packages:
resolution: {integrity: sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==}
engines: {node: 20 || >=22}
- '@isaacs/cliui@8.0.2':
- resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
- engines: {node: '>=12'}
-
'@jridgewell/gen-mapping@0.3.13':
resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==}
@@ -775,11 +765,11 @@ packages:
'@jridgewell/trace-mapping@0.3.31':
resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==}
- '@keyv/bigmap@1.1.0':
- resolution: {integrity: sha512-MX7XIUNwVRK+hjZcAbNJ0Z8DREo+Weu9vinBOjGU1thEi9F6vPhICzBbk4CCf3eEefKRz7n6TfZXwUFZTSgj8Q==}
+ '@keyv/bigmap@1.3.0':
+ resolution: {integrity: sha512-KT01GjzV6AQD5+IYrcpoYLkCu1Jod3nau1Z7EsEuViO3TZGRacSbO9MfHmbJ1WaOXFtWLxPVj169cn2WNKPkIg==}
engines: {node: '>= 18'}
peerDependencies:
- keyv: ^5.5.3
+ keyv: ^5.5.4
'@keyv/serialize@1.1.1':
resolution: {integrity: sha512-dXn3FZhPv0US+7dtJsIi2R+c7qWYiReoEh5zUntWCf4oSpMNib8FDhSoed6m3QyZdx5hK7iLFkYk3rNxwt8vTA==}
@@ -874,139 +864,135 @@ packages:
resolution: {integrity: sha512-3dsKlf4Ma7o+uxLIg5OI1Tgwfet2pE8WTbPjEGWvOe6CSjMtK0skJnnSVHaEVX4N4mYU81To0qDeZOPqjaUotg==}
engines: {node: '>=12.4.0'}
- '@pkgjs/parseargs@0.11.0':
- resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
- engines: {node: '>=14'}
-
'@pkgr/core@0.2.9':
resolution: {integrity: sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==}
engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0}
- '@playwright/test@1.56.1':
- resolution: {integrity: sha512-vSMYtL/zOcFpvJCW71Q/OEGQb7KYBPAdKh35WNSkaZA75JlAO8ED8UN6GUNTm3drWomcbcqRPFqQbLae8yBTdg==}
+ '@playwright/test@1.57.0':
+ resolution: {integrity: sha512-6TyEnHgd6SArQO8UO2OMTxshln3QMWBtPGrOCgs3wVEmQmwyuNtB10IZMfmYDE0riwNR1cu4q+pPcxMVtaG3TA==}
engines: {node: '>=18'}
hasBin: true
'@popperjs/core@2.11.8':
resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==}
- '@primer/octicons@19.19.0':
- resolution: {integrity: sha512-LBbL8nOl6FWMDy7riKB5ppHLtffY7loRq+CDGj0D5G1Xdo2mKlSOQy3rWy2RVE8SxxPFL+mj46C1nG+smKBEZA==}
+ '@primer/octicons@19.21.0':
+ resolution: {integrity: sha512-87buZ9aPlWbbHvTTzPAy9zqqGZpCc/VH+Q6q9OsZou6zCaExjmsINj6rWjP6FxNK5ZWHfF0UFNKQCai72lhaLA==}
'@resvg/resvg-wasm@2.6.2':
resolution: {integrity: sha512-FqALmHI8D4o6lk/LRWDnhw95z5eO+eAa6ORjVg09YRR7BkcM6oPHU9uyC0gtQG5vpFLvgpeU4+zEAz2H8APHNw==}
engines: {node: '>= 10'}
- '@rolldown/pluginutils@1.0.0-beta.29':
- resolution: {integrity: sha512-NIJgOsMjbxAXvoGq/X0gD7VPMQ8j9g0BiDaNjVNVjvl+iKXxL3Jre0v31RmBYeLEmkbj2s02v8vFTbUXi5XS2Q==}
+ '@rolldown/pluginutils@1.0.0-beta.50':
+ resolution: {integrity: sha512-5e76wQiQVeL1ICOZVUg4LSOVYg9jyhGCin+icYozhsUzM+fHE7kddi1bdiE0jwVqTfkjba3jUFbEkoC9WkdvyA==}
- '@rollup/rollup-android-arm-eabi@4.52.5':
- resolution: {integrity: sha512-8c1vW4ocv3UOMp9K+gToY5zL2XiiVw3k7f1ksf4yO1FlDFQ1C2u72iACFnSOceJFsWskc2WZNqeRhFRPzv+wtQ==}
+ '@rollup/rollup-android-arm-eabi@4.53.3':
+ resolution: {integrity: sha512-mRSi+4cBjrRLoaal2PnqH82Wqyb+d3HsPUN/W+WslCXsZsyHa9ZeQQX/pQsZaVIWDkPcpV6jJ+3KLbTbgnwv8w==}
cpu: [arm]
os: [android]
- '@rollup/rollup-android-arm64@4.52.5':
- resolution: {integrity: sha512-mQGfsIEFcu21mvqkEKKu2dYmtuSZOBMmAl5CFlPGLY94Vlcm+zWApK7F/eocsNzp8tKmbeBP8yXyAbx0XHsFNA==}
+ '@rollup/rollup-android-arm64@4.53.3':
+ resolution: {integrity: sha512-CbDGaMpdE9sh7sCmTrTUyllhrg65t6SwhjlMJsLr+J8YjFuPmCEjbBSx4Z/e4SmDyH3aB5hGaJUP2ltV/vcs4w==}
cpu: [arm64]
os: [android]
- '@rollup/rollup-darwin-arm64@4.52.5':
- resolution: {integrity: sha512-takF3CR71mCAGA+v794QUZ0b6ZSrgJkArC+gUiG6LB6TQty9T0Mqh3m2ImRBOxS2IeYBo4lKWIieSvnEk2OQWA==}
+ '@rollup/rollup-darwin-arm64@4.53.3':
+ resolution: {integrity: sha512-Nr7SlQeqIBpOV6BHHGZgYBuSdanCXuw09hon14MGOLGmXAFYjx1wNvquVPmpZnl0tLjg25dEdr4IQ6GgyToCUA==}
cpu: [arm64]
os: [darwin]
- '@rollup/rollup-darwin-x64@4.52.5':
- resolution: {integrity: sha512-W901Pla8Ya95WpxDn//VF9K9u2JbocwV/v75TE0YIHNTbhqUTv9w4VuQ9MaWlNOkkEfFwkdNhXgcLqPSmHy0fA==}
+ '@rollup/rollup-darwin-x64@4.53.3':
+ resolution: {integrity: sha512-DZ8N4CSNfl965CmPktJ8oBnfYr3F8dTTNBQkRlffnUarJ2ohudQD17sZBa097J8xhQ26AwhHJ5mvUyQW8ddTsQ==}
cpu: [x64]
os: [darwin]
- '@rollup/rollup-freebsd-arm64@4.52.5':
- resolution: {integrity: sha512-QofO7i7JycsYOWxe0GFqhLmF6l1TqBswJMvICnRUjqCx8b47MTo46W8AoeQwiokAx3zVryVnxtBMcGcnX12LvA==}
+ '@rollup/rollup-freebsd-arm64@4.53.3':
+ resolution: {integrity: sha512-yMTrCrK92aGyi7GuDNtGn2sNW+Gdb4vErx4t3Gv/Tr+1zRb8ax4z8GWVRfr3Jw8zJWvpGHNpss3vVlbF58DZ4w==}
cpu: [arm64]
os: [freebsd]
- '@rollup/rollup-freebsd-x64@4.52.5':
- resolution: {integrity: sha512-jr21b/99ew8ujZubPo9skbrItHEIE50WdV86cdSoRkKtmWa+DDr6fu2c/xyRT0F/WazZpam6kk7IHBerSL7LDQ==}
+ '@rollup/rollup-freebsd-x64@4.53.3':
+ resolution: {integrity: sha512-lMfF8X7QhdQzseM6XaX0vbno2m3hlyZFhwcndRMw8fbAGUGL3WFMBdK0hbUBIUYcEcMhVLr1SIamDeuLBnXS+Q==}
cpu: [x64]
os: [freebsd]
- '@rollup/rollup-linux-arm-gnueabihf@4.52.5':
- resolution: {integrity: sha512-PsNAbcyv9CcecAUagQefwX8fQn9LQ4nZkpDboBOttmyffnInRy8R8dSg6hxxl2Re5QhHBf6FYIDhIj5v982ATQ==}
+ '@rollup/rollup-linux-arm-gnueabihf@4.53.3':
+ resolution: {integrity: sha512-k9oD15soC/Ln6d2Wv/JOFPzZXIAIFLp6B+i14KhxAfnq76ajt0EhYc5YPeX6W1xJkAdItcVT+JhKl1QZh44/qw==}
cpu: [arm]
os: [linux]
- '@rollup/rollup-linux-arm-musleabihf@4.52.5':
- resolution: {integrity: sha512-Fw4tysRutyQc/wwkmcyoqFtJhh0u31K+Q6jYjeicsGJJ7bbEq8LwPWV/w0cnzOqR2m694/Af6hpFayLJZkG2VQ==}
+ '@rollup/rollup-linux-arm-musleabihf@4.53.3':
+ resolution: {integrity: sha512-vTNlKq+N6CK/8UktsrFuc+/7NlEYVxgaEgRXVUVK258Z5ymho29skzW1sutgYjqNnquGwVUObAaxae8rZ6YMhg==}
cpu: [arm]
os: [linux]
- '@rollup/rollup-linux-arm64-gnu@4.52.5':
- resolution: {integrity: sha512-a+3wVnAYdQClOTlyapKmyI6BLPAFYs0JM8HRpgYZQO02rMR09ZcV9LbQB+NL6sljzG38869YqThrRnfPMCDtZg==}
+ '@rollup/rollup-linux-arm64-gnu@4.53.3':
+ resolution: {integrity: sha512-RGrFLWgMhSxRs/EWJMIFM1O5Mzuz3Xy3/mnxJp/5cVhZ2XoCAxJnmNsEyeMJtpK+wu0FJFWz+QF4mjCA7AUQ3w==}
cpu: [arm64]
os: [linux]
- '@rollup/rollup-linux-arm64-musl@4.52.5':
- resolution: {integrity: sha512-AvttBOMwO9Pcuuf7m9PkC1PUIKsfaAJ4AYhy944qeTJgQOqJYJ9oVl2nYgY7Rk0mkbsuOpCAYSs6wLYB2Xiw0Q==}
+ '@rollup/rollup-linux-arm64-musl@4.53.3':
+ resolution: {integrity: sha512-kASyvfBEWYPEwe0Qv4nfu6pNkITLTb32p4yTgzFCocHnJLAHs+9LjUu9ONIhvfT/5lv4YS5muBHyuV84epBo/A==}
cpu: [arm64]
os: [linux]
- '@rollup/rollup-linux-loong64-gnu@4.52.5':
- resolution: {integrity: sha512-DkDk8pmXQV2wVrF6oq5tONK6UHLz/XcEVow4JTTerdeV1uqPeHxwcg7aFsfnSm9L+OO8WJsWotKM2JJPMWrQtA==}
+ '@rollup/rollup-linux-loong64-gnu@4.53.3':
+ resolution: {integrity: sha512-JiuKcp2teLJwQ7vkJ95EwESWkNRFJD7TQgYmCnrPtlu50b4XvT5MOmurWNrCj3IFdyjBQ5p9vnrX4JM6I8OE7g==}
cpu: [loong64]
os: [linux]
- '@rollup/rollup-linux-ppc64-gnu@4.52.5':
- resolution: {integrity: sha512-W/b9ZN/U9+hPQVvlGwjzi+Wy4xdoH2I8EjaCkMvzpI7wJUs8sWJ03Rq96jRnHkSrcHTpQe8h5Tg3ZzUPGauvAw==}
+ '@rollup/rollup-linux-ppc64-gnu@4.53.3':
+ resolution: {integrity: sha512-EoGSa8nd6d3T7zLuqdojxC20oBfNT8nexBbB/rkxgKj5T5vhpAQKKnD+h3UkoMuTyXkP5jTjK/ccNRmQrPNDuw==}
cpu: [ppc64]
os: [linux]
- '@rollup/rollup-linux-riscv64-gnu@4.52.5':
- resolution: {integrity: sha512-sjQLr9BW7R/ZiXnQiWPkErNfLMkkWIoCz7YMn27HldKsADEKa5WYdobaa1hmN6slu9oWQbB6/jFpJ+P2IkVrmw==}
+ '@rollup/rollup-linux-riscv64-gnu@4.53.3':
+ resolution: {integrity: sha512-4s+Wped2IHXHPnAEbIB0YWBv7SDohqxobiiPA1FIWZpX+w9o2i4LezzH/NkFUl8LRci/8udci6cLq+jJQlh+0g==}
cpu: [riscv64]
os: [linux]
- '@rollup/rollup-linux-riscv64-musl@4.52.5':
- resolution: {integrity: sha512-hq3jU/kGyjXWTvAh2awn8oHroCbrPm8JqM7RUpKjalIRWWXE01CQOf/tUNWNHjmbMHg/hmNCwc/Pz3k1T/j/Lg==}
+ '@rollup/rollup-linux-riscv64-musl@4.53.3':
+ resolution: {integrity: sha512-68k2g7+0vs2u9CxDt5ktXTngsxOQkSEV/xBbwlqYcUrAVh6P9EgMZvFsnHy4SEiUl46Xf0IObWVbMvPrr2gw8A==}
cpu: [riscv64]
os: [linux]
- '@rollup/rollup-linux-s390x-gnu@4.52.5':
- resolution: {integrity: sha512-gn8kHOrku8D4NGHMK1Y7NA7INQTRdVOntt1OCYypZPRt6skGbddska44K8iocdpxHTMMNui5oH4elPH4QOLrFQ==}
+ '@rollup/rollup-linux-s390x-gnu@4.53.3':
+ resolution: {integrity: sha512-VYsFMpULAz87ZW6BVYw3I6sWesGpsP9OPcyKe8ofdg9LHxSbRMd7zrVrr5xi/3kMZtpWL/wC+UIJWJYVX5uTKg==}
cpu: [s390x]
os: [linux]
- '@rollup/rollup-linux-x64-gnu@4.52.5':
- resolution: {integrity: sha512-hXGLYpdhiNElzN770+H2nlx+jRog8TyynpTVzdlc6bndktjKWyZyiCsuDAlpd+j+W+WNqfcyAWz9HxxIGfZm1Q==}
+ '@rollup/rollup-linux-x64-gnu@4.53.3':
+ resolution: {integrity: sha512-3EhFi1FU6YL8HTUJZ51imGJWEX//ajQPfqWLI3BQq4TlvHy4X0MOr5q3D2Zof/ka0d5FNdPwZXm3Yyib/UEd+w==}
cpu: [x64]
os: [linux]
- '@rollup/rollup-linux-x64-musl@4.52.5':
- resolution: {integrity: sha512-arCGIcuNKjBoKAXD+y7XomR9gY6Mw7HnFBv5Rw7wQRvwYLR7gBAgV7Mb2QTyjXfTveBNFAtPt46/36vV9STLNg==}
+ '@rollup/rollup-linux-x64-musl@4.53.3':
+ resolution: {integrity: sha512-eoROhjcc6HbZCJr+tvVT8X4fW3/5g/WkGvvmwz/88sDtSJzO7r/blvoBDgISDiCjDRZmHpwud7h+6Q9JxFwq1Q==}
cpu: [x64]
os: [linux]
- '@rollup/rollup-openharmony-arm64@4.52.5':
- resolution: {integrity: sha512-QoFqB6+/9Rly/RiPjaomPLmR/13cgkIGfA40LHly9zcH1S0bN2HVFYk3a1eAyHQyjs3ZJYlXvIGtcCs5tko9Cw==}
+ '@rollup/rollup-openharmony-arm64@4.53.3':
+ resolution: {integrity: sha512-OueLAWgrNSPGAdUdIjSWXw+u/02BRTcnfw9PN41D2vq/JSEPnJnVuBgw18VkN8wcd4fjUs+jFHVM4t9+kBSNLw==}
cpu: [arm64]
os: [openharmony]
- '@rollup/rollup-win32-arm64-msvc@4.52.5':
- resolution: {integrity: sha512-w0cDWVR6MlTstla1cIfOGyl8+qb93FlAVutcor14Gf5Md5ap5ySfQ7R9S/NjNaMLSFdUnKGEasmVnu3lCMqB7w==}
+ '@rollup/rollup-win32-arm64-msvc@4.53.3':
+ resolution: {integrity: sha512-GOFuKpsxR/whszbF/bzydebLiXIHSgsEUp6M0JI8dWvi+fFa1TD6YQa4aSZHtpmh2/uAlj/Dy+nmby3TJ3pkTw==}
cpu: [arm64]
os: [win32]
- '@rollup/rollup-win32-ia32-msvc@4.52.5':
- resolution: {integrity: sha512-Aufdpzp7DpOTULJCuvzqcItSGDH73pF3ko/f+ckJhxQyHtp67rHw3HMNxoIdDMUITJESNE6a8uh4Lo4SLouOUg==}
+ '@rollup/rollup-win32-ia32-msvc@4.53.3':
+ resolution: {integrity: sha512-iah+THLcBJdpfZ1TstDFbKNznlzoxa8fmnFYK4V67HvmuNYkVdAywJSoteUszvBQ9/HqN2+9AZghbajMsFT+oA==}
cpu: [ia32]
os: [win32]
- '@rollup/rollup-win32-x64-gnu@4.52.5':
- resolution: {integrity: sha512-UGBUGPFp1vkj6p8wCRraqNhqwX/4kNQPS57BCFc8wYh0g94iVIW33wJtQAx3G7vrjjNtRaxiMUylM0ktp/TRSQ==}
+ '@rollup/rollup-win32-x64-gnu@4.53.3':
+ resolution: {integrity: sha512-J9QDiOIZlZLdcot5NXEepDkstocktoVjkaKUtqzgzpt2yWjGlbYiKyp05rWwk4nypbYUNoFAztEgixoLaSETkg==}
cpu: [x64]
os: [win32]
- '@rollup/rollup-win32-x64-msvc@4.52.5':
- resolution: {integrity: sha512-TAcgQh2sSkykPRWLrdyy2AiceMckNf5loITqXxFI5VuQjS5tSuw3WlwdN8qv8vzjLAUTvYaH/mVjSFpbkFbpTg==}
+ '@rollup/rollup-win32-x64-msvc@4.53.3':
+ resolution: {integrity: sha512-UhTd8u31dXadv0MopwGgNOBpUVROFKWVQgAg5N1ESyCz8AuBcMqm4AuTjrwgQKGDfoFuz02EuMRHQIw/frmYKQ==}
cpu: [x64]
os: [win32]
@@ -1044,8 +1030,8 @@ packages:
'@standard-schema/spec@1.0.0':
resolution: {integrity: sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==}
- '@stylistic/eslint-plugin@5.5.0':
- resolution: {integrity: sha512-IeZF+8H0ns6prg4VrkhgL+yrvDXWDH2cKchrbh80ejG9dQgZWp10epHMbgRuQvgchLII/lfh6Xn3lu6+6L86Hw==}
+ '@stylistic/eslint-plugin@5.6.1':
+ resolution: {integrity: sha512-JCs+MqoXfXrRPGbGmho/zGS/jMcn3ieKl/A8YImqib76C8kjgZwq5uUFzc30lJkMvcchuRn6/v8IApLxli3Jyw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: '>=9.0.0'
@@ -1208,11 +1194,11 @@ packages:
'@types/ms@2.1.0':
resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==}
- '@types/node@20.19.23':
- resolution: {integrity: sha512-yIdlVVVHXpmqRhtyovZAcSy0MiPcYWGkoO4CGe/+jpP0hmNuihm4XhHbADpK++MsiLHP5MVlv+bcgdF99kSiFQ==}
+ '@types/node@20.19.25':
+ resolution: {integrity: sha512-ZsJzA5thDQMSQO788d7IocwwQbI8B5OPzmqNvpf3NY/+MHDAS759Wo0gd2WQeXYt5AAAQjzcrTVC6SKCuYgoCQ==}
- '@types/node@24.9.1':
- resolution: {integrity: sha512-QoiaXANRkSXK6p0Duvt56W208du4P9Uye9hWLWgGMDTEoKPhuenzNcC4vGUmrNkiOKTlIrBoyNQYNpSwfEZXSg==}
+ '@types/node@24.10.1':
+ resolution: {integrity: sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==}
'@types/pdfobject@2.2.5':
resolution: {integrity: sha512-7gD5tqc/RUDq0PyoLemL0vEHxBYi+zY0WVaFAx/Y0jBsXFgot1vB9No1GhDZGwRGJMCIZbgAb74QG9MTyTNU/g==}
@@ -1247,63 +1233,63 @@ packages:
'@types/whatwg-mimetype@3.0.2':
resolution: {integrity: sha512-c2AKvDT8ToxLIOUlN51gTiHXflsfIFisS4pO7pDPoKouJCESkhZnEy623gwP9laCy5lnLDAw1vAzu2vM2YLOrA==}
- '@typescript-eslint/eslint-plugin@8.46.2':
- resolution: {integrity: sha512-ZGBMToy857/NIPaaCucIUQgqueOiq7HeAKkhlvqVV4lm089zUFW6ikRySx2v+cAhKeUCPuWVHeimyk6Dw1iY3w==}
+ '@typescript-eslint/eslint-plugin@8.48.0':
+ resolution: {integrity: sha512-XxXP5tL1txl13YFtrECECQYeZjBZad4fyd3cFV4a19LkAY/bIp9fev3US4S5fDVV2JaYFiKAZ/GRTOLer+mbyQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
- '@typescript-eslint/parser': ^8.46.2
+ '@typescript-eslint/parser': ^8.48.0
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/parser@8.46.2':
- resolution: {integrity: sha512-BnOroVl1SgrPLywqxyqdJ4l3S2MsKVLDVxZvjI1Eoe8ev2r3kGDo+PcMihNmDE+6/KjkTubSJnmqGZZjQSBq/g==}
+ '@typescript-eslint/parser@8.48.0':
+ resolution: {integrity: sha512-jCzKdm/QK0Kg4V4IK/oMlRZlY+QOcdjv89U2NgKHZk1CYTj82/RVSx1mV/0gqCVMJ/DA+Zf/S4NBWNF8GQ+eqQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/project-service@8.46.2':
- resolution: {integrity: sha512-PULOLZ9iqwI7hXcmL4fVfIsBi6AN9YxRc0frbvmg8f+4hQAjQ5GYNKK0DIArNo+rOKmR/iBYwkpBmnIwin4wBg==}
+ '@typescript-eslint/project-service@8.48.0':
+ resolution: {integrity: sha512-Ne4CTZyRh1BecBf84siv42wv5vQvVmgtk8AuiEffKTUo3DrBaGYZueJSxxBZ8fjk/N3DrgChH4TOdIOwOwiqqw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/scope-manager@8.46.2':
- resolution: {integrity: sha512-LF4b/NmGvdWEHD2H4MsHD8ny6JpiVNDzrSZr3CsckEgCbAGZbYM4Cqxvi9L+WqDMT+51Ozy7lt2M+d0JLEuBqA==}
+ '@typescript-eslint/scope-manager@8.48.0':
+ resolution: {integrity: sha512-uGSSsbrtJrLduti0Q1Q9+BF1/iFKaxGoQwjWOIVNJv0o6omrdyR8ct37m4xIl5Zzpkp69Kkmvom7QFTtue89YQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@typescript-eslint/tsconfig-utils@8.46.2':
- resolution: {integrity: sha512-a7QH6fw4S57+F5y2FIxxSDyi5M4UfGF+Jl1bCGd7+L4KsaUY80GsiF/t0UoRFDHAguKlBaACWJRmdrc6Xfkkag==}
+ '@typescript-eslint/tsconfig-utils@8.48.0':
+ resolution: {integrity: sha512-WNebjBdFdyu10sR1M4OXTt2OkMd5KWIL+LLfeH9KhgP+jzfDV/LI3eXzwJ1s9+Yc0Kzo2fQCdY/OpdusCMmh6w==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/type-utils@8.46.2':
- resolution: {integrity: sha512-HbPM4LbaAAt/DjxXaG9yiS9brOOz6fabal4uvUmaUYe6l3K1phQDMQKBRUrr06BQkxkvIZVVHttqiybM9nJsLA==}
+ '@typescript-eslint/type-utils@8.48.0':
+ resolution: {integrity: sha512-zbeVaVqeXhhab6QNEKfK96Xyc7UQuoFWERhEnj3mLVnUWrQnv15cJNseUni7f3g557gm0e46LZ6IJ4NJVOgOpw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/types@8.46.2':
- resolution: {integrity: sha512-lNCWCbq7rpg7qDsQrd3D6NyWYu+gkTENkG5IKYhUIcxSb59SQC/hEQ+MrG4sTgBVghTonNWq42bA/d4yYumldQ==}
+ '@typescript-eslint/types@8.48.0':
+ resolution: {integrity: sha512-cQMcGQQH7kwKoVswD1xdOytxQR60MWKM1di26xSUtxehaDs/32Zpqsu5WJlXTtTTqyAVK8R7hvsUnIXRS+bjvA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@typescript-eslint/typescript-estree@8.46.2':
- resolution: {integrity: sha512-f7rW7LJ2b7Uh2EiQ+7sza6RDZnajbNbemn54Ob6fRwQbgcIn+GWfyuHDHRYgRoZu1P4AayVScrRW+YfbTvPQoQ==}
+ '@typescript-eslint/typescript-estree@8.48.0':
+ resolution: {integrity: sha512-ljHab1CSO4rGrQIAyizUS6UGHHCiAYhbfcIZ1zVJr5nMryxlXMVWS3duFPSKvSUbFPwkXMFk1k0EMIjub4sRRQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/utils@8.46.2':
- resolution: {integrity: sha512-sExxzucx0Tud5tE0XqR0lT0psBQvEpnpiul9XbGUB1QwpWJJAps1O/Z7hJxLGiZLBKMCutjTzDgmd1muEhBnVg==}
+ '@typescript-eslint/utils@8.48.0':
+ resolution: {integrity: sha512-yTJO1XuGxCsSfIVt1+1UrLHtue8xz16V8apzPYI06W0HbEbEWHxHXgZaAgavIkoh+GeV6hKKd5jm0sS6OYxWXQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/visitor-keys@8.46.2':
- resolution: {integrity: sha512-tUFMXI4gxzzMXt4xpGJEsBsTox0XbNQ1y94EwlD/CuZwFcQP79xfQqMhau9HsRc/J0cAPA/HZt1dZPtGn9V/7w==}
+ '@typescript-eslint/visitor-keys@8.48.0':
+ resolution: {integrity: sha512-T0XJMaRPOH3+LBbAfzR2jalckP1MSG/L9eUtY0DEzUyVaXJ/t6zN0nR7co5kz0Jko/nkSYCBRkz1djvjajVTTg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@unrs/resolver-binding-android-arm-eabi@1.11.1':
@@ -1401,15 +1387,15 @@ packages:
cpu: [x64]
os: [win32]
- '@vitejs/plugin-vue@6.0.1':
- resolution: {integrity: sha512-+MaE752hU0wfPFJEUAIxqw18+20euHHdxVtMvbFcOEpjEyfqXH/5DCoTHiVJ0J29EhTJdoTkjEv5YBKU9dnoTw==}
+ '@vitejs/plugin-vue@6.0.2':
+ resolution: {integrity: sha512-iHmwV3QcVGGvSC1BG5bZ4z6iwa1SOpAPWmnjOErd4Ske+lZua5K9TtAVdx0gMBClJ28DViCbSmZitjWZsWO3LA==}
engines: {node: ^20.19.0 || >=22.12.0}
peerDependencies:
vite: ^5.0.0 || ^6.0.0 || ^7.0.0
vue: ^3.2.25
- '@vitest/eslint-plugin@1.3.26':
- resolution: {integrity: sha512-oP+Vyqgp+kLuMagG0tRkcT7e2tUoE+XWgti1OFxqdTpmMlSZJ6BWSC3rv8vzhtDXReXNyAJI1eojuc7N0QqbNQ==}
+ '@vitest/eslint-plugin@1.5.0':
+ resolution: {integrity: sha512-j3uuIAPTYWYnSit9lspb08/EKsxEmGqjQf+Wpb1DQkxc+mMkhL58ZknDCgjYhY4Zu76oxZ0hVWTHlmRW0mJq5w==}
engines: {node: '>=18'}
peerDependencies:
eslint: '>=8.57.0'
@@ -1421,11 +1407,11 @@ packages:
vitest:
optional: true
- '@vitest/expect@4.0.4':
- resolution: {integrity: sha512-0ioMscWJtfpyH7+P82sGpAi3Si30OVV73jD+tEqXm5+rIx9LgnfdaOn45uaFkKOncABi/PHL00Yn0oW/wK4cXw==}
+ '@vitest/expect@4.0.14':
+ resolution: {integrity: sha512-RHk63V3zvRiYOWAV0rGEBRO820ce17hz7cI2kDmEdfQsBjT2luEKB5tCOc91u1oSQoUOZkSv3ZyzkdkSLD7lKw==}
- '@vitest/mocker@4.0.4':
- resolution: {integrity: sha512-UTtKgpjWj+pvn3lUM55nSg34098obGhSHH+KlJcXesky8b5wCUgg7s60epxrS6yAG8slZ9W8T9jGWg4PisMf5Q==}
+ '@vitest/mocker@4.0.14':
+ resolution: {integrity: sha512-RzS5NujlCzeRPF1MK7MXLiEFpkIXeMdQ+rN3Kk3tDI9j0mtbr7Nmuq67tpkOJQpgyClbOltCXMjLZicJHsH5Cg==}
peerDependencies:
msw: ^2.4.9
vite: ^6.0.0 || ^7.0.0-0
@@ -1435,20 +1421,20 @@ packages:
vite:
optional: true
- '@vitest/pretty-format@4.0.4':
- resolution: {integrity: sha512-lHI2rbyrLVSd1TiHGJYyEtbOBo2SDndIsN3qY4o4xe2pBxoJLD6IICghNCvD7P+BFin6jeyHXiUICXqgl6vEaQ==}
+ '@vitest/pretty-format@4.0.14':
+ resolution: {integrity: sha512-SOYPgujB6TITcJxgd3wmsLl+wZv+fy3av2PpiPpsWPZ6J1ySUYfScfpIt2Yv56ShJXR2MOA6q2KjKHN4EpdyRQ==}
- '@vitest/runner@4.0.4':
- resolution: {integrity: sha512-99EDqiCkncCmvIZj3qJXBZbyoQ35ghOwVWNnQ5nj0Hnsv4Qm40HmrMJrceewjLVvsxV/JSU4qyx2CGcfMBmXJw==}
+ '@vitest/runner@4.0.14':
+ resolution: {integrity: sha512-BsAIk3FAqxICqREbX8SetIteT8PiaUL/tgJjmhxJhCsigmzzH8xeadtp7LRnTpCVzvf0ib9BgAfKJHuhNllKLw==}
- '@vitest/snapshot@4.0.4':
- resolution: {integrity: sha512-XICqf5Gi4648FGoBIeRgnHWSNDp+7R5tpclGosFaUUFzY6SfcpsfHNMnC7oDu/iOLBxYfxVzaQpylEvpgii3zw==}
+ '@vitest/snapshot@4.0.14':
+ resolution: {integrity: sha512-aQVBfT1PMzDSA16Y3Fp45a0q8nKexx6N5Amw3MX55BeTeZpoC08fGqEZqVmPcqN0ueZsuUQ9rriPMhZ3Mu19Ag==}
- '@vitest/spy@4.0.4':
- resolution: {integrity: sha512-G9L13AFyYECo40QG7E07EdYnZZYCKMTSp83p9W8Vwed0IyCG1GnpDLxObkx8uOGPXfDpdeVf24P1Yka8/q1s9g==}
+ '@vitest/spy@4.0.14':
+ resolution: {integrity: sha512-JmAZT1UtZooO0tpY3GRyiC/8W7dCs05UOq9rfsUUgEZEdq+DuHLmWhPsrTt0TiW7WYeL/hXpaE07AZ2RCk44hg==}
- '@vitest/utils@4.0.4':
- resolution: {integrity: sha512-4bJLmSvZLyVbNsYFRpPYdJViG9jZyRvMZ35IF4ymXbRZoS+ycYghmwTGiscTXduUg2lgKK7POWIyXJNute1hjw==}
+ '@vitest/utils@4.0.14':
+ resolution: {integrity: sha512-hLqXZKAWNg8pI+SQXyXxWCTOpA3MvsqcbVeNgSi8x/CSN2wi26dSzn1wrOhmCmFjEvN9p8/kLFRHa6PI8jHazw==}
'@volar/language-core@2.4.23':
resolution: {integrity: sha512-hEEd5ET/oSmBC6pi1j6NaNYRWoAiDhINbT8rmwtINugR39loROSlufGdYMF9TaKGfz+ViGs1Idi3mAhnuPcoGQ==}
@@ -1459,42 +1445,42 @@ packages:
'@volar/typescript@2.4.23':
resolution: {integrity: sha512-lAB5zJghWxVPqfcStmAP1ZqQacMpe90UrP5RJ3arDyrhy4aCUQqmxPPLB2PWDKugvylmO41ljK7vZ+t6INMTag==}
- '@vue/compiler-core@3.5.22':
- resolution: {integrity: sha512-jQ0pFPmZwTEiRNSb+i9Ow/I/cHv2tXYqsnHKKyCQ08irI2kdF5qmYedmF8si8mA7zepUFmJ2hqzS8CQmNOWOkQ==}
+ '@vue/compiler-core@3.5.25':
+ resolution: {integrity: sha512-vay5/oQJdsNHmliWoZfHPoVZZRmnSWhug0BYT34njkYTPqClh3DNWLkZNJBVSjsNMrg0CCrBfoKkjZQPM/QVUw==}
- '@vue/compiler-dom@3.5.22':
- resolution: {integrity: sha512-W8RknzUM1BLkypvdz10OVsGxnMAuSIZs9Wdx1vzA3mL5fNMN15rhrSCLiTm6blWeACwUwizzPVqGJgOGBEN/hA==}
+ '@vue/compiler-dom@3.5.25':
+ resolution: {integrity: sha512-4We0OAcMZsKgYoGlMjzYvaoErltdFI2/25wqanuTu+S4gismOTRTBPi4IASOjxWdzIwrYSjnqONfKvuqkXzE2Q==}
- '@vue/compiler-sfc@3.5.22':
- resolution: {integrity: sha512-tbTR1zKGce4Lj+JLzFXDq36K4vcSZbJ1RBu8FxcDv1IGRz//Dh2EBqksyGVypz3kXpshIfWKGOCcqpSbyGWRJQ==}
+ '@vue/compiler-sfc@3.5.25':
+ resolution: {integrity: sha512-PUgKp2rn8fFsI++lF2sO7gwO2d9Yj57Utr5yEsDf3GNaQcowCLKL7sf+LvVFvtJDXUp/03+dC6f2+LCv5aK1ag==}
- '@vue/compiler-ssr@3.5.22':
- resolution: {integrity: sha512-GdgyLvg4R+7T8Nk2Mlighx7XGxq/fJf9jaVofc3IL0EPesTE86cP/8DD1lT3h1JeZr2ySBvyqKQJgbS54IX1Ww==}
+ '@vue/compiler-ssr@3.5.25':
+ resolution: {integrity: sha512-ritPSKLBcParnsKYi+GNtbdbrIE1mtuFEJ4U1sWeuOMlIziK5GtOL85t5RhsNy4uWIXPgk+OUdpnXiTdzn8o3A==}
- '@vue/language-core@3.1.2':
- resolution: {integrity: sha512-PyFDCqpdfYUT+oMLqcc61oHfJlC6yjhybaefwQjRdkchIihToOEpJ2Wu/Ebq2yrnJdd1EsaAvZaXVAqcxtnDxQ==}
+ '@vue/language-core@3.1.5':
+ resolution: {integrity: sha512-FMcqyzWN+sYBeqRMWPGT2QY0mUasZMVIuHvmb5NT3eeqPrbHBYtCP8JWEUCDCgM+Zr62uuWY/qoeBrPrzfa78w==}
peerDependencies:
typescript: '*'
peerDependenciesMeta:
typescript:
optional: true
- '@vue/reactivity@3.5.22':
- resolution: {integrity: sha512-f2Wux4v/Z2pqc9+4SmgZC1p73Z53fyD90NFWXiX9AKVnVBEvLFOWCEgJD3GdGnlxPZt01PSlfmLqbLYzY/Fw4A==}
+ '@vue/reactivity@3.5.25':
+ resolution: {integrity: sha512-5xfAypCQepv4Jog1U4zn8cZIcbKKFka3AgWHEFQeK65OW+Ys4XybP6z2kKgws4YB43KGpqp5D/K3go2UPPunLA==}
- '@vue/runtime-core@3.5.22':
- resolution: {integrity: sha512-EHo4W/eiYeAzRTN5PCextDUZ0dMs9I8mQ2Fy+OkzvRPUYQEyK9yAjbasrMCXbLNhF7P0OUyivLjIy0yc6VrLJQ==}
+ '@vue/runtime-core@3.5.25':
+ resolution: {integrity: sha512-Z751v203YWwYzy460bzsYQISDfPjHTl+6Zzwo/a3CsAf+0ccEjQ8c+0CdX1WsumRTHeywvyUFtW6KvNukT/smA==}
- '@vue/runtime-dom@3.5.22':
- resolution: {integrity: sha512-Av60jsryAkI023PlN7LsqrfPvwfxOd2yAwtReCjeuugTJTkgrksYJJstg1e12qle0NarkfhfFu1ox2D+cQotww==}
+ '@vue/runtime-dom@3.5.25':
+ resolution: {integrity: sha512-a4WrkYFbb19i9pjkz38zJBg8wa/rboNERq3+hRRb0dHiJh13c+6kAbgqCPfMaJ2gg4weWD3APZswASOfmKwamA==}
- '@vue/server-renderer@3.5.22':
- resolution: {integrity: sha512-gXjo+ao0oHYTSswF+a3KRHZ1WszxIqO7u6XwNHqcqb9JfyIL/pbWrrh/xLv7jeDqla9u+LK7yfZKHih1e1RKAQ==}
+ '@vue/server-renderer@3.5.25':
+ resolution: {integrity: sha512-UJaXR54vMG61i8XNIzTSf2Q7MOqZHpp8+x3XLGtE3+fL+nQd+k7O5+X3D/uWrnQXOdMw5VPih+Uremcw+u1woQ==}
peerDependencies:
- vue: 3.5.22
+ vue: 3.5.25
- '@vue/shared@3.5.22':
- resolution: {integrity: sha512-F4yc6palwq3TT0u+FYf0Ns4Tfl9GRFURDN2gWG7L1ecIaS/4fCIuFOjMTnCyjsu/OK6vaDKLCrGAa+KvvH+h4w==}
+ '@vue/shared@3.5.25':
+ resolution: {integrity: sha512-AbOPdQQnAnzs58H2FrrDxYj/TJfmeS2jdfEEhgiKINy+bnOANmVizIEgq1r+C5zsbs6l1CCQxtcj71rwNQ4jWg==}
'@webassemblyjs/ast@1.14.1':
resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==}
@@ -1616,8 +1602,8 @@ packages:
ajv@8.17.1:
resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==}
- alien-signals@3.0.3:
- resolution: {integrity: sha512-2JXjom6R7ZwrISpUphLhf4htUq1aKRCennTJ6u9kFfr3sLmC9+I4CxxVi+McoFnIg+p1HnVrfLT/iCt4Dlz//Q==}
+ alien-signals@3.1.1:
+ resolution: {integrity: sha512-ogkIWbVrLwKtHY6oOAXaYkAxP+cTH7V5FZ5+Tm4NZFd8VDZ6uNMDrfzqctTZ42eTMCSR3ne3otpcxmqSnFfPYA==}
ansi-regex@5.0.1:
resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
@@ -1699,8 +1685,8 @@ packages:
base64-js@1.5.1:
resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
- baseline-browser-mapping@2.8.20:
- resolution: {integrity: sha512-JMWsdF+O8Orq3EMukbUN1QfbLK9mX2CkUmQBcW2T0s8OmdAUL5LLM/6wFwSrqXzlXB13yhyK9gTKS1rIizOduQ==}
+ baseline-browser-mapping@2.8.31:
+ resolution: {integrity: sha512-a28v2eWrrRWPpJSzxc+mKwm0ZtVx/G8SepdQZDArnXYU/XS+IF6mp8aB/4E+hH1tyGCoDo3KlUCdlSxGDsRkAw==}
hasBin: true
big.js@5.2.2:
@@ -1723,8 +1709,8 @@ packages:
resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
engines: {node: '>=8'}
- browserslist@4.27.0:
- resolution: {integrity: sha512-AXVQwdhot1eqLihwasPElhX2tAZiBjWdJ9i/Zcj2S6QYIjkx62OKSfnobkriB81C3l4w0rVy3Nt4jaTBltYEpw==}
+ browserslist@4.28.0:
+ resolution: {integrity: sha512-tbydkR/CxfMwelN0vwdP/pLkDwyAASZ+VfWm4EOwlB6SWhx1sYnWLqo8N5j0rAzPfzfRaxt0mM/4wPU/Su84RQ==}
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
hasBin: true
@@ -1746,8 +1732,8 @@ packages:
resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==}
engines: {node: '>= 0.8'}
- cacheable@2.1.1:
- resolution: {integrity: sha512-LmF4AXiSNdiRbI2UjH8pAp9NIXxeQsTotpEaegPiDcnN0YPygDJDV3l/Urc0mL72JWdATEorKqIHEx55nDlONg==}
+ cacheable@2.2.0:
+ resolution: {integrity: sha512-LEJxRqfeomiiRd2t0uON6hxAtgOoWDfY3fugebbz+J3vDLO+SkdfFChQcOHTZhj9SYa9iwE9MGYNX72dKiOE4w==}
callsites@3.1.0:
resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
@@ -1757,11 +1743,11 @@ packages:
resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==}
engines: {node: '>= 6'}
- caniuse-lite@1.0.30001751:
- resolution: {integrity: sha512-A0QJhug0Ly64Ii3eIqHu5X51ebln3k4yTUkY1j8drqpWHVreg/VLijN48cZ1bYPiqOQuqpkIKnzr/Ul8V+p6Cw==}
+ caniuse-lite@1.0.30001757:
+ resolution: {integrity: sha512-r0nnL/I28Zi/yjk1el6ilj27tKcdjLsNqAOZr0yVjWPrSQyHgKI2INaEWw21bAQSv2LXRt1XuCS/GomNpWOxsQ==}
- chai@6.2.0:
- resolution: {integrity: sha512-aUTnJc/JipRzJrNADXVvpVqi6CO0dn3nx4EVPxijri+fj3LUUDyZQOgVeW54Ob3Y1Xh9Iz8f+CgaCl8v0mn9bA==}
+ chai@6.2.1:
+ resolution: {integrity: sha512-p4Z49OGG5W/WBCPSS/dH3jQ73kD6tiMmUM+bckNK6Jr5JHMG3k9bg/BvKR8lKmtVBKmOiuVaV2ws8s9oSbwysg==}
engines: {node: '>=18'}
chalk@4.1.2:
@@ -1826,8 +1812,8 @@ packages:
resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==}
engines: {node: '>=4'}
- clippie@4.1.8:
- resolution: {integrity: sha512-GCDd4xnYPqohYPgPN/vbljc3QHD3P2Wsos6RO68ab3Ja6a7IDocXzbsIKXqwrNnK3cR31nog3A5Cyf+8GYc/Dg==}
+ clippie@4.1.9:
+ resolution: {integrity: sha512-YaNJI8f2bPRVVfdKDUeqSPuQEztyOowee7DIc/DJ48qNJGq/SziipiWN6oWT6q9FR4QN0JzFDpP+fDtkSZyFHw==}
clone-deep@4.0.1:
resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==}
@@ -1860,9 +1846,9 @@ packages:
resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==}
engines: {node: '>=18'}
- commander@13.1.0:
- resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==}
- engines: {node: '>=18'}
+ commander@14.0.2:
+ resolution: {integrity: sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ==}
+ engines: {node: '>=20'}
commander@2.20.3:
resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
@@ -1892,8 +1878,8 @@ packages:
confbox@0.2.2:
resolution: {integrity: sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==}
- core-js-compat@3.46.0:
- resolution: {integrity: sha512-p9hObIIEENxSV8xIu+V68JjSeARg6UVMG5mR+JEUguG3sI6MsiS1njz2jHmyJDvA+8jX/sytkBHup6kxhM9law==}
+ core-js-compat@3.47.0:
+ resolution: {integrity: sha512-IGfuznZ/n7Kp9+nypamBhvwdwLsW6KC8IOaURw2doAK5e98AG3acVLdh0woOnEqCfUtS+Vu882JE4k/DAm3ItQ==}
core-js@3.32.2:
resolution: {integrity: sha512-pxXSw1mYZPDGvTQqEc5vgIb83jGQKFGYWY76z4a7weZXUolw3G+OvpZqSRcfYOoOVUQJYEPsWeQK8pKEnUtWxQ==}
@@ -1963,8 +1949,8 @@ packages:
resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==}
engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'}
- csstype@3.1.3:
- resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
+ csstype@3.2.3:
+ resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==}
cytoscape-cose-bilkent@4.1.0:
resolution: {integrity: sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==}
@@ -2125,8 +2111,8 @@ packages:
damerau-levenshtein@1.0.8:
resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==}
- dayjs@1.11.18:
- resolution: {integrity: sha512-zFBQ7WFRvVRhKcWoUh+ZA1g2HVgUbsZm9sbddh8EC5iv93sui8DVVz1Npvz+r6meo9VKfa8NyLWBsQK1VvIKPA==}
+ dayjs@1.11.19:
+ resolution: {integrity: sha512-t5EcLVS6QPBNqM2z8fakk/NKel+Xzshgt8FFKAn+qwlD1pzZWxh0nVCrvFK7ZDb6XucZeF9z8C7CBWTRIVApAw==}
debug@3.2.7:
resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==}
@@ -2200,8 +2186,8 @@ packages:
resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==}
engines: {node: '>= 4'}
- dompurify@3.1.7:
- resolution: {integrity: sha512-VaTstWtsneJY8xzy7DekmYWEOZcmzIe3Qb3zPd4STve1OBTa+e+WmS1ITQec1fZYXI3HCsOZZiSMpG6oxoWMWQ==}
+ dompurify@3.2.7:
+ resolution: {integrity: sha512-WhL/YuveyGXJaerVlMYGWhvQswa7myDG17P7Vu65EWC05o8vfeNbvNf4d/BOvH99+ZW+LlQsc1GDKMa1vNK6dw==}
dompurify@3.3.0:
resolution: {integrity: sha512-r+f6MYR1gGN1eJv0TVQbhA7if/U7P87cdPl3HN5rikqaBSBxLiCb/b9O+2eG0cxz0ghyU+mU1QkbsOwERMYlWQ==}
@@ -2212,14 +2198,11 @@ packages:
dropzone@6.0.0-beta.2:
resolution: {integrity: sha512-k44yLuFFhRk53M8zP71FaaNzJYIzr99SKmpbO/oZKNslDjNXQsBTdfLs+iONd0U0L94zzlFzRnFdqbLcs7h9fQ==}
- eastasianwidth@0.2.0:
- resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
-
easymde@2.20.0:
resolution: {integrity: sha512-V1Z5f92TfR42Na852OWnIZMbM7zotWQYTddNaLYZFVKj7APBbyZ3FYJ27gBw2grMW3R6Qdv9J8n5Ij7XRSIgXQ==}
- electron-to-chromium@1.5.240:
- resolution: {integrity: sha512-OBwbZjWgrCOH+g6uJsA2/7Twpas2OlepS9uvByJjR2datRDuKGYeD+nP8lBBks2qnB7bGJNHDUx7c/YLaT3QMQ==}
+ electron-to-chromium@1.5.261:
+ resolution: {integrity: sha512-cmyHEWFqEt3ICUNF93ShneOF47DHoSDbLb7E/AonsWcbzg95N+kPXeLNfkdzgTT/vEUcoW76fxbLBkeYtfoM8A==}
emoji-regex@10.6.0:
resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==}
@@ -2246,8 +2229,8 @@ packages:
resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==}
engines: {node: '>=6'}
- envinfo@7.19.0:
- resolution: {integrity: sha512-DoSM9VyG6O3vqBf+p3Gjgr/Q52HYBBtO3v+4koAxt1MnWr+zEnxE+nke/yXS4lt2P4SYCHQ4V3f1i88LQVOpAw==}
+ envinfo@7.20.0:
+ resolution: {integrity: sha512-+zUomDcLXsVkQ37vUqWBvQwLaLlj8eZPSi61llaEFAVBY5mhcXdaSw1pSJVl4yTYD5g/gEfpNl28YYk4IPvrrg==}
engines: {node: '>=4'}
hasBin: true
@@ -2262,8 +2245,8 @@ packages:
peerDependencies:
webpack: ^4.40.0 || ^5.0.0
- esbuild@0.25.11:
- resolution: {integrity: sha512-KohQwyzrKTQmhXDW1PjCv3Tyspn9n5GcY2RTDqeORIdIJY8yKIF7sTSopFmn/wpMPW4rdPXI0UE5LJLuq3bx0Q==}
+ esbuild@0.25.12:
+ resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==}
engines: {node: '>=18'}
hasBin: true
@@ -2403,15 +2386,9 @@ packages:
resolution: {integrity: sha512-brcKcxGnISN2CcVhXJ/kEQlNa0MEfGRtwKtWA16SkqXHKitaKIMrfemJKLKX1YqDU5C/5JY3PvZXd5jEW04e0Q==}
engines: {node: '>=5.0.0'}
- eslint-plugin-no-use-extend-native@0.7.2:
- resolution: {integrity: sha512-hUBlwaTXIO1GzTwPT6pAjvYwmSHe4XduDhAiQvur4RUujmBUFjd8Nb2+e7WQdsQ+nGHWGRlogcUWXJRGqizTWw==}
- engines: {node: '>=18.18.0'}
- peerDependencies:
- eslint: ^9.3.0
-
- eslint-plugin-playwright@2.2.2:
- resolution: {integrity: sha512-j0jKpndIPOXRRP9uMkwb9l/nSmModOU3452nrFdgFJoEv/435J1onk8+aITzjDW8DfypxgmVaDMdmVIa6F7I0w==}
- engines: {node: '>=16.6.0'}
+ eslint-plugin-playwright@2.3.0:
+ resolution: {integrity: sha512-7UeUuIb5SZrNkrUGb2F+iwHM97kn33/huajcVtAaQFCSMUYGNFvjzRPil5C0OIppslPfuOV68M/zsisXx+/ZvQ==}
+ engines: {node: '>=16.9.0'}
peerDependencies:
eslint: '>=8.40.0'
@@ -2453,8 +2430,8 @@ packages:
eslint: '>=5.0.0'
vue-eslint-parser: '>=7.1.0'
- eslint-plugin-vue@10.5.1:
- resolution: {integrity: sha512-SbR9ZBUFKgvWAbq3RrdCtWaW0IKm6wwUiApxf3BVTNfqUIo4IQQmreMg2iHFJJ6C/0wss3LXURBJ1OwS/MhFcQ==}
+ eslint-plugin-vue@10.6.1:
+ resolution: {integrity: sha512-OMvDAFbewocYrJamF1EoSWoT4xa7/QRb/yYouEZMiroTE+WRmFUreR+kAFQHqM45W3kg5oljVfUYfH9HEwX1Bg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
'@stylistic/eslint-plugin': ^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0
@@ -2492,8 +2469,8 @@ packages:
resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- eslint@9.38.0:
- resolution: {integrity: sha512-t5aPOpmtJcZcz5UJyY2GbvpDlsK5E8JqRqoKtfiKE3cNh437KIqfJr3A3AKf5k64NPx6d0G3dno6XDY05PqPtw==}
+ eslint@9.39.1:
+ resolution: {integrity: sha512-BhHmn2yNOFA9H9JmmIVKJmd288g9hrVRDkdoIgRCRuSySRUHH7r/DI6aAXW9T1WwUuY3DFgrcaqB+deURBLR5g==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
hasBin: true
peerDependencies:
@@ -2543,8 +2520,8 @@ packages:
resolution: {integrity: sha512-JhFGDVJ7tmDJItKhYgJCGLOWjuK9vPxiXoUFLwLDc99NlmklilbiQJwoctZtt13+xMw91MCk/REan6MWHqDjyA==}
engines: {node: '>=12.0.0'}
- exsolve@1.0.7:
- resolution: {integrity: sha512-VO5fQUzZtI6C+vx4w/4BWJpg3s/5l+6pRQEHzFRM8WFi4XffSP1Z+4qi7GbjWbvRQEbdIco5mIMq+zX4rPuLrw==}
+ exsolve@1.0.8:
+ resolution: {integrity: sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==}
fast-deep-equal@3.1.3:
resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
@@ -2587,8 +2564,8 @@ packages:
fflate@0.8.2:
resolution: {integrity: sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==}
- file-entry-cache@10.1.4:
- resolution: {integrity: sha512-5XRUFc0WTtUbjfGzEwXc42tiGxQHBmtbUG1h9L2apu4SulCGN3Hqm//9D6FAolf8MYNL7f/YlJl9vy08pj5JuA==}
+ file-entry-cache@11.1.1:
+ resolution: {integrity: sha512-TPVFSDE7q91Dlk1xpFLvFllf8r0HyOMOlnWy7Z2HBku5H3KhIeOGInexrIeg2D64DosVB/JXkrrk6N/7Wriq4A==}
file-entry-cache@8.0.0:
resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==}
@@ -2614,8 +2591,8 @@ packages:
resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==}
engines: {node: '>=16'}
- flat-cache@6.1.18:
- resolution: {integrity: sha512-JUPnFgHMuAVmLmoH9/zoZ6RHOt5n9NlUw/sDXsTbROJ2SFoS2DS4s+swAV6UTeTbGH/CAsZIE6M8TaG/3jVxgQ==}
+ flat-cache@6.1.19:
+ resolution: {integrity: sha512-l/K33newPTZMTGAnnzaiqSl6NnH7Namh8jBNjrgjprWxGmZUuxx/sJNIRaijOh3n7q7ESbhNZC+pvVZMFdeU4A==}
flat@5.0.2:
resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==}
@@ -2624,10 +2601,6 @@ packages:
flatted@3.3.3:
resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==}
- foreground-child@3.3.1:
- resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==}
- engines: {node: '>=14'}
-
fs.realpath@1.0.0:
resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
@@ -2648,10 +2621,6 @@ packages:
resolution: {integrity: sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==}
engines: {node: '>=18'}
- get-set-props@0.2.0:
- resolution: {integrity: sha512-YCmOj+4YAeEB5Dd9jfp6ETdejMet4zSxXjNkgaa4npBEKRI9uDOGB5MmAdAgi2OoFGAKshYhCbmLq2DS03CgVA==}
- engines: {node: '>=18.0.0'}
-
get-tsconfig@4.13.0:
resolution: {integrity: sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==}
@@ -2666,15 +2635,6 @@ packages:
glob-to-regexp@0.4.1:
resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==}
- glob@10.4.5:
- resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==}
- hasBin: true
-
- glob@11.0.3:
- resolution: {integrity: sha512-2Nim7dha1KVkaiF4q6Dj+ngPPMdfvLJEOpZk/jKiUAkqKebpGAWQXAq9z1xu9HKu5lWfqw/FASuccEjyznjPaA==}
- engines: {node: 20 || >=22}
- hasBin: true
-
glob@7.2.3:
resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
deprecated: Glob versions prior to v9 are no longer supported
@@ -2687,10 +2647,6 @@ packages:
resolution: {integrity: sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==}
engines: {node: '>=6'}
- globals@13.24.0:
- resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==}
- engines: {node: '>=8'}
-
globals@14.0.0:
resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==}
engines: {node: '>=18'}
@@ -2699,8 +2655,8 @@ packages:
resolution: {integrity: sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==}
engines: {node: '>=18'}
- globals@16.4.0:
- resolution: {integrity: sha512-ob/2LcVVaVGCYN+r14cnwnoDPUufjiYgSqRhiFD0Q1iI4Odora5RE8Iv1D24hAz5oMophRGkGz+yuvQmmUMnMw==}
+ globals@16.5.0:
+ resolution: {integrity: sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==}
engines: {node: '>=18'}
globby@11.1.0:
@@ -2723,8 +2679,8 @@ packages:
resolution: {integrity: sha512-tSQXBXS/MWQOn/RKckawJ61vvsDpCom87JgxiYdGwHdOa0ht0vzUWDlfioofFCRU0L+6NGDt6XzbgoJvZkMeRQ==}
engines: {node: '>=0.8.0'}
- happy-dom@20.0.8:
- resolution: {integrity: sha512-TlYaNQNtzsZ97rNMBAm8U+e2cUQXNithgfCizkDgc11lgmN4j9CKMhO3FPGKWQYPwwkFcPpoXYF/CqEPLgzfOg==}
+ happy-dom@20.0.10:
+ resolution: {integrity: sha512-6umCCHcjQrhP5oXhrHQQvLB0bwb1UzHAHdsXy+FjtKoYjUhmNZsQL8NivwM1vDvNEChJabVrUYxUnp/ZdYmy2g==}
engines: {node: '>=20.0.0'}
has-flag@4.0.0:
@@ -2734,8 +2690,12 @@ packages:
hash-sum@2.0.0:
resolution: {integrity: sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==}
- hookified@1.12.2:
- resolution: {integrity: sha512-aokUX1VdTpI0DUsndvW+OiwmBpKCu/NgRsSSkuSY0zq8PY6Q6a+lmOfAFDXAAOtBqJELvcWY9L1EVtzjbQcMdg==}
+ hashery@1.2.0:
+ resolution: {integrity: sha512-43XJKpwle72Ik5Zpam7MuzRWyNdwwdf6XHlh8wCj2PggvWf+v/Dm5B0dxGZOmddidgeO6Ofu9As/o231Ti/9PA==}
+ engines: {node: '>=20'}
+
+ hookified@1.13.0:
+ resolution: {integrity: sha512-6sPYUY8olshgM/1LDNW4QZQN0IqgKhtl/1C8koNZBJrKLBk3AZl6chQtNwpNztvfiApHMEwMHek5rv993PRbWw==}
html-tags@3.3.1:
resolution: {integrity: sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==}
@@ -2847,10 +2807,6 @@ packages:
resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
engines: {node: '>=8'}
- is-get-set-prop@2.0.0:
- resolution: {integrity: sha512-C32bqXfHJfRwa0U5UIMqSGziZhALszXDJZ8n8mz8WZ6c6V7oYGHEWwJvftliBswypY3P3EQqdY5lpDSEKvTS1Q==}
- engines: {node: '> 18.0.0'}
-
is-glob@4.0.3:
resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
engines: {node: '>=0.10.0'}
@@ -2858,18 +2814,10 @@ packages:
is-hexadecimal@2.0.1:
resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==}
- is-js-type@3.0.0:
- resolution: {integrity: sha512-IbPf3g3vxm1D902xaBaYp2TUHiXZWwWRu5bM9hgKN9oAQcFaKALV6Gd13PGhXjKE5u2n8s1PhLhdke/E1fchxQ==}
- engines: {node: '>=18.0.0'}
-
is-number@7.0.0:
resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
engines: {node: '>=0.12.0'}
- is-obj-prop@2.0.0:
- resolution: {integrity: sha512-2/VFrbzXSZVJIscazpxoB+pOQx2jBOAAL9Gui4cRKxflznUNBpsr8IDvBA4UGol3e40sltLNiY3qnZv/7qSUxA==}
- engines: {node: '>=18.0.0'}
-
is-plain-object@2.0.4:
resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==}
engines: {node: '>=0.10.0'}
@@ -2881,10 +2829,6 @@ packages:
is-potential-custom-element-name@1.0.1:
resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==}
- is-proto-prop@3.0.1:
- resolution: {integrity: sha512-S8xSxNMGJO4eZD86kO46zrq2gLIhA+rN9443lQEvt8Mz/l8cxk72p/AWFmofY6uL9g9ILD6cXW6j8QQj4F3Hcw==}
- engines: {node: '>=18.0.0'}
-
is-valid-element-name@1.0.0:
resolution: {integrity: sha512-GZITEJY2LkSjQfaIPBha7eyZv+ge0PhBR7KITeCCWvy7VBQrCUdFkvpI+HrAPQjVtVjy1LvlEkqQTHckoszruw==}
@@ -2895,13 +2839,6 @@ packages:
resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==}
engines: {node: '>=0.10.0'}
- jackspeak@3.4.3:
- resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==}
-
- jackspeak@4.1.1:
- resolution: {integrity: sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==}
- engines: {node: 20 || >=22}
-
jest-worker@27.5.1:
resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==}
engines: {node: '>= 10.13.0'}
@@ -2926,12 +2863,8 @@ packages:
js-tokens@9.0.1:
resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==}
- js-types@4.0.0:
- resolution: {integrity: sha512-/c+n06zvqFQGxdz1BbElF7S3nEghjNchLN1TjQnk2j10HYDaUc57rcvl6BbnziTx8NQmrg0JOs/iwRpvcYaxjQ==}
- engines: {node: '>=18.20'}
-
- js-yaml@4.1.0:
- resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
+ js-yaml@4.1.1:
+ resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==}
hasBin: true
jsdoc-type-pratt-parser@4.8.0:
@@ -2992,8 +2925,8 @@ packages:
keyv@4.5.4:
resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
- keyv@5.5.3:
- resolution: {integrity: sha512-h0Un1ieD+HUrzBH6dJXhod3ifSghk5Hw/2Y4/KHBziPlZecrFyE9YOTPU6eOs0V9pYl8gOs86fkr/KN8lUX39A==}
+ keyv@5.5.4:
+ resolution: {integrity: sha512-eohl3hKTiVyD1ilYdw9T0OiB4hnjef89e3dMYKz+mVKDzj+5IteTseASUsOB+EU9Tf6VNTCjDePcP6wkDGmLKQ==}
khroma@2.1.0:
resolution: {integrity: sha512-Ls993zuzfayK269Svk9hzpeGUKob/sIgZzyHYdjQoAdQetRKpOLj+k/QQQ/6Qi0Yz65mlROrfd+Ev+1+7dz9Kw==}
@@ -3090,17 +3023,6 @@ packages:
lodash@4.17.21:
resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
- lowercase-keys@3.0.0:
- resolution: {integrity: sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-
- lru-cache@10.4.3:
- resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
-
- lru-cache@11.2.2:
- resolution: {integrity: sha512-F9ODfyqML2coTIsQpSkRHnLSZMtkU8Q+mSfcaIyKwy58u+8k5nvAYeiNhsyMARvzNcXJ9QfWVrcPsC9e9rAxtg==}
- engines: {node: 20 || >=22}
-
magic-string@0.30.21:
resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==}
@@ -3108,13 +3030,13 @@ packages:
resolution: {integrity: sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==}
hasBin: true
- markdownlint-cli@0.45.0:
- resolution: {integrity: sha512-GiWr7GfJLVfcopL3t3pLumXCYs8sgWppjIA1F/Cc3zIMgD3tmkpyZ1xkm1Tej8mw53B93JsDjgA3KOftuYcfOw==}
+ markdownlint-cli@0.46.0:
+ resolution: {integrity: sha512-4gxTNzPjpLnY7ftrEZD4flPY0QBkQLiqezb6KURFSkV+vPHFOsYw8OMtY6fu82Yt8ghtSrWegpYdq1ix25VFLQ==}
engines: {node: '>=20'}
hasBin: true
- markdownlint@0.38.0:
- resolution: {integrity: sha512-xaSxkaU7wY/0852zGApM8LdlIfGCW8ETZ0Rr62IQtAnUMlMuifsg09vWJcNYeL4f0anvr8Vo4ZQar8jGpV0btQ==}
+ markdownlint@0.39.0:
+ resolution: {integrity: sha512-Xt/oY7bAiHwukL1iru2np5LIkhwD19Y7frlsiDILK62v3jucXCD6JXlZlwMG12HZOR+roHIVuJZrfCkOhp6k3g==}
engines: {node: '>=20'}
marked@14.0.0:
@@ -3122,8 +3044,8 @@ packages:
engines: {node: '>= 18'}
hasBin: true
- marked@16.4.1:
- resolution: {integrity: sha512-ntROs7RaN3EvWfy3EZi14H4YxmT6A5YvywfhO+0pm+cH/dnSQRmdAmoFIc3B9aiwTehyk7pESH4ofyBY+V5hZg==}
+ marked@16.4.2:
+ resolution: {integrity: sha512-TI3V8YYWvkVf3KJe1dRkpnjs68JUPyEa5vjKrp1XEEJUAOaQc+Qj+L1qWbPd0SJuAdQkFU0h73sXXqwDYxsiDA==}
engines: {node: '>= 20'}
hasBin: true
@@ -3132,8 +3054,8 @@ packages:
engines: {node: '>= 12'}
hasBin: true
- material-icon-theme@5.28.0:
- resolution: {integrity: sha512-71MxNSngYnNRUQ2YZpcVJg1KPsCFMlvdJV2LtSk434DjSkIjEeh0soHcJjaUp7ohbyYdpU4rukbvzfOylh+lxg==}
+ material-icon-theme@5.29.0:
+ resolution: {integrity: sha512-Kr6D+NgLCWYJjsTjGuIOoKUFG/uomUpLREhyV/9g4qWJMNfm7b1BYYMglRIdQg1IiY7WKqyTws8Ufsad6oFLUA==}
engines: {vscode: ^1.55.0}
mathml-tag-names@2.1.3:
@@ -3255,8 +3177,8 @@ packages:
peerDependencies:
webpack: ^5.0.0
- minimatch@10.0.3:
- resolution: {integrity: sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==}
+ minimatch@10.1.1:
+ resolution: {integrity: sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==}
engines: {node: 20 || >=22}
minimatch@3.1.2:
@@ -3269,10 +3191,6 @@ packages:
minimist@1.2.8:
resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
- minipass@7.1.2:
- resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==}
- engines: {node: '>=16 || 14 >=14.17'}
-
mlly@1.8.0:
resolution: {integrity: sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==}
@@ -3282,8 +3200,8 @@ packages:
monaco-editor: '>= 0.31.0'
webpack: ^4.5.0 || 5.x
- monaco-editor@0.54.0:
- resolution: {integrity: sha512-hx45SEUoLatgWxHKCmlLJH81xBo0uXP4sRkESUpmDQevfi+e7K1VuiSprK6UpQ8u4zOcKNiH0pMvHvlMWA/4cw==}
+ monaco-editor@0.55.1:
+ resolution: {integrity: sha512-jz4x+TJNFHwHtwuV9vA9rMujcZRb0CEilTEwG2rRSpe/A7Jdkuj8xPKttCgOh+v/lkHy7HsZ64oj+q3xoAFl9A==}
moo@0.5.2:
resolution: {integrity: sha512-iSAJLHYKnX41mKcJKjqvnAN9sf0LMDTXDEvFv+ffuRR9a1MIuXLjMNL6EsnDHSkKLTWNqQQ5uo61P4EbU4NU+Q==}
@@ -3334,8 +3252,8 @@ packages:
encoding:
optional: true
- node-releases@2.0.26:
- resolution: {integrity: sha512-S2M9YimhSjBSvYnlr5/+umAnPHE++ODwt5e2Ij6FoX45HA/s4vHdkDx1eax2pAPeAOqu4s9b7ppahsyEFdVqQA==}
+ node-releases@2.0.27:
+ resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==}
nolyfill@1.0.44:
resolution: {integrity: sha512-PoggwVLiJUn0MnodpftsiC7EuknW5+6v62ntTOQ6T6l7g2r6aoaOwgk0tQW2BxGLYw9bF298LL8jDFTmEFuzlA==}
@@ -3349,10 +3267,6 @@ packages:
nth-check@2.1.1:
resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==}
- obj-props@2.0.0:
- resolution: {integrity: sha512-Q/uLAAfjdhrzQWN2czRNh3fDCgXjh7yRIkdHjDgIHTwpFP0BsshxTA3HRNffHR7Iw/XGTH30u8vdMXQ+079urA==}
- engines: {node: '>=18.0.0'}
-
object-assign@4.1.1:
resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
engines: {node: '>=0.10.0'}
@@ -3361,6 +3275,9 @@ packages:
resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==}
engines: {node: '>= 6'}
+ obug@2.1.1:
+ resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==}
+
once@1.4.0:
resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
@@ -3391,9 +3308,6 @@ packages:
resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==}
engines: {node: '>=6'}
- package-json-from-dist@1.0.1:
- resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==}
-
package-manager-detector@1.5.0:
resolution: {integrity: sha512-uBj69dVlYe/+wxj8JOpr97XfsxH/eumMt6HqjNTmJDf/6NO9s+0uxeOneIz3AsPt2m6y9PqzDzd3ATcU17MNfw==}
@@ -3429,14 +3343,6 @@ packages:
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-scurry@2.0.0:
- resolution: {integrity: sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==}
- engines: {node: 20 || >=22}
-
path-type@4.0.0:
resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
engines: {node: '>=8'}
@@ -3479,13 +3385,13 @@ packages:
pkg-types@2.3.0:
resolution: {integrity: sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==}
- playwright-core@1.56.1:
- resolution: {integrity: sha512-hutraynyn31F+Bifme+Ps9Vq59hKuUCz7H1kDOcBs+2oGguKkWTU50bBWrtz34OUWmIwpBTWDxaRPXrIXkgvmQ==}
+ playwright-core@1.57.0:
+ resolution: {integrity: sha512-agTcKlMw/mjBWOnD6kFZttAAGHgi/Nw0CZ2o6JqWSbMlI219lAFLZZCyqByTsvVAJq5XA5H8cA6PrvBRpBWEuQ==}
engines: {node: '>=18'}
hasBin: true
- playwright@1.56.1:
- resolution: {integrity: sha512-aFi5B0WovBHTEvpM3DzXTUaeN6eN0qWnTkKx4NQaH4Wvcmc153PdaY2UBdSYKaGYw+UyWXSVyxDUg5DoPEttjw==}
+ playwright@1.57.0:
+ resolution: {integrity: sha512-ilYQj1s8sr2ppEJ2YVadYBN0Mb3mdo9J0wQ+UuDhzYqURwSoW4n1Xs5vs7ORwgDGmyEh33tRMeS8KhdkMoLXQw==}
engines: {node: '>=18'}
hasBin: true
@@ -3623,10 +3529,6 @@ packages:
engines: {node: '>=14'}
hasBin: true
- prototype-properties@5.0.0:
- resolution: {integrity: sha512-uCWE2QqnGlwvvJXTwiHTPTyHE62+zORO5hpFWhAwBGDtEtTmNZZleNLJDoFsqHCL4p/CeAP2Q1uMKFUKALuRGQ==}
- engines: {node: '>=18.20'}
-
punycode.js@2.3.1:
resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==}
engines: {node: '>=6'}
@@ -3635,8 +3537,8 @@ packages:
resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
engines: {node: '>=6'}
- qified@0.5.1:
- resolution: {integrity: sha512-+BtFN3dCP+IaFA6IYNOu/f/uK1B8xD2QWyOeCse0rjtAebBmkzgd2d1OAXi3ikAzJMIBSdzZDNZ3wZKEUDQs5w==}
+ qified@0.5.2:
+ resolution: {integrity: sha512-7gJ6mxcQb9vUBOtbKm5mDevbe2uRcOEVp1g4gb/Q+oLntB3HY8eBhOYRxFI2mlDFlY1e4DOSCptzxarXRvzxCA==}
engines: {node: '>=20'}
quansync@0.2.11:
@@ -3710,8 +3612,8 @@ packages:
robust-predicates@3.0.2:
resolution: {integrity: sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==}
- rollup@4.52.5:
- resolution: {integrity: sha512-3GuObel8h7Kqdjt0gxkEzaifHTqLVW56Y/bjN7PSQtkKr0w3V/QYSdt6QWYtd7A1xUtYQigtdUfgj1RvWVtorw==}
+ rollup@4.53.3:
+ resolution: {integrity: sha512-w8GmOxZfBmKknvdXU1sdM9NHcoQejwF/4mNgj2JuEEdRaHwwF12K7e9eXn1nLZ07ad+du76mkVsyeb2rKGllsA==}
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
hasBin: true
@@ -3731,8 +3633,8 @@ packages:
sax@1.2.4:
resolution: {integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==}
- sax@1.4.1:
- resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==}
+ sax@1.4.3:
+ resolution: {integrity: sha512-yqYn1JhPczigF94DMS+shiDMjDowYO6y9+wB/4WgO0Y19jWYk0lQ4tuG5KI7kj4FTp1wxPj5IFfcrz/s1c3jjQ==}
schema-utils@4.3.3:
resolution: {integrity: sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==}
@@ -3796,8 +3698,8 @@ packages:
resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==}
engines: {node: '>=10'}
- smol-toml@1.3.4:
- resolution: {integrity: sha512-UOPtVuYkzYGee0Bd2Szz8d2G3RfMfJ2t3qVdZUAozZyAk+a0Sxa+QKix0YCwjL/A1RR0ar44nCxaoN9FxdJGwA==}
+ smol-toml@1.5.2:
+ resolution: {integrity: sha512-QlaZEqcAH3/RtNyet1IPIYPsEWAaYyXXv1Krsi+1L/QHppjX4Ifm8MQsBISz9vE8cHicIq3clogsheili5vhaQ==}
engines: {node: '>= 18'}
solid-js@1.9.10:
@@ -3874,10 +3776,6 @@ packages:
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-width@7.2.0:
resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==}
engines: {node: '>=18'}
@@ -3929,8 +3827,8 @@ packages:
peerDependencies:
stylelint: '>=16'
- stylelint@16.25.0:
- resolution: {integrity: sha512-Li0avYWV4nfv1zPbdnxLYBGq4z8DVZxbRgx4Kn6V+Uftz1rMoF1qiEI3oL4kgWqyYgCgs7gT5maHNZ82Gk03vQ==}
+ stylelint@16.26.0:
+ resolution: {integrity: sha512-Y/3AVBefrkqqapVYH3LBF5TSDZ1kw+0XpdKN2KchfuhMK6lQ85S4XOG4lIZLcrcS4PWBmvcY6eS2kCQFz0jukQ==}
engines: {node: '>=18.12.0'}
hasBin: true
@@ -3941,8 +3839,8 @@ packages:
resolution: {integrity: sha512-yOI6G8WYfr0q8v8rRvE91wbxFU+rJPo760Va4MF6K0I6BZjO4r+xSynkvyPBP9tV1CIEUeRsiidjIs2rzb1CnQ==}
hasBin: true
- sucrase@3.35.0:
- resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==}
+ sucrase@3.35.1:
+ resolution: {integrity: sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==}
engines: {node: '>=16 || 14 >=14.17'}
hasBin: true
@@ -3979,8 +3877,8 @@ packages:
svgson@5.3.1:
resolution: {integrity: sha512-qdPgvUNWb40gWktBJnbJRelWcPzkLed/ShhnRsjbayXz8OtdPOzbil9jtiZdrYvSDumAz/VNQr6JaNfPx/gvPA==}
- swagger-ui-dist@5.30.0:
- resolution: {integrity: sha512-BoiDSeT9PCtHfDYMgX5UpB/qTQy44UoSFRmzHqvhGfgxzEVPHxIW78a+HMLUIHnSFu3z63wjtbq6L6+Rto20Rw==}
+ swagger-ui-dist@5.30.3:
+ resolution: {integrity: sha512-giQl7/ToPxCqnUAx2wpnSnDNGZtGzw1LyUw6ZitIpTmdrvpxKFY/94v1hihm0zYNpgp1/VY0jTDk//R0BBgnRQ==}
sync-fetch@0.4.5:
resolution: {integrity: sha512-esiWJ7ixSKGpd9DJPBTC4ckChqdOjIwJfYhVHkcQ2Gnm41323p1TRmEI+esTQ9ppD+b5opps2OTEGTCGX5kF+g==}
@@ -4019,8 +3917,8 @@ packages:
uglify-js:
optional: true
- terser@5.44.0:
- resolution: {integrity: sha512-nIVck8DK+GM/0Frwd+nIhZ84pR/BX7rmXMfYwyg+Sri5oGVE99/E3KvXqpC2xHFxyqXyGHTKBSioxxplrO4I4w==}
+ terser@5.44.1:
+ resolution: {integrity: sha512-t/R3R/n0MSwnnazuPpPNVO60LX0SKL45pyl9YlvxIdkH0Of7D5qM2EVe+yASRIlY5pZ73nclYJfNANGWPwFDZw==}
engines: {node: '>=10'}
hasBin: true
@@ -4047,8 +3945,9 @@ packages:
tinyexec@0.3.2:
resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==}
- tinyexec@1.0.1:
- resolution: {integrity: sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==}
+ tinyexec@1.0.2:
+ resolution: {integrity: sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==}
+ engines: {node: '>=18'}
tinyglobby@0.2.15:
resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==}
@@ -4097,12 +3996,8 @@ packages:
resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
engines: {node: '>= 0.8.0'}
- type-fest@0.20.2:
- resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==}
- engines: {node: '>=10'}
-
- typescript-eslint@8.46.2:
- resolution: {integrity: sha512-vbw8bOmiuYNdzzV3lsiWv6sRwjyuKJMQqWulBOU7M0RrxedXledX8G8kBbQeiOYDnTfiXz0Y4081E1QMNB6iQg==}
+ typescript-eslint@8.48.0:
+ resolution: {integrity: sha512-fcKOvQD9GUn3Xw63EgiDqhvWJ5jsyZUaekl3KVpGsDJnN46WJTe3jWxtQP9lMZm1LJNkFLlTaWAxK2vUQR+cqw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
@@ -4140,8 +4035,8 @@ packages:
peerDependencies:
browserslist: '>= 4.21.0'
- updates@16.9.1:
- resolution: {integrity: sha512-Ct2VXiFLPG6ArPnL0Bd5KIOXjH/V26NYv84cgVZegkVBO96x58x8wG4KqxM2449YaHhgsWiM76jnTNz14pRalQ==}
+ updates@16.9.2:
+ resolution: {integrity: sha512-eV5CMKwQMldkBOsYLBgBjCyXlvpfyknbQvPOUpSP1CcTxtBDzbyWrrRMmrrw6Mw/fxwV0gULOxJiuU1RcqMhyg==}
engines: {node: '>=20'}
hasBin: true
@@ -4158,11 +4053,11 @@ packages:
vanilla-colorful@0.7.2:
resolution: {integrity: sha512-z2YZusTFC6KnLERx1cgoIRX2CjPRP0W75N+3CC6gbvdX5Ch47rZkEMGO2Xnf+IEmi3RiFLxS18gayMA27iU7Kg==}
- vite-string-plugin@1.4.6:
- resolution: {integrity: sha512-Csjtny8/uVIynzlaRRj4RpHrPAakNwlH9jw6kgQ8tQhc2f0zzA6bCbAgWD0y84EgB8aLNrz7pZFUqSt3LOtk+w==}
+ vite-string-plugin@1.4.9:
+ resolution: {integrity: sha512-mO7PVkMs8+FuTK9ZjBBCRSjabC9cobvUEbN2EjWtGJo6nu35SbW99bYesOh5Ho39ug/KSbT4VwM4GPC26Xk/mQ==}
- vite@7.1.12:
- resolution: {integrity: sha512-ZWyE8YXEXqJrrSLvYgrRP7p62OziLW7xI5HYGWFzOvupfAlrLvURSzv/FyGyy0eidogEM3ujU+kUG1zuHgb6Ug==}
+ vite@7.2.4:
+ resolution: {integrity: sha512-NL8jTlbo0Tn4dUEXEsUg8KeyG/Lkmc4Fnzb8JXN/Ykm9G4HNImjtABMJgkQoVjOBN/j2WAwDTRytdqJbZsah7w==}
engines: {node: ^20.19.0 || >=22.12.0}
hasBin: true
peerDependencies:
@@ -4201,24 +4096,24 @@ packages:
yaml:
optional: true
- vitest@4.0.4:
- resolution: {integrity: sha512-hV31h0/bGbtmDQc0KqaxsTO1v4ZQeF8ojDFuy4sZhFadwAqqvJA0LDw68QUocctI5EDpFMql/jVWKuPYHIf2Ew==}
+ vitest@4.0.14:
+ resolution: {integrity: sha512-d9B2J9Cm9dN9+6nxMnnNJKJCtcyKfnHj15N6YNJfaFHRLua/d3sRKU9RuKmO9mB0XdFtUizlxfz/VPbd3OxGhw==}
engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0}
hasBin: true
peerDependencies:
'@edge-runtime/vm': '*'
- '@types/debug': ^4.1.12
+ '@opentelemetry/api': ^1.9.0
'@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0
- '@vitest/browser-playwright': 4.0.4
- '@vitest/browser-preview': 4.0.4
- '@vitest/browser-webdriverio': 4.0.4
- '@vitest/ui': 4.0.4
+ '@vitest/browser-playwright': 4.0.14
+ '@vitest/browser-preview': 4.0.14
+ '@vitest/browser-webdriverio': 4.0.14
+ '@vitest/ui': 4.0.14
happy-dom: '*'
jsdom: '*'
peerDependenciesMeta:
'@edge-runtime/vm':
optional: true
- '@types/debug':
+ '@opentelemetry/api':
optional: true
'@types/node':
optional: true
@@ -4261,8 +4156,8 @@ packages:
vue-bar-graph@2.2.0:
resolution: {integrity: sha512-1xFPho2nM6nFDziExLu48vKO+Q90gjxz1NyHfc+MhgfYDSxR9BMyhOIXUO5EmwKIVEX5dBoP2n3Ius8SjKRD4g==}
- vue-chartjs@5.3.2:
- resolution: {integrity: sha512-NrkbRRoYshbXbWqJkTN6InoDVwVb90C0R7eAVgMWcB9dPikbruaOoTFjFYHE/+tNPdIe6qdLCDjfjPHQ0fw4jw==}
+ vue-chartjs@5.3.3:
+ resolution: {integrity: sha512-jqxtL8KZ6YJ5NTv6XzrzLS7osyegOi28UGNZW0h9OkDL7Sh1396ht4Dorh04aKrl2LiSalQ84WtqiG0RIJb0tA==}
peerDependencies:
chart.js: ^4.1.1
vue: ^3.0.0-0 || ^2.7.0
@@ -4285,14 +4180,14 @@ packages:
vue:
optional: true
- vue-tsc@3.1.2:
- resolution: {integrity: sha512-3fd4DY0rFczs5f+VB3OhcLU83V6+3Puj2yLBe0Ak65k7ERk+STVNKaOAi0EBo6Lc15UiJB6LzU6Mxy4+h/pKew==}
+ vue-tsc@3.1.5:
+ resolution: {integrity: sha512-L/G9IUjOWhBU0yun89rv8fKqmKC+T0HfhrFjlIml71WpfBv9eb4E9Bev8FMbyueBIU9vxQqbd+oOsVcDa5amGw==}
hasBin: true
peerDependencies:
typescript: '>=5.0.0'
- vue@3.5.22:
- resolution: {integrity: sha512-toaZjQ3a/G/mYaLSbV+QsQhIdMo9x5rrqIpYRObsJ6T/J+RyCSFwN2LHNVH9v8uIcljDNa3QzPVdv3Y6b9hAJQ==}
+ vue@3.5.25:
+ resolution: {integrity: sha512-YLVdgv2K13WJ6n+kD5owehKtEXwdwXuj2TTyJMsO7pSeKw2bfRNZGjhB7YzrpbMYj5b5QsUebHpOqR3R3ziy/g==}
peerDependencies:
typescript: '*'
peerDependenciesMeta:
@@ -4331,8 +4226,8 @@ packages:
resolution: {integrity: sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==}
engines: {node: '>=10.13.0'}
- webpack@5.102.1:
- resolution: {integrity: sha512-7h/weGm9d/ywQ6qzJ+Xy+r9n/3qgp/thalBbpOi5i223dPXKi04IBtqPN9nTd+jBc7QKfvDbaBnFipYp4sJAUQ==}
+ webpack@5.103.0:
+ resolution: {integrity: sha512-HU1JOuV1OavsZ+mfigY0j8d1TgQgbZ6M+J75zDkpEAwYeXjWSqrGJtgnPblJjd/mAyTNQ7ygw0MiKOn6etz8yw==}
engines: {node: '>=10.13.0'}
hasBin: true
peerDependencies:
@@ -4373,14 +4268,6 @@ packages:
resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==}
engines: {node: '>=8'}
- 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'}
-
wrap-ansi@9.0.2:
resolution: {integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==}
engines: {node: '>=18'}
@@ -4418,7 +4305,7 @@ snapshots:
'@antfu/install-pkg@1.1.0':
dependencies:
package-manager-detector: 1.5.0
- tinyexec: 1.0.1
+ tinyexec: 1.0.2
'@antfu/utils@9.3.0': {}
@@ -4445,21 +4332,17 @@ snapshots:
'@braintree/sanitize-url@7.1.1': {}
- '@cacheable/memoize@2.0.3':
+ '@cacheable/memory@2.0.5':
dependencies:
- '@cacheable/utils': 2.1.0
+ '@cacheable/utils': 2.3.1
+ '@keyv/bigmap': 1.3.0(keyv@5.5.4)
+ hookified: 1.13.0
+ keyv: 5.5.4
- '@cacheable/memory@2.0.3':
+ '@cacheable/utils@2.3.1':
dependencies:
- '@cacheable/memoize': 2.0.3
- '@cacheable/utils': 2.1.0
- '@keyv/bigmap': 1.1.0(keyv@5.5.3)
- hookified: 1.12.2
- keyv: 5.5.3
-
- '@cacheable/utils@2.1.0':
- dependencies:
- keyv: 5.5.3
+ hashery: 1.2.0
+ keyv: 5.5.4
'@chevrotain/cst-dts-gen@11.0.3':
dependencies:
@@ -4529,7 +4412,7 @@ snapshots:
'@citation-js/plugin-yaml@0.6.1':
dependencies:
- js-yaml: 4.1.0
+ js-yaml: 4.1.1
'@citation-js/plugin-zenodo@0.6.1':
dependencies:
@@ -4555,13 +4438,13 @@ snapshots:
'@dual-bundle/import-meta-resolve@4.2.1': {}
- '@emnapi/core@1.6.0':
+ '@emnapi/core@1.7.1':
dependencies:
'@emnapi/wasi-threads': 1.1.0
tslib: 2.8.1
optional: true
- '@emnapi/runtime@1.6.0':
+ '@emnapi/runtime@1.7.1':
dependencies:
tslib: 2.8.1
optional: true
@@ -4571,104 +4454,104 @@ snapshots:
tslib: 2.8.1
optional: true
- '@esbuild/aix-ppc64@0.25.11':
+ '@esbuild/aix-ppc64@0.25.12':
optional: true
- '@esbuild/android-arm64@0.25.11':
+ '@esbuild/android-arm64@0.25.12':
optional: true
- '@esbuild/android-arm@0.25.11':
+ '@esbuild/android-arm@0.25.12':
optional: true
- '@esbuild/android-x64@0.25.11':
+ '@esbuild/android-x64@0.25.12':
optional: true
- '@esbuild/darwin-arm64@0.25.11':
+ '@esbuild/darwin-arm64@0.25.12':
optional: true
- '@esbuild/darwin-x64@0.25.11':
+ '@esbuild/darwin-x64@0.25.12':
optional: true
- '@esbuild/freebsd-arm64@0.25.11':
+ '@esbuild/freebsd-arm64@0.25.12':
optional: true
- '@esbuild/freebsd-x64@0.25.11':
+ '@esbuild/freebsd-x64@0.25.12':
optional: true
- '@esbuild/linux-arm64@0.25.11':
+ '@esbuild/linux-arm64@0.25.12':
optional: true
- '@esbuild/linux-arm@0.25.11':
+ '@esbuild/linux-arm@0.25.12':
optional: true
- '@esbuild/linux-ia32@0.25.11':
+ '@esbuild/linux-ia32@0.25.12':
optional: true
- '@esbuild/linux-loong64@0.25.11':
+ '@esbuild/linux-loong64@0.25.12':
optional: true
- '@esbuild/linux-mips64el@0.25.11':
+ '@esbuild/linux-mips64el@0.25.12':
optional: true
- '@esbuild/linux-ppc64@0.25.11':
+ '@esbuild/linux-ppc64@0.25.12':
optional: true
- '@esbuild/linux-riscv64@0.25.11':
+ '@esbuild/linux-riscv64@0.25.12':
optional: true
- '@esbuild/linux-s390x@0.25.11':
+ '@esbuild/linux-s390x@0.25.12':
optional: true
- '@esbuild/linux-x64@0.25.11':
+ '@esbuild/linux-x64@0.25.12':
optional: true
- '@esbuild/netbsd-arm64@0.25.11':
+ '@esbuild/netbsd-arm64@0.25.12':
optional: true
- '@esbuild/netbsd-x64@0.25.11':
+ '@esbuild/netbsd-x64@0.25.12':
optional: true
- '@esbuild/openbsd-arm64@0.25.11':
+ '@esbuild/openbsd-arm64@0.25.12':
optional: true
- '@esbuild/openbsd-x64@0.25.11':
+ '@esbuild/openbsd-x64@0.25.12':
optional: true
- '@esbuild/openharmony-arm64@0.25.11':
+ '@esbuild/openharmony-arm64@0.25.12':
optional: true
- '@esbuild/sunos-x64@0.25.11':
+ '@esbuild/sunos-x64@0.25.12':
optional: true
- '@esbuild/win32-arm64@0.25.11':
+ '@esbuild/win32-arm64@0.25.12':
optional: true
- '@esbuild/win32-ia32@0.25.11':
+ '@esbuild/win32-ia32@0.25.12':
optional: true
- '@esbuild/win32-x64@0.25.11':
+ '@esbuild/win32-x64@0.25.12':
optional: true
- '@eslint-community/eslint-plugin-eslint-comments@4.5.0(eslint@9.38.0(jiti@2.6.1))':
+ '@eslint-community/eslint-plugin-eslint-comments@4.5.0(eslint@9.39.1(jiti@2.6.1))':
dependencies:
escape-string-regexp: 4.0.0
- eslint: 9.38.0(jiti@2.6.1)
+ eslint: 9.39.1(jiti@2.6.1)
ignore: 5.3.2
- '@eslint-community/eslint-utils@4.9.0(eslint@9.38.0(jiti@2.6.1))':
+ '@eslint-community/eslint-utils@4.9.0(eslint@9.39.1(jiti@2.6.1))':
dependencies:
- eslint: 9.38.0(jiti@2.6.1)
+ eslint: 9.39.1(jiti@2.6.1)
eslint-visitor-keys: 3.4.3
'@eslint-community/regexpp@4.12.1': {}
'@eslint-community/regexpp@4.12.2': {}
- '@eslint/compat@1.4.0(eslint@9.38.0(jiti@2.6.1))':
+ '@eslint/compat@1.4.1(eslint@9.39.1(jiti@2.6.1))':
dependencies:
- '@eslint/core': 0.16.0
+ '@eslint/core': 0.17.0
optionalDependencies:
- eslint: 9.38.0(jiti@2.6.1)
+ eslint: 9.39.1(jiti@2.6.1)
'@eslint/config-array@0.21.1':
dependencies:
@@ -4678,11 +4561,11 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@eslint/config-helpers@0.4.1':
+ '@eslint/config-helpers@0.4.2':
dependencies:
- '@eslint/core': 0.16.0
+ '@eslint/core': 0.17.0
- '@eslint/core@0.16.0':
+ '@eslint/core@0.17.0':
dependencies:
'@types/json-schema': 7.0.15
@@ -4694,19 +4577,19 @@ snapshots:
globals: 14.0.0
ignore: 5.3.2
import-fresh: 3.3.1
- js-yaml: 4.1.0
+ js-yaml: 4.1.1
minimatch: 3.1.2
strip-json-comments: 3.1.1
transitivePeerDependencies:
- supports-color
- '@eslint/js@9.38.0': {}
+ '@eslint/js@9.39.1': {}
'@eslint/object-schema@2.1.7': {}
- '@eslint/plugin-kit@0.4.0':
+ '@eslint/plugin-kit@0.4.1':
dependencies:
- '@eslint/core': 0.16.0
+ '@eslint/core': 0.17.0
levn: 0.4.1
'@github/browserslist-config@1.0.0': {}
@@ -4717,7 +4600,7 @@ snapshots:
'@github/paste-markdown@1.5.3': {}
- '@github/relative-time-element@4.5.0': {}
+ '@github/relative-time-element@4.5.1': {}
'@github/text-expander-element@2.9.2':
dependencies:
@@ -4756,15 +4639,6 @@ snapshots:
dependencies:
'@isaacs/balanced-match': 4.0.1
- '@isaacs/cliui@8.0.2':
- dependencies:
- string-width: 5.1.2
- string-width-cjs: string-width@4.2.3
- strip-ansi: 7.1.2
- 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.13':
dependencies:
'@jridgewell/sourcemap-codec': 1.5.5
@@ -4784,10 +4658,11 @@ snapshots:
'@jridgewell/resolve-uri': 3.1.2
'@jridgewell/sourcemap-codec': 1.5.5
- '@keyv/bigmap@1.1.0(keyv@5.5.3)':
+ '@keyv/bigmap@1.3.0(keyv@5.5.4)':
dependencies:
- hookified: 1.12.2
- keyv: 5.5.3
+ hashery: 1.2.0
+ hookified: 1.13.0
+ keyv: 5.5.4
'@keyv/serialize@1.1.1': {}
@@ -4805,8 +4680,8 @@ snapshots:
'@napi-rs/wasm-runtime@0.2.12':
dependencies:
- '@emnapi/core': 1.6.0
- '@emnapi/runtime': 1.6.0
+ '@emnapi/core': 1.7.1
+ '@emnapi/runtime': 1.7.1
'@tybys/wasm-util': 0.10.1
optional: true
@@ -4874,99 +4749,96 @@ snapshots:
dependencies:
'@nolyfill/shared': 1.0.44
- '@pkgjs/parseargs@0.11.0':
- optional: true
-
'@pkgr/core@0.2.9': {}
- '@playwright/test@1.56.1':
+ '@playwright/test@1.57.0':
dependencies:
- playwright: 1.56.1
+ playwright: 1.57.0
'@popperjs/core@2.11.8': {}
- '@primer/octicons@19.19.0':
+ '@primer/octicons@19.21.0':
dependencies:
object-assign: 4.1.1
'@resvg/resvg-wasm@2.6.2': {}
- '@rolldown/pluginutils@1.0.0-beta.29': {}
+ '@rolldown/pluginutils@1.0.0-beta.50': {}
- '@rollup/rollup-android-arm-eabi@4.52.5':
+ '@rollup/rollup-android-arm-eabi@4.53.3':
optional: true
- '@rollup/rollup-android-arm64@4.52.5':
+ '@rollup/rollup-android-arm64@4.53.3':
optional: true
- '@rollup/rollup-darwin-arm64@4.52.5':
+ '@rollup/rollup-darwin-arm64@4.53.3':
optional: true
- '@rollup/rollup-darwin-x64@4.52.5':
+ '@rollup/rollup-darwin-x64@4.53.3':
optional: true
- '@rollup/rollup-freebsd-arm64@4.52.5':
+ '@rollup/rollup-freebsd-arm64@4.53.3':
optional: true
- '@rollup/rollup-freebsd-x64@4.52.5':
+ '@rollup/rollup-freebsd-x64@4.53.3':
optional: true
- '@rollup/rollup-linux-arm-gnueabihf@4.52.5':
+ '@rollup/rollup-linux-arm-gnueabihf@4.53.3':
optional: true
- '@rollup/rollup-linux-arm-musleabihf@4.52.5':
+ '@rollup/rollup-linux-arm-musleabihf@4.53.3':
optional: true
- '@rollup/rollup-linux-arm64-gnu@4.52.5':
+ '@rollup/rollup-linux-arm64-gnu@4.53.3':
optional: true
- '@rollup/rollup-linux-arm64-musl@4.52.5':
+ '@rollup/rollup-linux-arm64-musl@4.53.3':
optional: true
- '@rollup/rollup-linux-loong64-gnu@4.52.5':
+ '@rollup/rollup-linux-loong64-gnu@4.53.3':
optional: true
- '@rollup/rollup-linux-ppc64-gnu@4.52.5':
+ '@rollup/rollup-linux-ppc64-gnu@4.53.3':
optional: true
- '@rollup/rollup-linux-riscv64-gnu@4.52.5':
+ '@rollup/rollup-linux-riscv64-gnu@4.53.3':
optional: true
- '@rollup/rollup-linux-riscv64-musl@4.52.5':
+ '@rollup/rollup-linux-riscv64-musl@4.53.3':
optional: true
- '@rollup/rollup-linux-s390x-gnu@4.52.5':
+ '@rollup/rollup-linux-s390x-gnu@4.53.3':
optional: true
- '@rollup/rollup-linux-x64-gnu@4.52.5':
+ '@rollup/rollup-linux-x64-gnu@4.53.3':
optional: true
- '@rollup/rollup-linux-x64-musl@4.52.5':
+ '@rollup/rollup-linux-x64-musl@4.53.3':
optional: true
- '@rollup/rollup-openharmony-arm64@4.52.5':
+ '@rollup/rollup-openharmony-arm64@4.53.3':
optional: true
- '@rollup/rollup-win32-arm64-msvc@4.52.5':
+ '@rollup/rollup-win32-arm64-msvc@4.53.3':
optional: true
- '@rollup/rollup-win32-ia32-msvc@4.52.5':
+ '@rollup/rollup-win32-ia32-msvc@4.53.3':
optional: true
- '@rollup/rollup-win32-x64-gnu@4.52.5':
+ '@rollup/rollup-win32-x64-gnu@4.53.3':
optional: true
- '@rollup/rollup-win32-x64-msvc@4.52.5':
+ '@rollup/rollup-win32-x64-msvc@4.53.3':
optional: true
'@rtsao/scc@1.1.0': {}
'@scarf/scarf@1.4.0': {}
- '@silverwind/vue3-calendar-heatmap@2.0.6(tippy.js@6.3.7)(vue@3.5.22(typescript@5.9.3))':
+ '@silverwind/vue3-calendar-heatmap@2.0.6(tippy.js@6.3.7)(vue@3.5.25(typescript@5.9.3))':
dependencies:
tippy.js: 6.3.7
- vue: 3.5.22(typescript@5.9.3)
+ vue: 3.5.25(typescript@5.9.3)
'@simonwep/pickr@1.9.0':
dependencies:
@@ -4988,17 +4860,17 @@ snapshots:
'@standard-schema/spec@1.0.0': {}
- '@stylistic/eslint-plugin@5.5.0(eslint@9.38.0(jiti@2.6.1))':
+ '@stylistic/eslint-plugin@5.6.1(eslint@9.39.1(jiti@2.6.1))':
dependencies:
- '@eslint-community/eslint-utils': 4.9.0(eslint@9.38.0(jiti@2.6.1))
- '@typescript-eslint/types': 8.46.2
- eslint: 9.38.0(jiti@2.6.1)
+ '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1(jiti@2.6.1))
+ '@typescript-eslint/types': 8.48.0
+ eslint: 9.39.1(jiti@2.6.1)
eslint-visitor-keys: 4.2.1
espree: 10.4.0
estraverse: 5.3.0
picomatch: 4.0.3
- '@stylistic/stylelint-plugin@4.0.0(stylelint@16.25.0(typescript@5.9.3))':
+ '@stylistic/stylelint-plugin@4.0.0(stylelint@16.26.0(typescript@5.9.3))':
dependencies:
'@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4)
'@csstools/css-tokenizer': 3.0.4
@@ -5007,11 +4879,11 @@ snapshots:
postcss-selector-parser: 7.1.0
postcss-value-parser: 4.2.0
style-search: 0.1.0
- stylelint: 16.25.0(typescript@5.9.3)
+ stylelint: 16.26.0(typescript@5.9.3)
'@swc/helpers@0.2.14': {}
- '@techknowlogick/license-checker-webpack-plugin@0.3.0(webpack@5.102.1)':
+ '@techknowlogick/license-checker-webpack-plugin@0.3.0(webpack@5.103.0)':
dependencies:
glob: 7.2.3
lodash: 4.17.21
@@ -5020,7 +4892,7 @@ snapshots:
spdx-expression-validate: 2.0.0
spdx-satisfies: 5.0.1
superstruct: 0.10.13
- webpack: 5.102.1(webpack-cli@6.0.1)
+ webpack: 5.103.0(webpack-cli@6.0.1)
webpack-sources: 1.4.3
wrap-ansi: 6.2.0
@@ -5195,11 +5067,11 @@ snapshots:
'@types/ms@2.1.0': {}
- '@types/node@20.19.23':
+ '@types/node@20.19.25':
dependencies:
undici-types: 6.21.0
- '@types/node@24.9.1':
+ '@types/node@24.10.1':
dependencies:
undici-types: 7.16.0
@@ -5228,15 +5100,15 @@ snapshots:
'@types/whatwg-mimetype@3.0.2': {}
- '@typescript-eslint/eslint-plugin@8.46.2(@typescript-eslint/parser@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)':
+ '@typescript-eslint/eslint-plugin@8.48.0(@typescript-eslint/parser@8.48.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)':
dependencies:
'@eslint-community/regexpp': 4.12.2
- '@typescript-eslint/parser': 8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)
- '@typescript-eslint/scope-manager': 8.46.2
- '@typescript-eslint/type-utils': 8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)
- '@typescript-eslint/utils': 8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)
- '@typescript-eslint/visitor-keys': 8.46.2
- eslint: 9.38.0(jiti@2.6.1)
+ '@typescript-eslint/parser': 8.48.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)
+ '@typescript-eslint/scope-manager': 8.48.0
+ '@typescript-eslint/type-utils': 8.48.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)
+ '@typescript-eslint/utils': 8.48.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)
+ '@typescript-eslint/visitor-keys': 8.48.0
+ eslint: 9.39.1(jiti@2.6.1)
graphemer: 1.4.0
ignore: 7.0.5
natural-compare: 1.4.0
@@ -5245,80 +5117,79 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/parser@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)':
+ '@typescript-eslint/parser@8.48.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)':
dependencies:
- '@typescript-eslint/scope-manager': 8.46.2
- '@typescript-eslint/types': 8.46.2
- '@typescript-eslint/typescript-estree': 8.46.2(typescript@5.9.3)
- '@typescript-eslint/visitor-keys': 8.46.2
+ '@typescript-eslint/scope-manager': 8.48.0
+ '@typescript-eslint/types': 8.48.0
+ '@typescript-eslint/typescript-estree': 8.48.0(typescript@5.9.3)
+ '@typescript-eslint/visitor-keys': 8.48.0
debug: 4.4.3
- eslint: 9.38.0(jiti@2.6.1)
+ eslint: 9.39.1(jiti@2.6.1)
typescript: 5.9.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/project-service@8.46.2(typescript@5.9.3)':
+ '@typescript-eslint/project-service@8.48.0(typescript@5.9.3)':
dependencies:
- '@typescript-eslint/tsconfig-utils': 8.46.2(typescript@5.9.3)
- '@typescript-eslint/types': 8.46.2
+ '@typescript-eslint/tsconfig-utils': 8.48.0(typescript@5.9.3)
+ '@typescript-eslint/types': 8.48.0
debug: 4.4.3
typescript: 5.9.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/scope-manager@8.46.2':
+ '@typescript-eslint/scope-manager@8.48.0':
dependencies:
- '@typescript-eslint/types': 8.46.2
- '@typescript-eslint/visitor-keys': 8.46.2
+ '@typescript-eslint/types': 8.48.0
+ '@typescript-eslint/visitor-keys': 8.48.0
- '@typescript-eslint/tsconfig-utils@8.46.2(typescript@5.9.3)':
+ '@typescript-eslint/tsconfig-utils@8.48.0(typescript@5.9.3)':
dependencies:
typescript: 5.9.3
- '@typescript-eslint/type-utils@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)':
+ '@typescript-eslint/type-utils@8.48.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)':
dependencies:
- '@typescript-eslint/types': 8.46.2
- '@typescript-eslint/typescript-estree': 8.46.2(typescript@5.9.3)
- '@typescript-eslint/utils': 8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)
+ '@typescript-eslint/types': 8.48.0
+ '@typescript-eslint/typescript-estree': 8.48.0(typescript@5.9.3)
+ '@typescript-eslint/utils': 8.48.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)
debug: 4.4.3
- eslint: 9.38.0(jiti@2.6.1)
+ eslint: 9.39.1(jiti@2.6.1)
ts-api-utils: 2.1.0(typescript@5.9.3)
typescript: 5.9.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/types@8.46.2': {}
+ '@typescript-eslint/types@8.48.0': {}
- '@typescript-eslint/typescript-estree@8.46.2(typescript@5.9.3)':
+ '@typescript-eslint/typescript-estree@8.48.0(typescript@5.9.3)':
dependencies:
- '@typescript-eslint/project-service': 8.46.2(typescript@5.9.3)
- '@typescript-eslint/tsconfig-utils': 8.46.2(typescript@5.9.3)
- '@typescript-eslint/types': 8.46.2
- '@typescript-eslint/visitor-keys': 8.46.2
+ '@typescript-eslint/project-service': 8.48.0(typescript@5.9.3)
+ '@typescript-eslint/tsconfig-utils': 8.48.0(typescript@5.9.3)
+ '@typescript-eslint/types': 8.48.0
+ '@typescript-eslint/visitor-keys': 8.48.0
debug: 4.4.3
- fast-glob: 3.3.3
- is-glob: 4.0.3
minimatch: 9.0.5
semver: 7.7.3
+ tinyglobby: 0.2.15
ts-api-utils: 2.1.0(typescript@5.9.3)
typescript: 5.9.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/utils@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)':
+ '@typescript-eslint/utils@8.48.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)':
dependencies:
- '@eslint-community/eslint-utils': 4.9.0(eslint@9.38.0(jiti@2.6.1))
- '@typescript-eslint/scope-manager': 8.46.2
- '@typescript-eslint/types': 8.46.2
- '@typescript-eslint/typescript-estree': 8.46.2(typescript@5.9.3)
- eslint: 9.38.0(jiti@2.6.1)
+ '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1(jiti@2.6.1))
+ '@typescript-eslint/scope-manager': 8.48.0
+ '@typescript-eslint/types': 8.48.0
+ '@typescript-eslint/typescript-estree': 8.48.0(typescript@5.9.3)
+ eslint: 9.39.1(jiti@2.6.1)
typescript: 5.9.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/visitor-keys@8.46.2':
+ '@typescript-eslint/visitor-keys@8.48.0':
dependencies:
- '@typescript-eslint/types': 8.46.2
+ '@typescript-eslint/types': 8.48.0
eslint-visitor-keys: 4.2.1
'@unrs/resolver-binding-android-arm-eabi@1.11.1':
@@ -5380,60 +5251,60 @@ snapshots:
'@unrs/resolver-binding-win32-x64-msvc@1.11.1':
optional: true
- '@vitejs/plugin-vue@6.0.1(vite@7.1.12(@types/node@24.9.1)(jiti@2.6.1)(stylus@0.57.0)(terser@5.44.0)(yaml@2.8.1))(vue@3.5.22(typescript@5.9.3))':
+ '@vitejs/plugin-vue@6.0.2(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(stylus@0.57.0)(terser@5.44.1)(yaml@2.8.1))(vue@3.5.25(typescript@5.9.3))':
dependencies:
- '@rolldown/pluginutils': 1.0.0-beta.29
- vite: 7.1.12(@types/node@24.9.1)(jiti@2.6.1)(stylus@0.57.0)(terser@5.44.0)(yaml@2.8.1)
- vue: 3.5.22(typescript@5.9.3)
+ '@rolldown/pluginutils': 1.0.0-beta.50
+ vite: 7.2.4(@types/node@24.10.1)(jiti@2.6.1)(stylus@0.57.0)(terser@5.44.1)(yaml@2.8.1)
+ vue: 3.5.25(typescript@5.9.3)
- '@vitest/eslint-plugin@1.3.26(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)(vitest@4.0.4(@types/debug@4.1.12)(@types/node@24.9.1)(happy-dom@20.0.8)(jiti@2.6.1)(stylus@0.57.0)(terser@5.44.0)(yaml@2.8.1))':
+ '@vitest/eslint-plugin@1.5.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)(vitest@4.0.14(@types/node@24.10.1)(happy-dom@20.0.10)(jiti@2.6.1)(stylus@0.57.0)(terser@5.44.1)(yaml@2.8.1))':
dependencies:
- '@typescript-eslint/scope-manager': 8.46.2
- '@typescript-eslint/utils': 8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)
- eslint: 9.38.0(jiti@2.6.1)
+ '@typescript-eslint/scope-manager': 8.48.0
+ '@typescript-eslint/utils': 8.48.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)
+ eslint: 9.39.1(jiti@2.6.1)
optionalDependencies:
typescript: 5.9.3
- vitest: 4.0.4(@types/debug@4.1.12)(@types/node@24.9.1)(happy-dom@20.0.8)(jiti@2.6.1)(stylus@0.57.0)(terser@5.44.0)(yaml@2.8.1)
+ vitest: 4.0.14(@types/node@24.10.1)(happy-dom@20.0.10)(jiti@2.6.1)(stylus@0.57.0)(terser@5.44.1)(yaml@2.8.1)
transitivePeerDependencies:
- supports-color
- '@vitest/expect@4.0.4':
+ '@vitest/expect@4.0.14':
dependencies:
'@standard-schema/spec': 1.0.0
'@types/chai': 5.2.3
- '@vitest/spy': 4.0.4
- '@vitest/utils': 4.0.4
- chai: 6.2.0
+ '@vitest/spy': 4.0.14
+ '@vitest/utils': 4.0.14
+ chai: 6.2.1
tinyrainbow: 3.0.3
- '@vitest/mocker@4.0.4(vite@7.1.12(@types/node@24.9.1)(jiti@2.6.1)(stylus@0.57.0)(terser@5.44.0)(yaml@2.8.1))':
+ '@vitest/mocker@4.0.14(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(stylus@0.57.0)(terser@5.44.1)(yaml@2.8.1))':
dependencies:
- '@vitest/spy': 4.0.4
+ '@vitest/spy': 4.0.14
estree-walker: 3.0.3
magic-string: 0.30.21
optionalDependencies:
- vite: 7.1.12(@types/node@24.9.1)(jiti@2.6.1)(stylus@0.57.0)(terser@5.44.0)(yaml@2.8.1)
+ vite: 7.2.4(@types/node@24.10.1)(jiti@2.6.1)(stylus@0.57.0)(terser@5.44.1)(yaml@2.8.1)
- '@vitest/pretty-format@4.0.4':
+ '@vitest/pretty-format@4.0.14':
dependencies:
tinyrainbow: 3.0.3
- '@vitest/runner@4.0.4':
+ '@vitest/runner@4.0.14':
dependencies:
- '@vitest/utils': 4.0.4
+ '@vitest/utils': 4.0.14
pathe: 2.0.3
- '@vitest/snapshot@4.0.4':
+ '@vitest/snapshot@4.0.14':
dependencies:
- '@vitest/pretty-format': 4.0.4
+ '@vitest/pretty-format': 4.0.14
magic-string: 0.30.21
pathe: 2.0.3
- '@vitest/spy@4.0.4': {}
+ '@vitest/spy@4.0.14': {}
- '@vitest/utils@4.0.4':
+ '@vitest/utils@4.0.14':
dependencies:
- '@vitest/pretty-format': 4.0.4
+ '@vitest/pretty-format': 4.0.14
tinyrainbow: 3.0.3
'@volar/language-core@2.4.23':
@@ -5448,71 +5319,71 @@ snapshots:
path-browserify: 1.0.1
vscode-uri: 3.1.0
- '@vue/compiler-core@3.5.22':
+ '@vue/compiler-core@3.5.25':
dependencies:
'@babel/parser': 7.28.5
- '@vue/shared': 3.5.22
+ '@vue/shared': 3.5.25
entities: 4.5.0
estree-walker: 2.0.2
source-map-js: 1.2.1
- '@vue/compiler-dom@3.5.22':
+ '@vue/compiler-dom@3.5.25':
dependencies:
- '@vue/compiler-core': 3.5.22
- '@vue/shared': 3.5.22
+ '@vue/compiler-core': 3.5.25
+ '@vue/shared': 3.5.25
- '@vue/compiler-sfc@3.5.22':
+ '@vue/compiler-sfc@3.5.25':
dependencies:
'@babel/parser': 7.28.5
- '@vue/compiler-core': 3.5.22
- '@vue/compiler-dom': 3.5.22
- '@vue/compiler-ssr': 3.5.22
- '@vue/shared': 3.5.22
+ '@vue/compiler-core': 3.5.25
+ '@vue/compiler-dom': 3.5.25
+ '@vue/compiler-ssr': 3.5.25
+ '@vue/shared': 3.5.25
estree-walker: 2.0.2
magic-string: 0.30.21
postcss: 8.5.6
source-map-js: 1.2.1
- '@vue/compiler-ssr@3.5.22':
+ '@vue/compiler-ssr@3.5.25':
dependencies:
- '@vue/compiler-dom': 3.5.22
- '@vue/shared': 3.5.22
+ '@vue/compiler-dom': 3.5.25
+ '@vue/shared': 3.5.25
- '@vue/language-core@3.1.2(typescript@5.9.3)':
+ '@vue/language-core@3.1.5(typescript@5.9.3)':
dependencies:
'@volar/language-core': 2.4.23
- '@vue/compiler-dom': 3.5.22
- '@vue/shared': 3.5.22
- alien-signals: 3.0.3
+ '@vue/compiler-dom': 3.5.25
+ '@vue/shared': 3.5.25
+ alien-signals: 3.1.1
muggle-string: 0.4.1
path-browserify: 1.0.1
picomatch: 4.0.3
optionalDependencies:
typescript: 5.9.3
- '@vue/reactivity@3.5.22':
+ '@vue/reactivity@3.5.25':
dependencies:
- '@vue/shared': 3.5.22
+ '@vue/shared': 3.5.25
- '@vue/runtime-core@3.5.22':
+ '@vue/runtime-core@3.5.25':
dependencies:
- '@vue/reactivity': 3.5.22
- '@vue/shared': 3.5.22
+ '@vue/reactivity': 3.5.25
+ '@vue/shared': 3.5.25
- '@vue/runtime-dom@3.5.22':
+ '@vue/runtime-dom@3.5.25':
dependencies:
- '@vue/reactivity': 3.5.22
- '@vue/runtime-core': 3.5.22
- '@vue/shared': 3.5.22
- csstype: 3.1.3
+ '@vue/reactivity': 3.5.25
+ '@vue/runtime-core': 3.5.25
+ '@vue/shared': 3.5.25
+ csstype: 3.2.3
- '@vue/server-renderer@3.5.22(vue@3.5.22(typescript@5.9.3))':
+ '@vue/server-renderer@3.5.25(vue@3.5.25(typescript@5.9.3))':
dependencies:
- '@vue/compiler-ssr': 3.5.22
- '@vue/shared': 3.5.22
- vue: 3.5.22(typescript@5.9.3)
+ '@vue/compiler-ssr': 3.5.25
+ '@vue/shared': 3.5.25
+ vue: 3.5.25(typescript@5.9.3)
- '@vue/shared@3.5.22': {}
+ '@vue/shared@3.5.25': {}
'@webassemblyjs/ast@1.14.1':
dependencies:
@@ -5590,20 +5461,20 @@ snapshots:
'@webassemblyjs/ast': 1.14.1
'@xtuc/long': 4.2.2
- '@webpack-cli/configtest@3.0.1(webpack-cli@6.0.1)(webpack@5.102.1)':
+ '@webpack-cli/configtest@3.0.1(webpack-cli@6.0.1)(webpack@5.103.0)':
dependencies:
- webpack: 5.102.1(webpack-cli@6.0.1)
- webpack-cli: 6.0.1(webpack@5.102.1)
+ webpack: 5.103.0(webpack-cli@6.0.1)
+ webpack-cli: 6.0.1(webpack@5.103.0)
- '@webpack-cli/info@3.0.1(webpack-cli@6.0.1)(webpack@5.102.1)':
+ '@webpack-cli/info@3.0.1(webpack-cli@6.0.1)(webpack@5.103.0)':
dependencies:
- webpack: 5.102.1(webpack-cli@6.0.1)
- webpack-cli: 6.0.1(webpack@5.102.1)
+ webpack: 5.103.0(webpack-cli@6.0.1)
+ webpack-cli: 6.0.1(webpack@5.103.0)
- '@webpack-cli/serve@3.0.1(webpack-cli@6.0.1)(webpack@5.102.1)':
+ '@webpack-cli/serve@3.0.1(webpack-cli@6.0.1)(webpack@5.103.0)':
dependencies:
- webpack: 5.102.1(webpack-cli@6.0.1)
- webpack-cli: 6.0.1(webpack@5.102.1)
+ webpack: 5.103.0(webpack-cli@6.0.1)
+ webpack-cli: 6.0.1(webpack@5.103.0)
'@xtuc/ieee754@1.2.0': {}
@@ -5619,9 +5490,9 @@ snapshots:
acorn@8.15.0: {}
- add-asset-webpack-plugin@3.1.1(webpack@5.102.1):
+ add-asset-webpack-plugin@3.1.1(webpack@5.103.0):
optionalDependencies:
- webpack: 5.102.1(webpack-cli@6.0.1)
+ webpack: 5.103.0(webpack-cli@6.0.1)
ajv-formats@2.1.1(ajv@8.17.1):
optionalDependencies:
@@ -5646,7 +5517,7 @@ snapshots:
json-schema-traverse: 1.0.0
require-from-string: 2.0.2
- alien-signals@3.0.3: {}
+ alien-signals@3.1.1: {}
ansi-regex@5.0.1: {}
@@ -5701,7 +5572,7 @@ snapshots:
base64-js@1.5.1: {}
- baseline-browser-mapping@2.8.20: {}
+ baseline-browser-mapping@2.8.31: {}
big.js@5.2.2: {}
@@ -5722,13 +5593,13 @@ snapshots:
dependencies:
fill-range: 7.1.1
- browserslist@4.27.0:
+ browserslist@4.28.0:
dependencies:
- baseline-browser-mapping: 2.8.20
- caniuse-lite: 1.0.30001751
- electron-to-chromium: 1.5.240
- node-releases: 2.0.26
- update-browserslist-db: 1.1.4(browserslist@4.27.0)
+ baseline-browser-mapping: 2.8.31
+ caniuse-lite: 1.0.30001757
+ electron-to-chromium: 1.5.261
+ node-releases: 2.0.27
+ update-browserslist-db: 1.1.4(browserslist@4.28.0)
buffer-from@1.1.2: {}
@@ -5743,22 +5614,21 @@ snapshots:
bytes@3.1.2: {}
- cacheable@2.1.1:
+ cacheable@2.2.0:
dependencies:
- '@cacheable/memoize': 2.0.3
- '@cacheable/memory': 2.0.3
- '@cacheable/utils': 2.1.0
- hookified: 1.12.2
- keyv: 5.5.3
- qified: 0.5.1
+ '@cacheable/memory': 2.0.5
+ '@cacheable/utils': 2.3.1
+ hookified: 1.13.0
+ keyv: 5.5.4
+ qified: 0.5.2
callsites@3.1.0: {}
camelcase-css@2.0.1: {}
- caniuse-lite@1.0.30001751: {}
+ caniuse-lite@1.0.30001757: {}
- chai@6.2.0: {}
+ chai@6.2.1: {}
chalk@4.1.2:
dependencies:
@@ -5777,10 +5647,10 @@ snapshots:
dependencies:
'@kurkle/color': 0.3.4
- chartjs-adapter-dayjs-4@1.0.4(chart.js@4.5.1)(dayjs@1.11.18):
+ chartjs-adapter-dayjs-4@1.0.4(chart.js@4.5.1)(dayjs@1.11.19):
dependencies:
chart.js: 4.5.1
- dayjs: 1.11.18
+ dayjs: 1.11.19
chartjs-plugin-zoom@2.2.0(chart.js@4.5.1):
dependencies:
@@ -5826,7 +5696,7 @@ snapshots:
dependencies:
escape-string-regexp: 1.0.5
- clippie@4.1.8: {}
+ clippie@4.1.9: {}
clone-deep@4.0.1:
dependencies:
@@ -5854,7 +5724,7 @@ snapshots:
commander@12.1.0: {}
- commander@13.1.0: {}
+ commander@14.0.2: {}
commander@2.20.3: {}
@@ -5872,9 +5742,9 @@ snapshots:
confbox@0.2.2: {}
- core-js-compat@3.46.0:
+ core-js-compat@3.47.0:
dependencies:
- browserslist: 4.27.0
+ browserslist: 4.28.0
core-js@3.32.2: {}
@@ -5890,7 +5760,7 @@ snapshots:
dependencies:
env-paths: 2.2.1
import-fresh: 3.3.1
- js-yaml: 4.1.0
+ js-yaml: 4.1.1
parse-json: 5.2.0
optionalDependencies:
typescript: 5.9.3
@@ -5905,7 +5775,7 @@ snapshots:
css-functions-list@3.2.3: {}
- css-loader@7.1.2(webpack@5.102.1):
+ css-loader@7.1.2(webpack@5.103.0):
dependencies:
icss-utils: 5.1.0(postcss@8.5.6)
postcss: 8.5.6
@@ -5916,7 +5786,7 @@ snapshots:
postcss-value-parser: 4.2.0
semver: 7.7.3
optionalDependencies:
- webpack: 5.102.1(webpack-cli@6.0.1)
+ webpack: 5.103.0(webpack-cli@6.0.1)
css-select@5.2.2:
dependencies:
@@ -5950,7 +5820,7 @@ snapshots:
dependencies:
css-tree: 2.2.1
- csstype@3.1.3: {}
+ csstype@3.2.3: {}
cytoscape-cose-bilkent@4.1.0(cytoscape@3.33.1):
dependencies:
@@ -6138,7 +6008,7 @@ snapshots:
damerau-levenshtein@1.0.8: {}
- dayjs@1.11.18: {}
+ dayjs@1.11.19: {}
debug@3.2.7:
dependencies:
@@ -6199,7 +6069,9 @@ snapshots:
dependencies:
domelementtype: 2.3.0
- dompurify@3.1.7: {}
+ dompurify@3.2.7:
+ optionalDependencies:
+ '@types/trusted-types': 2.0.7
dompurify@3.3.0:
optionalDependencies:
@@ -6216,8 +6088,6 @@ snapshots:
'@swc/helpers': 0.2.14
just-extend: 5.1.1
- eastasianwidth@0.2.0: {}
-
easymde@2.20.0:
dependencies:
'@types/codemirror': 5.60.17
@@ -6226,7 +6096,7 @@ snapshots:
codemirror-spell-checker: 1.1.2
marked: 4.3.0
- electron-to-chromium@1.5.240: {}
+ electron-to-chromium@1.5.261: {}
emoji-regex@10.6.0: {}
@@ -6245,7 +6115,7 @@ snapshots:
env-paths@2.2.1: {}
- envinfo@7.19.0: {}
+ envinfo@7.20.0: {}
error-ex@1.3.4:
dependencies:
@@ -6253,42 +6123,42 @@ snapshots:
es-module-lexer@1.7.0: {}
- esbuild-loader@4.4.0(webpack@5.102.1):
+ esbuild-loader@4.4.0(webpack@5.103.0):
dependencies:
- esbuild: 0.25.11
+ esbuild: 0.25.12
get-tsconfig: 4.13.0
loader-utils: 2.0.4
- webpack: 5.102.1(webpack-cli@6.0.1)
+ webpack: 5.103.0(webpack-cli@6.0.1)
webpack-sources: 1.4.3
- esbuild@0.25.11:
+ esbuild@0.25.12:
optionalDependencies:
- '@esbuild/aix-ppc64': 0.25.11
- '@esbuild/android-arm': 0.25.11
- '@esbuild/android-arm64': 0.25.11
- '@esbuild/android-x64': 0.25.11
- '@esbuild/darwin-arm64': 0.25.11
- '@esbuild/darwin-x64': 0.25.11
- '@esbuild/freebsd-arm64': 0.25.11
- '@esbuild/freebsd-x64': 0.25.11
- '@esbuild/linux-arm': 0.25.11
- '@esbuild/linux-arm64': 0.25.11
- '@esbuild/linux-ia32': 0.25.11
- '@esbuild/linux-loong64': 0.25.11
- '@esbuild/linux-mips64el': 0.25.11
- '@esbuild/linux-ppc64': 0.25.11
- '@esbuild/linux-riscv64': 0.25.11
- '@esbuild/linux-s390x': 0.25.11
- '@esbuild/linux-x64': 0.25.11
- '@esbuild/netbsd-arm64': 0.25.11
- '@esbuild/netbsd-x64': 0.25.11
- '@esbuild/openbsd-arm64': 0.25.11
- '@esbuild/openbsd-x64': 0.25.11
- '@esbuild/openharmony-arm64': 0.25.11
- '@esbuild/sunos-x64': 0.25.11
- '@esbuild/win32-arm64': 0.25.11
- '@esbuild/win32-ia32': 0.25.11
- '@esbuild/win32-x64': 0.25.11
+ '@esbuild/aix-ppc64': 0.25.12
+ '@esbuild/android-arm': 0.25.12
+ '@esbuild/android-arm64': 0.25.12
+ '@esbuild/android-x64': 0.25.12
+ '@esbuild/darwin-arm64': 0.25.12
+ '@esbuild/darwin-x64': 0.25.12
+ '@esbuild/freebsd-arm64': 0.25.12
+ '@esbuild/freebsd-x64': 0.25.12
+ '@esbuild/linux-arm': 0.25.12
+ '@esbuild/linux-arm64': 0.25.12
+ '@esbuild/linux-ia32': 0.25.12
+ '@esbuild/linux-loong64': 0.25.12
+ '@esbuild/linux-mips64el': 0.25.12
+ '@esbuild/linux-ppc64': 0.25.12
+ '@esbuild/linux-riscv64': 0.25.12
+ '@esbuild/linux-s390x': 0.25.12
+ '@esbuild/linux-x64': 0.25.12
+ '@esbuild/netbsd-arm64': 0.25.12
+ '@esbuild/netbsd-x64': 0.25.12
+ '@esbuild/openbsd-arm64': 0.25.12
+ '@esbuild/openbsd-x64': 0.25.12
+ '@esbuild/openharmony-arm64': 0.25.12
+ '@esbuild/sunos-x64': 0.25.12
+ '@esbuild/win32-arm64': 0.25.12
+ '@esbuild/win32-ia32': 0.25.12
+ '@esbuild/win32-x64': 0.25.12
escalade@3.2.0: {}
@@ -6296,14 +6166,14 @@ snapshots:
escape-string-regexp@4.0.0: {}
- eslint-compat-utils@0.6.5(eslint@9.38.0(jiti@2.6.1)):
+ eslint-compat-utils@0.6.5(eslint@9.39.1(jiti@2.6.1)):
dependencies:
- eslint: 9.38.0(jiti@2.6.1)
+ eslint: 9.39.1(jiti@2.6.1)
semver: 7.7.3
- eslint-config-prettier@10.1.8(eslint@9.38.0(jiti@2.6.1)):
+ eslint-config-prettier@10.1.8(eslint@9.39.1(jiti@2.6.1)):
dependencies:
- eslint: 9.38.0(jiti@2.6.1)
+ eslint: 9.39.1(jiti@2.6.1)
eslint-import-context@0.1.9(unrs-resolver@1.11.1):
dependencies:
@@ -6320,10 +6190,10 @@ snapshots:
transitivePeerDependencies:
- supports-color
- eslint-import-resolver-typescript@4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@9.38.0(jiti@2.6.1)))(eslint-plugin-import@2.32.0)(eslint@9.38.0(jiti@2.6.1)):
+ eslint-import-resolver-typescript@4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.48.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@9.39.1(jiti@2.6.1)))(eslint-plugin-import@2.32.0)(eslint@9.39.1(jiti@2.6.1)):
dependencies:
debug: 4.4.3
- eslint: 9.38.0(jiti@2.6.1)
+ eslint: 9.39.1(jiti@2.6.1)
eslint-import-context: 0.1.9(unrs-resolver@1.11.1)
get-tsconfig: 4.13.0
is-bun-module: 2.0.0
@@ -6331,100 +6201,100 @@ snapshots:
tinyglobby: 0.2.15
unrs-resolver: 1.11.1
optionalDependencies:
- eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@4.4.4)(eslint@9.38.0(jiti@2.6.1))
- eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@9.38.0(jiti@2.6.1))
+ eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.48.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@4.4.4)(eslint@9.39.1(jiti@2.6.1))
+ eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.48.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@9.39.1(jiti@2.6.1))
transitivePeerDependencies:
- supports-color
- eslint-module-utils@2.12.1(@typescript-eslint/parser@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@4.4.4)(eslint@9.38.0(jiti@2.6.1)):
+ eslint-module-utils@2.12.1(@typescript-eslint/parser@8.48.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@4.4.4)(eslint@9.39.1(jiti@2.6.1)):
dependencies:
debug: 3.2.7
optionalDependencies:
- '@typescript-eslint/parser': 8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)
- eslint: 9.38.0(jiti@2.6.1)
+ '@typescript-eslint/parser': 8.48.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)
+ eslint: 9.39.1(jiti@2.6.1)
eslint-import-resolver-node: 0.3.9
- eslint-import-resolver-typescript: 4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@9.38.0(jiti@2.6.1)))(eslint-plugin-import@2.32.0)(eslint@9.38.0(jiti@2.6.1))
+ eslint-import-resolver-typescript: 4.4.4(eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.48.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@9.39.1(jiti@2.6.1)))(eslint-plugin-import@2.32.0)(eslint@9.39.1(jiti@2.6.1))
transitivePeerDependencies:
- supports-color
- eslint-plugin-array-func@5.1.0(eslint@9.38.0(jiti@2.6.1)):
+ eslint-plugin-array-func@5.1.0(eslint@9.39.1(jiti@2.6.1)):
dependencies:
- eslint: 9.38.0(jiti@2.6.1)
+ eslint: 9.39.1(jiti@2.6.1)
- eslint-plugin-escompat@3.11.4(eslint@9.38.0(jiti@2.6.1)):
+ eslint-plugin-escompat@3.11.4(eslint@9.39.1(jiti@2.6.1)):
dependencies:
- browserslist: 4.27.0
- eslint: 9.38.0(jiti@2.6.1)
+ browserslist: 4.28.0
+ eslint: 9.39.1(jiti@2.6.1)
- eslint-plugin-eslint-comments@3.2.0(eslint@9.38.0(jiti@2.6.1)):
+ eslint-plugin-eslint-comments@3.2.0(eslint@9.39.1(jiti@2.6.1)):
dependencies:
escape-string-regexp: 1.0.5
- eslint: 9.38.0(jiti@2.6.1)
+ eslint: 9.39.1(jiti@2.6.1)
ignore: 5.3.2
- eslint-plugin-filenames@1.3.2(eslint@9.38.0(jiti@2.6.1)):
+ eslint-plugin-filenames@1.3.2(eslint@9.39.1(jiti@2.6.1)):
dependencies:
- eslint: 9.38.0(jiti@2.6.1)
+ eslint: 9.39.1(jiti@2.6.1)
lodash.camelcase: 4.3.0
lodash.kebabcase: 4.1.1
lodash.snakecase: 4.1.1
lodash.upperfirst: 4.3.1
- eslint-plugin-github@6.0.0(@types/eslint@9.6.1)(eslint-import-resolver-typescript@4.4.4)(eslint@9.38.0(jiti@2.6.1)):
+ eslint-plugin-github@6.0.0(@types/eslint@9.6.1)(eslint-import-resolver-typescript@4.4.4)(eslint@9.39.1(jiti@2.6.1)):
dependencies:
- '@eslint/compat': 1.4.0(eslint@9.38.0(jiti@2.6.1))
+ '@eslint/compat': 1.4.1(eslint@9.39.1(jiti@2.6.1))
'@eslint/eslintrc': 3.3.1
- '@eslint/js': 9.38.0
+ '@eslint/js': 9.39.1
'@github/browserslist-config': 1.0.0
- '@typescript-eslint/eslint-plugin': 8.46.2(@typescript-eslint/parser@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)
- '@typescript-eslint/parser': 8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)
+ '@typescript-eslint/eslint-plugin': 8.48.0(@typescript-eslint/parser@8.48.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)
+ '@typescript-eslint/parser': 8.48.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)
aria-query: 5.3.2
- eslint: 9.38.0(jiti@2.6.1)
- eslint-config-prettier: 10.1.8(eslint@9.38.0(jiti@2.6.1))
- eslint-plugin-escompat: 3.11.4(eslint@9.38.0(jiti@2.6.1))
- eslint-plugin-eslint-comments: 3.2.0(eslint@9.38.0(jiti@2.6.1))
- eslint-plugin-filenames: 1.3.2(eslint@9.38.0(jiti@2.6.1))
- eslint-plugin-i18n-text: 1.0.1(eslint@9.38.0(jiti@2.6.1))
- eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@4.4.4)(eslint@9.38.0(jiti@2.6.1))
- eslint-plugin-jsx-a11y: 6.10.2(eslint@9.38.0(jiti@2.6.1))
+ eslint: 9.39.1(jiti@2.6.1)
+ eslint-config-prettier: 10.1.8(eslint@9.39.1(jiti@2.6.1))
+ eslint-plugin-escompat: 3.11.4(eslint@9.39.1(jiti@2.6.1))
+ eslint-plugin-eslint-comments: 3.2.0(eslint@9.39.1(jiti@2.6.1))
+ eslint-plugin-filenames: 1.3.2(eslint@9.39.1(jiti@2.6.1))
+ eslint-plugin-i18n-text: 1.0.1(eslint@9.39.1(jiti@2.6.1))
+ eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.48.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@4.4.4)(eslint@9.39.1(jiti@2.6.1))
+ eslint-plugin-jsx-a11y: 6.10.2(eslint@9.39.1(jiti@2.6.1))
eslint-plugin-no-only-tests: 3.3.0
- eslint-plugin-prettier: 5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.38.0(jiti@2.6.1)))(eslint@9.38.0(jiti@2.6.1))(prettier@3.6.2)
+ eslint-plugin-prettier: 5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1))(prettier@3.6.2)
eslint-rule-documentation: 1.0.23
- globals: 16.4.0
+ globals: 16.5.0
jsx-ast-utils: 3.3.5
prettier: 3.6.2
svg-element-attributes: 1.3.1
typescript: 5.9.3
- typescript-eslint: 8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)
+ typescript-eslint: 8.48.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)
transitivePeerDependencies:
- '@types/eslint'
- eslint-import-resolver-typescript
- eslint-import-resolver-webpack
- supports-color
- eslint-plugin-i18n-text@1.0.1(eslint@9.38.0(jiti@2.6.1)):
+ eslint-plugin-i18n-text@1.0.1(eslint@9.39.1(jiti@2.6.1)):
dependencies:
- eslint: 9.38.0(jiti@2.6.1)
+ eslint: 9.39.1(jiti@2.6.1)
- eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@9.38.0(jiti@2.6.1)):
+ eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.48.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint@9.39.1(jiti@2.6.1)):
dependencies:
- '@typescript-eslint/types': 8.46.2
+ '@typescript-eslint/types': 8.48.0
comment-parser: 1.4.1
debug: 4.4.3
- eslint: 9.38.0(jiti@2.6.1)
+ eslint: 9.39.1(jiti@2.6.1)
eslint-import-context: 0.1.9(unrs-resolver@1.11.1)
is-glob: 4.0.3
- minimatch: 10.0.3
+ minimatch: 10.1.1
semver: 7.7.3
stable-hash-x: 0.2.0
unrs-resolver: 1.11.1
optionalDependencies:
- '@typescript-eslint/utils': 8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)
+ '@typescript-eslint/utils': 8.48.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)
eslint-import-resolver-node: 0.3.9
transitivePeerDependencies:
- supports-color
- eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@4.4.4)(eslint@9.38.0(jiti@2.6.1)):
+ eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.48.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-typescript@4.4.4)(eslint@9.39.1(jiti@2.6.1)):
dependencies:
'@rtsao/scc': 1.1.0
array-includes: '@nolyfill/array-includes@1.0.44'
@@ -6433,9 +6303,9 @@ snapshots:
array.prototype.flatmap: '@nolyfill/array.prototype.flatmap@1.0.44'
debug: 3.2.7
doctrine: 2.1.0
- eslint: 9.38.0(jiti@2.6.1)
+ eslint: 9.39.1(jiti@2.6.1)
eslint-import-resolver-node: 0.3.9
- eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@4.4.4)(eslint@9.38.0(jiti@2.6.1))
+ eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.48.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@4.4.4)(eslint@9.39.1(jiti@2.6.1))
hasown: '@nolyfill/hasown@1.0.44'
is-core-module: '@nolyfill/is-core-module@1.0.39'
is-glob: 4.0.3
@@ -6447,13 +6317,13 @@ snapshots:
string.prototype.trimend: '@nolyfill/string.prototype.trimend@1.0.44'
tsconfig-paths: 3.15.0
optionalDependencies:
- '@typescript-eslint/parser': 8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)
+ '@typescript-eslint/parser': 8.48.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)
transitivePeerDependencies:
- eslint-import-resolver-typescript
- eslint-import-resolver-webpack
- supports-color
- eslint-plugin-jsx-a11y@6.10.2(eslint@9.38.0(jiti@2.6.1)):
+ eslint-plugin-jsx-a11y@6.10.2(eslint@9.39.1(jiti@2.6.1)):
dependencies:
aria-query: 5.3.2
array-includes: '@nolyfill/array-includes@1.0.44'
@@ -6463,7 +6333,7 @@ snapshots:
axobject-query: 4.1.0
damerau-levenshtein: 1.0.8
emoji-regex: 9.2.2
- eslint: 9.38.0(jiti@2.6.1)
+ eslint: 9.39.1(jiti@2.6.1)
hasown: '@nolyfill/hasown@1.0.44'
jsx-ast-utils: 3.3.5
language-tags: 1.0.9
@@ -6474,46 +6344,38 @@ snapshots:
eslint-plugin-no-only-tests@3.3.0: {}
- eslint-plugin-no-use-extend-native@0.7.2(eslint@9.38.0(jiti@2.6.1)):
+ eslint-plugin-playwright@2.3.0(eslint@9.39.1(jiti@2.6.1)):
dependencies:
- eslint: 9.38.0(jiti@2.6.1)
- is-get-set-prop: 2.0.0
- is-js-type: 3.0.0
- is-obj-prop: 2.0.0
- is-proto-prop: 3.0.1
+ eslint: 9.39.1(jiti@2.6.1)
+ globals: 16.5.0
- eslint-plugin-playwright@2.2.2(eslint@9.38.0(jiti@2.6.1)):
+ eslint-plugin-prettier@5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1))(prettier@3.6.2):
dependencies:
- eslint: 9.38.0(jiti@2.6.1)
- globals: 13.24.0
-
- eslint-plugin-prettier@5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.38.0(jiti@2.6.1)))(eslint@9.38.0(jiti@2.6.1))(prettier@3.6.2):
- dependencies:
- eslint: 9.38.0(jiti@2.6.1)
+ eslint: 9.39.1(jiti@2.6.1)
prettier: 3.6.2
prettier-linter-helpers: 1.0.0
synckit: 0.11.11
optionalDependencies:
'@types/eslint': 9.6.1
- eslint-config-prettier: 10.1.8(eslint@9.38.0(jiti@2.6.1))
+ eslint-config-prettier: 10.1.8(eslint@9.39.1(jiti@2.6.1))
- eslint-plugin-regexp@2.10.0(eslint@9.38.0(jiti@2.6.1)):
+ eslint-plugin-regexp@2.10.0(eslint@9.39.1(jiti@2.6.1)):
dependencies:
- '@eslint-community/eslint-utils': 4.9.0(eslint@9.38.0(jiti@2.6.1))
+ '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1(jiti@2.6.1))
'@eslint-community/regexpp': 4.12.2
comment-parser: 1.4.1
- eslint: 9.38.0(jiti@2.6.1)
+ eslint: 9.39.1(jiti@2.6.1)
jsdoc-type-pratt-parser: 4.8.0
refa: 0.12.1
regexp-ast-analysis: 0.7.1
scslre: 0.3.0
- eslint-plugin-sonarjs@3.0.5(eslint@9.38.0(jiti@2.6.1)):
+ eslint-plugin-sonarjs@3.0.5(eslint@9.39.1(jiti@2.6.1)):
dependencies:
'@eslint-community/regexpp': 4.12.1
builtin-modules: 3.3.0
bytes: 3.1.2
- eslint: 9.38.0(jiti@2.6.1)
+ eslint: 9.39.1(jiti@2.6.1)
functional-red-black-tree: 1.0.1
jsx-ast-utils-x: 0.1.0
lodash.merge: 4.6.2
@@ -6522,19 +6384,19 @@ snapshots:
semver: 7.7.2
typescript: 5.9.3
- eslint-plugin-unicorn@62.0.0(eslint@9.38.0(jiti@2.6.1)):
+ eslint-plugin-unicorn@62.0.0(eslint@9.39.1(jiti@2.6.1)):
dependencies:
'@babel/helper-validator-identifier': 7.28.5
- '@eslint-community/eslint-utils': 4.9.0(eslint@9.38.0(jiti@2.6.1))
- '@eslint/plugin-kit': 0.4.0
+ '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1(jiti@2.6.1))
+ '@eslint/plugin-kit': 0.4.1
change-case: 5.4.4
ci-info: 4.3.1
clean-regexp: 1.0.0
- core-js-compat: 3.46.0
- eslint: 9.38.0(jiti@2.6.1)
+ core-js-compat: 3.47.0
+ eslint: 9.39.1(jiti@2.6.1)
esquery: 1.6.0
find-up-simple: 1.0.1
- globals: 16.4.0
+ globals: 16.5.0
indent-string: 5.0.0
is-builtin-module: 5.0.0
jsesc: 3.1.0
@@ -6544,38 +6406,38 @@ snapshots:
semver: 7.7.3
strip-indent: 4.1.1
- eslint-plugin-vue-scoped-css@2.12.0(eslint@9.38.0(jiti@2.6.1))(vue-eslint-parser@10.2.0(eslint@9.38.0(jiti@2.6.1))):
+ eslint-plugin-vue-scoped-css@2.12.0(eslint@9.39.1(jiti@2.6.1))(vue-eslint-parser@10.2.0(eslint@9.39.1(jiti@2.6.1))):
dependencies:
- '@eslint-community/eslint-utils': 4.9.0(eslint@9.38.0(jiti@2.6.1))
- eslint: 9.38.0(jiti@2.6.1)
- eslint-compat-utils: 0.6.5(eslint@9.38.0(jiti@2.6.1))
+ '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1(jiti@2.6.1))
+ eslint: 9.39.1(jiti@2.6.1)
+ eslint-compat-utils: 0.6.5(eslint@9.39.1(jiti@2.6.1))
lodash: 4.17.21
postcss: 8.5.6
postcss-safe-parser: 6.0.0(postcss@8.5.6)
postcss-scss: 4.0.9(postcss@8.5.6)
postcss-selector-parser: 7.1.0
postcss-styl: 0.12.3
- vue-eslint-parser: 10.2.0(eslint@9.38.0(jiti@2.6.1))
+ vue-eslint-parser: 10.2.0(eslint@9.39.1(jiti@2.6.1))
transitivePeerDependencies:
- supports-color
- eslint-plugin-vue@10.5.1(@stylistic/eslint-plugin@5.5.0(eslint@9.38.0(jiti@2.6.1)))(@typescript-eslint/parser@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(vue-eslint-parser@10.2.0(eslint@9.38.0(jiti@2.6.1))):
+ eslint-plugin-vue@10.6.1(@stylistic/eslint-plugin@5.6.1(eslint@9.39.1(jiti@2.6.1)))(@typescript-eslint/parser@8.48.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(vue-eslint-parser@10.2.0(eslint@9.39.1(jiti@2.6.1))):
dependencies:
- '@eslint-community/eslint-utils': 4.9.0(eslint@9.38.0(jiti@2.6.1))
- eslint: 9.38.0(jiti@2.6.1)
+ '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1(jiti@2.6.1))
+ eslint: 9.39.1(jiti@2.6.1)
natural-compare: 1.4.0
nth-check: 2.1.1
- postcss-selector-parser: 6.1.2
+ postcss-selector-parser: 7.1.0
semver: 7.7.3
- vue-eslint-parser: 10.2.0(eslint@9.38.0(jiti@2.6.1))
+ vue-eslint-parser: 10.2.0(eslint@9.39.1(jiti@2.6.1))
xml-name-validator: 4.0.0
optionalDependencies:
- '@stylistic/eslint-plugin': 5.5.0(eslint@9.38.0(jiti@2.6.1))
- '@typescript-eslint/parser': 8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)
+ '@stylistic/eslint-plugin': 5.6.1(eslint@9.39.1(jiti@2.6.1))
+ '@typescript-eslint/parser': 8.48.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)
- eslint-plugin-wc@3.0.2(eslint@9.38.0(jiti@2.6.1)):
+ eslint-plugin-wc@3.0.2(eslint@9.39.1(jiti@2.6.1)):
dependencies:
- eslint: 9.38.0(jiti@2.6.1)
+ eslint: 9.39.1(jiti@2.6.1)
is-valid-element-name: 1.0.0
js-levenshtein-esm: 2.0.0
@@ -6595,16 +6457,16 @@ snapshots:
eslint-visitor-keys@4.2.1: {}
- eslint@9.38.0(jiti@2.6.1):
+ eslint@9.39.1(jiti@2.6.1):
dependencies:
- '@eslint-community/eslint-utils': 4.9.0(eslint@9.38.0(jiti@2.6.1))
+ '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1(jiti@2.6.1))
'@eslint-community/regexpp': 4.12.2
'@eslint/config-array': 0.21.1
- '@eslint/config-helpers': 0.4.1
- '@eslint/core': 0.16.0
+ '@eslint/config-helpers': 0.4.2
+ '@eslint/core': 0.17.0
'@eslint/eslintrc': 3.3.1
- '@eslint/js': 9.38.0
- '@eslint/plugin-kit': 0.4.0
+ '@eslint/js': 9.39.1
+ '@eslint/plugin-kit': 0.4.1
'@humanfs/node': 0.16.7
'@humanwhocodes/module-importer': 1.0.1
'@humanwhocodes/retry': 0.4.3
@@ -6668,7 +6530,7 @@ snapshots:
expect-type@1.2.2: {}
- exsolve@1.0.7: {}
+ exsolve@1.0.8: {}
fast-deep-equal@3.1.3: {}
@@ -6706,9 +6568,9 @@ snapshots:
fflate@0.8.2: {}
- file-entry-cache@10.1.4:
+ file-entry-cache@11.1.1:
dependencies:
- flat-cache: 6.1.18
+ flat-cache: 6.1.19
file-entry-cache@8.0.0:
dependencies:
@@ -6735,21 +6597,16 @@ snapshots:
flatted: 3.3.3
keyv: 4.5.4
- flat-cache@6.1.18:
+ flat-cache@6.1.19:
dependencies:
- cacheable: 2.1.1
+ cacheable: 2.2.0
flatted: 3.3.3
- hookified: 1.12.2
+ hookified: 1.13.0
flat@5.0.2: {}
flatted@3.3.3: {}
- foreground-child@3.3.1:
- dependencies:
- cross-spawn: 7.0.6
- signal-exit: 4.1.0
-
fs.realpath@1.0.0: {}
fsevents@2.3.2:
@@ -6762,8 +6619,6 @@ snapshots:
get-east-asian-width@1.4.0: {}
- get-set-props@0.2.0: {}
-
get-tsconfig@4.13.0:
dependencies:
resolve-pkg-maps: 1.0.0
@@ -6778,24 +6633,6 @@ snapshots:
glob-to-regexp@0.4.1: {}
- glob@10.4.5:
- dependencies:
- foreground-child: 3.3.1
- jackspeak: 3.4.3
- minimatch: 9.0.5
- minipass: 7.1.2
- package-json-from-dist: 1.0.1
- path-scurry: 1.11.1
-
- glob@11.0.3:
- dependencies:
- foreground-child: 3.3.1
- jackspeak: 4.1.1
- minimatch: 10.0.3
- minipass: 7.1.2
- package-json-from-dist: 1.0.1
- path-scurry: 2.0.0
-
glob@7.2.3:
dependencies:
fs.realpath: 1.0.0
@@ -6815,15 +6652,11 @@ snapshots:
kind-of: 6.0.3
which: 1.3.1
- globals@13.24.0:
- dependencies:
- type-fest: 0.20.2
-
globals@14.0.0: {}
globals@15.15.0: {}
- globals@16.4.0: {}
+ globals@16.5.0: {}
globby@11.1.0:
dependencies:
@@ -6844,9 +6677,9 @@ snapshots:
hammerjs@2.0.8: {}
- happy-dom@20.0.8:
+ happy-dom@20.0.10:
dependencies:
- '@types/node': 20.19.23
+ '@types/node': 20.19.25
'@types/whatwg-mimetype': 3.0.2
whatwg-mimetype: 3.0.0
@@ -6854,7 +6687,11 @@ snapshots:
hash-sum@2.0.0: {}
- hookified@1.12.2: {}
+ hashery@1.2.0:
+ dependencies:
+ hookified: 1.13.0
+
+ hookified@1.13.0: {}
html-tags@3.3.1: {}
@@ -6943,28 +6780,14 @@ snapshots:
is-fullwidth-code-point@3.0.0: {}
- is-get-set-prop@2.0.0:
- dependencies:
- get-set-props: 0.2.0
- lowercase-keys: 3.0.0
-
is-glob@4.0.3:
dependencies:
is-extglob: 2.1.1
is-hexadecimal@2.0.1: {}
- is-js-type@3.0.0:
- dependencies:
- js-types: 4.0.0
-
is-number@7.0.0: {}
- is-obj-prop@2.0.0:
- dependencies:
- lowercase-keys: 3.0.0
- obj-props: 2.0.0
-
is-plain-object@2.0.4:
dependencies:
isobject: 3.0.1
@@ -6973,11 +6796,6 @@ snapshots:
is-potential-custom-element-name@1.0.1: {}
- is-proto-prop@3.0.1:
- dependencies:
- lowercase-keys: 3.0.0
- prototype-properties: 5.0.0
-
is-valid-element-name@1.0.0:
dependencies:
is-potential-custom-element-name: 1.0.1
@@ -6986,19 +6804,9 @@ snapshots:
isobject@3.0.1: {}
- jackspeak@3.4.3:
- dependencies:
- '@isaacs/cliui': 8.0.2
- optionalDependencies:
- '@pkgjs/parseargs': 0.11.0
-
- jackspeak@4.1.1:
- dependencies:
- '@isaacs/cliui': 8.0.2
-
jest-worker@27.5.1:
dependencies:
- '@types/node': 24.9.1
+ '@types/node': 24.10.1
merge-stream: 2.0.0
supports-color: 8.1.1
@@ -7014,9 +6822,7 @@ snapshots:
js-tokens@9.0.1: {}
- js-types@4.0.0: {}
-
- js-yaml@4.1.0:
+ js-yaml@4.1.1:
dependencies:
argparse: 2.0.1
@@ -7063,7 +6869,7 @@ snapshots:
dependencies:
json-buffer: 3.0.1
- keyv@5.5.3:
+ keyv@5.5.4:
dependencies:
'@keyv/serialize': 1.1.1
@@ -7150,12 +6956,6 @@ snapshots:
lodash@4.17.21: {}
- lowercase-keys@3.0.0: {}
-
- lru-cache@10.4.3: {}
-
- lru-cache@11.2.2: {}
-
magic-string@0.30.21:
dependencies:
'@jridgewell/sourcemap-codec': 1.5.5
@@ -7169,23 +6969,24 @@ snapshots:
punycode.js: 2.3.1
uc.micro: 2.1.0
- markdownlint-cli@0.45.0:
+ markdownlint-cli@0.46.0:
dependencies:
- commander: 13.1.0
- glob: 11.0.3
+ commander: 14.0.2
+ deep-extend: 0.6.0
ignore: 7.0.5
- js-yaml: 4.1.0
+ js-yaml: 4.1.1
jsonc-parser: 3.3.1
jsonpointer: 5.0.1
markdown-it: 14.1.0
- markdownlint: 0.38.0
- minimatch: 10.0.3
+ markdownlint: 0.39.0
+ minimatch: 10.1.1
run-con: 1.3.2
- smol-toml: 1.3.4
+ smol-toml: 1.5.2
+ tinyglobby: 0.2.15
transitivePeerDependencies:
- supports-color
- markdownlint@0.38.0:
+ markdownlint@0.39.0:
dependencies:
micromark: 4.0.2
micromark-core-commonmark: 2.0.3
@@ -7200,11 +7001,11 @@ snapshots:
marked@14.0.0: {}
- marked@16.4.1: {}
+ marked@16.4.2: {}
marked@4.3.0: {}
- material-icon-theme@5.28.0:
+ material-icon-theme@5.29.0:
dependencies:
chroma-js: 3.1.2
events: 3.3.0
@@ -7237,12 +7038,12 @@ snapshots:
d3: 7.9.0
d3-sankey: 0.12.3
dagre-d3-es: 7.0.13
- dayjs: 1.11.18
+ dayjs: 1.11.19
dompurify: 3.3.0
katex: 0.16.25
khroma: 2.1.0
lodash-es: 4.17.21
- marked: 16.4.1
+ marked: 16.4.2
roughjs: 4.6.6
stylis: 4.3.6
ts-dedent: 2.2.0
@@ -7433,13 +7234,13 @@ snapshots:
dependencies:
mime-db: 1.52.0
- mini-css-extract-plugin@2.9.4(webpack@5.102.1):
+ mini-css-extract-plugin@2.9.4(webpack@5.103.0):
dependencies:
schema-utils: 4.3.3
tapable: 2.3.0
- webpack: 5.102.1(webpack-cli@6.0.1)
+ webpack: 5.103.0(webpack-cli@6.0.1)
- minimatch@10.0.3:
+ minimatch@10.1.1:
dependencies:
'@isaacs/brace-expansion': 5.0.0
@@ -7453,8 +7254,6 @@ snapshots:
minimist@1.2.8: {}
- minipass@7.1.2: {}
-
mlly@1.8.0:
dependencies:
acorn: 8.15.0
@@ -7462,15 +7261,15 @@ snapshots:
pkg-types: 1.3.1
ufo: 1.6.1
- monaco-editor-webpack-plugin@7.1.1(monaco-editor@0.54.0)(webpack@5.102.1):
+ monaco-editor-webpack-plugin@7.1.1(monaco-editor@0.55.1)(webpack@5.103.0):
dependencies:
loader-utils: 2.0.4
- monaco-editor: 0.54.0
- webpack: 5.102.1(webpack-cli@6.0.1)
+ monaco-editor: 0.55.1
+ webpack: 5.103.0(webpack-cli@6.0.1)
- monaco-editor@0.54.0:
+ monaco-editor@0.55.1:
dependencies:
- dompurify: 3.1.7
+ dompurify: 3.2.7
marked: 14.0.0
moo@0.5.2: {}
@@ -7503,7 +7302,7 @@ snapshots:
dependencies:
whatwg-url: 5.0.0
- node-releases@2.0.26: {}
+ node-releases@2.0.27: {}
nolyfill@1.0.44: {}
@@ -7513,12 +7312,12 @@ snapshots:
dependencies:
boolbase: 1.0.0
- obj-props@2.0.0: {}
-
object-assign@4.1.1: {}
object-hash@3.0.0: {}
+ obug@2.1.1: {}
+
once@1.4.0:
dependencies:
wrappy: 1.0.2
@@ -7556,8 +7355,6 @@ snapshots:
p-try@2.2.0: {}
- package-json-from-dist@1.0.1: {}
-
package-manager-detector@1.5.0: {}
parent-module@1.0.1:
@@ -7593,16 +7390,6 @@ snapshots:
path-parse@1.0.7: {}
- path-scurry@1.11.1:
- dependencies:
- lru-cache: 10.4.3
- minipass: 7.1.2
-
- path-scurry@2.0.0:
- dependencies:
- lru-cache: 11.2.2
- minipass: 7.1.2
-
path-type@4.0.0: {}
pathe@2.0.3: {}
@@ -7634,14 +7421,14 @@ snapshots:
pkg-types@2.3.0:
dependencies:
confbox: 0.2.2
- exsolve: 1.0.7
+ exsolve: 1.0.8
pathe: 2.0.3
- playwright-core@1.56.1: {}
+ playwright-core@1.57.0: {}
- playwright@1.56.1:
+ playwright@1.57.0:
dependencies:
- playwright-core: 1.56.1
+ playwright-core: 1.57.0
optionalDependencies:
fsevents: 2.3.2
@@ -7680,14 +7467,14 @@ snapshots:
optionalDependencies:
postcss: 8.5.6
- postcss-loader@8.2.0(postcss@8.5.6)(typescript@5.9.3)(webpack@5.102.1):
+ postcss-loader@8.2.0(postcss@8.5.6)(typescript@5.9.3)(webpack@5.103.0):
dependencies:
cosmiconfig: 9.0.0(typescript@5.9.3)
jiti: 2.6.1
postcss: 8.5.6
semver: 7.7.3
optionalDependencies:
- webpack: 5.102.1(webpack-cli@6.0.1)
+ webpack: 5.103.0(webpack-cli@6.0.1)
transitivePeerDependencies:
- typescript
@@ -7767,15 +7554,13 @@ snapshots:
prettier@3.6.2: {}
- prototype-properties@5.0.0: {}
-
punycode.js@2.3.1: {}
punycode@2.3.1: {}
- qified@0.5.1:
+ qified@0.5.2:
dependencies:
- hookified: 1.12.2
+ hookified: 1.13.0
quansync@0.2.11: {}
@@ -7836,32 +7621,32 @@ snapshots:
robust-predicates@3.0.2: {}
- rollup@4.52.5:
+ rollup@4.53.3:
dependencies:
'@types/estree': 1.0.8
optionalDependencies:
- '@rollup/rollup-android-arm-eabi': 4.52.5
- '@rollup/rollup-android-arm64': 4.52.5
- '@rollup/rollup-darwin-arm64': 4.52.5
- '@rollup/rollup-darwin-x64': 4.52.5
- '@rollup/rollup-freebsd-arm64': 4.52.5
- '@rollup/rollup-freebsd-x64': 4.52.5
- '@rollup/rollup-linux-arm-gnueabihf': 4.52.5
- '@rollup/rollup-linux-arm-musleabihf': 4.52.5
- '@rollup/rollup-linux-arm64-gnu': 4.52.5
- '@rollup/rollup-linux-arm64-musl': 4.52.5
- '@rollup/rollup-linux-loong64-gnu': 4.52.5
- '@rollup/rollup-linux-ppc64-gnu': 4.52.5
- '@rollup/rollup-linux-riscv64-gnu': 4.52.5
- '@rollup/rollup-linux-riscv64-musl': 4.52.5
- '@rollup/rollup-linux-s390x-gnu': 4.52.5
- '@rollup/rollup-linux-x64-gnu': 4.52.5
- '@rollup/rollup-linux-x64-musl': 4.52.5
- '@rollup/rollup-openharmony-arm64': 4.52.5
- '@rollup/rollup-win32-arm64-msvc': 4.52.5
- '@rollup/rollup-win32-ia32-msvc': 4.52.5
- '@rollup/rollup-win32-x64-gnu': 4.52.5
- '@rollup/rollup-win32-x64-msvc': 4.52.5
+ '@rollup/rollup-android-arm-eabi': 4.53.3
+ '@rollup/rollup-android-arm64': 4.53.3
+ '@rollup/rollup-darwin-arm64': 4.53.3
+ '@rollup/rollup-darwin-x64': 4.53.3
+ '@rollup/rollup-freebsd-arm64': 4.53.3
+ '@rollup/rollup-freebsd-x64': 4.53.3
+ '@rollup/rollup-linux-arm-gnueabihf': 4.53.3
+ '@rollup/rollup-linux-arm-musleabihf': 4.53.3
+ '@rollup/rollup-linux-arm64-gnu': 4.53.3
+ '@rollup/rollup-linux-arm64-musl': 4.53.3
+ '@rollup/rollup-linux-loong64-gnu': 4.53.3
+ '@rollup/rollup-linux-ppc64-gnu': 4.53.3
+ '@rollup/rollup-linux-riscv64-gnu': 4.53.3
+ '@rollup/rollup-linux-riscv64-musl': 4.53.3
+ '@rollup/rollup-linux-s390x-gnu': 4.53.3
+ '@rollup/rollup-linux-x64-gnu': 4.53.3
+ '@rollup/rollup-linux-x64-musl': 4.53.3
+ '@rollup/rollup-openharmony-arm64': 4.53.3
+ '@rollup/rollup-win32-arm64-msvc': 4.53.3
+ '@rollup/rollup-win32-ia32-msvc': 4.53.3
+ '@rollup/rollup-win32-x64-gnu': 4.53.3
+ '@rollup/rollup-win32-x64-msvc': 4.53.3
fsevents: 2.3.3
roughjs@4.6.6:
@@ -7886,7 +7671,7 @@ snapshots:
sax@1.2.4: {}
- sax@1.4.1: {}
+ sax@1.4.3: {}
schema-utils@4.3.3:
dependencies:
@@ -7939,11 +7724,11 @@ snapshots:
astral-regex: 2.0.0
is-fullwidth-code-point: 3.0.0
- smol-toml@1.3.4: {}
+ smol-toml@1.5.2: {}
solid-js@1.9.10:
dependencies:
- csstype: 3.1.3
+ csstype: 3.2.3
seroval: 1.3.2
seroval-plugins: 1.3.3(seroval@1.3.2)
@@ -8016,12 +7801,6 @@ snapshots:
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.2
-
string-width@7.2.0:
dependencies:
emoji-regex: 10.6.0
@@ -8044,25 +7823,25 @@ snapshots:
style-search@0.1.0: {}
- stylelint-config-recommended@17.0.0(stylelint@16.25.0(typescript@5.9.3)):
+ stylelint-config-recommended@17.0.0(stylelint@16.26.0(typescript@5.9.3)):
dependencies:
- stylelint: 16.25.0(typescript@5.9.3)
+ stylelint: 16.26.0(typescript@5.9.3)
- stylelint-declaration-block-no-ignored-properties@2.8.0(stylelint@16.25.0(typescript@5.9.3)):
+ stylelint-declaration-block-no-ignored-properties@2.8.0(stylelint@16.26.0(typescript@5.9.3)):
dependencies:
- stylelint: 16.25.0(typescript@5.9.3)
+ stylelint: 16.26.0(typescript@5.9.3)
- stylelint-declaration-strict-value@1.10.11(stylelint@16.25.0(typescript@5.9.3)):
+ stylelint-declaration-strict-value@1.10.11(stylelint@16.26.0(typescript@5.9.3)):
dependencies:
- stylelint: 16.25.0(typescript@5.9.3)
+ stylelint: 16.26.0(typescript@5.9.3)
- stylelint-value-no-unknown-custom-properties@6.0.1(stylelint@16.25.0(typescript@5.9.3)):
+ stylelint-value-no-unknown-custom-properties@6.0.1(stylelint@16.26.0(typescript@5.9.3)):
dependencies:
postcss-value-parser: 4.2.0
resolve: 1.22.11
- stylelint: 16.25.0(typescript@5.9.3)
+ stylelint: 16.26.0(typescript@5.9.3)
- stylelint@16.25.0(typescript@5.9.3):
+ stylelint@16.26.0(typescript@5.9.3):
dependencies:
'@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4)
'@csstools/css-tokenizer': 3.0.4
@@ -8077,7 +7856,7 @@ snapshots:
debug: 4.4.3
fast-glob: 3.3.3
fastest-levenshtein: 1.0.16
- file-entry-cache: 10.1.4
+ file-entry-cache: 11.1.1
global-modules: 2.0.0
globby: 11.1.0
globjoin: 0.1.4
@@ -8119,14 +7898,14 @@ snapshots:
transitivePeerDependencies:
- supports-color
- sucrase@3.35.0:
+ sucrase@3.35.1:
dependencies:
'@jridgewell/gen-mapping': 0.3.13
commander: 4.1.1
- glob: 10.4.5
lines-and-columns: 1.2.4
mz: 2.7.0
pirates: 4.0.7
+ tinyglobby: 0.2.15
ts-interface-checker: 0.1.13
superstruct@0.10.13: {}
@@ -8158,14 +7937,14 @@ snapshots:
css-what: 6.2.2
csso: 5.0.5
picocolors: 1.1.1
- sax: 1.4.1
+ sax: 1.4.3
svgson@5.3.1:
dependencies:
deep-rename-keys: 0.2.1
xml-reader: 2.4.3
- swagger-ui-dist@5.30.0:
+ swagger-ui-dist@5.30.3:
dependencies:
'@scarf/scarf': 1.4.0
@@ -8211,22 +7990,22 @@ snapshots:
postcss-nested: 6.2.0(postcss@8.5.6)
postcss-selector-parser: 6.1.2
resolve: 1.22.11
- sucrase: 3.35.0
+ sucrase: 3.35.1
transitivePeerDependencies:
- ts-node
tapable@2.3.0: {}
- terser-webpack-plugin@5.3.14(webpack@5.102.1):
+ terser-webpack-plugin@5.3.14(webpack@5.103.0):
dependencies:
'@jridgewell/trace-mapping': 0.3.31
jest-worker: 27.5.1
schema-utils: 4.3.3
serialize-javascript: 6.0.2
- terser: 5.44.0
- webpack: 5.102.1(webpack-cli@6.0.1)
+ terser: 5.44.1
+ webpack: 5.103.0(webpack-cli@6.0.1)
- terser@5.44.0:
+ terser@5.44.1:
dependencies:
'@jridgewell/source-map': 0.3.11
acorn: 8.15.0
@@ -8251,7 +8030,7 @@ snapshots:
tinyexec@0.3.2: {}
- tinyexec@1.0.1: {}
+ tinyexec@1.0.2: {}
tinyglobby@0.2.15:
dependencies:
@@ -8296,15 +8075,13 @@ snapshots:
dependencies:
prelude-ls: 1.2.1
- type-fest@0.20.2: {}
-
- typescript-eslint@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3):
+ typescript-eslint@8.48.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3):
dependencies:
- '@typescript-eslint/eslint-plugin': 8.46.2(@typescript-eslint/parser@8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)
- '@typescript-eslint/parser': 8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)
- '@typescript-eslint/typescript-estree': 8.46.2(typescript@5.9.3)
- '@typescript-eslint/utils': 8.46.2(eslint@9.38.0(jiti@2.6.1))(typescript@5.9.3)
- eslint: 9.38.0(jiti@2.6.1)
+ '@typescript-eslint/eslint-plugin': 8.48.0(@typescript-eslint/parser@8.48.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)
+ '@typescript-eslint/parser': 8.48.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)
+ '@typescript-eslint/typescript-estree': 8.48.0(typescript@5.9.3)
+ '@typescript-eslint/utils': 8.48.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)
+ eslint: 9.39.1(jiti@2.6.1)
typescript: 5.9.3
transitivePeerDependencies:
- supports-color
@@ -8347,13 +8124,13 @@ snapshots:
'@unrs/resolver-binding-win32-ia32-msvc': 1.11.1
'@unrs/resolver-binding-win32-x64-msvc': 1.11.1
- update-browserslist-db@1.1.4(browserslist@4.27.0):
+ update-browserslist-db@1.1.4(browserslist@4.28.0):
dependencies:
- browserslist: 4.27.0
+ browserslist: 4.28.0
escalade: 3.2.0
picocolors: 1.1.1
- updates@16.9.1: {}
+ updates@16.9.2: {}
uri-js@4.4.1:
dependencies:
@@ -8365,37 +8142,37 @@ snapshots:
vanilla-colorful@0.7.2: {}
- vite-string-plugin@1.4.6: {}
+ vite-string-plugin@1.4.9: {}
- vite@7.1.12(@types/node@24.9.1)(jiti@2.6.1)(stylus@0.57.0)(terser@5.44.0)(yaml@2.8.1):
+ vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(stylus@0.57.0)(terser@5.44.1)(yaml@2.8.1):
dependencies:
- esbuild: 0.25.11
+ esbuild: 0.25.12
fdir: 6.5.0(picomatch@4.0.3)
picomatch: 4.0.3
postcss: 8.5.6
- rollup: 4.52.5
+ rollup: 4.53.3
tinyglobby: 0.2.15
optionalDependencies:
- '@types/node': 24.9.1
+ '@types/node': 24.10.1
fsevents: 2.3.3
jiti: 2.6.1
stylus: 0.57.0
- terser: 5.44.0
+ terser: 5.44.1
yaml: 2.8.1
- vitest@4.0.4(@types/debug@4.1.12)(@types/node@24.9.1)(happy-dom@20.0.8)(jiti@2.6.1)(stylus@0.57.0)(terser@5.44.0)(yaml@2.8.1):
+ vitest@4.0.14(@types/node@24.10.1)(happy-dom@20.0.10)(jiti@2.6.1)(stylus@0.57.0)(terser@5.44.1)(yaml@2.8.1):
dependencies:
- '@vitest/expect': 4.0.4
- '@vitest/mocker': 4.0.4(vite@7.1.12(@types/node@24.9.1)(jiti@2.6.1)(stylus@0.57.0)(terser@5.44.0)(yaml@2.8.1))
- '@vitest/pretty-format': 4.0.4
- '@vitest/runner': 4.0.4
- '@vitest/snapshot': 4.0.4
- '@vitest/spy': 4.0.4
- '@vitest/utils': 4.0.4
- debug: 4.4.3
+ '@vitest/expect': 4.0.14
+ '@vitest/mocker': 4.0.14(vite@7.2.4(@types/node@24.10.1)(jiti@2.6.1)(stylus@0.57.0)(terser@5.44.1)(yaml@2.8.1))
+ '@vitest/pretty-format': 4.0.14
+ '@vitest/runner': 4.0.14
+ '@vitest/snapshot': 4.0.14
+ '@vitest/spy': 4.0.14
+ '@vitest/utils': 4.0.14
es-module-lexer: 1.7.0
expect-type: 1.2.2
magic-string: 0.30.21
+ obug: 2.1.1
pathe: 2.0.3
picomatch: 4.0.3
std-env: 3.10.0
@@ -8403,12 +8180,11 @@ snapshots:
tinyexec: 0.3.2
tinyglobby: 0.2.15
tinyrainbow: 3.0.3
- vite: 7.1.12(@types/node@24.9.1)(jiti@2.6.1)(stylus@0.57.0)(terser@5.44.0)(yaml@2.8.1)
+ vite: 7.2.4(@types/node@24.10.1)(jiti@2.6.1)(stylus@0.57.0)(terser@5.44.1)(yaml@2.8.1)
why-is-node-running: 2.3.0
optionalDependencies:
- '@types/debug': 4.1.12
- '@types/node': 24.9.1
- happy-dom: 20.0.8
+ '@types/node': 24.10.1
+ happy-dom: 20.0.10
transitivePeerDependencies:
- jiti
- less
@@ -8418,7 +8194,6 @@ snapshots:
- sass-embedded
- stylus
- sugarss
- - supports-color
- terser
- tsx
- yaml
@@ -8444,19 +8219,19 @@ snapshots:
vue-bar-graph@2.2.0(typescript@5.9.3):
dependencies:
- vue: 3.5.22(typescript@5.9.3)
+ vue: 3.5.25(typescript@5.9.3)
transitivePeerDependencies:
- typescript
- vue-chartjs@5.3.2(chart.js@4.5.1)(vue@3.5.22(typescript@5.9.3)):
+ vue-chartjs@5.3.3(chart.js@4.5.1)(vue@3.5.25(typescript@5.9.3)):
dependencies:
chart.js: 4.5.1
- vue: 3.5.22(typescript@5.9.3)
+ vue: 3.5.25(typescript@5.9.3)
- vue-eslint-parser@10.2.0(eslint@9.38.0(jiti@2.6.1)):
+ vue-eslint-parser@10.2.0(eslint@9.39.1(jiti@2.6.1)):
dependencies:
debug: 4.4.3
- eslint: 9.38.0(jiti@2.6.1)
+ eslint: 9.39.1(jiti@2.6.1)
eslint-scope: 8.4.0
eslint-visitor-keys: 4.2.1
espree: 10.4.0
@@ -8465,28 +8240,28 @@ snapshots:
transitivePeerDependencies:
- supports-color
- vue-loader@17.4.2(vue@3.5.22(typescript@5.9.3))(webpack@5.102.1):
+ vue-loader@17.4.2(vue@3.5.25(typescript@5.9.3))(webpack@5.103.0):
dependencies:
chalk: 4.1.2
hash-sum: 2.0.0
watchpack: 2.4.4
- webpack: 5.102.1(webpack-cli@6.0.1)
+ webpack: 5.103.0(webpack-cli@6.0.1)
optionalDependencies:
- vue: 3.5.22(typescript@5.9.3)
+ vue: 3.5.25(typescript@5.9.3)
- vue-tsc@3.1.2(typescript@5.9.3):
+ vue-tsc@3.1.5(typescript@5.9.3):
dependencies:
'@volar/typescript': 2.4.23
- '@vue/language-core': 3.1.2(typescript@5.9.3)
+ '@vue/language-core': 3.1.5(typescript@5.9.3)
typescript: 5.9.3
- vue@3.5.22(typescript@5.9.3):
+ vue@3.5.25(typescript@5.9.3):
dependencies:
- '@vue/compiler-dom': 3.5.22
- '@vue/compiler-sfc': 3.5.22
- '@vue/runtime-dom': 3.5.22
- '@vue/server-renderer': 3.5.22(vue@3.5.22(typescript@5.9.3))
- '@vue/shared': 3.5.22
+ '@vue/compiler-dom': 3.5.25
+ '@vue/compiler-sfc': 3.5.25
+ '@vue/runtime-dom': 3.5.25
+ '@vue/server-renderer': 3.5.25(vue@3.5.25(typescript@5.9.3))
+ '@vue/shared': 3.5.25
optionalDependencies:
typescript: 5.9.3
@@ -8497,21 +8272,21 @@ snapshots:
webidl-conversions@3.0.1: {}
- webpack-cli@6.0.1(webpack@5.102.1):
+ webpack-cli@6.0.1(webpack@5.103.0):
dependencies:
'@discoveryjs/json-ext': 0.6.3
- '@webpack-cli/configtest': 3.0.1(webpack-cli@6.0.1)(webpack@5.102.1)
- '@webpack-cli/info': 3.0.1(webpack-cli@6.0.1)(webpack@5.102.1)
- '@webpack-cli/serve': 3.0.1(webpack-cli@6.0.1)(webpack@5.102.1)
+ '@webpack-cli/configtest': 3.0.1(webpack-cli@6.0.1)(webpack@5.103.0)
+ '@webpack-cli/info': 3.0.1(webpack-cli@6.0.1)(webpack@5.103.0)
+ '@webpack-cli/serve': 3.0.1(webpack-cli@6.0.1)(webpack@5.103.0)
colorette: 2.0.20
commander: 12.1.0
cross-spawn: 7.0.6
- envinfo: 7.19.0
+ envinfo: 7.20.0
fastest-levenshtein: 1.0.16
import-local: 3.2.0
interpret: 3.1.1
rechoir: 0.8.0
- webpack: 5.102.1(webpack-cli@6.0.1)
+ webpack: 5.103.0(webpack-cli@6.0.1)
webpack-merge: 6.0.1
webpack-merge@6.0.1:
@@ -8527,7 +8302,7 @@ snapshots:
webpack-sources@3.3.3: {}
- webpack@5.102.1(webpack-cli@6.0.1):
+ webpack@5.103.0(webpack-cli@6.0.1):
dependencies:
'@types/eslint-scope': 3.7.7
'@types/estree': 1.0.8
@@ -8537,7 +8312,7 @@ snapshots:
'@webassemblyjs/wasm-parser': 1.14.1
acorn: 8.15.0
acorn-import-phases: 1.0.4(acorn@8.15.0)
- browserslist: 4.27.0
+ browserslist: 4.28.0
chrome-trace-event: 1.0.4
enhanced-resolve: 5.18.3
es-module-lexer: 1.7.0
@@ -8551,11 +8326,11 @@ snapshots:
neo-async: 2.6.2
schema-utils: 4.3.3
tapable: 2.3.0
- terser-webpack-plugin: 5.3.14(webpack@5.102.1)
+ terser-webpack-plugin: 5.3.14(webpack@5.103.0)
watchpack: 2.4.4
webpack-sources: 3.3.3
optionalDependencies:
- webpack-cli: 6.0.1(webpack@5.102.1)
+ webpack-cli: 6.0.1(webpack@5.103.0)
transitivePeerDependencies:
- '@swc/core'
- esbuild
@@ -8591,18 +8366,6 @@ snapshots:
string-width: 4.2.3
strip-ansi: 6.0.1
- 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.3
- string-width: 5.1.2
- strip-ansi: 7.1.2
-
wrap-ansi@9.0.2:
dependencies:
ansi-styles: 6.2.3
diff --git a/public/assets/img/svg/octicon-boolean-off.svg b/public/assets/img/svg/octicon-boolean-off.svg
new file mode 100644
index 0000000000..9dd9cc51e4
--- /dev/null
+++ b/public/assets/img/svg/octicon-boolean-off.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/assets/img/svg/octicon-boolean-on.svg b/public/assets/img/svg/octicon-boolean-on.svg
new file mode 100644
index 0000000000..c85a30f87a
--- /dev/null
+++ b/public/assets/img/svg/octicon-boolean-on.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/assets/img/svg/octicon-compose.svg b/public/assets/img/svg/octicon-compose.svg
new file mode 100644
index 0000000000..7bcecef394
--- /dev/null
+++ b/public/assets/img/svg/octicon-compose.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/assets/img/svg/octicon-crosshairs.svg b/public/assets/img/svg/octicon-crosshairs.svg
new file mode 100644
index 0000000000..1fdd94d252
--- /dev/null
+++ b/public/assets/img/svg/octicon-crosshairs.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/assets/img/svg/octicon-dice.svg b/public/assets/img/svg/octicon-dice.svg
new file mode 100644
index 0000000000..af1531cb90
--- /dev/null
+++ b/public/assets/img/svg/octicon-dice.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/assets/img/svg/octicon-exclamation.svg b/public/assets/img/svg/octicon-exclamation.svg
new file mode 100644
index 0000000000..30c1791b59
--- /dev/null
+++ b/public/assets/img/svg/octicon-exclamation.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/assets/img/svg/octicon-file-check.svg b/public/assets/img/svg/octicon-file-check.svg
new file mode 100644
index 0000000000..28cee87069
--- /dev/null
+++ b/public/assets/img/svg/octicon-file-check.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/assets/img/svg/octicon-flowchart.svg b/public/assets/img/svg/octicon-flowchart.svg
new file mode 100644
index 0000000000..47aec70de1
--- /dev/null
+++ b/public/assets/img/svg/octicon-flowchart.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/assets/img/svg/octicon-focus-center.svg b/public/assets/img/svg/octicon-focus-center.svg
new file mode 100644
index 0000000000..e6c2e2fb52
--- /dev/null
+++ b/public/assets/img/svg/octicon-focus-center.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/assets/img/svg/octicon-git-branch-check.svg b/public/assets/img/svg/octicon-git-branch-check.svg
new file mode 100644
index 0000000000..3b9d836776
--- /dev/null
+++ b/public/assets/img/svg/octicon-git-branch-check.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/assets/img/svg/octicon-graph-bar-horizontal.svg b/public/assets/img/svg/octicon-graph-bar-horizontal.svg
new file mode 100644
index 0000000000..e910f3ff93
--- /dev/null
+++ b/public/assets/img/svg/octicon-graph-bar-horizontal.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/assets/img/svg/octicon-graph-bar-vertical.svg b/public/assets/img/svg/octicon-graph-bar-vertical.svg
new file mode 100644
index 0000000000..2761cde321
--- /dev/null
+++ b/public/assets/img/svg/octicon-graph-bar-vertical.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/assets/img/svg/octicon-inbox-fill.svg b/public/assets/img/svg/octicon-inbox-fill.svg
new file mode 100644
index 0000000000..25052b5b8d
--- /dev/null
+++ b/public/assets/img/svg/octicon-inbox-fill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/assets/img/svg/octicon-node.svg b/public/assets/img/svg/octicon-node.svg
new file mode 100644
index 0000000000..c31eefb9a4
--- /dev/null
+++ b/public/assets/img/svg/octicon-node.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/assets/img/svg/octicon-pencil-ai.svg b/public/assets/img/svg/octicon-pencil-ai.svg
new file mode 100644
index 0000000000..3c4587af84
--- /dev/null
+++ b/public/assets/img/svg/octicon-pencil-ai.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/assets/img/svg/octicon-smiley-frown.svg b/public/assets/img/svg/octicon-smiley-frown.svg
new file mode 100644
index 0000000000..40ad10be88
--- /dev/null
+++ b/public/assets/img/svg/octicon-smiley-frown.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/assets/img/svg/octicon-smiley-frustrated.svg b/public/assets/img/svg/octicon-smiley-frustrated.svg
new file mode 100644
index 0000000000..0dc5cddbb7
--- /dev/null
+++ b/public/assets/img/svg/octicon-smiley-frustrated.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/assets/img/svg/octicon-smiley-grin.svg b/public/assets/img/svg/octicon-smiley-grin.svg
new file mode 100644
index 0000000000..a44f35323c
--- /dev/null
+++ b/public/assets/img/svg/octicon-smiley-grin.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/assets/img/svg/octicon-smiley-neutral.svg b/public/assets/img/svg/octicon-smiley-neutral.svg
new file mode 100644
index 0000000000..e08375d2d5
--- /dev/null
+++ b/public/assets/img/svg/octicon-smiley-neutral.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/assets/img/svg/octicon-spacing-large.svg b/public/assets/img/svg/octicon-spacing-large.svg
new file mode 100644
index 0000000000..6504b7a5af
--- /dev/null
+++ b/public/assets/img/svg/octicon-spacing-large.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/assets/img/svg/octicon-spacing-medium.svg b/public/assets/img/svg/octicon-spacing-medium.svg
new file mode 100644
index 0000000000..29333cf853
--- /dev/null
+++ b/public/assets/img/svg/octicon-spacing-medium.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/assets/img/svg/octicon-spacing-small.svg b/public/assets/img/svg/octicon-spacing-small.svg
new file mode 100644
index 0000000000..493bd94d6f
--- /dev/null
+++ b/public/assets/img/svg/octicon-spacing-small.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/assets/img/svg/octicon-split-view.svg b/public/assets/img/svg/octicon-split-view.svg
new file mode 100644
index 0000000000..0f6e235e67
--- /dev/null
+++ b/public/assets/img/svg/octicon-split-view.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/assets/img/svg/octicon-unwrap.svg b/public/assets/img/svg/octicon-unwrap.svg
new file mode 100644
index 0000000000..bac12cc51d
--- /dev/null
+++ b/public/assets/img/svg/octicon-unwrap.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/public/assets/img/svg/octicon-vscode.svg b/public/assets/img/svg/octicon-vscode.svg
index d226e3a574..04ac8cacd5 100644
--- a/public/assets/img/svg/octicon-vscode.svg
+++ b/public/assets/img/svg/octicon-vscode.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/public/assets/img/svg/octicon-wrap.svg b/public/assets/img/svg/octicon-wrap.svg
new file mode 100644
index 0000000000..13247d799d
--- /dev/null
+++ b/public/assets/img/svg/octicon-wrap.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/routers/api/packages/composer/composer.go b/routers/api/packages/composer/composer.go
index df04f49d2d..8eb66ca244 100644
--- a/routers/api/packages/composer/composer.go
+++ b/routers/api/packages/composer/composer.go
@@ -5,12 +5,10 @@ package composer
import (
"errors"
- "fmt"
"io"
"net/http"
"net/url"
"strconv"
- "strings"
"code.gitea.io/gitea/models/db"
packages_model "code.gitea.io/gitea/models/packages"
@@ -23,8 +21,6 @@ import (
"code.gitea.io/gitea/services/context"
"code.gitea.io/gitea/services/convert"
packages_service "code.gitea.io/gitea/services/packages"
-
- "github.com/hashicorp/go-version"
)
func apiError(ctx *context.Context, status int, obj any) {
@@ -193,7 +189,7 @@ func UploadPackage(ctx *context.Context) {
}
defer buf.Close()
- cp, err := composer_module.ParsePackage(buf, buf.Size())
+ cp, err := composer_module.ParsePackage(buf, ctx.FormTrim("version"))
if err != nil {
if errors.Is(err, util.ErrInvalidArgument) {
apiError(ctx, http.StatusBadRequest, err)
@@ -209,12 +205,9 @@ func UploadPackage(ctx *context.Context) {
}
if cp.Version == "" {
- v, err := version.NewVersion(ctx.FormTrim("version"))
- if err != nil {
- apiError(ctx, http.StatusBadRequest, composer_module.ErrInvalidVersion)
- return
- }
- cp.Version = v.String()
+ // the version should be either set in the "composer.json", or as a query parameter "?version=xxx"
+ apiError(ctx, http.StatusBadRequest, composer_module.ErrInvalidVersion)
+ return
}
_, _, err = packages_service.CreatePackageAndAddFile(
@@ -235,7 +228,7 @@ func UploadPackage(ctx *context.Context) {
},
&packages_service.PackageFileCreationInfo{
PackageFileInfo: packages_service.PackageFileInfo{
- Filename: strings.ToLower(fmt.Sprintf("%s.%s.zip", strings.ReplaceAll(cp.Name, "/", "-"), cp.Version)),
+ Filename: cp.Filename,
},
Creator: ctx.Doer,
Data: buf,
diff --git a/routers/api/packages/container/container.go b/routers/api/packages/container/container.go
index db81dd13c2..7cf1c36375 100644
--- a/routers/api/packages/container/container.go
+++ b/routers/api/packages/container/container.go
@@ -290,8 +290,8 @@ func PostBlobsUploads(ctx *context.Context) {
Creator: ctx.Doer,
},
); err != nil {
- switch err {
- case packages_service.ErrQuotaTotalCount, packages_service.ErrQuotaTypeSize, packages_service.ErrQuotaTotalSize:
+ switch {
+ case errors.Is(err, packages_service.ErrQuotaTotalCount), errors.Is(err, packages_service.ErrQuotaTypeSize), errors.Is(err, packages_service.ErrQuotaTotalSize):
apiError(ctx, http.StatusForbidden, err)
default:
apiError(ctx, http.StatusInternalServerError, err)
@@ -439,8 +439,8 @@ func PutBlobsUpload(ctx *context.Context) {
Creator: ctx.Doer,
},
); err != nil {
- switch err {
- case packages_service.ErrQuotaTotalCount, packages_service.ErrQuotaTypeSize, packages_service.ErrQuotaTotalSize:
+ switch {
+ case errors.Is(err, packages_service.ErrQuotaTotalCount), errors.Is(err, packages_service.ErrQuotaTypeSize), errors.Is(err, packages_service.ErrQuotaTotalSize):
apiError(ctx, http.StatusForbidden, err)
default:
apiError(ctx, http.StatusInternalServerError, err)
@@ -592,13 +592,10 @@ func PutManifest(ctx *context.Context) {
apiErrorDefined(ctx, namedError)
} else if errors.Is(err, container_model.ErrContainerBlobNotExist) {
apiErrorDefined(ctx, errBlobUnknown)
+ } else if errors.Is(err, packages_service.ErrQuotaTotalCount) || errors.Is(err, packages_service.ErrQuotaTypeSize) || errors.Is(err, packages_service.ErrQuotaTotalSize) {
+ apiError(ctx, http.StatusForbidden, err)
} else {
- switch err {
- case packages_service.ErrQuotaTotalCount, packages_service.ErrQuotaTypeSize, packages_service.ErrQuotaTotalSize:
- apiError(ctx, http.StatusForbidden, err)
- default:
- apiError(ctx, http.StatusInternalServerError, err)
- }
+ apiError(ctx, http.StatusInternalServerError, err)
}
return
}
diff --git a/routers/api/packages/container/manifest.go b/routers/api/packages/container/manifest.go
index e408f6ee3b..30d591e60a 100644
--- a/routers/api/packages/container/manifest.go
+++ b/routers/api/packages/container/manifest.go
@@ -82,9 +82,11 @@ type processManifestTxRet struct {
}
func handleCreateManifestResult(ctx context.Context, err error, mci *manifestCreationInfo, contentStore *packages_module.ContentStore, txRet *processManifestTxRet) (string, error) {
- if err != nil && txRet.created && txRet.pb != nil {
- if err := contentStore.Delete(packages_module.BlobHash256Key(txRet.pb.HashSHA256)); err != nil {
- log.Error("Error deleting package blob from content store: %v", err)
+ if err != nil {
+ if txRet.created && txRet.pb != nil {
+ if err := contentStore.Delete(packages_module.BlobHash256Key(txRet.pb.HashSHA256)); err != nil {
+ log.Error("Error deleting package blob from content store: %v", err)
+ }
}
return "", err
}
@@ -198,14 +200,14 @@ func processOciImageIndex(ctx context.Context, mci *manifestCreationInfo, buf *p
if errors.Is(err, container_model.ErrContainerBlobNotExist) {
return errManifestBlobUnknown
}
- return err
+ return fmt.Errorf("GetContainerBlob: %w", err)
}
size, err := packages_model.CalculateFileSize(ctx, &packages_model.PackageFileSearchOptions{
VersionID: pfd.File.VersionID,
})
if err != nil {
- return err
+ return fmt.Errorf("CalculateFileSize: %w", err)
}
metadata.Manifests = append(metadata.Manifests, &container_module.Manifest{
@@ -217,7 +219,7 @@ func processOciImageIndex(ctx context.Context, mci *manifestCreationInfo, buf *p
pv, err := createPackageAndVersion(ctx, mci, metadata)
if err != nil {
- return err
+ return fmt.Errorf("createPackageAndVersion: %w", err)
}
txRet.pv = pv
@@ -240,7 +242,7 @@ func createPackageAndVersion(ctx context.Context, mci *manifestCreationInfo, met
if p, err = packages_model.TryInsertPackage(ctx, p); err != nil {
if !errors.Is(err, packages_model.ErrDuplicatePackage) {
log.Error("Error inserting package: %v", err)
- return nil, err
+ return nil, fmt.Errorf("TryInsertPackage: %w", err)
}
created = false
}
@@ -248,7 +250,7 @@ func createPackageAndVersion(ctx context.Context, mci *manifestCreationInfo, met
if created {
if _, err := packages_model.InsertProperty(ctx, packages_model.PropertyTypePackage, p.ID, container_module.PropertyRepository, strings.ToLower(mci.Owner.LowerName+"/"+mci.Image)); err != nil {
log.Error("Error setting package property: %v", err)
- return nil, err
+ return nil, fmt.Errorf("InsertProperty(PropertyRepository): %w", err)
}
}
@@ -256,7 +258,7 @@ func createPackageAndVersion(ctx context.Context, mci *manifestCreationInfo, met
metadataJSON, err := json.Marshal(metadata)
if err != nil {
- return nil, err
+ return nil, fmt.Errorf("json.Marshal(metadata): %w", err)
}
// "docker buildx imagetools create" multi-arch operations:
@@ -276,43 +278,43 @@ func createPackageAndVersion(ctx context.Context, mci *manifestCreationInfo, met
pv, err := packages_model.GetOrInsertVersion(ctx, _pv)
if err != nil {
if !errors.Is(err, packages_model.ErrDuplicatePackageVersion) {
- log.Error("Error inserting package: %v", err)
- return nil, err
+ log.Error("Error GetOrInsertVersion (first try) package: %v", err)
+ return nil, fmt.Errorf("GetOrInsertVersion: first try: %w", err)
}
if err = packages_service.DeletePackageVersionAndReferences(ctx, pv); err != nil {
- return nil, err
+ return nil, fmt.Errorf("DeletePackageVersionAndReferences: %w", err)
}
// keep download count on overwriting
_pv.DownloadCount = pv.DownloadCount
pv, err = packages_model.GetOrInsertVersion(ctx, _pv)
if err != nil {
if !errors.Is(err, packages_model.ErrDuplicatePackageVersion) {
- log.Error("Error inserting package: %v", err)
- return nil, err
+ log.Error("Error GetOrInsertVersion (second try) package: %v", err)
+ return nil, fmt.Errorf("GetOrInsertVersion: second try: %w", err)
}
}
}
if err := packages_service.CheckCountQuotaExceeded(ctx, mci.Creator, mci.Owner); err != nil {
- return nil, err
+ return nil, fmt.Errorf("CheckCountQuotaExceeded: %w", err)
}
if mci.IsTagged {
if err = packages_model.InsertOrUpdateProperty(ctx, packages_model.PropertyTypeVersion, pv.ID, container_module.PropertyManifestTagged, ""); err != nil {
- return nil, err
+ return nil, fmt.Errorf("InsertOrUpdateProperty(ManifestTagged): %w", err)
}
} else {
if err = packages_model.DeletePropertiesByName(ctx, packages_model.PropertyTypeVersion, pv.ID, container_module.PropertyManifestTagged); err != nil {
- return nil, err
+ return nil, fmt.Errorf("DeletePropertiesByName(ManifestTagged): %w", err)
}
}
if err = packages_model.DeletePropertiesByName(ctx, packages_model.PropertyTypeVersion, pv.ID, container_module.PropertyManifestReference); err != nil {
- return nil, err
+ return nil, fmt.Errorf("DeletePropertiesByName(ManifestReference): %w", err)
}
for _, manifest := range metadata.Manifests {
if _, err = packages_model.InsertProperty(ctx, packages_model.PropertyTypeVersion, pv.ID, container_module.PropertyManifestReference, manifest.Digest); err != nil {
- return nil, err
+ return nil, fmt.Errorf("InsertProperty(ManifestReference): %w", err)
}
}
diff --git a/routers/api/v1/admin/user.go b/routers/api/v1/admin/user.go
index 6afa651448..abc4e52877 100644
--- a/routers/api/v1/admin/user.go
+++ b/routers/api/v1/admin/user.go
@@ -480,7 +480,7 @@ func RenameUser(ctx *context.APIContext) {
newName := web.GetForm(ctx).(*api.RenameUserOption).NewName
// Check if username has been changed
- if err := user_service.RenameUser(ctx, ctx.ContextUser, newName); err != nil {
+ if err := user_service.RenameUser(ctx, ctx.ContextUser, newName, ctx.Doer); err != nil {
if user_model.IsErrUserAlreadyExist(err) || db.IsErrNameReserved(err) || db.IsErrNamePatternNotAllowed(err) || db.IsErrNameCharsNotAllowed(err) {
ctx.APIError(http.StatusUnprocessableEntity, err)
} else {
diff --git a/routers/api/v1/api.go b/routers/api/v1/api.go
index fc266528fe..9bce98ac02 100644
--- a/routers/api/v1/api.go
+++ b/routers/api/v1/api.go
@@ -81,6 +81,7 @@ import (
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/setting"
api "code.gitea.io/gitea/modules/structs"
+ "code.gitea.io/gitea/modules/util"
"code.gitea.io/gitea/modules/web"
"code.gitea.io/gitea/routers/api/v1/activitypub"
"code.gitea.io/gitea/routers/api/v1/admin"
@@ -774,7 +775,9 @@ func apiAuth(authMethod auth.Method) func(*context.APIContext) {
return func(ctx *context.APIContext) {
ar, err := common.AuthShared(ctx.Base, nil, authMethod)
if err != nil {
- ctx.APIError(http.StatusUnauthorized, err)
+ msg, ok := auth.ErrAsUserAuthMessage(err)
+ msg = util.Iif(ok, msg, "invalid username, password or token")
+ ctx.APIError(http.StatusUnauthorized, msg)
return
}
ctx.Doer = ar.Doer
diff --git a/routers/api/v1/org/org.go b/routers/api/v1/org/org.go
index 08e37e8df4..0c108a933c 100644
--- a/routers/api/v1/org/org.go
+++ b/routers/api/v1/org/org.go
@@ -340,7 +340,7 @@ func Rename(ctx *context.APIContext) {
form := web.GetForm(ctx).(*api.RenameOrgOption)
orgUser := ctx.Org.Organization.AsUser()
- if err := user_service.RenameUser(ctx, orgUser, form.NewName); err != nil {
+ if err := user_service.RenameUser(ctx, orgUser, form.NewName, ctx.Doer); err != nil {
if user_model.IsErrUserAlreadyExist(err) || db.IsErrNameReserved(err) || db.IsErrNamePatternNotAllowed(err) || db.IsErrNameCharsNotAllowed(err) {
ctx.APIError(http.StatusUnprocessableEntity, err)
} else {
diff --git a/routers/api/v1/repo/file.go b/routers/api/v1/repo/file.go
index ec34d54d22..27a0827a10 100644
--- a/routers/api/v1/repo/file.go
+++ b/routers/api/v1/repo/file.go
@@ -610,10 +610,6 @@ func handleChangeRepoFilesError(ctx *context.APIContext, err error) {
ctx.APIError(http.StatusUnprocessableEntity, err)
return
}
- if git.IsErrBranchNotExist(err) || files_service.IsErrRepoFileDoesNotExist(err) || git.IsErrNotExist(err) {
- ctx.APIError(http.StatusNotFound, err)
- return
- }
if errors.Is(err, util.ErrNotExist) {
ctx.APIError(http.StatusNotFound, err)
return
diff --git a/routers/api/v1/repo/issue_dependency.go b/routers/api/v1/repo/issue_dependency.go
index 1b58beb7b6..b34e325e5d 100644
--- a/routers/api/v1/repo/issue_dependency.go
+++ b/routers/api/v1/repo/issue_dependency.go
@@ -201,7 +201,7 @@ func CreateIssueDependency(ctx *context.APIContext) {
return
}
- dependencyPerm := getPermissionForRepo(ctx, target.Repo)
+ dependencyPerm := getPermissionForRepo(ctx, dependency.Repo)
if ctx.Written() {
return
}
@@ -262,7 +262,7 @@ func RemoveIssueDependency(ctx *context.APIContext) {
return
}
- dependencyPerm := getPermissionForRepo(ctx, target.Repo)
+ dependencyPerm := getPermissionForRepo(ctx, dependency.Repo)
if ctx.Written() {
return
}
diff --git a/routers/api/v1/repo/release_tags.go b/routers/api/v1/repo/release_tags.go
index b5e7d83b2a..8991e201d8 100644
--- a/routers/api/v1/repo/release_tags.go
+++ b/routers/api/v1/repo/release_tags.go
@@ -7,6 +7,7 @@ import (
"net/http"
repo_model "code.gitea.io/gitea/models/repo"
+ unit_model "code.gitea.io/gitea/models/unit"
"code.gitea.io/gitea/services/context"
"code.gitea.io/gitea/services/convert"
release_service "code.gitea.io/gitea/services/release"
@@ -58,6 +59,13 @@ func GetReleaseByTag(ctx *context.APIContext) {
return
}
+ if release.IsDraft { // only the users with write access can see draft releases
+ if !ctx.IsSigned || !ctx.Repo.CanWrite(unit_model.TypeReleases) {
+ ctx.APIErrorNotFound()
+ return
+ }
+ }
+
if err = release.LoadAttributes(ctx); err != nil {
ctx.APIErrorInternal(err)
return
diff --git a/routers/common/middleware.go b/routers/common/middleware.go
index 07adee18ce..bfa258b976 100644
--- a/routers/common/middleware.go
+++ b/routers/common/middleware.go
@@ -5,6 +5,7 @@ package common
import (
"fmt"
+ "log"
"net/http"
"strings"
@@ -107,7 +108,11 @@ func ForwardedHeadersHandler(limit int, trustedProxies []string) func(h http.Han
return proxy.ForwardedHeaders(opt)
}
-func Sessioner() (func(next http.Handler) http.Handler, error) {
+func MustInitSessioner() func(next http.Handler) http.Handler {
+ // TODO: CHI-SESSION-GOB-REGISTER: chi-session has a design problem: it calls gob.Register for "Set"
+ // But if the server restarts, then the first "Get" will fail to decode the previously stored session data because the structs are not registered yet.
+ // So each package should make sure their structs are registered correctly during startup for session storage.
+
middleware, err := session.Sessioner(session.Options{
Provider: setting.SessionConfig.Provider,
ProviderConfig: setting.SessionConfig.ProviderConfig,
@@ -120,8 +125,7 @@ func Sessioner() (func(next http.Handler) http.Handler, error) {
Domain: setting.SessionConfig.Domain,
})
if err != nil {
- return nil, fmt.Errorf("failed to create session middleware: %w", err)
+ log.Fatalf("common.Sessioner failed: %v", err)
}
-
- return middleware, nil
+ return middleware
}
diff --git a/routers/install/install.go b/routers/install/install.go
index 4a9dabac6f..c5acf968bd 100644
--- a/routers/install/install.go
+++ b/routers/install/install.go
@@ -55,8 +55,8 @@ func getSupportedDbTypeNames() (dbTypeNames []map[string]string) {
return dbTypeNames
}
-// Contexter prepare for rendering installation page
-func Contexter() func(next http.Handler) http.Handler {
+// installContexter prepare for rendering installation page
+func installContexter() func(next http.Handler) http.Handler {
rnd := templates.HTMLRenderer()
dbTypeNames := getSupportedDbTypeNames()
envConfigKeys := setting.CollectEnvConfigKeys()
diff --git a/routers/install/routes.go b/routers/install/routes.go
index d47c1f61ee..0914c921c0 100644
--- a/routers/install/routes.go
+++ b/routers/install/routes.go
@@ -8,7 +8,6 @@ import (
"html"
"net/http"
- "code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/public"
"code.gitea.io/gitea/modules/setting"
"code.gitea.io/gitea/modules/web"
@@ -25,11 +24,8 @@ func Routes() *web.Router {
base.Methods("GET, HEAD", "/assets/*", public.FileHandlerFunc())
r := web.NewRouter()
- if sessionMid, err := common.Sessioner(); err == nil && sessionMid != nil {
- r.Use(sessionMid, Contexter())
- } else {
- log.Fatal("common.Sessioner failed: %v", err)
- }
+ r.Use(common.MustInitSessioner(), installContexter())
+
r.Get("/", Install) // it must be on the root, because the "install.js" use the window.location to replace the "localhost" AppURL
r.Post("/", web.Bind(forms.InstallForm{}), SubmitInstall)
r.Get("/post-install", InstallDone)
diff --git a/routers/web/admin/users.go b/routers/web/admin/users.go
index 1f22d800a9..ed0eecf90a 100644
--- a/routers/web/admin/users.go
+++ b/routers/web/admin/users.go
@@ -345,7 +345,7 @@ func EditUserPost(ctx *context.Context) {
}
if form.UserName != "" {
- if err := user_service.RenameUser(ctx, u, form.UserName); err != nil {
+ if err := user_service.RenameUser(ctx, u, form.UserName, ctx.Doer); err != nil {
switch {
case user_model.IsErrUserIsNotLocal(err):
ctx.Data["Err_UserName"] = true
@@ -409,7 +409,7 @@ func EditUserPost(ctx *context.Context) {
}
if form.Email != "" {
- if err := user_service.AdminAddOrSetPrimaryEmailAddress(ctx, u, form.Email); err != nil {
+ if err := user_service.ReplacePrimaryEmailAddress(ctx, u, form.Email); err != nil {
switch {
case user_model.IsErrEmailCharIsNotSupported(err), user_model.IsErrEmailInvalid(err):
ctx.Data["Err_Email"] = true
diff --git a/routers/web/auth/oauth.go b/routers/web/auth/oauth.go
index f1c155e78f..f7ce5875ca 100644
--- a/routers/web/auth/oauth.go
+++ b/routers/web/auth/oauth.go
@@ -277,8 +277,11 @@ type LinkAccountData struct {
GothUser goth.User
}
+func init() {
+ gob.Register(LinkAccountData{}) // TODO: CHI-SESSION-GOB-REGISTER
+}
+
func oauth2GetLinkAccountData(ctx *context.Context) *LinkAccountData {
- gob.Register(LinkAccountData{})
v, ok := ctx.Session.Get("linkAccountData").(LinkAccountData)
if !ok {
return nil
@@ -287,7 +290,6 @@ func oauth2GetLinkAccountData(ctx *context.Context) *LinkAccountData {
}
func Oauth2SetLinkAccountData(ctx *context.Context, linkAccountData LinkAccountData) error {
- gob.Register(LinkAccountData{})
return updateSession(ctx, nil, map[string]any{
"linkAccountData": linkAccountData,
})
diff --git a/routers/web/org/setting.go b/routers/web/org/setting.go
index fe585b3a00..0e4dab8fb6 100644
--- a/routers/web/org/setting.go
+++ b/routers/web/org/setting.go
@@ -213,7 +213,7 @@ func SettingsRenamePost(ctx *context.Context) {
return
}
- if err := user_service.RenameUser(ctx, ctx.Org.Organization.AsUser(), newOrgName); err != nil {
+ if err := user_service.RenameUser(ctx, ctx.Org.Organization.AsUser(), newOrgName, ctx.Doer); err != nil {
if user_model.IsErrUserAlreadyExist(err) {
ctx.JSONError(ctx.Tr("org.form.name_been_taken", newOrgName))
} else if db.IsErrNameReserved(err) {
diff --git a/routers/web/repo/blame.go b/routers/web/repo/blame.go
index e304633f95..0eebff6aa8 100644
--- a/routers/web/repo/blame.go
+++ b/routers/web/repo/blame.go
@@ -10,7 +10,6 @@ import (
"net/url"
"path"
"strconv"
- "strings"
repo_model "code.gitea.io/gitea/models/repo"
user_model "code.gitea.io/gitea/models/user"
@@ -42,8 +41,8 @@ type blameRow struct {
// RefBlame render blame page
func RefBlame(ctx *context.Context) {
- ctx.Data["PageIsViewCode"] = true
ctx.Data["IsBlame"] = true
+ prepareRepoViewContent(ctx, ctx.Repo.RefTypeNameSubURL())
// Get current entry user currently looking at.
if ctx.Repo.TreePath == "" {
@@ -56,17 +55,6 @@ func RefBlame(ctx *context.Context) {
return
}
- treeNames := strings.Split(ctx.Repo.TreePath, "/")
- var paths []string
- for i := range treeNames {
- paths = append(paths, strings.Join(treeNames[:i+1], "/"))
- }
-
- ctx.Data["Paths"] = paths
- ctx.Data["TreeNames"] = treeNames
- ctx.Data["BranchLink"] = ctx.Repo.RepoLink + "/src/" + ctx.Repo.RefTypeNameSubURL()
- ctx.Data["RawFileLink"] = ctx.Repo.RepoLink + "/raw/" + ctx.Repo.RefTypeNameSubURL() + "/" + util.PathEscapeSegments(ctx.Repo.TreePath)
-
blob := entry.Blob()
fileSize := blob.Size()
ctx.Data["FileSize"] = fileSize
diff --git a/routers/web/repo/editor.go b/routers/web/repo/editor.go
index 8c630cb35f..983249a6d2 100644
--- a/routers/web/repo/editor.go
+++ b/routers/web/repo/editor.go
@@ -41,7 +41,12 @@ const (
editorCommitChoiceNewBranch string = "commit-to-new-branch"
)
-func prepareEditorCommitFormOptions(ctx *context.Context, editorAction string) *context.CommitFormOptions {
+func prepareEditorPage(ctx *context.Context, editorAction string) *context.CommitFormOptions {
+ prepareHomeTreeSideBarSwitch(ctx)
+ return prepareEditorPageFormOptions(ctx, editorAction)
+}
+
+func prepareEditorPageFormOptions(ctx *context.Context, editorAction string) *context.CommitFormOptions {
cleanedTreePath := files_service.CleanGitTreePath(ctx.Repo.TreePath)
if cleanedTreePath != ctx.Repo.TreePath {
redirectTo := fmt.Sprintf("%s/%s/%s/%s", ctx.Repo.RepoLink, editorAction, util.PathEscapeSegments(ctx.Repo.BranchName), util.PathEscapeSegments(cleanedTreePath))
@@ -283,7 +288,7 @@ func EditFile(ctx *context.Context) {
// on the "New File" page, we should add an empty path field to make end users could input a new name
prepareTreePathFieldsAndPaths(ctx, util.Iif(isNewFile, ctx.Repo.TreePath+"/", ctx.Repo.TreePath))
- prepareEditorCommitFormOptions(ctx, editorAction)
+ prepareEditorPage(ctx, editorAction)
if ctx.Written() {
return
}
@@ -376,15 +381,16 @@ func EditFilePost(ctx *context.Context) {
// DeleteFile render delete file page
func DeleteFile(ctx *context.Context) {
- prepareEditorCommitFormOptions(ctx, "_delete")
+ prepareEditorPage(ctx, "_delete")
if ctx.Written() {
return
}
ctx.Data["PageIsDelete"] = true
+ prepareTreePathFieldsAndPaths(ctx, ctx.Repo.TreePath)
ctx.HTML(http.StatusOK, tplDeleteFile)
}
-// DeleteFilePost response for deleting file
+// DeleteFilePost response for deleting file or directory
func DeleteFilePost(ctx *context.Context) {
parsed := prepareEditorCommitSubmittedForm[*forms.DeleteRepoFileForm](ctx)
if ctx.Written() {
@@ -392,17 +398,37 @@ func DeleteFilePost(ctx *context.Context) {
}
treePath := ctx.Repo.TreePath
- _, err := files_service.ChangeRepoFiles(ctx, ctx.Repo.Repository, ctx.Doer, &files_service.ChangeRepoFilesOptions{
+ if treePath == "" {
+ ctx.JSONError("cannot delete root directory") // it should not happen unless someone is trying to be malicious
+ return
+ }
+
+ // Check if the path is a directory
+ entry, err := ctx.Repo.Commit.GetTreeEntryByPath(treePath)
+ if err != nil {
+ ctx.NotFoundOrServerError("GetTreeEntryByPath", git.IsErrNotExist, err)
+ return
+ }
+
+ var commitMessage string
+ if entry.IsDir() {
+ commitMessage = parsed.GetCommitMessage(ctx.Locale.TrString("repo.editor.delete_directory", treePath))
+ } else {
+ commitMessage = parsed.GetCommitMessage(ctx.Locale.TrString("repo.editor.delete", treePath))
+ }
+
+ _, err = files_service.ChangeRepoFiles(ctx, ctx.Repo.Repository, ctx.Doer, &files_service.ChangeRepoFilesOptions{
LastCommitID: parsed.form.LastCommit,
OldBranch: parsed.OldBranchName,
NewBranch: parsed.NewBranchName,
Files: []*files_service.ChangeRepoFile{
{
- Operation: "delete",
- TreePath: treePath,
+ Operation: "delete",
+ TreePath: treePath,
+ DeleteRecursively: true,
},
},
- Message: parsed.GetCommitMessage(ctx.Locale.TrString("repo.editor.delete", treePath)),
+ Message: commitMessage,
Signoff: parsed.form.Signoff,
Author: parsed.GitCommitter,
Committer: parsed.GitCommitter,
@@ -412,7 +438,11 @@ func DeleteFilePost(ctx *context.Context) {
return
}
- ctx.Flash.Success(ctx.Tr("repo.editor.file_delete_success", treePath))
+ if entry.IsDir() {
+ ctx.Flash.Success(ctx.Tr("repo.editor.directory_delete_success", treePath))
+ } else {
+ ctx.Flash.Success(ctx.Tr("repo.editor.file_delete_success", treePath))
+ }
redirectTreePath := getClosestParentWithFiles(ctx.Repo.GitRepo, parsed.NewBranchName, treePath)
redirectForCommitChoice(ctx, parsed, redirectTreePath)
}
@@ -420,7 +450,7 @@ func DeleteFilePost(ctx *context.Context) {
func UploadFile(ctx *context.Context) {
ctx.Data["PageIsUpload"] = true
prepareTreePathFieldsAndPaths(ctx, ctx.Repo.TreePath)
- opts := prepareEditorCommitFormOptions(ctx, "_upload")
+ opts := prepareEditorPage(ctx, "_upload")
if ctx.Written() {
return
}
diff --git a/routers/web/repo/editor_apply_patch.go b/routers/web/repo/editor_apply_patch.go
index aad7b4129c..357c6f3a21 100644
--- a/routers/web/repo/editor_apply_patch.go
+++ b/routers/web/repo/editor_apply_patch.go
@@ -14,7 +14,7 @@ import (
)
func NewDiffPatch(ctx *context.Context) {
- prepareEditorCommitFormOptions(ctx, "_diffpatch")
+ prepareEditorPage(ctx, "_diffpatch")
if ctx.Written() {
return
}
diff --git a/routers/web/repo/editor_cherry_pick.go b/routers/web/repo/editor_cherry_pick.go
index 099814a9fa..32e3c58e87 100644
--- a/routers/web/repo/editor_cherry_pick.go
+++ b/routers/web/repo/editor_cherry_pick.go
@@ -16,7 +16,7 @@ import (
)
func CherryPick(ctx *context.Context) {
- prepareEditorCommitFormOptions(ctx, "_cherrypick")
+ prepareEditorPage(ctx, "_cherrypick")
if ctx.Written() {
return
}
diff --git a/routers/web/repo/find.go b/routers/web/repo/find.go
deleted file mode 100644
index 3a3a7610e7..0000000000
--- a/routers/web/repo/find.go
+++ /dev/null
@@ -1,24 +0,0 @@
-// Copyright 2022 The Gitea Authors. All rights reserved.
-// SPDX-License-Identifier: MIT
-
-package repo
-
-import (
- "net/http"
-
- "code.gitea.io/gitea/modules/templates"
- "code.gitea.io/gitea/modules/util"
- "code.gitea.io/gitea/services/context"
-)
-
-const (
- tplFindFiles templates.TplName = "repo/find/files"
-)
-
-// FindFiles render the page to find repository files
-func FindFiles(ctx *context.Context) {
- path := ctx.PathParam("*")
- ctx.Data["TreeLink"] = ctx.Repo.RepoLink + "/src/" + util.PathEscapeSegments(path)
- ctx.Data["DataLink"] = ctx.Repo.RepoLink + "/tree-list/" + util.PathEscapeSegments(path)
- ctx.HTML(http.StatusOK, tplFindFiles)
-}
diff --git a/routers/web/repo/githttp.go b/routers/web/repo/githttp.go
index c6f5f74e4b..c7b53dcbfb 100644
--- a/routers/web/repo/githttp.go
+++ b/routers/web/repo/githttp.go
@@ -146,7 +146,13 @@ func httpBase(ctx *context.Context) *serviceHandler {
// rely on the results of Contexter
if !ctx.IsSigned {
// TODO: support digit auth - which would be Authorization header with digit
- ctx.Resp.Header().Set("WWW-Authenticate", `Basic realm="Gitea"`)
+ if setting.OAuth2.Enabled {
+ // `Basic realm="Gitea"` tells the GCM to use builtin OAuth2 application: https://github.com/git-ecosystem/git-credential-manager/pull/1442
+ ctx.Resp.Header().Set("WWW-Authenticate", `Basic realm="Gitea"`)
+ } else {
+ // If OAuth2 is disabled, then use another realm to avoid GCM OAuth2 attempt
+ ctx.Resp.Header().Set("WWW-Authenticate", `Basic realm="Gitea (Basic Auth)"`)
+ }
ctx.HTTPError(http.StatusUnauthorized)
return nil
}
diff --git a/routers/web/repo/issue_content_history.go b/routers/web/repo/issue_content_history.go
index 3602f4ec8a..a56df78163 100644
--- a/routers/web/repo/issue_content_history.go
+++ b/routers/web/repo/issue_content_history.go
@@ -206,12 +206,11 @@ func SoftDeleteContentHistory(ctx *context.Context) {
ctx.NotFound(issues_model.ErrCommentNotExist{})
return
}
+ if history.CommentID != commentID {
+ ctx.NotFound(issues_model.ErrCommentNotExist{})
+ return
+ }
if commentID != 0 {
- if history.CommentID != commentID {
- ctx.NotFound(issues_model.ErrCommentNotExist{})
- return
- }
-
if comment, err = issues_model.GetCommentByID(ctx, commentID); err != nil {
log.Error("can not get comment for issue content history %v. err=%v", historyID, err)
return
diff --git a/routers/web/repo/pull_review.go b/routers/web/repo/pull_review.go
index 18e14e9b22..f064058221 100644
--- a/routers/web/repo/pull_review.go
+++ b/routers/web/repo/pull_review.go
@@ -331,7 +331,7 @@ func UpdateViewedFiles(ctx *context.Context) {
updatedFiles[file] = state
}
- if err := pull_model.UpdateReviewState(ctx, ctx.Doer.ID, pull.ID, data.HeadCommitSHA, updatedFiles); err != nil {
+ if _, err := pull_model.UpdateReviewState(ctx, ctx.Doer.ID, pull.ID, data.HeadCommitSHA, updatedFiles); err != nil {
ctx.ServerError("UpdateReview", err)
}
}
diff --git a/routers/web/repo/view.go b/routers/web/repo/view.go
index 09ac33cff4..8e85cc3278 100644
--- a/routers/web/repo/view.go
+++ b/routers/web/repo/view.go
@@ -245,27 +245,17 @@ func LastCommit(ctx *context.Context) {
return
}
+ // The "/lastcommit/" endpoint is used to render the embedded HTML content for the directory file listing with latest commit info
+ // It needs to construct correct links to the file items, but the route only accepts a commit ID, not a full ref name (branch or tag).
+ // So we need to get the ref name from the query parameter "refSubUrl".
+ // TODO: LAST-COMMIT-ASYNC-LOADING: it needs more tests to cover this
+ refSubURL := path.Clean(ctx.FormString("refSubUrl"))
+ prepareRepoViewContent(ctx, util.IfZero(refSubURL, ctx.Repo.RefTypeNameSubURL()))
renderDirectoryFiles(ctx, 0)
if ctx.Written() {
return
}
- var treeNames []string
- paths := make([]string, 0, 5)
- if len(ctx.Repo.TreePath) > 0 {
- treeNames = strings.Split(ctx.Repo.TreePath, "/")
- for i := range treeNames {
- paths = append(paths, strings.Join(treeNames[:i+1], "/"))
- }
-
- ctx.Data["HasParentPath"] = true
- if len(paths)-2 >= 0 {
- ctx.Data["ParentPath"] = "/" + paths[len(paths)-2]
- }
- }
- branchLink := ctx.Repo.RepoLink + "/src/" + ctx.Repo.RefTypeNameSubURL()
- ctx.Data["BranchLink"] = branchLink
-
ctx.HTML(http.StatusOK, tplRepoViewList)
}
@@ -289,7 +279,9 @@ func renderDirectoryFiles(ctx *context.Context, timeout time.Duration) git.Entri
return nil
}
- ctx.Data["LastCommitLoaderURL"] = ctx.Repo.RepoLink + "/lastcommit/" + url.PathEscape(ctx.Repo.CommitID) + "/" + util.PathEscapeSegments(ctx.Repo.TreePath)
+ // TODO: LAST-COMMIT-ASYNC-LOADING: search this keyword to see more details
+ lastCommitLoaderURL := ctx.Repo.RepoLink + "/lastcommit/" + url.PathEscape(ctx.Repo.CommitID) + "/" + util.PathEscapeSegments(ctx.Repo.TreePath)
+ ctx.Data["LastCommitLoaderURL"] = lastCommitLoaderURL + "?refSubUrl=" + url.QueryEscape(ctx.Repo.RefTypeNameSubURL())
// Get current entry user currently looking at.
entry, err := ctx.Repo.Commit.GetTreeEntryByPath(ctx.Repo.TreePath)
@@ -322,6 +314,21 @@ func renderDirectoryFiles(ctx *context.Context, timeout time.Duration) git.Entri
ctx.ServerError("GetCommitsInfo", err)
return nil
}
+
+ {
+ if timeout != 0 && !setting.IsProd && !setting.IsInTesting {
+ log.Debug("first call to get directory file commit info")
+ clearFilesCommitInfo := func() {
+ log.Warn("clear directory file commit info to force async loading on frontend")
+ for i := range files {
+ files[i].Commit = nil
+ }
+ }
+ _ = clearFilesCommitInfo
+ // clearFilesCommitInfo() // TODO: LAST-COMMIT-ASYNC-LOADING: debug the frontend async latest commit info loading, uncomment this line, and it needs more tests
+ }
+ }
+
ctx.Data["Files"] = files
prepareDirectoryFileIcons(ctx, files)
for _, f := range files {
@@ -334,16 +341,6 @@ func renderDirectoryFiles(ctx *context.Context, timeout time.Duration) git.Entri
if !loadLatestCommitData(ctx, latestCommit) {
return nil
}
-
- branchLink := ctx.Repo.RepoLink + "/src/" + ctx.Repo.RefTypeNameSubURL()
- treeLink := branchLink
-
- if len(ctx.Repo.TreePath) > 0 {
- treeLink += "/" + util.PathEscapeSegments(ctx.Repo.TreePath)
- }
-
- ctx.Data["TreeLink"] = treeLink
-
return allEntries
}
diff --git a/routers/web/repo/view_home.go b/routers/web/repo/view_home.go
index 17043055e5..00d30bedef 100644
--- a/routers/web/repo/view_home.go
+++ b/routers/web/repo/view_home.go
@@ -362,6 +362,32 @@ func redirectFollowSymlink(ctx *context.Context, treePathEntry *git.TreeEntry) b
return false
}
+func prepareRepoViewContent(ctx *context.Context, refTypeNameSubURL string) {
+ // for: home, file list, file view, blame
+ ctx.Data["PageIsViewCode"] = true
+ ctx.Data["RepositoryUploadEnabled"] = setting.Repository.Upload.Enabled // show Upload File button or menu item
+
+ // prepare the tree path navigation
+ var treeNames, paths []string
+ branchLink := ctx.Repo.RepoLink + "/src/" + refTypeNameSubURL
+ treeLink := branchLink
+ if ctx.Repo.TreePath != "" {
+ treeLink += "/" + util.PathEscapeSegments(ctx.Repo.TreePath)
+ treeNames = strings.Split(ctx.Repo.TreePath, "/")
+ for i := range treeNames {
+ paths = append(paths, strings.Join(treeNames[:i+1], "/"))
+ }
+ ctx.Data["HasParentPath"] = true
+ if len(paths)-2 >= 0 {
+ ctx.Data["ParentPath"] = "/" + paths[len(paths)-2]
+ }
+ }
+ ctx.Data["Paths"] = paths
+ ctx.Data["TreeLink"] = treeLink
+ ctx.Data["TreeNames"] = treeNames
+ ctx.Data["BranchLink"] = branchLink
+}
+
// Home render repository home page
func Home(ctx *context.Context) {
if handleRepoHomeFeed(ctx) {
@@ -383,8 +409,7 @@ func Home(ctx *context.Context) {
title += ": " + ctx.Repo.Repository.Description
}
ctx.Data["Title"] = title
- ctx.Data["PageIsViewCode"] = true
- ctx.Data["RepositoryUploadEnabled"] = setting.Repository.Upload.Enabled // show New File / Upload File buttons
+ prepareRepoViewContent(ctx, ctx.Repo.RefTypeNameSubURL())
if ctx.Repo.Commit == nil || ctx.Repo.Repository.IsEmpty || ctx.Repo.Repository.IsBroken() {
// empty or broken repositories need to be handled differently
@@ -405,26 +430,6 @@ func Home(ctx *context.Context) {
return
}
- // prepare the tree path
- var treeNames, paths []string
- branchLink := ctx.Repo.RepoLink + "/src/" + ctx.Repo.RefTypeNameSubURL()
- treeLink := branchLink
- if ctx.Repo.TreePath != "" {
- treeLink += "/" + util.PathEscapeSegments(ctx.Repo.TreePath)
- treeNames = strings.Split(ctx.Repo.TreePath, "/")
- for i := range treeNames {
- paths = append(paths, strings.Join(treeNames[:i+1], "/"))
- }
- ctx.Data["HasParentPath"] = true
- if len(paths)-2 >= 0 {
- ctx.Data["ParentPath"] = "/" + paths[len(paths)-2]
- }
- }
- ctx.Data["Paths"] = paths
- ctx.Data["TreeLink"] = treeLink
- ctx.Data["TreeNames"] = treeNames
- ctx.Data["BranchLink"] = branchLink
-
// some UI components are only shown when the tree path is root
isTreePathRoot := ctx.Repo.TreePath == ""
@@ -455,7 +460,7 @@ func Home(ctx *context.Context) {
if isViewHomeOnlyContent(ctx) {
ctx.HTML(http.StatusOK, tplRepoViewContent)
- } else if len(treeNames) != 0 {
+ } else if ctx.Repo.TreePath != "" {
ctx.HTML(http.StatusOK, tplRepoView)
} else {
ctx.HTML(http.StatusOK, tplRepoHome)
diff --git a/routers/web/user/setting/profile.go b/routers/web/user/setting/profile.go
index 27b0c83a38..45a6c64f7b 100644
--- a/routers/web/user/setting/profile.go
+++ b/routers/web/user/setting/profile.go
@@ -75,7 +75,7 @@ func ProfilePost(ctx *context.Context) {
ctx.Redirect(setting.AppSubURL + "/user/settings")
return
}
- if err := user_service.RenameUser(ctx, ctx.Doer, form.Name); err != nil {
+ if err := user_service.RenameUser(ctx, ctx.Doer, form.Name, ctx.Doer); err != nil {
switch {
case user_model.IsErrUserIsNotLocal(err):
ctx.Flash.Error(ctx.Tr("form.username_change_not_local_user"))
diff --git a/routers/web/web.go b/routers/web/web.go
index 8b55e4469e..89a570dce0 100644
--- a/routers/web/web.go
+++ b/routers/web/web.go
@@ -267,11 +267,7 @@ func Routes() *web.Router {
routes.Get("/ssh_info", misc.SSHInfo)
routes.Get("/api/healthz", healthcheck.Check)
- if sessionMid, err := common.Sessioner(); err == nil && sessionMid != nil {
- mid = append(mid, sessionMid, context.Contexter())
- } else {
- log.Fatal("common.Sessioner failed: %v", err)
- }
+ mid = append(mid, common.MustInitSessioner(), context.Contexter())
// Get user from session if logged in.
mid = append(mid, webAuth(buildAuthGroup()))
@@ -1188,7 +1184,6 @@ func registerWebRoutes(m *web.Router) {
m.Post("/{username}/{reponame}/markup", optSignIn, context.RepoAssignment, reqUnitsWithMarkdown, web.Bind(structs.MarkupOption{}), misc.Markup)
m.Group("/{username}/{reponame}", func() {
- m.Get("/find/*", repo.FindFiles)
m.Group("/tree-list", func() {
m.Get("/branch/*", context.RepoRefByType(git.RefTypeBranch), repo.TreeList)
m.Get("/tag/*", context.RepoRefByType(git.RefTypeTag), repo.TreeList)
diff --git a/services/auth/auth.go b/services/auth/auth.go
index fb6612290b..291e78a735 100644
--- a/services/auth/auth.go
+++ b/services/auth/auth.go
@@ -5,6 +5,7 @@
package auth
import (
+ "errors"
"fmt"
"net/http"
"regexp"
@@ -40,6 +41,20 @@ var globalVars = sync.OnceValue(func() *globalVarsStruct {
}
})
+type ErrUserAuthMessage string
+
+func (e ErrUserAuthMessage) Error() string {
+ return string(e)
+}
+
+func ErrAsUserAuthMessage(err error) (string, bool) {
+ var msg ErrUserAuthMessage
+ if errors.As(err, &msg) {
+ return msg.Error(), true
+ }
+ return "", false
+}
+
// Init should be called exactly once when the application starts to allow plugins
// to allocate necessary resources
func Init() {
diff --git a/services/auth/basic.go b/services/auth/basic.go
index 6d147deeb1..501924b4df 100644
--- a/services/auth/basic.go
+++ b/services/auth/basic.go
@@ -5,7 +5,6 @@
package auth
import (
- "errors"
"net/http"
actions_model "code.gitea.io/gitea/models/actions"
@@ -146,7 +145,7 @@ func (b *Basic) Verify(req *http.Request, w http.ResponseWriter, store DataStore
return nil, err
}
if hasWebAuthn {
- return nil, errors.New("basic authorization is not allowed while WebAuthn enrolled")
+ return nil, ErrUserAuthMessage("basic authorization is not allowed while WebAuthn enrolled")
}
if err := validateTOTP(req, u); err != nil {
diff --git a/services/auth/source/oauth2/init.go b/services/auth/source/oauth2/init.go
index 313f375281..2a165bac85 100644
--- a/services/auth/source/oauth2/init.go
+++ b/services/auth/source/oauth2/init.go
@@ -22,9 +22,6 @@ import (
var gothRWMutex = sync.RWMutex{}
-// UsersStoreKey is the key for the store
-const UsersStoreKey = "gitea-oauth2-sessions"
-
// ProviderHeaderKey is the HTTP header key
const ProviderHeaderKey = "gitea-oauth2-provider"
@@ -33,7 +30,7 @@ func Init(ctx context.Context) error {
// Lock our mutex
gothRWMutex.Lock()
- gob.Register(&sessions.Session{})
+ gob.Register(&sessions.Session{}) // TODO: CHI-SESSION-GOB-REGISTER. FIXME: it seems to be an abuse, why the Session struct itself is stored in session store again?
gothic.Store = &SessionsStore{
maxLength: int64(setting.OAuth2.MaxTokenLength),
diff --git a/services/convert/convert.go b/services/convert/convert.go
index 8b10d93640..c081aec771 100644
--- a/services/convert/convert.go
+++ b/services/convert/convert.go
@@ -542,8 +542,9 @@ func ToVerification(ctx context.Context, c *git.Commit) *api.PayloadCommitVerifi
}
if verif.SigningUser != nil {
commitVerification.Signer = &api.PayloadUser{
- Name: verif.SigningUser.Name,
- Email: verif.SigningUser.Email,
+ UserName: verif.SigningUser.Name,
+ Name: verif.SigningUser.DisplayName(),
+ Email: verif.SigningEmail, // Use the email from the signature, not from the user profile
}
}
return commitVerification
diff --git a/services/gitdiff/gitdiff.go b/services/gitdiff/gitdiff.go
index 4ad06bc04f..6e15f71609 100644
--- a/services/gitdiff/gitdiff.go
+++ b/services/gitdiff/gitdiff.go
@@ -1434,15 +1434,17 @@ outer:
}
}
- // Explicitly store files that have changed in the database, if any is present at all.
- // This has the benefit that the "Has Changed" attribute will be present as long as the user does not explicitly mark this file as viewed, so it will even survive a page reload after marking another file as viewed.
- // On the other hand, this means that even if a commit reverting an unseen change is committed, the file will still be seen as changed.
if len(filesChangedSinceLastDiff) > 0 {
- err := pull_model.UpdateReviewState(ctx, review.UserID, review.PullID, review.CommitSHA, filesChangedSinceLastDiff)
+ // Explicitly store files that have changed in the database, if any is present at all.
+ // This has the benefit that the "Has Changed" attribute will be present as long as the user does not explicitly mark this file as viewed, so it will even survive a page reload after marking another file as viewed.
+ // On the other hand, this means that even if a commit reverting an unseen change is committed, the file will still be seen as changed.
+ updatedReview, err := pull_model.UpdateReviewState(ctx, review.UserID, review.PullID, review.CommitSHA, filesChangedSinceLastDiff)
if err != nil {
log.Warn("Could not update review for user %d, pull %d, commit %s and the changed files %v: %v", review.UserID, review.PullID, review.CommitSHA, filesChangedSinceLastDiff, err)
return nil, err
}
+ // Update the local review to reflect the changes immediately
+ review = updatedReview
}
return review, nil
diff --git a/services/mailer/incoming/incoming.go b/services/mailer/incoming/incoming.go
index eade0cf271..1efaa845b8 100644
--- a/services/mailer/incoming/incoming.go
+++ b/services/mailer/incoming/incoming.go
@@ -6,6 +6,7 @@ package incoming
import (
"context"
"crypto/tls"
+ "errors"
"fmt"
net_mail "net/mail"
"regexp"
@@ -221,7 +222,7 @@ loop:
err := func() error {
r := msg.GetBody(section)
if r == nil {
- return fmt.Errorf("could not get body from message: %w", err)
+ return errors.New("could not get body from message")
}
env, err := enmime.ReadEnvelope(r)
diff --git a/services/pull/merge.go b/services/pull/merge.go
index f5430546a3..88e30c6832 100644
--- a/services/pull/merge.go
+++ b/services/pull/merge.go
@@ -547,11 +547,15 @@ var escapedSymbols = regexp.MustCompile(`([*[?! \\])`)
// IsUserAllowedToMerge check if user is allowed to merge PR with given permissions and branch protections
func IsUserAllowedToMerge(ctx context.Context, pr *issues_model.PullRequest, p access_model.Permission, user *user_model.User) (bool, error) {
+ return isUserAllowedToMergeInRepoBranch(ctx, pr.BaseRepoID, pr.BaseBranch, p, user)
+}
+
+func isUserAllowedToMergeInRepoBranch(ctx context.Context, repoID int64, branch string, p access_model.Permission, user *user_model.User) (bool, error) {
if user == nil {
return false, nil
}
- pb, err := git_model.GetFirstMatchProtectedBranchRule(ctx, pr.BaseRepoID, pr.BaseBranch)
+ pb, err := git_model.GetFirstMatchProtectedBranchRule(ctx, repoID, branch)
if err != nil {
return false, err
}
diff --git a/services/pull/merge_squash.go b/services/pull/merge_squash.go
index 84bd67c445..b5f2a4deff 100644
--- a/services/pull/merge_squash.go
+++ b/services/pull/merge_squash.go
@@ -71,7 +71,8 @@ func doMergeStyleSquash(ctx *mergeContext, message string) error {
}
cmdCommit := gitcmd.NewCommand("commit").
AddOptionFormat("--author='%s <%s>'", sig.Name, sig.Email).
- AddOptionFormat("--message=%s", message)
+ AddOptionFormat("--message=%s", message).
+ AddArguments("--allow-empty")
if ctx.signKey == nil {
cmdCommit.AddArguments("--no-gpg-sign")
} else {
diff --git a/services/pull/pull.go b/services/pull/pull.go
index a8468b5bf3..04f48f0565 100644
--- a/services/pull/pull.go
+++ b/services/pull/pull.go
@@ -13,6 +13,7 @@ import (
"regexp"
"strings"
"time"
+ "unicode/utf8"
"code.gitea.io/gitea/models/db"
git_model "code.gitea.io/gitea/models/git"
@@ -426,10 +427,16 @@ func AddTestPullRequestTask(opts TestPullRequestOptions) {
for _, pr := range headBranchPRs {
objectFormat := git.ObjectFormatFromName(pr.BaseRepo.ObjectFormatName)
if opts.NewCommitID != "" && opts.NewCommitID != objectFormat.EmptyObjectID().String() {
- changed, err := checkIfPRContentChanged(ctx, pr, opts.OldCommitID, opts.NewCommitID)
+ changed, newMergeBase, err := checkIfPRContentChanged(ctx, pr, opts.OldCommitID, opts.NewCommitID)
if err != nil {
log.Error("checkIfPRContentChanged: %v", err)
}
+ if newMergeBase != "" && pr.MergeBase != newMergeBase {
+ pr.MergeBase = newMergeBase
+ if _, err := pr.UpdateColsIfNotMerged(ctx, "merge_base"); err != nil {
+ log.Error("Update merge base for %-v: %v", pr, err)
+ }
+ }
if changed {
// Mark old reviews as stale if diff to mergebase has changed
if err := issues_model.MarkReviewsAsStale(ctx, pr.IssueID); err != nil {
@@ -495,30 +502,30 @@ func AddTestPullRequestTask(opts TestPullRequestOptions) {
// checkIfPRContentChanged checks if diff to target branch has changed by push
// A commit can be considered to leave the PR untouched if the patch/diff with its merge base is unchanged
-func checkIfPRContentChanged(ctx context.Context, pr *issues_model.PullRequest, oldCommitID, newCommitID string) (hasChanged bool, err error) {
+func checkIfPRContentChanged(ctx context.Context, pr *issues_model.PullRequest, oldCommitID, newCommitID string) (hasChanged bool, mergeBase string, err error) {
prCtx, cancel, err := createTemporaryRepoForPR(ctx, pr) // FIXME: why it still needs to create a temp repo, since the alongside calls like GetDiverging doesn't do so anymore
if err != nil {
log.Error("CreateTemporaryRepoForPR %-v: %v", pr, err)
- return false, err
+ return false, "", err
}
defer cancel()
tmpRepo, err := git.OpenRepository(ctx, prCtx.tmpBasePath)
if err != nil {
- return false, fmt.Errorf("OpenRepository: %w", err)
+ return false, "", fmt.Errorf("OpenRepository: %w", err)
}
defer tmpRepo.Close()
// Find the merge-base
- _, base, err := tmpRepo.GetMergeBase("", "base", "tracking")
+ mergeBase, _, err = tmpRepo.GetMergeBase("", "base", "tracking")
if err != nil {
- return false, fmt.Errorf("GetMergeBase: %w", err)
+ return false, "", fmt.Errorf("GetMergeBase: %w", err)
}
- cmd := gitcmd.NewCommand("diff", "--name-only", "-z").AddDynamicArguments(newCommitID, oldCommitID, base)
+ cmd := gitcmd.NewCommand("diff", "--name-only", "-z").AddDynamicArguments(newCommitID, oldCommitID, mergeBase)
stdoutReader, stdoutWriter, err := os.Pipe()
if err != nil {
- return false, fmt.Errorf("unable to open pipe for to run diff: %w", err)
+ return false, mergeBase, fmt.Errorf("unable to open pipe for to run diff: %w", err)
}
stderr := new(bytes.Buffer)
@@ -534,19 +541,19 @@ func checkIfPRContentChanged(ctx context.Context, pr *issues_model.PullRequest,
}).
Run(ctx); err != nil {
if err == util.ErrNotEmpty {
- return true, nil
+ return true, mergeBase, nil
}
err = gitcmd.ConcatenateError(err, stderr.String())
log.Error("Unable to run diff on %s %s %s in tempRepo for PR[%d]%s/%s...%s/%s: Error: %v",
- newCommitID, oldCommitID, base,
+ newCommitID, oldCommitID, mergeBase,
pr.ID, pr.BaseRepo.FullName(), pr.BaseBranch, pr.HeadRepo.FullName(), pr.HeadBranch,
err)
- return false, fmt.Errorf("Unable to run git diff --name-only -z %s %s %s: %w", newCommitID, oldCommitID, base, err)
+ return false, mergeBase, fmt.Errorf("Unable to run git diff --name-only -z %s %s %s: %w", newCommitID, oldCommitID, mergeBase, err)
}
- return false, nil
+ return false, mergeBase, nil
}
// PushToBaseRepo pushes commits from branches of head repository to
@@ -838,51 +845,53 @@ func GetSquashMergeCommitMessages(ctx context.Context, pr *issues_model.PullRequ
stringBuilder := strings.Builder{}
if !setting.Repository.PullRequest.PopulateSquashCommentWithCommitMessages {
+ // use PR's title and description as squash commit message
message := strings.TrimSpace(pr.Issue.Content)
stringBuilder.WriteString(message)
if stringBuilder.Len() > 0 {
stringBuilder.WriteRune('\n')
if !commitMessageTrailersPattern.MatchString(message) {
+ // TODO: this trailer check doesn't work with the separator line added below for the co-authors
stringBuilder.WriteRune('\n')
}
}
+ } else {
+ // use PR's commit messages as squash commit message
+ // commits list is in reverse chronological order
+ maxMsgSize := setting.Repository.PullRequest.DefaultMergeMessageSize
+ for i := len(commits) - 1; i >= 0; i-- {
+ commit := commits[i]
+ msg := strings.TrimSpace(commit.CommitMessage)
+ if msg == "" {
+ continue
+ }
+
+ // This format follows GitHub's squash commit message style,
+ // even if there are other "* " in the commit message body, they are written as-is.
+ // Maybe, ideally, we should indent those lines too.
+ _, _ = fmt.Fprintf(&stringBuilder, "* %s\n\n", msg)
+ if maxMsgSize > 0 && stringBuilder.Len() >= maxMsgSize {
+ tmp := stringBuilder.String()
+ wasValidUtf8 := utf8.ValidString(tmp)
+ tmp = tmp[:maxMsgSize] + "..."
+ if wasValidUtf8 {
+ // If the message was valid UTF-8 before truncation, ensure it remains valid after truncation
+ // For non-utf8 messages, we can't do much about it, end users should use utf-8 as much as possible
+ tmp = strings.ToValidUTF8(tmp, "")
+ }
+ stringBuilder.Reset()
+ stringBuilder.WriteString(tmp)
+ break
+ }
+ }
}
- // commits list is in reverse chronological order
- first := true
- for i := len(commits) - 1; i >= 0; i-- {
- commit := commits[i]
-
- if setting.Repository.PullRequest.PopulateSquashCommentWithCommitMessages {
- maxSize := setting.Repository.PullRequest.DefaultMergeMessageSize
- if maxSize < 0 || stringBuilder.Len() < maxSize {
- var toWrite []byte
- if first {
- first = false
- toWrite = []byte(strings.TrimPrefix(commit.CommitMessage, pr.Issue.Title))
- } else {
- toWrite = []byte(commit.CommitMessage)
- }
-
- if len(toWrite) > maxSize-stringBuilder.Len() && maxSize > -1 {
- toWrite = append(toWrite[:maxSize-stringBuilder.Len()], "..."...)
- }
- if _, err := stringBuilder.Write(toWrite); err != nil {
- log.Error("Unable to write commit message Error: %v", err)
- return ""
- }
-
- if _, err := stringBuilder.WriteRune('\n'); err != nil {
- log.Error("Unable to write commit message Error: %v", err)
- return ""
- }
- }
- }
-
+ // collect co-authors
+ for _, commit := range commits {
authorString := commit.Author.String()
if uniqueAuthors.Add(authorString) && authorString != posterSig {
// Compare use account as well to avoid adding the same author multiple times
- // times when email addresses are private or multiple emails are used.
+ // when email addresses are private or multiple emails are used.
commitUser, _ := user_model.GetUserByEmail(ctx, commit.Author.Email)
if commitUser == nil || commitUser.ID != pr.Issue.Poster.ID {
authors = append(authors, authorString)
@@ -890,12 +899,12 @@ func GetSquashMergeCommitMessages(ctx context.Context, pr *issues_model.PullRequ
}
}
- // Consider collecting the remaining authors
+ // collect the remaining authors
if limit >= 0 && setting.Repository.PullRequest.DefaultMergeMessageAllAuthors {
skip := limit
limit = 30
for {
- commits, err := gitRepo.CommitsBetweenLimit(headCommit, mergeBase, limit, skip)
+ commits, err = gitRepo.CommitsBetweenLimit(headCommit, mergeBase, limit, skip)
if err != nil {
log.Error("Unable to get commits between: %s %s Error: %v", pr.HeadBranch, pr.MergeBase, err)
return ""
@@ -916,19 +925,15 @@ func GetSquashMergeCommitMessages(ctx context.Context, pr *issues_model.PullRequ
}
}
+ if stringBuilder.Len() > 0 && len(authors) > 0 {
+ // TODO: this separator line doesn't work with the trailer check (commitMessageTrailersPattern) above
+ stringBuilder.WriteString("---------\n\n")
+ }
+
for _, author := range authors {
- if _, err := stringBuilder.WriteString("Co-authored-by: "); err != nil {
- log.Error("Unable to write to string builder Error: %v", err)
- return ""
- }
- if _, err := stringBuilder.WriteString(author); err != nil {
- log.Error("Unable to write to string builder Error: %v", err)
- return ""
- }
- if _, err := stringBuilder.WriteRune('\n'); err != nil {
- log.Error("Unable to write to string builder Error: %v", err)
- return ""
- }
+ stringBuilder.WriteString("Co-authored-by: ")
+ stringBuilder.WriteString(author)
+ stringBuilder.WriteRune('\n')
}
return stringBuilder.String()
diff --git a/services/pull/review.go b/services/pull/review.go
index 3977e351ca..9aeeb4c31d 100644
--- a/services/pull/review.go
+++ b/services/pull/review.go
@@ -333,7 +333,7 @@ func SubmitReview(ctx context.Context, doer *user_model.User, gitRepo *git.Repos
if headCommitID == commitID {
stale = false
} else {
- stale, err = checkIfPRContentChanged(ctx, pr, commitID, headCommitID)
+ stale, _, err = checkIfPRContentChanged(ctx, pr, commitID, headCommitID)
if err != nil {
return nil, nil, err
}
diff --git a/services/pull/update.go b/services/pull/update.go
index 436e3b52a6..462bbec55a 100644
--- a/services/pull/update.go
+++ b/services/pull/update.go
@@ -101,11 +101,11 @@ func Update(ctx context.Context, pr *issues_model.PullRequest, doer *user_model.
}
// IsUserAllowedToUpdate check if user is allowed to update PR with given permissions and branch protections
+// update PR means send new commits to PR head branch from base branch
func IsUserAllowedToUpdate(ctx context.Context, pull *issues_model.PullRequest, user *user_model.User) (mergeAllowed, rebaseAllowed bool, err error) {
if pull.Flow == issues_model.PullRequestFlowAGit {
return false, false, nil
}
-
if user == nil {
return false, false, nil
}
@@ -121,54 +121,46 @@ func IsUserAllowedToUpdate(ctx context.Context, pull *issues_model.PullRequest,
return false, false, err
}
- pr := &issues_model.PullRequest{
- HeadRepoID: pull.BaseRepoID,
- HeadRepo: pull.BaseRepo,
- BaseRepoID: pull.HeadRepoID,
- BaseRepo: pull.HeadRepo,
- HeadBranch: pull.BaseBranch,
- BaseBranch: pull.HeadBranch,
- }
-
- pb, err := git_model.GetFirstMatchProtectedBranchRule(ctx, pr.BaseRepoID, pr.BaseBranch)
- if err != nil {
- return false, false, err
- }
-
- if err := pr.LoadBaseRepo(ctx); err != nil {
- return false, false, err
- }
- prUnit, err := pr.BaseRepo.GetUnit(ctx, unit.TypePullRequests)
- if err != nil {
+ // 1. check base repository's AllowRebaseUpdate configuration
+ // it is a config in base repo but controls the head (fork) repo's "Update" behavior
+ {
+ prBaseUnit, err := pull.BaseRepo.GetUnit(ctx, unit.TypePullRequests)
if repo_model.IsErrUnitTypeNotExist(err) {
- return false, false, nil
+ return false, false, nil // the PR unit is disabled in base repo
+ } else if err != nil {
+ return false, false, fmt.Errorf("get base repo unit: %v", err)
}
- log.Error("pr.BaseRepo.GetUnit(unit.TypePullRequests): %v", err)
- return false, false, err
+ rebaseAllowed = prBaseUnit.PullRequestsConfig().AllowRebaseUpdate
}
- rebaseAllowed = prUnit.PullRequestsConfig().AllowRebaseUpdate
-
- // If branch protected, disable rebase unless user is whitelisted to force push (which extends regular push)
- if pb != nil {
- pb.Repo = pull.BaseRepo
- if !pb.CanUserForcePush(ctx, user) {
- rebaseAllowed = false
+ // 2. check head branch protection whether rebase is allowed, if pb not found then rebase depends on the above setting
+ {
+ pb, err := git_model.GetFirstMatchProtectedBranchRule(ctx, pull.HeadRepoID, pull.HeadBranch)
+ if err != nil {
+ return false, false, err
+ }
+ // If branch protected, disable rebase unless user is whitelisted to force push (which extends regular push)
+ if pb != nil {
+ pb.Repo = pull.HeadRepo
+ rebaseAllowed = rebaseAllowed && pb.CanUserForcePush(ctx, user)
}
}
+ // 3. check whether user has write access to head branch
baseRepoPerm, err := access_model.GetUserRepoPermission(ctx, pull.BaseRepo, user)
if err != nil {
return false, false, err
}
- mergeAllowed, err = IsUserAllowedToMerge(ctx, pr, headRepoPerm, user)
+ mergeAllowed, err = isUserAllowedToMergeInRepoBranch(ctx, pull.HeadRepoID, pull.HeadBranch, headRepoPerm, user)
if err != nil {
return false, false, err
}
+ // 4. if the pull creator allows maintainer to edit, it means the write permissions of the head branch has been
+ // granted to the user with write permission of the base repository
if pull.AllowMaintainerEdit {
- mergeAllowedMaintainer, err := IsUserAllowedToMerge(ctx, pr, baseRepoPerm, user)
+ mergeAllowedMaintainer, err := isUserAllowedToMergeInRepoBranch(ctx, pull.BaseRepoID, pull.BaseBranch, baseRepoPerm, user)
if err != nil {
return false, false, err
}
@@ -176,6 +168,9 @@ func IsUserAllowedToUpdate(ctx context.Context, pull *issues_model.PullRequest,
mergeAllowed = mergeAllowed || mergeAllowedMaintainer
}
+ // if merge is not allowed, rebase is also not allowed
+ rebaseAllowed = rebaseAllowed && mergeAllowed
+
return mergeAllowed, rebaseAllowed, nil
}
diff --git a/services/release/release.go b/services/release/release.go
index 29df66e5e6..4f121bf6d3 100644
--- a/services/release/release.go
+++ b/services/release/release.go
@@ -361,7 +361,7 @@ func DeleteReleaseByID(ctx context.Context, repo *repo_model.Repository, rel *re
if err != nil {
return fmt.Errorf("GetProtectedTags: %w", err)
}
- isAllowed, err := git_model.IsUserAllowedToControlTag(ctx, protectedTags, rel.TagName, rel.PublisherID)
+ isAllowed, err := git_model.IsUserAllowedToControlTag(ctx, protectedTags, rel.TagName, doer.ID)
if err != nil {
return err
}
diff --git a/services/repository/files/temp_repo.go b/services/repository/files/temp_repo.go
index feb4811bb0..731f23855d 100644
--- a/services/repository/files/temp_repo.go
+++ b/services/repository/files/temp_repo.go
@@ -135,6 +135,14 @@ func (t *TemporaryUploadRepository) LsFiles(ctx context.Context, filenames ...st
return fileList, nil
}
+func (t *TemporaryUploadRepository) RemoveRecursivelyFromIndex(ctx context.Context, path string) error {
+ _, _, err := gitcmd.NewCommand("rm", "--cached", "-r").
+ AddDynamicArguments(path).
+ WithDir(t.basePath).
+ RunStdBytes(ctx)
+ return err
+}
+
// RemoveFilesFromIndex removes the given files from the index
func (t *TemporaryUploadRepository) RemoveFilesFromIndex(ctx context.Context, filenames ...string) error {
objFmt, err := t.gitRepo.GetObjectFormat()
diff --git a/services/repository/files/update.go b/services/repository/files/update.go
index b07055d57a..4830f711fc 100644
--- a/services/repository/files/update.go
+++ b/services/repository/files/update.go
@@ -46,7 +46,10 @@ type ChangeRepoFile struct {
FromTreePath string
ContentReader io.ReadSeeker
SHA string
- Options *RepoFileOptions
+
+ DeleteRecursively bool // when deleting, work as `git rm -r ...`
+
+ Options *RepoFileOptions // FIXME: need to refactor, internal usage only
}
// ChangeRepoFilesOptions holds the repository files update options
@@ -69,26 +72,6 @@ type RepoFileOptions struct {
executable bool
}
-// ErrRepoFileDoesNotExist represents a "RepoFileDoesNotExist" kind of error.
-type ErrRepoFileDoesNotExist struct {
- Path string
- Name string
-}
-
-// IsErrRepoFileDoesNotExist checks if an error is a ErrRepoDoesNotExist.
-func IsErrRepoFileDoesNotExist(err error) bool {
- _, ok := err.(ErrRepoFileDoesNotExist)
- return ok
-}
-
-func (err ErrRepoFileDoesNotExist) Error() string {
- return fmt.Sprintf("repository file does not exist [path: %s]", err.Path)
-}
-
-func (err ErrRepoFileDoesNotExist) Unwrap() error {
- return util.ErrNotExist
-}
-
type LazyReadSeeker interface {
io.ReadSeeker
io.Closer
@@ -217,24 +200,6 @@ func ChangeRepoFiles(ctx context.Context, repo *repo_model.Repository, doer *use
}
}
- for _, file := range opts.Files {
- if file.Operation == "delete" {
- // Get the files in the index
- filesInIndex, err := t.LsFiles(ctx, file.TreePath)
- if err != nil {
- return nil, fmt.Errorf("DeleteRepoFile: %w", err)
- }
-
- // Find the file we want to delete in the index
- inFilelist := slices.Contains(filesInIndex, file.TreePath)
- if !inFilelist {
- return nil, ErrRepoFileDoesNotExist{
- Path: file.TreePath,
- }
- }
- }
- }
-
if hasOldBranch {
// Get the commit of the original branch
commit, err := t.GetBranchCommit(opts.OldBranch)
@@ -272,8 +237,14 @@ func ChangeRepoFiles(ctx context.Context, repo *repo_model.Repository, doer *use
addedLfsPointers = append(addedLfsPointers, *addedLfsPointer)
}
case "delete":
- if err = t.RemoveFilesFromIndex(ctx, file.TreePath); err != nil {
- return nil, err
+ if file.DeleteRecursively {
+ if err = t.RemoveRecursivelyFromIndex(ctx, file.TreePath); err != nil {
+ return nil, err
+ }
+ } else {
+ if err = t.RemoveFilesFromIndex(ctx, file.TreePath); err != nil {
+ return nil, err
+ }
}
default:
return nil, fmt.Errorf("invalid file operation: %s %s, supported operations are create, update, delete", file.Operation, file.Options.treePath)
diff --git a/services/user/email.go b/services/user/email.go
index 5c0de708e9..de1e024bd1 100644
--- a/services/user/email.go
+++ b/services/user/email.go
@@ -77,43 +77,44 @@ func ReplacePrimaryEmailAddress(ctx context.Context, u *user_model.User, emailSt
return err
}
- if !u.IsOrganization() {
- // Check if address exists already
- email, err := user_model.GetEmailAddressByEmail(ctx, emailStr)
- if err != nil && !errors.Is(err, util.ErrNotExist) {
- return err
- }
- if email != nil {
- if email.IsPrimary && email.UID == u.ID {
- return nil
+ return db.WithTx(ctx, func(ctx context.Context) error {
+ if !u.IsOrganization() {
+ // Check if address exists already
+ email, err := user_model.GetEmailAddressByEmail(ctx, emailStr)
+ if err != nil && !errors.Is(err, util.ErrNotExist) {
+ return err
+ }
+ if email != nil {
+ if email.IsPrimary && email.UID == u.ID {
+ return nil
+ }
+ return user_model.ErrEmailAlreadyUsed{Email: emailStr}
+ }
+
+ // Remove old primary address
+ primary, err := user_model.GetPrimaryEmailAddressOfUser(ctx, u.ID)
+ if err != nil {
+ return err
+ }
+ if _, err := db.DeleteByID[user_model.EmailAddress](ctx, primary.ID); err != nil {
+ return err
+ }
+
+ // Insert new primary address
+ if _, err := user_model.InsertEmailAddress(ctx, &user_model.EmailAddress{
+ UID: u.ID,
+ Email: emailStr,
+ IsActivated: true,
+ IsPrimary: true,
+ }); err != nil {
+ return err
}
- return user_model.ErrEmailAlreadyUsed{Email: emailStr}
}
- // Remove old primary address
- primary, err := user_model.GetPrimaryEmailAddressOfUser(ctx, u.ID)
- if err != nil {
- return err
- }
- if _, err := db.DeleteByID[user_model.EmailAddress](ctx, primary.ID); err != nil {
- return err
- }
+ u.Email = emailStr
- // Insert new primary address
- email = &user_model.EmailAddress{
- UID: u.ID,
- Email: emailStr,
- IsActivated: true,
- IsPrimary: true,
- }
- if _, err := user_model.InsertEmailAddress(ctx, email); err != nil {
- return err
- }
- }
-
- u.Email = emailStr
-
- return user_model.UpdateUserCols(ctx, u, "email")
+ return user_model.UpdateUserCols(ctx, u, "email")
+ })
}
func AddEmailAddresses(ctx context.Context, u *user_model.User, emails []string) error {
diff --git a/services/user/user.go b/services/user/user.go
index d8abf199c3..8e42fa3ccd 100644
--- a/services/user/user.go
+++ b/services/user/user.go
@@ -31,17 +31,15 @@ import (
)
// RenameUser renames a user
-func RenameUser(ctx context.Context, u *user_model.User, newUserName string) error {
+func RenameUser(ctx context.Context, u *user_model.User, newUserName string, doer *user_model.User) error {
if newUserName == u.Name {
return nil
}
- // Non-local users are not allowed to change their username.
- if !u.IsOrganization() && !u.IsLocal() {
- return user_model.ErrUserIsNotLocal{
- UID: u.ID,
- Name: u.Name,
- }
+ // Non-local users are not allowed to change their own username, but admins are
+ isExternalUser := !u.IsOrganization() && !u.IsLocal()
+ if isExternalUser && !doer.IsAdmin {
+ return user_model.ErrUserIsNotLocal{UID: u.ID, Name: u.Name}
}
if err := user_model.IsUsableUsername(newUserName); err != nil {
diff --git a/services/user/user_test.go b/services/user/user_test.go
index 48852b4cb9..25e8ee7b2f 100644
--- a/services/user/user_test.go
+++ b/services/user/user_test.go
@@ -20,6 +20,7 @@ import (
org_service "code.gitea.io/gitea/services/org"
"github.com/stretchr/testify/assert"
+ "github.com/stretchr/testify/require"
)
func TestMain(m *testing.M) {
@@ -101,23 +102,31 @@ func TestRenameUser(t *testing.T) {
assert.NoError(t, unittest.PrepareTestDatabase())
user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 21})
- t.Run("Non-Local", func(t *testing.T) {
- u := &user_model.User{
- Type: user_model.UserTypeIndividual,
- LoginType: auth.OAuth2,
+ t.Run("External user", func(t *testing.T) {
+ adminUser := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 1, IsAdmin: true})
+ externalUser := &user_model.User{
+ Name: "external_user",
+ Email: "external_user@gitea.io",
+ LoginType: auth.LDAP,
}
- assert.ErrorIs(t, RenameUser(t.Context(), u, "user_rename"), user_model.ErrUserIsNotLocal{})
+ require.NoError(t, user_model.CreateUser(t.Context(), externalUser, &user_model.Meta{}))
+
+ err := RenameUser(t.Context(), externalUser, externalUser.Name+"_changed", externalUser)
+ assert.True(t, user_model.IsErrUserIsNotLocal(err), "external user is not allowed to rename themselves")
+
+ err = RenameUser(t.Context(), externalUser, externalUser.Name+"_changed", adminUser)
+ assert.NoError(t, err, "admin can rename external user")
})
t.Run("Same username", func(t *testing.T) {
- assert.NoError(t, RenameUser(t.Context(), user, user.Name))
+ assert.NoError(t, RenameUser(t.Context(), user, user.Name, user))
})
t.Run("Non usable username", func(t *testing.T) {
usernames := []string{"--diff", ".well-known", "gitea-actions", "aaa.atom", "aa.png"}
for _, username := range usernames {
assert.Error(t, user_model.IsUsableUsername(username), "non-usable username: %s", username)
- assert.Error(t, RenameUser(t.Context(), user, username), "non-usable username: %s", username)
+ assert.Error(t, RenameUser(t.Context(), user, username, user), "non-usable username: %s", username)
}
})
@@ -126,7 +135,7 @@ func TestRenameUser(t *testing.T) {
unittest.AssertNotExistsBean(t, &user_model.User{ID: user.ID, Name: caps})
unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{OwnerID: user.ID, OwnerName: user.Name})
- assert.NoError(t, RenameUser(t.Context(), user, caps))
+ assert.NoError(t, RenameUser(t.Context(), user, caps, user))
unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: user.ID, Name: caps})
unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{OwnerID: user.ID, OwnerName: caps})
@@ -135,17 +144,17 @@ func TestRenameUser(t *testing.T) {
t.Run("Already exists", func(t *testing.T) {
existUser := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 1})
- assert.ErrorIs(t, RenameUser(t.Context(), user, existUser.Name), user_model.ErrUserAlreadyExist{Name: existUser.Name})
- assert.ErrorIs(t, RenameUser(t.Context(), user, existUser.LowerName), user_model.ErrUserAlreadyExist{Name: existUser.LowerName})
+ assert.ErrorIs(t, RenameUser(t.Context(), user, existUser.Name, user), user_model.ErrUserAlreadyExist{Name: existUser.Name})
+ assert.ErrorIs(t, RenameUser(t.Context(), user, existUser.LowerName, user), user_model.ErrUserAlreadyExist{Name: existUser.LowerName})
newUsername := fmt.Sprintf("uSEr%d", existUser.ID)
- assert.ErrorIs(t, RenameUser(t.Context(), user, newUsername), user_model.ErrUserAlreadyExist{Name: newUsername})
+ assert.ErrorIs(t, RenameUser(t.Context(), user, newUsername, user), user_model.ErrUserAlreadyExist{Name: newUsername})
})
t.Run("Normal", func(t *testing.T) {
oldUsername := user.Name
newUsername := "User_Rename"
- assert.NoError(t, RenameUser(t.Context(), user, newUsername))
+ assert.NoError(t, RenameUser(t.Context(), user, newUsername, user))
unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: user.ID, Name: newUsername, LowerName: strings.ToLower(newUsername)})
redirectUID, err := user_model.LookupUserRedirect(t.Context(), oldUsername)
diff --git a/services/wiki/wiki.go b/services/wiki/wiki.go
index a9dc726982..6a57a9a63e 100644
--- a/services/wiki/wiki.go
+++ b/services/wiki/wiki.go
@@ -135,7 +135,7 @@ func updateWikiPage(ctx context.Context, doer *user_model.User, repo *repo_model
if hasDefaultBranch {
if err := gitRepo.ReadTreeToIndex("HEAD"); err != nil {
log.Error("Unable to read HEAD tree to index in: %s %v", basePath, err)
- return fmt.Errorf("fnable to read HEAD tree to index in: %s %w", basePath, err)
+ return fmt.Errorf("unable to read HEAD tree to index in: %s %w", basePath, err)
}
}
diff --git a/templates/admin/user/edit.tmpl b/templates/admin/user/edit.tmpl
index 879b5cb550..5a11d5bb72 100644
--- a/templates/admin/user/edit.tmpl
+++ b/templates/admin/user/edit.tmpl
@@ -9,7 +9,7 @@
{{.CsrfTokenHtml}}
{{ctx.Locale.Tr "username"}}
-
+