Cleanup, upgrade packages.

This commit is contained in:
Roger Far 2025-04-13 07:55:22 -06:00
parent 1dff00c3f1
commit c651d21e81
17 changed files with 299 additions and 275 deletions

432
client/package-lock.json generated
View file

@ -8,15 +8,15 @@
"name": "client",
"version": "0.0.0",
"dependencies": {
"@angular/animations": "^19.2.3",
"@angular/cdk": "^19.2.6",
"@angular/common": "^19.2.3",
"@angular/compiler": "^19.2.3",
"@angular/core": "^19.2.3",
"@angular/forms": "^19.2.3",
"@angular/platform-browser": "^19.2.3",
"@angular/platform-browser-dynamic": "^19.2.3",
"@angular/router": "^19.2.3",
"@angular/animations": "^19.2.6",
"@angular/cdk": "^19.2.9",
"@angular/common": "^19.2.6",
"@angular/compiler": "^19.2.6",
"@angular/core": "^19.2.6",
"@angular/forms": "^19.2.6",
"@angular/platform-browser": "^19.2.6",
"@angular/platform-browser-dynamic": "^19.2.6",
"@angular/router": "^19.2.6",
"@fortawesome/fontawesome-free": "^6.7.2",
"@microsoft/signalr": "^8.0.7",
"bulma": "^1.0.3",
@ -28,23 +28,23 @@
"zone.js": "^0.15.0"
},
"devDependencies": {
"@angular-eslint/builder": "19.2.1",
"@angular-eslint/eslint-plugin": "19.2.1",
"@angular-eslint/eslint-plugin-template": "19.2.1",
"@angular-eslint/schematics": "19.2.1",
"@angular-eslint/template-parser": "19.2.1",
"@angular/build": "^19.2.4",
"@angular/cli": "^19.2.4",
"@angular/compiler-cli": "^19.2.3",
"@angular/language-service": "^19.2.3",
"@angular-eslint/builder": "19.3.0",
"@angular-eslint/eslint-plugin": "19.3.0",
"@angular-eslint/eslint-plugin-template": "19.3.0",
"@angular-eslint/schematics": "19.3.0",
"@angular-eslint/template-parser": "19.3.0",
"@angular/build": "^19.2.7",
"@angular/cli": "^19.2.7",
"@angular/compiler-cli": "^19.2.6",
"@angular/language-service": "^19.2.6",
"@types/file-saver": "^2.0.7",
"@types/file-saver-es": "^2.0.3",
"@types/node": "^22.13.11",
"@typescript-eslint/eslint-plugin": "^8.27.0",
"@typescript-eslint/parser": "^8.27.0",
"eslint": "^9.23.0",
"@types/node": "^22.14.1",
"@typescript-eslint/eslint-plugin": "^8.29.1",
"@typescript-eslint/parser": "^8.29.1",
"eslint": "^9.24.0",
"prettier": "^3.5.3",
"typescript": "5.8.2"
"typescript": "5.8.3"
}
},
"node_modules/@ampproject/remapping": {
@ -62,13 +62,13 @@
}
},
"node_modules/@angular-devkit/architect": {
"version": "0.1902.4",
"resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1902.4.tgz",
"integrity": "sha512-YTLiJ7uVItZTAxRuSgASP0M5qILESWH8xGmfR+YWR1JiJem09DWEOpWeLdha1BFzUui5L+6j1btzh4FUHJOtAg==",
"version": "0.1902.7",
"resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1902.7.tgz",
"integrity": "sha512-XPKbesrGJ3qOHLcwb3y8X14NlBIwxnh9OvsfyqgBujByJq0LIg4CaU/GrX0Lo4RmX3UQBli668TjFgmIkMTL7Q==",
"dev": true,
"license": "MIT",
"dependencies": {
"@angular-devkit/core": "19.2.4",
"@angular-devkit/core": "19.2.7",
"rxjs": "7.8.1"
},
"engines": {
@ -88,9 +88,9 @@
}
},
"node_modules/@angular-devkit/core": {
"version": "19.2.4",
"resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-19.2.4.tgz",
"integrity": "sha512-dL6AmCQsKh+CFVvO/jxX8qZpamVwt9r4iIo7fYcAI2+mTSDGxxBGWbS+onIfdPFuRp2HgKa+AT6WiHmRqu63AA==",
"version": "19.2.7",
"resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-19.2.7.tgz",
"integrity": "sha512-WeX/7HuNooJ4UhvVdremj6it0cX3nreG0/5r3QfrQd5Tz3sCHnh/lO5TW31gHtSqVgPjBGmzSzsyZ1Mi0lI7FA==",
"dev": true,
"license": "MIT",
"dependencies": {
@ -126,13 +126,13 @@
}
},
"node_modules/@angular-devkit/schematics": {
"version": "19.2.4",
"resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-19.2.4.tgz",
"integrity": "sha512-WaFe95ncm1A+QTlUHxQcFyGKIn67xgqGX7WCj8R0QlKOS0hLKx97SG4p19uwHlww0lmAcwk/QJP6G6sPL/CJ9w==",
"version": "19.2.7",
"resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-19.2.7.tgz",
"integrity": "sha512-kE9W1MqfasumAYVD8egMHefyxmA93KfBYrWqcepZaFPQTPwg1AGTlID7YLHToLQquw4Iqen6Xv8Bzfv05IZ+tw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@angular-devkit/core": "19.2.4",
"@angular-devkit/core": "19.2.7",
"jsonc-parser": "3.3.1",
"magic-string": "0.30.17",
"ora": "5.4.1",
@ -155,9 +155,9 @@
}
},
"node_modules/@angular-eslint/builder": {
"version": "19.2.1",
"resolved": "https://registry.npmjs.org/@angular-eslint/builder/-/builder-19.2.1.tgz",
"integrity": "sha512-iBs/4ZpjyISBFYU+dbfJOJi4Efh7U1hXPgQwaebU9r9Y4dMdcTw7MsaG9MfJX1gQJkIeXasYTxfSfuqoMFl9nQ==",
"version": "19.3.0",
"resolved": "https://registry.npmjs.org/@angular-eslint/builder/-/builder-19.3.0.tgz",
"integrity": "sha512-j9xNrzZJq29ONSG6EaeQHve0Squkm6u6Dm8fZgWP7crTFOrtLXn7Wxgxuyl9eddpbWY1Ov1gjFuwBVnxIdyAqg==",
"dev": true,
"license": "MIT",
"dependencies": {
@ -170,21 +170,21 @@
}
},
"node_modules/@angular-eslint/bundled-angular-compiler": {
"version": "19.2.1",
"resolved": "https://registry.npmjs.org/@angular-eslint/bundled-angular-compiler/-/bundled-angular-compiler-19.2.1.tgz",
"integrity": "sha512-8/NY4OCpiRDSOaqnpIOW7kMirqqsTY1U751iuMH0z9gQImYZWubMLOI0tsLFWmz06pKpgiDZcjD2X9TK2b4Igg==",
"version": "19.3.0",
"resolved": "https://registry.npmjs.org/@angular-eslint/bundled-angular-compiler/-/bundled-angular-compiler-19.3.0.tgz",
"integrity": "sha512-63Zci4pvnUR1iSkikFlNbShF1tO5HOarYd8fvNfmOZwFfZ/1T3j3bCy9YbE+aM5SYrWqPaPP/OcwZ3wJ8WNvqA==",
"dev": true,
"license": "MIT"
},
"node_modules/@angular-eslint/eslint-plugin": {
"version": "19.2.1",
"resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin/-/eslint-plugin-19.2.1.tgz",
"integrity": "sha512-wCjyH5cJb4fBchEnt3L6dQ6syaLHD+xeHCSynD/Lw3K6BcVEnFa+82SfSscgXtYLRPHlkK5CmYYs3AlALhA+/w==",
"version": "19.3.0",
"resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin/-/eslint-plugin-19.3.0.tgz",
"integrity": "sha512-nBLslLI20KnVbqlfNW7GcnI9R6cYCvRGjOE2QYhzxM316ciAQ62tvQuXP9ZVnRBLSKDAVnMeC0eTq9O4ysrxrQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@angular-eslint/bundled-angular-compiler": "19.2.1",
"@angular-eslint/utils": "19.2.1"
"@angular-eslint/bundled-angular-compiler": "19.3.0",
"@angular-eslint/utils": "19.3.0"
},
"peerDependencies": {
"@typescript-eslint/utils": "^7.11.0 || ^8.0.0",
@ -193,14 +193,14 @@
}
},
"node_modules/@angular-eslint/eslint-plugin-template": {
"version": "19.2.1",
"resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin-template/-/eslint-plugin-template-19.2.1.tgz",
"integrity": "sha512-yBGut4PedTkZcGbm1sthQ671CXERkC72eXTaZlMRhKNQDf3R6zEVc60q5DQZoEIzvgeIbaZdWhZgsCLwlhfGrQ==",
"version": "19.3.0",
"resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin-template/-/eslint-plugin-template-19.3.0.tgz",
"integrity": "sha512-WyouppTpOYut+wvv13wlqqZ8EHoDrCZxNfGKuEUYK1BPmQlTB8EIZfQH4iR1rFVS28Rw+XRIiXo1x3oC0SOfnA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@angular-eslint/bundled-angular-compiler": "19.2.1",
"@angular-eslint/utils": "19.2.1",
"@angular-eslint/bundled-angular-compiler": "19.3.0",
"@angular-eslint/utils": "19.3.0",
"aria-query": "5.3.2",
"axobject-query": "4.1.0"
},
@ -212,29 +212,29 @@
}
},
"node_modules/@angular-eslint/schematics": {
"version": "19.2.1",
"resolved": "https://registry.npmjs.org/@angular-eslint/schematics/-/schematics-19.2.1.tgz",
"integrity": "sha512-rfIHIIiXfsShwNbrVoUVu2ZzHkXghuJj8L9pXkdy92DoYSof0lqGURoPb7hv4wvZXGB3yo6S17cbw3IkeYJkzA==",
"version": "19.3.0",
"resolved": "https://registry.npmjs.org/@angular-eslint/schematics/-/schematics-19.3.0.tgz",
"integrity": "sha512-Wl5sFQ4t84LUb8mJ2iVfhYFhtF55IugXu7rRhPHtgIu9Ty5s1v3HGUx4LKv51m2kWhPPeFOTmjeBv1APzFlmnQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@angular-devkit/core": ">= 19.0.0 < 20.0.0",
"@angular-devkit/schematics": ">= 19.0.0 < 20.0.0",
"@angular-eslint/eslint-plugin": "19.2.1",
"@angular-eslint/eslint-plugin-template": "19.2.1",
"@angular-eslint/eslint-plugin": "19.3.0",
"@angular-eslint/eslint-plugin-template": "19.3.0",
"ignore": "7.0.3",
"semver": "7.7.1",
"strip-json-comments": "3.1.1"
}
},
"node_modules/@angular-eslint/template-parser": {
"version": "19.2.1",
"resolved": "https://registry.npmjs.org/@angular-eslint/template-parser/-/template-parser-19.2.1.tgz",
"integrity": "sha512-fU16NUh8nY02zdkHRsAlGI9ruppsE1ko1Z1PIyB3oofYt4rCKsXb8yXWbXWn7qCjNPVqv4+oLx0BwhJQZwEX8w==",
"version": "19.3.0",
"resolved": "https://registry.npmjs.org/@angular-eslint/template-parser/-/template-parser-19.3.0.tgz",
"integrity": "sha512-VxMNgsHXMWbbmZeBuBX5i8pzsSSEaoACVpaE+j8Muk60Am4Mxc0PytJm4n3znBSvI3B7Kq2+vStSRYPkOER4lA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@angular-eslint/bundled-angular-compiler": "19.2.1",
"@angular-eslint/bundled-angular-compiler": "19.3.0",
"eslint-scope": "^8.0.2"
},
"peerDependencies": {
@ -243,13 +243,13 @@
}
},
"node_modules/@angular-eslint/utils": {
"version": "19.2.1",
"resolved": "https://registry.npmjs.org/@angular-eslint/utils/-/utils-19.2.1.tgz",
"integrity": "sha512-TRIOtlDMbz1PqurLXPKMzSUl2iSs02c185g4EeOzTDX93sDvvVDLRj18jZ0IVcjQv5Vs21JK2KsKV/WdGe1OxA==",
"version": "19.3.0",
"resolved": "https://registry.npmjs.org/@angular-eslint/utils/-/utils-19.3.0.tgz",
"integrity": "sha512-ovvbQh96FIJfepHqLCMdKFkPXr3EbcvYc9kMj9hZyIxs/9/VxwPH7x25mMs4VsL6rXVgH2FgG5kR38UZlcTNNw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@angular-eslint/bundled-angular-compiler": "19.2.1"
"@angular-eslint/bundled-angular-compiler": "19.3.0"
},
"peerDependencies": {
"@typescript-eslint/utils": "^7.11.0 || ^8.0.0",
@ -258,9 +258,9 @@
}
},
"node_modules/@angular/animations": {
"version": "19.2.3",
"resolved": "https://registry.npmjs.org/@angular/animations/-/animations-19.2.3.tgz",
"integrity": "sha512-HQexOmwEJFX3sHLspOCi7dVOdPW5Ad4jH6tJsf+zABkF0GjgIVf4jewe1uE5ZLKgoflr9f9vpcpy39IWl00kWw==",
"version": "19.2.6",
"resolved": "https://registry.npmjs.org/@angular/animations/-/animations-19.2.6.tgz",
"integrity": "sha512-0Ei7pKXpq0eoijakRB+TQCh2EB02ReYUzRkhdw5kbQLOlTftBWWnMNn2qRfKU6cra+RyRXU8c34ZkEw6K7hZAw==",
"license": "MIT",
"dependencies": {
"tslib": "^2.3.0"
@ -269,25 +269,26 @@
"node": "^18.19.1 || ^20.11.1 || >=22.0.0"
},
"peerDependencies": {
"@angular/core": "19.2.3"
"@angular/common": "19.2.6",
"@angular/core": "19.2.6"
}
},
"node_modules/@angular/build": {
"version": "19.2.4",
"resolved": "https://registry.npmjs.org/@angular/build/-/build-19.2.4.tgz",
"integrity": "sha512-poCXvmwKri3snWa9zVJ2sW7wyJatZjkwnH6GUBdJrM2dXRQ+LYLk/oXqEjlSRBYNna7P1ZcKNqBbzu0/SnnngA==",
"version": "19.2.7",
"resolved": "https://registry.npmjs.org/@angular/build/-/build-19.2.7.tgz",
"integrity": "sha512-a91gbY7jxXZinUXC5O7I4urUV2Omv4hI2zOY4ufq2tvTt8iRjU/0SbHdIU2xFvon8CI/9HyB1WBl0JuDjlJMfg==",
"dev": true,
"license": "MIT",
"dependencies": {
"@ampproject/remapping": "2.3.0",
"@angular-devkit/architect": "0.1902.4",
"@angular-devkit/architect": "0.1902.7",
"@babel/core": "7.26.10",
"@babel/helper-annotate-as-pure": "7.25.9",
"@babel/helper-split-export-declaration": "7.24.7",
"@babel/plugin-syntax-import-attributes": "7.26.0",
"@inquirer/confirm": "5.1.6",
"@vitejs/plugin-basic-ssl": "1.2.0",
"beasties": "0.2.0",
"beasties": "0.3.2",
"browserslist": "^4.23.0",
"esbuild": "0.25.1",
"fast-glob": "3.3.3",
@ -303,7 +304,7 @@
"sass": "1.85.0",
"semver": "7.7.1",
"source-map-support": "0.5.21",
"vite": "6.2.0",
"vite": "6.2.5",
"watchpack": "2.4.2"
},
"engines": {
@ -320,7 +321,7 @@
"@angular/localize": "^19.0.0 || ^19.2.0-next.0",
"@angular/platform-server": "^19.0.0 || ^19.2.0-next.0",
"@angular/service-worker": "^19.0.0 || ^19.2.0-next.0",
"@angular/ssr": "^19.2.4",
"@angular/ssr": "^19.2.7",
"karma": "^6.4.0",
"less": "^4.2.0",
"ng-packagr": "^19.0.0 || ^19.2.0-next.0",
@ -359,16 +360,14 @@
}
},
"node_modules/@angular/cdk": {
"version": "19.2.6",
"resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-19.2.6.tgz",
"integrity": "sha512-AneN/NeAYU4+AwzicTwtYE9CkMcWA0cAJ41SNfSyoHaaHNXSkryzwSmTYS3FO+taqd7OGnBePeWJbW2uJXcvfA==",
"version": "19.2.9",
"resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-19.2.9.tgz",
"integrity": "sha512-4If3BjWQPwW/xqRUCL7Mx0dHS0SuZY7Tq/Ocf7liwYTYCmSv8Ew7NqaiPA4RS3FnyUJcZW/UAd231uWI/ZHChg==",
"license": "MIT",
"dependencies": {
"parse5": "^7.1.2",
"tslib": "^2.3.0"
},
"optionalDependencies": {
"parse5": "^7.1.2"
},
"peerDependencies": {
"@angular/common": "^19.0.0 || ^20.0.0",
"@angular/core": "^19.0.0 || ^20.0.0",
@ -376,18 +375,18 @@
}
},
"node_modules/@angular/cli": {
"version": "19.2.4",
"resolved": "https://registry.npmjs.org/@angular/cli/-/cli-19.2.4.tgz",
"integrity": "sha512-YmZYrxdGBwSZsrnpS6vr9gQ8+PrZHzwyYW/3jU2NRAMtl0ZlipDyfpLIDgrfqYPeumzr7+SKtJYVvlsMnjkN4g==",
"version": "19.2.7",
"resolved": "https://registry.npmjs.org/@angular/cli/-/cli-19.2.7.tgz",
"integrity": "sha512-ZCLAXIm+ObxGZsO3QfVdrEoa/PV/WIAs7ZT4ejgVNXLq8OVpPXl69cYrFmVdv/OZTkkdxthGR02kn57DQ0FjYg==",
"dev": true,
"license": "MIT",
"dependencies": {
"@angular-devkit/architect": "0.1902.4",
"@angular-devkit/core": "19.2.4",
"@angular-devkit/schematics": "19.2.4",
"@angular-devkit/architect": "0.1902.7",
"@angular-devkit/core": "19.2.7",
"@angular-devkit/schematics": "19.2.7",
"@inquirer/prompts": "7.3.2",
"@listr2/prompt-adapter-inquirer": "2.0.18",
"@schematics/angular": "19.2.4",
"@schematics/angular": "19.2.7",
"@yarnpkg/lockfile": "1.1.0",
"ini": "5.0.0",
"jsonc-parser": "3.3.1",
@ -410,9 +409,9 @@
}
},
"node_modules/@angular/common": {
"version": "19.2.3",
"resolved": "https://registry.npmjs.org/@angular/common/-/common-19.2.3.tgz",
"integrity": "sha512-cYOMRXFb6Sjtg9BI3bE/Ave+xU234jQmHYj7hBxr3MiqRSVJL4niy10KiA/Jiz6y76V5QfZfS+0aE65VuoqAvg==",
"version": "19.2.6",
"resolved": "https://registry.npmjs.org/@angular/common/-/common-19.2.6.tgz",
"integrity": "sha512-kqqjLwDUTpAv4m39AvlDFJhrxmBqblgzvXLm82F8UQ+505aleYpq/8P3tcfgJCRSCWZ1HXWki+JPHkdnHvhy0A==",
"license": "MIT",
"dependencies": {
"tslib": "^2.3.0"
@ -421,14 +420,14 @@
"node": "^18.19.1 || ^20.11.1 || >=22.0.0"
},
"peerDependencies": {
"@angular/core": "19.2.3",
"@angular/core": "19.2.6",
"rxjs": "^6.5.3 || ^7.4.0"
}
},
"node_modules/@angular/compiler": {
"version": "19.2.3",
"resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-19.2.3.tgz",
"integrity": "sha512-TL/JIU7vzSWD+IrMq2PAiHZi7IUFSRhdHo8q6/WuZ8SQmbuXCK2pJvHZpTtUdLswdPeD/UVhkhTAhQzEyEdZVg==",
"version": "19.2.6",
"resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-19.2.6.tgz",
"integrity": "sha512-VivxKYyr3UjYGVrRbWRhBbOaKknxtwE+DVm7t5OhiND51eXyW+ZytdXcUwoUNCE6JGxhfP8XPujwJ9zGFklUug==",
"license": "MIT",
"dependencies": {
"tslib": "^2.3.0"
@ -438,9 +437,9 @@
}
},
"node_modules/@angular/compiler-cli": {
"version": "19.2.3",
"resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-19.2.3.tgz",
"integrity": "sha512-ePh/7A6eEDAyfVn8QgLcAvrxhXBAf6mTqB/3+HwQeXLaka1gtN6xvZ6cjLEegP4s6kcYGhdfdLwzCcy0kjsY5g==",
"version": "19.2.6",
"resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-19.2.6.tgz",
"integrity": "sha512-25ea4587AHlcXDjz7OJ0kGRcGLKZNM6NQbORkLgL0iqvvnrGrOrqqBnO8Fq1zwigb27RDGFtHzkOZs0wSpKHuA==",
"dev": true,
"license": "MIT",
"dependencies": {
@ -462,7 +461,7 @@
"node": "^18.19.1 || ^20.11.1 || >=22.0.0"
},
"peerDependencies": {
"@angular/compiler": "19.2.3",
"@angular/compiler": "19.2.6",
"typescript": ">=5.5 <5.9"
}
},
@ -515,9 +514,9 @@
}
},
"node_modules/@angular/core": {
"version": "19.2.3",
"resolved": "https://registry.npmjs.org/@angular/core/-/core-19.2.3.tgz",
"integrity": "sha512-uNDbQBDWdAfL8JhgG2l9eTEbikovZ+SthLUKERyR4fL7AVGSx85LjNySRuq4WAL4eiD1cRN1UUgu8o+WKqF/ow==",
"version": "19.2.6",
"resolved": "https://registry.npmjs.org/@angular/core/-/core-19.2.6.tgz",
"integrity": "sha512-tmtdONYMg3PvhuCUlTHX17P7MZTLrbDNWpiTyZNRGDbRzQqc5fxK8IrZJXm7TWxx8imDrBZn+wvwCYNDmMD81g==",
"license": "MIT",
"dependencies": {
"tslib": "^2.3.0"
@ -531,9 +530,9 @@
}
},
"node_modules/@angular/forms": {
"version": "19.2.3",
"resolved": "https://registry.npmjs.org/@angular/forms/-/forms-19.2.3.tgz",
"integrity": "sha512-JEgNKiZd3taYBg9lsMvoana5cv1QGke8xkuryc9zesHPJjhw9QHllmDPOW2HyUuwPqXZ/YkHiuCMOk+4qPjsAw==",
"version": "19.2.6",
"resolved": "https://registry.npmjs.org/@angular/forms/-/forms-19.2.6.tgz",
"integrity": "sha512-cacGuc8MXe0Am3dEaDvGYrUwUTGBWecWIA1xpGXWj7mjwLf+FhLFIPc6LfLgiQyGGAYaRjyEaZ3HGTqefuI8lQ==",
"license": "MIT",
"dependencies": {
"tslib": "^2.3.0"
@ -542,16 +541,16 @@
"node": "^18.19.1 || ^20.11.1 || >=22.0.0"
},
"peerDependencies": {
"@angular/common": "19.2.3",
"@angular/core": "19.2.3",
"@angular/platform-browser": "19.2.3",
"@angular/common": "19.2.6",
"@angular/core": "19.2.6",
"@angular/platform-browser": "19.2.6",
"rxjs": "^6.5.3 || ^7.4.0"
}
},
"node_modules/@angular/language-service": {
"version": "19.2.3",
"resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-19.2.3.tgz",
"integrity": "sha512-qq54VhRTk8jxnqXN6Q4wK1W7ewSkD0kdhii0Sif25gbkNvfDfqd1PjtnojelG81sN8XhBeMBcDhtbmEQX4nqHg==",
"version": "19.2.6",
"resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-19.2.6.tgz",
"integrity": "sha512-8ilcY4g2E0jt/IYEmmzD7RYFSMvLKiuh1aSLkpOYyKUSM9w2pK2CGZ1tldLAUfK9wuWHGCR24LDMTxRpZzt+OQ==",
"dev": true,
"license": "MIT",
"engines": {
@ -559,9 +558,9 @@
}
},
"node_modules/@angular/platform-browser": {
"version": "19.2.3",
"resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-19.2.3.tgz",
"integrity": "sha512-bz5mvUkCS8SxaMInjPgi/2dD7vpWkZePQesvr/bBRNQbYSE4cGTbovXcVl3X5hIxs5JoC6Het0lS2IxDq7j6qg==",
"version": "19.2.6",
"resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-19.2.6.tgz",
"integrity": "sha512-FfI642EbUU4RPu+zg2kPvlLCREhwzStgXFr7K4hfwCP+K9FPtgkY1Luw01mhqwySHfzj0oU0C1njZIBX66JBmw==",
"license": "MIT",
"dependencies": {
"tslib": "^2.3.0"
@ -570,9 +569,9 @@
"node": "^18.19.1 || ^20.11.1 || >=22.0.0"
},
"peerDependencies": {
"@angular/animations": "19.2.3",
"@angular/common": "19.2.3",
"@angular/core": "19.2.3"
"@angular/animations": "19.2.6",
"@angular/common": "19.2.6",
"@angular/core": "19.2.6"
},
"peerDependenciesMeta": {
"@angular/animations": {
@ -581,9 +580,9 @@
}
},
"node_modules/@angular/platform-browser-dynamic": {
"version": "19.2.3",
"resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-19.2.3.tgz",
"integrity": "sha512-PHmmtdGxSfe9HL8xR4g3PspnEaPqTEOGyzNviAHugfkZCgXCdSbYs36d3i0nPwhExMAeuIVXbbJyouDn2kyeOw==",
"version": "19.2.6",
"resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-19.2.6.tgz",
"integrity": "sha512-6Jd0SPMkAauAKz1KlVFfDX5wDXGo0K2aK/3j+oUQ/dKvPBFTXIfyJPjPKOSIsuzm96cyo8GECP6SGYlGdaOEJA==",
"license": "MIT",
"dependencies": {
"tslib": "^2.3.0"
@ -592,16 +591,16 @@
"node": "^18.19.1 || ^20.11.1 || >=22.0.0"
},
"peerDependencies": {
"@angular/common": "19.2.3",
"@angular/compiler": "19.2.3",
"@angular/core": "19.2.3",
"@angular/platform-browser": "19.2.3"
"@angular/common": "19.2.6",
"@angular/compiler": "19.2.6",
"@angular/core": "19.2.6",
"@angular/platform-browser": "19.2.6"
}
},
"node_modules/@angular/router": {
"version": "19.2.3",
"resolved": "https://registry.npmjs.org/@angular/router/-/router-19.2.3.tgz",
"integrity": "sha512-yYVMT7CceKqE+fBXxkhkAqEQUEdY/BHtLQr1vP9rEnAf30vwKghDEresugfegY6Ch4IGKTBtDG/QGmxWszgUAQ==",
"version": "19.2.6",
"resolved": "https://registry.npmjs.org/@angular/router/-/router-19.2.6.tgz",
"integrity": "sha512-8GqQinEd2Merh1RrUwmPW0EI/1CSwTL6F1xo4tAidqGBIIS22XyjtRb4mGkhhG2a8e7lEnrbl72RmuTjgThmeA==",
"license": "MIT",
"dependencies": {
"tslib": "^2.3.0"
@ -610,9 +609,9 @@
"node": "^18.19.1 || ^20.11.1 || >=22.0.0"
},
"peerDependencies": {
"@angular/common": "19.2.3",
"@angular/core": "19.2.3",
"@angular/platform-browser": "19.2.3",
"@angular/common": "19.2.6",
"@angular/core": "19.2.6",
"@angular/platform-browser": "19.2.6",
"rxjs": "^6.5.3 || ^7.4.0"
}
},
@ -1380,9 +1379,9 @@
}
},
"node_modules/@eslint/config-array": {
"version": "0.19.2",
"resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.19.2.tgz",
"integrity": "sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w==",
"version": "0.20.0",
"resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.20.0.tgz",
"integrity": "sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
@ -1537,9 +1536,9 @@
}
},
"node_modules/@eslint/js": {
"version": "9.23.0",
"resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.23.0.tgz",
"integrity": "sha512-35MJ8vCPU0ZMxo7zfev2pypqTwWTofFZO6m4KAtdoFhRpLJUpHTZZ+KB3C7Hb1d7bULYwO4lJXGCi5Se+8OMbw==",
"version": "9.24.0",
"resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.24.0.tgz",
"integrity": "sha512-uIY/y3z0uvOGX8cp1C2fiC4+ZmBhp6yZWkojtHL1YEMnRt1Y63HB9TM17proGEmeG7HeUY+UP36F0aknKYTpYA==",
"dev": true,
"license": "MIT",
"engines": {
@ -3515,14 +3514,14 @@
]
},
"node_modules/@schematics/angular": {
"version": "19.2.4",
"resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-19.2.4.tgz",
"integrity": "sha512-P7fphIPbqHHYRVRPiFl7RAHYPYhINGSUYOXrcThVBBsgKQBX18oNdUWvhZA6ylwK/9T21XB20VyLjNy0d78H1Q==",
"version": "19.2.7",
"resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-19.2.7.tgz",
"integrity": "sha512-q1xbQYLG/JR0P0/jma3sUUWubw/6859WC5Y/+l2xGEvIqtoMKBYBzN4Nrud8rdLVEFfIDNEIbKQ4Rwr/JemO3g==",
"dev": true,
"license": "MIT",
"dependencies": {
"@angular-devkit/core": "19.2.4",
"@angular-devkit/schematics": "19.2.4",
"@angular-devkit/core": "19.2.7",
"@angular-devkit/schematics": "19.2.7",
"jsonc-parser": "3.3.1"
},
"engines": {
@ -3664,27 +3663,27 @@
"license": "MIT"
},
"node_modules/@types/node": {
"version": "22.13.11",
"resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.11.tgz",
"integrity": "sha512-iEUCUJoU0i3VnrCmgoWCXttklWcvoCIx4jzcP22fioIVSdTmjgoEvmAO/QPw6TcS9k5FrNgn4w7q5lGOd1CT5g==",
"version": "22.14.1",
"resolved": "https://registry.npmjs.org/@types/node/-/node-22.14.1.tgz",
"integrity": "sha512-u0HuPQwe/dHrItgHHpmw3N2fYCR6x4ivMNbPHRkBVP4CvN+kiRrKHWk3i8tXiO/joPwXLMYvF9TTF0eqgHIuOw==",
"dev": true,
"license": "MIT",
"dependencies": {
"undici-types": "~6.20.0"
"undici-types": "~6.21.0"
}
},
"node_modules/@typescript-eslint/eslint-plugin": {
"version": "8.27.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.27.0.tgz",
"integrity": "sha512-4henw4zkePi5p252c8ncBLzLce52SEUz2Ebj8faDnuUXz2UuHEONYcJ+G0oaCF+bYCWVZtrGzq3FD7YXetmnSA==",
"version": "8.29.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.29.1.tgz",
"integrity": "sha512-ba0rr4Wfvg23vERs3eB+P3lfj2E+2g3lhWcCVukUuhtcdUx5lSIFZlGFEBHKr+3zizDa/TvZTptdNHVZWAkSBg==",
"dev": true,
"license": "MIT",
"dependencies": {
"@eslint-community/regexpp": "^4.10.0",
"@typescript-eslint/scope-manager": "8.27.0",
"@typescript-eslint/type-utils": "8.27.0",
"@typescript-eslint/utils": "8.27.0",
"@typescript-eslint/visitor-keys": "8.27.0",
"@typescript-eslint/scope-manager": "8.29.1",
"@typescript-eslint/type-utils": "8.29.1",
"@typescript-eslint/utils": "8.29.1",
"@typescript-eslint/visitor-keys": "8.29.1",
"graphemer": "^1.4.0",
"ignore": "^5.3.1",
"natural-compare": "^1.4.0",
@ -3714,16 +3713,16 @@
}
},
"node_modules/@typescript-eslint/parser": {
"version": "8.27.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.27.0.tgz",
"integrity": "sha512-XGwIabPallYipmcOk45DpsBSgLC64A0yvdAkrwEzwZ2viqGqRUJ8eEYoPz0CWnutgAFbNMPdsGGvzjSmcWVlEA==",
"version": "8.29.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.29.1.tgz",
"integrity": "sha512-zczrHVEqEaTwh12gWBIJWj8nx+ayDcCJs06yoNMY0kwjMWDM6+kppljY+BxWI06d2Ja+h4+WdufDcwMnnMEWmg==",
"dev": true,
"license": "MIT",
"dependencies": {
"@typescript-eslint/scope-manager": "8.27.0",
"@typescript-eslint/types": "8.27.0",
"@typescript-eslint/typescript-estree": "8.27.0",
"@typescript-eslint/visitor-keys": "8.27.0",
"@typescript-eslint/scope-manager": "8.29.1",
"@typescript-eslint/types": "8.29.1",
"@typescript-eslint/typescript-estree": "8.29.1",
"@typescript-eslint/visitor-keys": "8.29.1",
"debug": "^4.3.4"
},
"engines": {
@ -3739,14 +3738,14 @@
}
},
"node_modules/@typescript-eslint/scope-manager": {
"version": "8.27.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.27.0.tgz",
"integrity": "sha512-8oI9GwPMQmBryaaxG1tOZdxXVeMDte6NyJA4i7/TWa4fBwgnAXYlIQP+uYOeqAaLJ2JRxlG9CAyL+C+YE9Xknw==",
"version": "8.29.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.29.1.tgz",
"integrity": "sha512-2nggXGX5F3YrsGN08pw4XpMLO1Rgtnn4AzTegC2MDesv6q3QaTU5yU7IbS1tf1IwCR0Hv/1EFygLn9ms6LIpDA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@typescript-eslint/types": "8.27.0",
"@typescript-eslint/visitor-keys": "8.27.0"
"@typescript-eslint/types": "8.29.1",
"@typescript-eslint/visitor-keys": "8.29.1"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@ -3757,14 +3756,14 @@
}
},
"node_modules/@typescript-eslint/type-utils": {
"version": "8.27.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.27.0.tgz",
"integrity": "sha512-wVArTVcz1oJOIEJxui/nRhV0TXzD/zMSOYi/ggCfNq78EIszddXcJb7r4RCp/oBrjt8n9A0BSxRMKxHftpDxDA==",
"version": "8.29.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.29.1.tgz",
"integrity": "sha512-DkDUSDwZVCYN71xA4wzySqqcZsHKic53A4BLqmrWFFpOpNSoxX233lwGu/2135ymTCR04PoKiEEEvN1gFYg4Tw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@typescript-eslint/typescript-estree": "8.27.0",
"@typescript-eslint/utils": "8.27.0",
"@typescript-eslint/typescript-estree": "8.29.1",
"@typescript-eslint/utils": "8.29.1",
"debug": "^4.3.4",
"ts-api-utils": "^2.0.1"
},
@ -3781,9 +3780,9 @@
}
},
"node_modules/@typescript-eslint/types": {
"version": "8.27.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.27.0.tgz",
"integrity": "sha512-/6cp9yL72yUHAYq9g6DsAU+vVfvQmd1a8KyA81uvfDE21O2DwQ/qxlM4AR8TSdAu+kJLBDrEHKC5/W2/nxsY0A==",
"version": "8.29.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.29.1.tgz",
"integrity": "sha512-VT7T1PuJF1hpYC3AGm2rCgJBjHL3nc+A/bhOp9sGMKfi5v0WufsX/sHCFBfNTx2F+zA6qBc/PD0/kLRLjdt8mQ==",
"dev": true,
"license": "MIT",
"engines": {
@ -3795,14 +3794,14 @@
}
},
"node_modules/@typescript-eslint/typescript-estree": {
"version": "8.27.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.27.0.tgz",
"integrity": "sha512-BnKq8cqPVoMw71O38a1tEb6iebEgGA80icSxW7g+kndx0o6ot6696HjG7NdgfuAVmVEtwXUr3L8R9ZuVjoQL6A==",
"version": "8.29.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.29.1.tgz",
"integrity": "sha512-l1enRoSaUkQxOQnbi0KPUtqeZkSiFlqrx9/3ns2rEDhGKfTa+88RmXqedC1zmVTOWrLc2e6DEJrTA51C9iLH5g==",
"dev": true,
"license": "MIT",
"dependencies": {
"@typescript-eslint/types": "8.27.0",
"@typescript-eslint/visitor-keys": "8.27.0",
"@typescript-eslint/types": "8.29.1",
"@typescript-eslint/visitor-keys": "8.29.1",
"debug": "^4.3.4",
"fast-glob": "^3.3.2",
"is-glob": "^4.0.3",
@ -3822,16 +3821,16 @@
}
},
"node_modules/@typescript-eslint/utils": {
"version": "8.27.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.27.0.tgz",
"integrity": "sha512-njkodcwH1yvmo31YWgRHNb/x1Xhhq4/m81PhtvmRngD8iHPehxffz1SNCO+kwaePhATC+kOa/ggmvPoPza5i0Q==",
"version": "8.29.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.29.1.tgz",
"integrity": "sha512-QAkFEbytSaB8wnmB+DflhUPz6CLbFWE2SnSCrRMEa+KnXIzDYbpsn++1HGvnfAsUY44doDXmvRkO5shlM/3UfA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@eslint-community/eslint-utils": "^4.4.0",
"@typescript-eslint/scope-manager": "8.27.0",
"@typescript-eslint/types": "8.27.0",
"@typescript-eslint/typescript-estree": "8.27.0"
"@typescript-eslint/scope-manager": "8.29.1",
"@typescript-eslint/types": "8.29.1",
"@typescript-eslint/typescript-estree": "8.29.1"
},
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@ -3846,13 +3845,13 @@
}
},
"node_modules/@typescript-eslint/visitor-keys": {
"version": "8.27.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.27.0.tgz",
"integrity": "sha512-WsXQwMkILJvffP6z4U3FYJPlbf/j07HIxmDjZpbNvBJkMfvwXj5ACRkkHwBDvLBbDbtX5TdU64/rcvKJ/vuInQ==",
"version": "8.29.1",
"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.29.1.tgz",
"integrity": "sha512-RGLh5CRaUEf02viP5c1Vh1cMGffQscyHe7HPAzGpfmfflFg1wUz2rYxd+OZqwpeypYvZ8UxSxuIpF++fmOzEcg==",
"dev": true,
"license": "MIT",
"dependencies": {
"@typescript-eslint/types": "8.27.0",
"@typescript-eslint/types": "8.29.1",
"eslint-visitor-keys": "^4.2.0"
},
"engines": {
@ -4087,9 +4086,9 @@
"license": "MIT"
},
"node_modules/beasties": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/beasties/-/beasties-0.2.0.tgz",
"integrity": "sha512-Ljqskqx/tbZagIglYoJIMzH5zgssyp+in9+9sAyh15N22AornBeIDnb8EZ6Rk+6ShfMxd92uO3gfpT0NtZbpow==",
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/beasties/-/beasties-0.3.2.tgz",
"integrity": "sha512-p4AF8uYzm9Fwu8m/hSVTCPXrRBPmB34hQpHsec2KOaR9CZmgoU8IOv4Cvwq4hgz2p4hLMNbsdNl5XeA6XbAQwA==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
@ -4097,7 +4096,7 @@
"css-what": "^6.1.0",
"dom-serializer": "^2.0.0",
"domhandler": "^5.0.3",
"htmlparser2": "^9.1.0",
"htmlparser2": "^10.0.0",
"picocolors": "^1.1.1",
"postcss": "^8.4.49",
"postcss-media-query-parser": "^0.2.3"
@ -4787,7 +4786,6 @@
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
"integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
"devOptional": true,
"license": "BSD-2-Clause",
"engines": {
"node": ">=0.12"
@ -4891,19 +4889,19 @@
}
},
"node_modules/eslint": {
"version": "9.23.0",
"resolved": "https://registry.npmjs.org/eslint/-/eslint-9.23.0.tgz",
"integrity": "sha512-jV7AbNoFPAY1EkFYpLq5bslU9NLNO8xnEeQXwErNibVryjk67wHVmddTBilc5srIttJDBrB0eMHKZBFbSIABCw==",
"version": "9.24.0",
"resolved": "https://registry.npmjs.org/eslint/-/eslint-9.24.0.tgz",
"integrity": "sha512-eh/jxIEJyZrvbWRe4XuVclLPDYSYYYgLy5zXGGxD6j8zjSAxFEzI2fL/8xNq6O2yKqVt+eF2YhV+hxjV6UKXwQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@eslint-community/eslint-utils": "^4.2.0",
"@eslint-community/regexpp": "^4.12.1",
"@eslint/config-array": "^0.19.2",
"@eslint/config-array": "^0.20.0",
"@eslint/config-helpers": "^0.2.0",
"@eslint/core": "^0.12.0",
"@eslint/eslintrc": "^3.3.1",
"@eslint/js": "9.23.0",
"@eslint/js": "9.24.0",
"@eslint/plugin-kit": "^0.2.7",
"@humanfs/node": "^0.16.6",
"@humanwhocodes/module-importer": "^1.0.1",
@ -5540,9 +5538,9 @@
"license": "ISC"
},
"node_modules/htmlparser2": {
"version": "9.1.0",
"resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-9.1.0.tgz",
"integrity": "sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==",
"version": "10.0.0",
"resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-10.0.0.tgz",
"integrity": "sha512-TwAZM+zE5Tq3lrEHvOlvwgj1XLWQCtaaibSN11Q+gGBAS7Y1uZSWwXXRe4iF6OXnaq1riyQAPFOBtYc77Mxq0g==",
"dev": true,
"funding": [
"https://github.com/fb55/htmlparser2?sponsor=1",
@ -5555,8 +5553,21 @@
"dependencies": {
"domelementtype": "^2.3.0",
"domhandler": "^5.0.3",
"domutils": "^3.1.0",
"entities": "^4.5.0"
"domutils": "^3.2.1",
"entities": "^6.0.0"
}
},
"node_modules/htmlparser2/node_modules/entities": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/entities/-/entities-6.0.0.tgz",
"integrity": "sha512-aKstq2TDOndCn4diEyp9Uq/Flu2i1GlLkc6XIDQSDMuaFE3OPW5OphLCyQ5SpSJZTb4reN+kTcYru5yIfXoRPw==",
"dev": true,
"license": "BSD-2-Clause",
"engines": {
"node": ">=0.12"
},
"funding": {
"url": "https://github.com/fb55/entities?sponsor=1"
}
},
"node_modules/http-cache-semantics": {
@ -7111,7 +7122,6 @@
"version": "7.2.1",
"resolved": "https://registry.npmjs.org/parse5/-/parse5-7.2.1.tgz",
"integrity": "sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==",
"devOptional": true,
"license": "MIT",
"dependencies": {
"entities": "^4.5.0"
@ -8248,9 +8258,9 @@
}
},
"node_modules/typescript": {
"version": "5.8.2",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.2.tgz",
"integrity": "sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==",
"version": "5.8.3",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz",
"integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==",
"dev": true,
"license": "Apache-2.0",
"bin": {
@ -8262,9 +8272,9 @@
}
},
"node_modules/undici-types": {
"version": "6.20.0",
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz",
"integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==",
"version": "6.21.0",
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz",
"integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==",
"dev": true,
"license": "MIT"
},
@ -8383,9 +8393,9 @@
}
},
"node_modules/vite": {
"version": "6.2.0",
"resolved": "https://registry.npmjs.org/vite/-/vite-6.2.0.tgz",
"integrity": "sha512-7dPxoo+WsT/64rDcwoOjk76XHj+TqNTIvHKcuMQ1k4/SeHDaQt5GFAeLYzrimZrMpn/O6DtdI03WUjdxuPM0oQ==",
"version": "6.2.5",
"resolved": "https://registry.npmjs.org/vite/-/vite-6.2.5.tgz",
"integrity": "sha512-j023J/hCAa4pRIUH6J9HemwYfjB5llR2Ps0CWeikOtdR8+pAURAk0DoJC5/mm9kd+UgdnIy7d6HE4EAvlYhPhA==",
"dev": true,
"license": "MIT",
"dependencies": {

View file

@ -12,15 +12,15 @@
},
"private": true,
"dependencies": {
"@angular/animations": "^19.2.3",
"@angular/cdk": "^19.2.6",
"@angular/common": "^19.2.3",
"@angular/compiler": "^19.2.3",
"@angular/core": "^19.2.3",
"@angular/forms": "^19.2.3",
"@angular/platform-browser": "^19.2.3",
"@angular/platform-browser-dynamic": "^19.2.3",
"@angular/router": "^19.2.3",
"@angular/animations": "^19.2.6",
"@angular/cdk": "^19.2.9",
"@angular/common": "^19.2.6",
"@angular/compiler": "^19.2.6",
"@angular/core": "^19.2.6",
"@angular/forms": "^19.2.6",
"@angular/platform-browser": "^19.2.6",
"@angular/platform-browser-dynamic": "^19.2.6",
"@angular/router": "^19.2.6",
"@fortawesome/fontawesome-free": "^6.7.2",
"@microsoft/signalr": "^8.0.7",
"bulma": "^1.0.3",
@ -32,22 +32,22 @@
"zone.js": "^0.15.0"
},
"devDependencies": {
"@angular-eslint/builder": "19.2.1",
"@angular-eslint/eslint-plugin": "19.2.1",
"@angular-eslint/eslint-plugin-template": "19.2.1",
"@angular-eslint/schematics": "19.2.1",
"@angular-eslint/template-parser": "19.2.1",
"@angular/build": "^19.2.4",
"@angular/cli": "^19.2.4",
"@angular/compiler-cli": "^19.2.3",
"@angular/language-service": "^19.2.3",
"@angular-eslint/builder": "19.3.0",
"@angular-eslint/eslint-plugin": "19.3.0",
"@angular-eslint/eslint-plugin-template": "19.3.0",
"@angular-eslint/schematics": "19.3.0",
"@angular-eslint/template-parser": "19.3.0",
"@angular/build": "^19.2.7",
"@angular/cli": "^19.2.7",
"@angular/compiler-cli": "^19.2.6",
"@angular/language-service": "^19.2.6",
"@types/file-saver": "^2.0.7",
"@types/file-saver-es": "^2.0.3",
"@types/node": "^22.13.11",
"@typescript-eslint/eslint-plugin": "^8.27.0",
"@typescript-eslint/parser": "^8.27.0",
"eslint": "^9.23.0",
"@types/node": "^22.14.1",
"@typescript-eslint/eslint-plugin": "^8.29.1",
"@typescript-eslint/parser": "^8.29.1",
"eslint": "^9.24.0",
"prettier": "^3.5.3",
"typescript": "5.8.2"
"typescript": "5.8.3"
}
}

