diff --git a/docker-compose.yml b/docker-compose.yml
index 254c81b..e005620 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -184,7 +184,7 @@ services:
retries: 5
prometheus:
- image: prom/prometheus:v3.15.0@sha256:efd719c99d83b060d9daefdcf00360461adf279f45ef5391f8d111892118753e
+ image: prom/prometheus:v3.15.1@sha256:fa3302279710be2f21a8301ec17a8b4f2301fd829bd113839b3b6b02b6f191a2
container_name: pkgdiff-prometheus
restart: always
cap_drop:
diff --git a/src/backend/Directory.Packages.props b/src/backend/Directory.Packages.props
index cf7c775..b67da7c 100644
--- a/src/backend/Directory.Packages.props
+++ b/src/backend/Directory.Packages.props
@@ -14,7 +14,7 @@
-
+
@@ -33,7 +33,7 @@
-
+
diff --git a/src/backend/PkgDiff.API/packages.lock.json b/src/backend/PkgDiff.API/packages.lock.json
index de19ff4..5db3645 100644
--- a/src/backend/PkgDiff.API/packages.lock.json
+++ b/src/backend/PkgDiff.API/packages.lock.json
@@ -99,14 +99,14 @@
},
"Swashbuckle.AspNetCore": {
"type": "Direct",
- "requested": "[10.3.0, )",
- "resolved": "10.3.0",
- "contentHash": "y76EI71vcrsXfjw+HrUJaf9lRYulqb+0vzRFkKDgCyzK8GY6O0F0mTDWUEK2tUYbpkifHTaQTpT4tkh7f/q1kA==",
+ "requested": "[10.3.1, )",
+ "resolved": "10.3.1",
+ "contentHash": "aCaJQAUxU2SZhN0lXqTfa+6/hJ7RdofjtbWu4oXSmsQ+z7WFJQvAAPrvn5rQI/ly8M/Vu381wtlbA1FUYseHPg==",
"dependencies": {
"Microsoft.Extensions.ApiDescription.Server": "10.0.0",
- "Swashbuckle.AspNetCore.Swagger": "10.3.0",
- "Swashbuckle.AspNetCore.SwaggerGen": "10.3.0",
- "Swashbuckle.AspNetCore.SwaggerUI": "10.3.0"
+ "Swashbuckle.AspNetCore.Swagger": "10.3.1",
+ "Swashbuckle.AspNetCore.SwaggerGen": "10.3.1",
+ "Swashbuckle.AspNetCore.SwaggerUI": "10.3.1"
}
},
"AngleSharp.Css": {
@@ -355,24 +355,24 @@
},
"Swashbuckle.AspNetCore.Swagger": {
"type": "Transitive",
- "resolved": "10.3.0",
- "contentHash": "/W3Vdf8TeHAk6Pw6H/rduW6LQbzxKhUVnqtUFNHj/qUrLjlEZeVN8Q5WWgyGc3DLHRKlXm82kKCYfWRvx3/WCg==",
+ "resolved": "10.3.1",
+ "contentHash": "ZBsi9PZbuy25lUIs+4/V8pmuMqospRAX9zVmxzCm1ZRyKiXjsUL9YCyqdi7ezfDwxKuef6P0fUgVan9sLRcDJA==",
"dependencies": {
"Microsoft.OpenApi": "2.7.5"
}
},
"Swashbuckle.AspNetCore.SwaggerGen": {
"type": "Transitive",
- "resolved": "10.3.0",
- "contentHash": "X0tSFT1OrlkhVQNqk1DNL+dQZmfvmXF2/syJ8whjORhVkPdZoyWC4445OG0VwnYoH9Q+oZaIblMBHX+Geb30Hw==",
+ "resolved": "10.3.1",
+ "contentHash": "DMamYj+m40rOgnGdAp+4iQ+NXIMup2oYVs/zIOZtal0Dar6CXjCF9/SkepEn42TKNO29wAx0xyLfOXj1VjEIXg==",
"dependencies": {
- "Swashbuckle.AspNetCore.Swagger": "10.3.0"
+ "Swashbuckle.AspNetCore.Swagger": "10.3.1"
}
},
"Swashbuckle.AspNetCore.SwaggerUI": {
"type": "Transitive",
- "resolved": "10.3.0",
- "contentHash": "3qcin6S55lsFTsWf0vQO3P0bFc0tvk2EOkH+6wgJF9UQUk1WqsDUPEkexQE9Ievc+3zTPoYds9BTlvPMRbmkcQ=="
+ "resolved": "10.3.1",
+ "contentHash": "kXuMIVJBDD6qMwG78VUrKy4x5Ke98HU0Q023Sf2iSBO/x45c5BuByYPAExIs9UeVsjdGGgvLWU5jK8l6MO2Z0Q=="
},
"System.CodeDom": {
"type": "Transitive",
@@ -453,7 +453,7 @@
"AngleSharp": "[1.8.5, )",
"HtmlAgilityPack": "[1.13.1, )",
"HtmlSanitizer": "[9.2.1039, )",
- "Markdig": "[1.4.1, )",
+ "Markdig": "[1.5.0, )",
"Microsoft.AspNetCore.DataProtection.EntityFrameworkCore": "[10.0.13, )",
"Microsoft.AspNetCore.Identity.EntityFrameworkCore": "[10.0.13, )",
"Npgsql.EntityFrameworkCore.PostgreSQL": "[10.0.3, )",
@@ -493,9 +493,9 @@
},
"Markdig": {
"type": "CentralTransitive",
- "requested": "[1.4.1, )",
- "resolved": "1.4.1",
- "contentHash": "laiWlBRnwVqQlY9eWR56+uteUVtR+LpGw0doMSpirFuxdplSi3V59UOGRTepJaE8hJvfKGcCoguIZ8jmUHcEnA=="
+ "requested": "[1.5.0, )",
+ "resolved": "1.5.0",
+ "contentHash": "oEm6N4PYFPUZiJ5e89993AE6hfC8EWRGD5M8nyoSJbwD4GgW818mjlQCk++SdTV4godaN50Ybcmm4j2Dp76oIQ=="
},
"Microsoft.AspNetCore.DataProtection.EntityFrameworkCore": {
"type": "CentralTransitive",
diff --git a/src/backend/PkgDiff.Infrastructure/packages.lock.json b/src/backend/PkgDiff.Infrastructure/packages.lock.json
index 4c7b1af..09c4b4b 100644
--- a/src/backend/PkgDiff.Infrastructure/packages.lock.json
+++ b/src/backend/PkgDiff.Infrastructure/packages.lock.json
@@ -26,9 +26,9 @@
},
"Markdig": {
"type": "Direct",
- "requested": "[1.4.1, )",
- "resolved": "1.4.1",
- "contentHash": "laiWlBRnwVqQlY9eWR56+uteUVtR+LpGw0doMSpirFuxdplSi3V59UOGRTepJaE8hJvfKGcCoguIZ8jmUHcEnA=="
+ "requested": "[1.5.0, )",
+ "resolved": "1.5.0",
+ "contentHash": "oEm6N4PYFPUZiJ5e89993AE6hfC8EWRGD5M8nyoSJbwD4GgW818mjlQCk++SdTV4godaN50Ybcmm4j2Dp76oIQ=="
},
"Microsoft.AspNetCore.DataProtection.EntityFrameworkCore": {
"type": "Direct",
diff --git a/src/backend/PkgDiff.Tests/packages.lock.json b/src/backend/PkgDiff.Tests/packages.lock.json
index 92a6bd1..f196ebf 100644
--- a/src/backend/PkgDiff.Tests/packages.lock.json
+++ b/src/backend/PkgDiff.Tests/packages.lock.json
@@ -253,24 +253,24 @@
},
"Swashbuckle.AspNetCore.Swagger": {
"type": "Transitive",
- "resolved": "10.3.0",
- "contentHash": "/W3Vdf8TeHAk6Pw6H/rduW6LQbzxKhUVnqtUFNHj/qUrLjlEZeVN8Q5WWgyGc3DLHRKlXm82kKCYfWRvx3/WCg==",
+ "resolved": "10.3.1",
+ "contentHash": "ZBsi9PZbuy25lUIs+4/V8pmuMqospRAX9zVmxzCm1ZRyKiXjsUL9YCyqdi7ezfDwxKuef6P0fUgVan9sLRcDJA==",
"dependencies": {
"Microsoft.OpenApi": "2.7.5"
}
},
"Swashbuckle.AspNetCore.SwaggerGen": {
"type": "Transitive",
- "resolved": "10.3.0",
- "contentHash": "X0tSFT1OrlkhVQNqk1DNL+dQZmfvmXF2/syJ8whjORhVkPdZoyWC4445OG0VwnYoH9Q+oZaIblMBHX+Geb30Hw==",
+ "resolved": "10.3.1",
+ "contentHash": "DMamYj+m40rOgnGdAp+4iQ+NXIMup2oYVs/zIOZtal0Dar6CXjCF9/SkepEn42TKNO29wAx0xyLfOXj1VjEIXg==",
"dependencies": {
- "Swashbuckle.AspNetCore.Swagger": "10.3.0"
+ "Swashbuckle.AspNetCore.Swagger": "10.3.1"
}
},
"Swashbuckle.AspNetCore.SwaggerUI": {
"type": "Transitive",
- "resolved": "10.3.0",
- "contentHash": "3qcin6S55lsFTsWf0vQO3P0bFc0tvk2EOkH+6wgJF9UQUk1WqsDUPEkexQE9Ievc+3zTPoYds9BTlvPMRbmkcQ=="
+ "resolved": "10.3.1",
+ "contentHash": "kXuMIVJBDD6qMwG78VUrKy4x5Ke98HU0Q023Sf2iSBO/x45c5BuByYPAExIs9UeVsjdGGgvLWU5jK8l6MO2Z0Q=="
},
"System.Security.AccessControl": {
"type": "Transitive",
@@ -364,7 +364,7 @@
"PkgDiff.Application": "[1.0.0, )",
"PkgDiff.Infrastructure": "[1.0.0, )",
"PkgDiff.Shared": "[1.0.0, )",
- "Swashbuckle.AspNetCore": "[10.3.0, )",
+ "Swashbuckle.AspNetCore": "[10.3.1, )",
"prometheus-net.AspNetCore": "[8.2.1, )"
}
},
@@ -389,7 +389,7 @@
"AngleSharp": "[1.8.5, )",
"HtmlAgilityPack": "[1.13.1, )",
"HtmlSanitizer": "[9.2.1039, )",
- "Markdig": "[1.4.1, )",
+ "Markdig": "[1.5.0, )",
"Microsoft.AspNetCore.DataProtection.EntityFrameworkCore": "[10.0.13, )",
"Microsoft.AspNetCore.Identity.EntityFrameworkCore": "[10.0.13, )",
"Npgsql.EntityFrameworkCore.PostgreSQL": "[10.0.3, )",
@@ -459,9 +459,9 @@
},
"Markdig": {
"type": "CentralTransitive",
- "requested": "[1.4.1, )",
- "resolved": "1.4.1",
- "contentHash": "laiWlBRnwVqQlY9eWR56+uteUVtR+LpGw0doMSpirFuxdplSi3V59UOGRTepJaE8hJvfKGcCoguIZ8jmUHcEnA=="
+ "requested": "[1.5.0, )",
+ "resolved": "1.5.0",
+ "contentHash": "oEm6N4PYFPUZiJ5e89993AE6hfC8EWRGD5M8nyoSJbwD4GgW818mjlQCk++SdTV4godaN50Ybcmm4j2Dp76oIQ=="
},
"Microsoft.AspNetCore.Authentication.JwtBearer": {
"type": "CentralTransitive",
@@ -606,14 +606,14 @@
},
"Swashbuckle.AspNetCore": {
"type": "CentralTransitive",
- "requested": "[10.3.0, )",
- "resolved": "10.3.0",
- "contentHash": "y76EI71vcrsXfjw+HrUJaf9lRYulqb+0vzRFkKDgCyzK8GY6O0F0mTDWUEK2tUYbpkifHTaQTpT4tkh7f/q1kA==",
+ "requested": "[10.3.1, )",
+ "resolved": "10.3.1",
+ "contentHash": "aCaJQAUxU2SZhN0lXqTfa+6/hJ7RdofjtbWu4oXSmsQ+z7WFJQvAAPrvn5rQI/ly8M/Vu381wtlbA1FUYseHPg==",
"dependencies": {
"Microsoft.Extensions.ApiDescription.Server": "10.0.0",
- "Swashbuckle.AspNetCore.Swagger": "10.3.0",
- "Swashbuckle.AspNetCore.SwaggerGen": "10.3.0",
- "Swashbuckle.AspNetCore.SwaggerUI": "10.3.0"
+ "Swashbuckle.AspNetCore.Swagger": "10.3.1",
+ "Swashbuckle.AspNetCore.SwaggerGen": "10.3.1",
+ "Swashbuckle.AspNetCore.SwaggerUI": "10.3.1"
}
},
"System.IdentityModel.Tokens.Jwt": {
diff --git a/src/frontend/Dockerfile b/src/frontend/Dockerfile
index a648f34..f28eb01 100644
--- a/src/frontend/Dockerfile
+++ b/src/frontend/Dockerfile
@@ -1,5 +1,5 @@
# This stage's Node binary also runs the render server in the final image.
-FROM node:22.23.3-alpine@sha256:0a7108bf6c7bf5de370ffb1a3ed6be93d405b43ff159f681a8d18c0e2bc2e402 AS build
+FROM node:22.23.4-alpine@sha256:fe4f6d74e20370acb04ad889077d14d0f64a9c8ea6a42bc60cddf1e844699914 AS build
WORKDIR /app
COPY package.json package-lock.json ./
diff --git a/src/frontend/package-lock.json b/src/frontend/package-lock.json
index 2b2c00e..bdc08e8 100644
--- a/src/frontend/package-lock.json
+++ b/src/frontend/package-lock.json
@@ -26,14 +26,14 @@
},
"devDependencies": {
"@angular/build": "^21.2.27",
- "@angular/cli": "^21.2.27",
+ "@angular/cli": "^21.2.28",
"@angular/compiler-cli": "^21.2.25",
"@tailwindcss/typography": "^0.5.20",
"@types/express": "^5.0.6",
"@types/node": "^22.20.5",
"autoprefixer": "^10.6.1",
"jsdom": "^27.4.0",
- "postcss": "^8.5.30",
+ "postcss": "^8.5.31",
"tailwindcss": "^3.4.19",
"typescript": "~5.9.3",
"vitest": "^4.1.12"
@@ -283,13 +283,13 @@
}
},
"node_modules/@angular-devkit/architect": {
- "version": "0.2102.27",
- "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.2102.27.tgz",
- "integrity": "sha512-nMxXG8j9Pb+wYdn4WuNdf1xC04Nk8EfRaA1CH9PAvbmk3S07tvymrWpoGjUf+8V0pMQk5vubGQLG4pYhsxxLNQ==",
+ "version": "0.2102.28",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.2102.28.tgz",
+ "integrity": "sha512-hgUMgAkXTC9YmDU2LEBonOrjtnBWLcg58cSvl8cgTjOAGVsiUTr8w46tzaN4SnaTScSTI9NflcnZ4q+jq4Ustg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@angular-devkit/core": "21.2.27",
+ "@angular-devkit/core": "21.2.28",
"rxjs": "7.8.2"
},
"bin": {
@@ -302,9 +302,9 @@
}
},
"node_modules/@angular-devkit/core": {
- "version": "21.2.27",
- "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-21.2.27.tgz",
- "integrity": "sha512-phny+RUMoyntTPW/F0Mx9vUlftptyePX1aPsd4s53h227qs/m66NMPO+0MzQpi2YGyHfgqv905cB6X4h096y7w==",
+ "version": "21.2.28",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-21.2.28.tgz",
+ "integrity": "sha512-CAunrxW1j4/Ctr7vDDwc+00yn6wbjiJNsZtNxAyxCvWag2AtVmYlCPiOXa+lnvQpjTTXFySR3Oy02wX9PatBKw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -330,13 +330,13 @@
}
},
"node_modules/@angular-devkit/schematics": {
- "version": "21.2.27",
- "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-21.2.27.tgz",
- "integrity": "sha512-plZD0b3TlITN3v/Z9Tk2dMlU1Cu1vH4dgx3aehz4cdGrJoKEdjmJ+cgEjiGRjrgiRzKO3jGucFM/gZ3g0+aIwQ==",
+ "version": "21.2.28",
+ "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-21.2.28.tgz",
+ "integrity": "sha512-ubFSRtrRzEi4vkAvRFiLzgy0vEdydqn/oZicTApPvtsKO3JOGWcbcR5NwL0q63AJy64qagcWmGyLGdSjs7J1wA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@angular-devkit/core": "21.2.27",
+ "@angular-devkit/core": "21.2.28",
"jsonc-parser": "3.3.1",
"magic-string": "0.30.21",
"ora": "9.3.0",
@@ -448,53 +448,6 @@
}
}
},
- "node_modules/@angular/build/node_modules/@angular-devkit/architect": {
- "version": "0.2102.28",
- "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.2102.28.tgz",
- "integrity": "sha512-hgUMgAkXTC9YmDU2LEBonOrjtnBWLcg58cSvl8cgTjOAGVsiUTr8w46tzaN4SnaTScSTI9NflcnZ4q+jq4Ustg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@angular-devkit/core": "21.2.28",
- "rxjs": "7.8.2"
- },
- "bin": {
- "architect": "bin/cli.js"
- },
- "engines": {
- "node": "^20.19.0 || ^22.12.0 || >=24.0.0",
- "npm": "^6.11.0 || ^7.5.6 || >=8.0.0",
- "yarn": ">= 1.13.0"
- }
- },
- "node_modules/@angular/build/node_modules/@angular-devkit/core": {
- "version": "21.2.28",
- "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-21.2.28.tgz",
- "integrity": "sha512-CAunrxW1j4/Ctr7vDDwc+00yn6wbjiJNsZtNxAyxCvWag2AtVmYlCPiOXa+lnvQpjTTXFySR3Oy02wX9PatBKw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ajv": "8.18.0",
- "ajv-formats": "3.0.1",
- "jsonc-parser": "3.3.1",
- "picomatch": "4.0.4",
- "rxjs": "7.8.2",
- "source-map": "0.7.6"
- },
- "engines": {
- "node": "^20.19.0 || ^22.12.0 || >=24.0.0",
- "npm": "^6.11.0 || ^7.5.6 || >=8.0.0",
- "yarn": ">= 1.13.0"
- },
- "peerDependencies": {
- "chokidar": "^5.0.0"
- },
- "peerDependenciesMeta": {
- "chokidar": {
- "optional": true
- }
- }
- },
"node_modules/@angular/cdk": {
"version": "21.2.14",
"resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-21.2.14.tgz",
@@ -512,19 +465,19 @@
}
},
"node_modules/@angular/cli": {
- "version": "21.2.27",
- "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-21.2.27.tgz",
- "integrity": "sha512-B/RtfOhx/oMVXmmdea41T498YGPKA0mBv19gzypjEsw00o2LP9ALdzooIqZBPKq5N8gYHE5vuJcCx5OUkjNHHg==",
+ "version": "21.2.28",
+ "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-21.2.28.tgz",
+ "integrity": "sha512-5PDbWyivOzobaVT1oVqEsOaDjW/honAKCjten4dlWO1q8O2/GKcLa29niaNnuSX3BKN6TsYmSo2JmeOuDXWhDg==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@angular-devkit/architect": "0.2102.27",
- "@angular-devkit/core": "21.2.27",
- "@angular-devkit/schematics": "21.2.27",
+ "@angular-devkit/architect": "0.2102.28",
+ "@angular-devkit/core": "21.2.28",
+ "@angular-devkit/schematics": "21.2.28",
"@inquirer/prompts": "7.10.1",
"@listr2/prompt-adapter-inquirer": "3.0.5",
- "@modelcontextprotocol/sdk": "1.31.0",
- "@schematics/angular": "21.2.27",
+ "@modelcontextprotocol/sdk": "1.32.1",
+ "@schematics/angular": "21.2.28",
"@yarnpkg/lockfile": "1.1.0",
"algoliasearch": "5.48.1",
"ini": "6.0.0",
@@ -1251,7 +1204,6 @@
"dev": true,
"license": "MIT",
"optional": true,
- "peer": true,
"dependencies": {
"tslib": "^2.4.0"
}
@@ -3935,14 +3887,14 @@
]
},
"node_modules/@schematics/angular": {
- "version": "21.2.27",
- "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-21.2.27.tgz",
- "integrity": "sha512-QFI9VIlguYqubM/kOAO5Te++QAzcdI8cPkKpkcxCarskd3NecXya1dF1thSFj9f7UjZVOc7JKb6gbsjVH7n90A==",
+ "version": "21.2.28",
+ "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-21.2.28.tgz",
+ "integrity": "sha512-Y1IsbJYPhXdbXx48gWbXOQMFSWmH4/Hxvj12R7zFpakbgRfKo+LLcnljqVEm2AlYVh8v0m+iveK4//8lwvQIFA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@angular-devkit/core": "21.2.27",
- "@angular-devkit/schematics": "21.2.27",
+ "@angular-devkit/core": "21.2.28",
+ "@angular-devkit/schematics": "21.2.28",
"jsonc-parser": "3.3.1"
},
"engines": {
@@ -7822,9 +7774,9 @@
}
},
"node_modules/postcss": {
- "version": "8.5.30",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.30.tgz",
- "integrity": "sha512-zkd+e9S1AQHhmaBKye9zlFHWjOwVgqXl1q3ECYy8561K7qxR2cREf/STLskulBFd78k6AOFeA+ff1TtEzk9bAA==",
+ "version": "8.5.31",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.31.tgz",
+ "integrity": "sha512-YUbWYCgErwnMAVkjUnYa+KlMBzGpHwiIt/DE7f0G33AuX2LH9UcTk6KgWxd3zRU+pN3u/C+Xl3EnMLM4Hea7Sg==",
"dev": true,
"funding": [
{
diff --git a/src/frontend/package.json b/src/frontend/package.json
index 9a39b9a..bef2c87 100644
--- a/src/frontend/package.json
+++ b/src/frontend/package.json
@@ -43,14 +43,14 @@
},
"devDependencies": {
"@angular/build": "^21.2.27",
- "@angular/cli": "^21.2.27",
+ "@angular/cli": "^21.2.28",
"@angular/compiler-cli": "^21.2.25",
"@tailwindcss/typography": "^0.5.20",
"@types/express": "^5.0.6",
"@types/node": "^22.20.5",
"autoprefixer": "^10.6.1",
"jsdom": "^27.4.0",
- "postcss": "^8.5.30",
+ "postcss": "^8.5.31",
"tailwindcss": "^3.4.19",
"typescript": "~5.9.3",
"vitest": "^4.1.12"