View file

@ -0,0 +1,8 @@
// This file is used by Code Analysis to maintain SuppressMessage
// attributes that are applied to this project.
// Project-level suppressions either have no target or are given
// a specific target and scoped to a namespace, type, member, etc.
using System.Diagnostics.CodeAnalysis;
[assembly: SuppressMessage("Style", "IDE0305:Simplify collection initialization", Justification = "Code style", Scope = "NamespaceAndDescendants", Target = "N:RdtClient.Web")]

View file

@ -8,11 +8,11 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="9.0.3" />
<PackageReference Include="Microsoft.Data.Sqlite" Version="9.0.3" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="9.0.3" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite.Core" Version="9.0.3" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="9.0.3">
<PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="9.0.4" />
<PackageReference Include="Microsoft.Data.Sqlite" Version="9.0.4" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="9.0.4" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite.Core" Version="9.0.4" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="9.0.4">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>

View file

@ -17,9 +17,9 @@
</PackageReference>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.13.0" />
<PackageReference Include="Moq" Version="4.20.72" />
<PackageReference Include="TestableIO.System.IO.Abstractions" Version="22.0.12" />
<PackageReference Include="TestableIO.System.IO.Abstractions.TestingHelpers" Version="22.0.12" />
<PackageReference Include="TestableIO.System.IO.Abstractions.Wrappers" Version="22.0.12" />
<PackageReference Include="TestableIO.System.IO.Abstractions" Version="22.0.13" />
<PackageReference Include="TestableIO.System.IO.Abstractions.TestingHelpers" Version="22.0.13" />
<PackageReference Include="TestableIO.System.IO.Abstractions.Wrappers" Version="22.0.13" />
<PackageReference Include="xunit" Version="2.9.3" />
<PackageReference Include="xunit.runner.visualstudio" Version="3.0.2">
<PrivateAssets>all</PrivateAssets>

View file

@ -472,7 +472,7 @@ public class AllDebridTorrentClientTest
// Assert
Assert.NotNull(result);
Assert.Single(result);
Assert.Single(result.Where(info => info.RestrictedLink == "https://fake.url/file1.txt"));
Assert.Single(result, info => info.RestrictedLink == "https://fake.url/file1.txt");
}
[Fact]

View file

@ -53,12 +53,12 @@ public class ProviderUpdater(ILogger<TaskRunner> logger, IServiceProvider servic
await torrentService.UpdateRdData();
logger.LogDebug($"Finished updating torrent info from debrid provider, next update in {updateTime} seconds");
logger.LogDebug("Finished updating torrent info from debrid provider, next update in {updateTime} seconds", updateTime);
}
}
catch (Exception ex)
{
logger.LogError(ex, $"Unexpected error occurred in ProviderUpdater: {ex.Message}");
logger.LogError(ex, "Unexpected error occurred in ProviderUpdater: {ex.Message}", ex.Message);
}
await Task.Delay(TimeSpan.FromSeconds(1), stoppingToken);

View file

@ -20,7 +20,7 @@ public class Startup(IServiceProvider serviceProvider) : IHostedService
using var scope = serviceProvider.CreateScope();
var logger = scope.ServiceProvider.GetRequiredService<ILogger<Startup>>();
logger.LogWarning($"Starting host on version {version}");
logger.LogWarning("Starting host on version {version}", version);
var dbContext = scope.ServiceProvider.GetRequiredService<DataContext>();
await dbContext.Database.MigrateAsync(cancellationToken);

View file

@ -79,7 +79,7 @@ public class UpdateChecker(ILogger<UpdateChecker> logger) : BackgroundService
logger.LogInformation("UpdateChecker stopped.");
}
private async Task<T?> GitHubRequest<T>(String endpoint, CancellationToken cancellationToken)
private static async Task<T?> GitHubRequest<T>(String endpoint, CancellationToken cancellationToken)
{
var httpClient = new HttpClient();
httpClient.DefaultRequestHeaders.UserAgent.Add(new("RdtClient", CurrentVersion));

View file

@ -6,3 +6,4 @@
using System.Diagnostics.CodeAnalysis;
[assembly: SuppressMessage("Usage", "CA2254:Template should be a static expression", Justification = "Bug in Serilog", Scope = "NamespaceAndDescendants", Target = "N:RdtClient.Service")]
[assembly: SuppressMessage("Style", "IDE0305:Simplify collection initialization", Justification = "Code style", Scope = "NamespaceAndDescendants", Target = "N:RdtClient.Service")]

View file

@ -14,8 +14,8 @@
<PackageReference Include="DebridLinkFr.NET" Version="1.0.4" />
<PackageReference Include="Downloader" Version="3.3.4" />
<PackageReference Include="Downloader.NET" Version="1.0.15" />
<PackageReference Include="Microsoft.Extensions.Http.Polly" Version="9.0.3" />
<PackageReference Include="Microsoft.Extensions.Http.Resilience" Version="9.3.0" />
<PackageReference Include="Microsoft.Extensions.Http.Polly" Version="9.0.4" />
<PackageReference Include="Microsoft.Extensions.Http.Resilience" Version="9.4.0" />
<PackageReference Include="MonoTorrent" Version="3.0.2" />
<PackageReference Include="Polly" Version="8.5.2" />
<PackageReference Include="Premiumize.NET" Version="1.0.10" />
@ -24,8 +24,8 @@
<PackageReference Include="Serilog.Sinks.File" Version="6.0.0" />
<PackageReference Include="SharpCompress" Version="0.39.0" />
<PackageReference Include="Synology.Api.Client" Version="0.3.93" />
<PackageReference Include="TestableIO.System.IO.Abstractions" Version="22.0.12" />
<PackageReference Include="TestableIO.System.IO.Abstractions.Wrappers" Version="22.0.12" />
<PackageReference Include="TestableIO.System.IO.Abstractions" Version="22.0.13" />
<PackageReference Include="TestableIO.System.IO.Abstractions.Wrappers" Version="22.0.13" />
<PackageReference Include="TorBox.NET" Version="1.5.0" />
</ItemGroup>

View file

@ -411,11 +411,11 @@ public class QBittorrent(ILogger<QBittorrent> logger, Settings settings, Authent
{
if (deleteFiles)
{
logger.LogDebug($"Delete {hash}, with files");
logger.LogDebug("Delete {hash}, with files", hash);
}
else
{
logger.LogDebug($"Delete {hash}, no files");
logger.LogDebug("Delete {hash}, no files", hash);
}
var torrent = await torrents.GetByHash(hash);

View file

@ -199,7 +199,7 @@ public class AllDebridTorrentClient(ILogger<AllDebridTorrentClient> logger, IAll
torrent.RdSize = torrentClientTorrent.Bytes;
}
if (torrentClientTorrent.Files != null && torrentClientTorrent.Files.Any())
if (torrentClientTorrent.Files != null && torrentClientTorrent.Files.Count != 0)
{
torrent.RdFiles = JsonConvert.SerializeObject(torrentClientTorrent.Files);
}

View file

@ -133,10 +133,8 @@ public class TorBoxTorrentClient(ILogger<TorBoxTorrentClient> logger, IHttpClien
var magnetLinkInfo = MonoTorrent.MagnetLink.Parse(magnetLink);
return magnetLinkInfo.InfoHashes.V1!.ToHex().ToLowerInvariant();
}
else
{
return result.Data!.Hash!;
}
return result.Data!.Hash!;
}
public async Task<String> AddFile(Byte[] bytes)
@ -297,24 +295,22 @@ public class TorBoxTorrentClient(ILogger<TorBoxTorrentClient> logger, IHttpClien
return
[
new DownloadInfo
new()
{
RestrictedLink = $"https://torbox.app/fakedl/{torrentId?.Id}/zip",
FileName = $"{torrent.RdName}.zip"
}
];
}
else
{
logger.LogDebug("Downloading files from TorBox individually.");
return downloadableFiles.Select(file => new DownloadInfo
{
RestrictedLink = $"https://torbox.app/fakedl/{torrentId?.Id}/{file.Id}",
FileName = Path.GetFileName(file.Path)
})
.ToList();
}
logger.LogDebug("Downloading files from TorBox individually.");
return downloadableFiles.Select(file => new DownloadInfo
{
RestrictedLink = $"https://torbox.app/fakedl/{torrentId?.Id}/{file.Id}",
FileName = Path.GetFileName(file.Path)
})
.ToList();
}
/// <inheritdoc />

View file

@ -18,6 +18,7 @@ public class Process : IProcess
public void Dispose()
{
_process.Dispose();
GC.SuppressFinalize(this);
}
public void BeginOutputReadLine()

View file

@ -0,0 +1,8 @@
// This file is used by Code Analysis to maintain SuppressMessage
// attributes that are applied to this project.
// Project-level suppressions either have no target or are given
// a specific target and scoped to a namespace, type, member, etc.
using System.Diagnostics.CodeAnalysis;
[assembly: SuppressMessage("Style", "IDE0305:Simplify collection initialization", Justification = "Code style", Scope = "NamespaceAndDescendants", Target = "N:RdtClient.Web")]

View file

@ -29,15 +29,15 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.SpaServices.Extensions" Version="9.0.3" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="9.0.3" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite.Core" Version="9.0.3" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="9.0.3">
<PackageReference Include="Microsoft.AspNetCore.SpaServices.Extensions" Version="9.0.4" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="9.0.4" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite.Core" Version="9.0.4" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="9.0.4">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" Version="9.0.3" />
<PackageReference Include="Microsoft.Extensions.Identity.Core" Version="9.0.3" />
<PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" Version="9.0.4" />
<PackageReference Include="Microsoft.Extensions.Identity.Core" Version="9.0.4" />
<PackageReference Include="Serilog" Version="4.2.0" />
<PackageReference Include="Serilog.AspNetCore" Version="9.0.0" />
<PackageReference Include="Serilog.Sinks.File" Version="6.0.0" />