From 00a5a8ffc7b571aca7dc3afc785da5faf95e1d32 Mon Sep 17 00:00:00 2001
From: electrovir <electrovir@users.noreply.github.com>
Date: Sat, 28 Sep 2024 19:04:33 +0000
Subject: [PATCH] [path] update deps

---
 package-lock.json                             | 926 +++++++++---------
 package.json                                  |  12 +-
 packages/assert/package.json                  |   2 +-
 packages/assert/src/assertions/output.ts      |   6 +-
 .../src/guard-types/wait-until-function.ts    |   6 +-
 packages/common/package.json                  |   2 +-
 .../common/src/augments/function/debounce.ts  |   4 +-
 .../src/augments/promise/timed-promise.ts     |   6 +-
 packages/core/package.json                    |   4 +-
 packages/core/src/augments/promise/wait.ts    |   4 +-
 packages/node/package.json                    |   8 +-
 .../node/src/augments/terminal/question.ts    |   4 +-
 packages/scripts/package.json                 |   4 +-
 packages/test/package.json                    |   2 +-
 packages/web/package.json                     |   2 +-
 todo.md                                       |   6 +-
 16 files changed, 471 insertions(+), 527 deletions(-)

diff --git a/package-lock.json b/package-lock.json
index 3a80a166..568935de 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -14,16 +14,16 @@
             ],
             "devDependencies": {
                 "@eslint/eslintrc": "^3.1.0",
-                "@eslint/js": "^9.11.0",
+                "@eslint/js": "^9.11.1",
                 "@stylistic/eslint-plugin": "^2.8.0",
                 "@stylistic/eslint-plugin-ts": "^2.8.0",
-                "@typescript-eslint/eslint-plugin": "^8.6.0",
+                "@typescript-eslint/eslint-plugin": "^8.7.0",
                 "cspell": "^8.14.4",
                 "dependency-cruiser": "^16.4.2",
                 "esbuild": "^0.24.0",
-                "eslint": "^9.11.0",
+                "eslint": "^9.11.1",
                 "eslint-config-prettier": "^9.1.0",
-                "eslint-plugin-jsdoc": "^50.2.4",
+                "eslint-plugin-jsdoc": "^50.3.0",
                 "eslint-plugin-monorepo-cop": "^1.0.2",
                 "eslint-plugin-playwright": "^1.6.2",
                 "eslint-plugin-prettier": "^5.2.1",
@@ -40,8 +40,8 @@
                 "prettier-plugin-packagejson": "^2.5.2",
                 "prettier-plugin-sort-json": "^4.0.0",
                 "prettier-plugin-toml": "^2.0.1",
-                "typescript-eslint": "^8.6.0",
-                "virmator": "^13.3.15"
+                "typescript-eslint": "^8.7.0",
+                "virmator": "^13.4.1"
             },
             "engines": {
                 "node": ">=22"
@@ -81,6 +81,7 @@
             "version": "28.0.0",
             "resolved": "https://registry.npmjs.org/@augment-vir/node-js/-/node-js-28.0.0.tgz",
             "integrity": "sha512-qBfmRkkhonSrcBnjx4pVkj+Q8kRaBRqU4c/eIVhJpHc94SwHkflhoStpQ5QiJocSPnMFBwYCDvQCC/ZRCtDcDQ==",
+            "deprecated": "Use @augment-vir/node instead.",
             "license": "MIT",
             "dependencies": {
                 "@augment-vir/common": "^28.0.0",
@@ -2738,13 +2739,14 @@
             }
         },
         "node_modules/@date-vir/duration": {
-            "version": "6.0.0",
-            "resolved": "https://registry.npmjs.org/@date-vir/duration/-/duration-6.0.0.tgz",
-            "integrity": "sha512-ZRNNR9adO7Dto2r+veOe+ZDX5R1M5vh0BFP0ZIH3A0hH04eRqLJXcRXD7FI20X0pChCJizmEYavQMJgUROtT9Q==",
+            "version": "6.0.1",
+            "resolved": "https://registry.npmjs.org/@date-vir/duration/-/duration-6.0.1.tgz",
+            "integrity": "sha512-NGM5qVkN/1Sw+1b/IR243XtmQuVuckC7fcFr5I02xfWuHTiXANAUVUX7o8NT+ZsvUa5ooitC9v/Qm4wEEGugEA==",
             "license": "(MIT or CC0 1.0)",
             "dependencies": {
                 "@types/luxon": "^3.4.2",
-                "luxon": "^3.5.0"
+                "luxon": "^3.5.0",
+                "type-fest": "^4.26.1"
             },
             "engines": {
                 "node": ">=22"
@@ -3227,6 +3229,16 @@
                 "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
             }
         },
+        "node_modules/@eslint/core": {
+            "version": "0.6.0",
+            "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.6.0.tgz",
+            "integrity": "sha512-8I2Q8ykA4J0x0o7cg67FPVnehcqWTBehu/lmY+bolPFHGjh49YzGBMXTvpqVgEbBdvNCSxj6iFgiIyHzf03lzg==",
+            "dev": true,
+            "license": "Apache-2.0",
+            "engines": {
+                "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+            }
+        },
         "node_modules/@eslint/eslintrc": {
             "version": "3.1.0",
             "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz",
@@ -3252,9 +3264,9 @@
             }
         },
         "node_modules/@eslint/js": {
-            "version": "9.11.0",
-            "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.11.0.tgz",
-            "integrity": "sha512-LPkkenkDqyzTFauZLLAPhIb48fj6drrfMvRGSL9tS3AcZBSVTllemLSNyCvHNNL2t797S/6DJNSIwRwXgMO/eQ==",
+            "version": "9.11.1",
+            "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.11.1.tgz",
+            "integrity": "sha512-/qu+TWz8WwPWc7/HcIJKi+c+MOm46GdVaSlTTQcaqaL53+GsoA6MxWp5PtTx48qbSP7ylM1Kn7nhvkugfJvRSA==",
             "dev": true,
             "license": "MIT",
             "engines": {
@@ -3579,9 +3591,9 @@
             }
         },
         "node_modules/@prisma/client": {
-            "version": "5.19.1",
-            "resolved": "https://registry.npmjs.org/@prisma/client/-/client-5.19.1.tgz",
-            "integrity": "sha512-x30GFguInsgt+4z5I4WbkZP2CGpotJMUXy+Gl/aaUjHn2o1DnLYNTA+q9XdYmAQZM8fIIkvUiA2NpgosM3fneg==",
+            "version": "5.20.0",
+            "resolved": "https://registry.npmjs.org/@prisma/client/-/client-5.20.0.tgz",
+            "integrity": "sha512-CLv55ZuMuUawMsxoqxGtLT3bEZoa2W8L3Qnp6rDIFWy+ZBrUcOFKdoeGPSnbBqxc3SkdxJrF+D1veN/WNynZYA==",
             "dev": true,
             "hasInstallScript": true,
             "license": "Apache-2.0",
@@ -3598,53 +3610,53 @@
             }
         },
         "node_modules/@prisma/debug": {
-            "version": "5.19.1",
-            "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-5.19.1.tgz",
-            "integrity": "sha512-lAG6A6QnG2AskAukIEucYJZxxcSqKsMK74ZFVfCTOM/7UiyJQi48v6TQ47d6qKG3LbMslqOvnTX25dj/qvclGg==",
+            "version": "5.20.0",
+            "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-5.20.0.tgz",
+            "integrity": "sha512-oCx79MJ4HSujokA8S1g0xgZUGybD4SyIOydoHMngFYiwEwYDQ5tBQkK5XoEHuwOYDKUOKRn/J0MEymckc4IgsQ==",
             "dev": true,
             "license": "Apache-2.0"
         },
         "node_modules/@prisma/engines": {
-            "version": "5.19.1",
-            "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-5.19.1.tgz",
-            "integrity": "sha512-kR/PoxZDrfUmbbXqqb8SlBBgCjvGaJYMCOe189PEYzq9rKqitQ2fvT/VJ8PDSe8tTNxhc2KzsCfCAL+Iwm/7Cg==",
+            "version": "5.20.0",
+            "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-5.20.0.tgz",
+            "integrity": "sha512-DtqkP+hcZvPEbj8t8dK5df2b7d3B8GNauKqaddRRqQBBlgkbdhJkxhoJTrOowlS3vaRt2iMCkU0+CSNn0KhqAQ==",
             "dev": true,
             "hasInstallScript": true,
             "license": "Apache-2.0",
             "dependencies": {
-                "@prisma/debug": "5.19.1",
-                "@prisma/engines-version": "5.19.1-2.69d742ee20b815d88e17e54db4a2a7a3b30324e3",
-                "@prisma/fetch-engine": "5.19.1",
-                "@prisma/get-platform": "5.19.1"
+                "@prisma/debug": "5.20.0",
+                "@prisma/engines-version": "5.20.0-12.06fc58a368dc7be9fbbbe894adf8d445d208c284",
+                "@prisma/fetch-engine": "5.20.0",
+                "@prisma/get-platform": "5.20.0"
             }
         },
         "node_modules/@prisma/engines-version": {
-            "version": "5.19.1-2.69d742ee20b815d88e17e54db4a2a7a3b30324e3",
-            "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-5.19.1-2.69d742ee20b815d88e17e54db4a2a7a3b30324e3.tgz",
-            "integrity": "sha512-xR6rt+z5LnNqTP5BBc+8+ySgf4WNMimOKXRn6xfNRDSpHvbOEmd7+qAOmzCrddEc4Cp8nFC0txU14dstjH7FXA==",
+            "version": "5.20.0-12.06fc58a368dc7be9fbbbe894adf8d445d208c284",
+            "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-5.20.0-12.06fc58a368dc7be9fbbbe894adf8d445d208c284.tgz",
+            "integrity": "sha512-Lg8AS5lpi0auZe2Mn4gjuCg081UZf88k3cn0RCwHgR+6cyHHpttPZBElJTHf83ZGsRNAmVCZCfUGA57WB4u4JA==",
             "dev": true,
             "license": "Apache-2.0"
         },
         "node_modules/@prisma/fetch-engine": {
-            "version": "5.19.1",
-            "resolved": "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-5.19.1.tgz",
-            "integrity": "sha512-pCq74rtlOVJfn4pLmdJj+eI4P7w2dugOnnTXpRilP/6n5b2aZiA4ulJlE0ddCbTPkfHmOL9BfaRgA8o+1rfdHw==",
+            "version": "5.20.0",
+            "resolved": "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-5.20.0.tgz",
+            "integrity": "sha512-JVcaPXC940wOGpCOwuqQRTz6I9SaBK0c1BAyC1pcz9xBi+dzFgUu3G/p9GV1FhFs9OKpfSpIhQfUJE9y00zhqw==",
             "dev": true,
             "license": "Apache-2.0",
             "dependencies": {
-                "@prisma/debug": "5.19.1",
-                "@prisma/engines-version": "5.19.1-2.69d742ee20b815d88e17e54db4a2a7a3b30324e3",
-                "@prisma/get-platform": "5.19.1"
+                "@prisma/debug": "5.20.0",
+                "@prisma/engines-version": "5.20.0-12.06fc58a368dc7be9fbbbe894adf8d445d208c284",
+                "@prisma/get-platform": "5.20.0"
             }
         },
         "node_modules/@prisma/get-platform": {
-            "version": "5.19.1",
-            "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-5.19.1.tgz",
-            "integrity": "sha512-sCeoJ+7yt0UjnR+AXZL7vXlg5eNxaFOwC23h0KvW1YIXUoa7+W2ZcAUhoEQBmJTW4GrFqCuZ8YSP0mkDa4k3Zg==",
+            "version": "5.20.0",
+            "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-5.20.0.tgz",
+            "integrity": "sha512-8/+CehTZZNzJlvuryRgc77hZCWrUDYd/PmlZ7p2yNXtmf2Una4BWnTbak3us6WVdqoz5wmptk6IhsXdG2v5fmA==",
             "dev": true,
             "license": "Apache-2.0",
             "dependencies": {
-                "@prisma/debug": "5.19.1"
+                "@prisma/debug": "5.20.0"
             }
         },
         "node_modules/@puppeteer/browsers": {
@@ -3671,9 +3683,9 @@
             }
         },
         "node_modules/@rollup/plugin-node-resolve": {
-            "version": "15.2.4",
-            "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.2.4.tgz",
-            "integrity": "sha512-wnKAGisav1m2vgVK2/2mNowK5DCqff7kpz76cY1pECVE0qRQTCAIcWP5xmdGDi8X8K9SYeeC98i6cD3fk6qkDg==",
+            "version": "15.3.0",
+            "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.3.0.tgz",
+            "integrity": "sha512-9eO5McEICxMzJpDW9OnMYSv4Sta3hmt7VtBFz5zR9273suNOydOyq/FrGeGy+KsTRFm8w0SLVhzig2ILFT63Ag==",
             "dev": true,
             "license": "MIT",
             "dependencies": {
@@ -3696,9 +3708,9 @@
             }
         },
         "node_modules/@rollup/pluginutils": {
-            "version": "5.1.1",
-            "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.1.tgz",
-            "integrity": "sha512-bVRmQqBIyGD+VMihdEV2IBurfIrdW9tD9yzJUL3CBRDbyPBVzQnBSMSgyUZHl1E335rpMRj7r4o683fXLYw8iw==",
+            "version": "5.1.2",
+            "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.2.tgz",
+            "integrity": "sha512-/FIdS3PyZ39bjZlwqFnWqCOVnW7o963LtKMwQOD0NhQqw22gSr2YY1afu3FxRip4ZCZNsD5jq6Aaz6QV3D/Njw==",
             "dev": true,
             "license": "MIT",
             "dependencies": {
@@ -3732,9 +3744,9 @@
             }
         },
         "node_modules/@rollup/rollup-android-arm-eabi": {
-            "version": "4.22.4",
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.22.4.tgz",
-            "integrity": "sha512-Fxamp4aEZnfPOcGA8KSNEohV8hX7zVHOemC8jVBoBUHu5zpJK/Eu3uJwt6BMgy9fkvzxDaurgj96F/NiLukF2w==",
+            "version": "4.22.5",
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.22.5.tgz",
+            "integrity": "sha512-SU5cvamg0Eyu/F+kLeMXS7GoahL+OoizlclVFX3l5Ql6yNlywJJ0OuqTzUx0v+aHhPHEB/56CT06GQrRrGNYww==",
             "cpu": [
                 "arm"
             ],
@@ -3746,9 +3758,9 @@
             ]
         },
         "node_modules/@rollup/rollup-android-arm64": {
-            "version": "4.22.4",
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.22.4.tgz",
-            "integrity": "sha512-VXoK5UMrgECLYaMuGuVTOx5kcuap1Jm8g/M83RnCHBKOqvPPmROFJGQaZhGccnsFtfXQ3XYa4/jMCJvZnbJBdA==",
+            "version": "4.22.5",
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.22.5.tgz",
+            "integrity": "sha512-S4pit5BP6E5R5C8S6tgU/drvgjtYW76FBuG6+ibG3tMvlD1h9LHVF9KmlmaUBQ8Obou7hEyS+0w+IR/VtxwNMQ==",
             "cpu": [
                 "arm64"
             ],
@@ -3760,9 +3772,9 @@
             ]
         },
         "node_modules/@rollup/rollup-darwin-arm64": {
-            "version": "4.22.4",
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.22.4.tgz",
-            "integrity": "sha512-xMM9ORBqu81jyMKCDP+SZDhnX2QEVQzTcC6G18KlTQEzWK8r/oNZtKuZaCcHhnsa6fEeOBionoyl5JsAbE/36Q==",
+            "version": "4.22.5",
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.22.5.tgz",
+            "integrity": "sha512-250ZGg4ipTL0TGvLlfACkIxS9+KLtIbn7BCZjsZj88zSg2Lvu3Xdw6dhAhfe/FjjXPVNCtcSp+WZjVsD3a/Zlw==",
             "cpu": [
                 "arm64"
             ],
@@ -3774,9 +3786,9 @@
             ]
         },
         "node_modules/@rollup/rollup-darwin-x64": {
-            "version": "4.22.4",
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.22.4.tgz",
-            "integrity": "sha512-aJJyYKQwbHuhTUrjWjxEvGnNNBCnmpHDvrb8JFDbeSH3m2XdHcxDd3jthAzvmoI8w/kSjd2y0udT+4okADsZIw==",
+            "version": "4.22.5",
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.22.5.tgz",
+            "integrity": "sha512-D8brJEFg5D+QxFcW6jYANu+Rr9SlKtTenmsX5hOSzNYVrK5oLAEMTUgKWYJP+wdKyCdeSwnapLsn+OVRFycuQg==",
             "cpu": [
                 "x64"
             ],
@@ -3788,9 +3800,9 @@
             ]
         },
         "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
-            "version": "4.22.4",
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.22.4.tgz",
-            "integrity": "sha512-j63YtCIRAzbO+gC2L9dWXRh5BFetsv0j0va0Wi9epXDgU/XUi5dJKo4USTttVyK7fGw2nPWK0PbAvyliz50SCQ==",
+            "version": "4.22.5",
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.22.5.tgz",
+            "integrity": "sha512-PNqXYmdNFyWNg0ma5LdY8wP+eQfdvyaBAojAXgO7/gs0Q/6TQJVXAXe8gwW9URjbS0YAammur0fynYGiWsKlXw==",
             "cpu": [
                 "arm"
             ],
@@ -3802,9 +3814,9 @@
             ]
         },
         "node_modules/@rollup/rollup-linux-arm-musleabihf": {
-            "version": "4.22.4",
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.22.4.tgz",
-            "integrity": "sha512-dJnWUgwWBX1YBRsuKKMOlXCzh2Wu1mlHzv20TpqEsfdZLb3WoJW2kIEsGwLkroYf24IrPAvOT/ZQ2OYMV6vlrg==",
+            "version": "4.22.5",
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.22.5.tgz",
+            "integrity": "sha512-kSSCZOKz3HqlrEuwKd9TYv7vxPYD77vHSUvM2y0YaTGnFc8AdI5TTQRrM1yIp3tXCKrSL9A7JLoILjtad5t8pQ==",
             "cpu": [
                 "arm"
             ],
@@ -3816,9 +3828,9 @@
             ]
         },
         "node_modules/@rollup/rollup-linux-arm64-gnu": {
-            "version": "4.22.4",
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.22.4.tgz",
-            "integrity": "sha512-AdPRoNi3NKVLolCN/Sp4F4N1d98c4SBnHMKoLuiG6RXgoZ4sllseuGioszumnPGmPM2O7qaAX/IJdeDU8f26Aw==",
+            "version": "4.22.5",
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.22.5.tgz",
+            "integrity": "sha512-oTXQeJHRbOnwRnRffb6bmqmUugz0glXaPyspp4gbQOPVApdpRrY/j7KP3lr7M8kTfQTyrBUzFjj5EuHAhqH4/w==",
             "cpu": [
                 "arm64"
             ],
@@ -3830,9 +3842,9 @@
             ]
         },
         "node_modules/@rollup/rollup-linux-arm64-musl": {
-            "version": "4.22.4",
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.22.4.tgz",
-            "integrity": "sha512-Gl0AxBtDg8uoAn5CCqQDMqAx22Wx22pjDOjBdmG0VIWX3qUBHzYmOKh8KXHL4UpogfJ14G4wk16EQogF+v8hmA==",
+            "version": "4.22.5",
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.22.5.tgz",
+            "integrity": "sha512-qnOTIIs6tIGFKCHdhYitgC2XQ2X25InIbZFor5wh+mALH84qnFHvc+vmWUpyX97B0hNvwNUL4B+MB8vJvH65Fw==",
             "cpu": [
                 "arm64"
             ],
@@ -3844,9 +3856,9 @@
             ]
         },
         "node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
-            "version": "4.22.4",
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.22.4.tgz",
-            "integrity": "sha512-3aVCK9xfWW1oGQpTsYJJPF6bfpWfhbRnhdlyhak2ZiyFLDaayz0EP5j9V1RVLAAxlmWKTDfS9wyRyY3hvhPoOg==",
+            "version": "4.22.5",
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.22.5.tgz",
+            "integrity": "sha512-TMYu+DUdNlgBXING13rHSfUc3Ky5nLPbWs4bFnT+R6Vu3OvXkTkixvvBKk8uO4MT5Ab6lC3U7x8S8El2q5o56w==",
             "cpu": [
                 "ppc64"
             ],
@@ -3858,9 +3870,9 @@
             ]
         },
         "node_modules/@rollup/rollup-linux-riscv64-gnu": {
-            "version": "4.22.4",
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.22.4.tgz",
-            "integrity": "sha512-ePYIir6VYnhgv2C5Xe9u+ico4t8sZWXschR6fMgoPUK31yQu7hTEJb7bCqivHECwIClJfKgE7zYsh1qTP3WHUA==",
+            "version": "4.22.5",
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.22.5.tgz",
+            "integrity": "sha512-PTQq1Kz22ZRvuhr3uURH+U/Q/a0pbxJoICGSprNLAoBEkyD3Sh9qP5I0Asn0y0wejXQBbsVMRZRxlbGFD9OK4A==",
             "cpu": [
                 "riscv64"
             ],
@@ -3872,9 +3884,9 @@
             ]
         },
         "node_modules/@rollup/rollup-linux-s390x-gnu": {
-            "version": "4.22.4",
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.22.4.tgz",
-            "integrity": "sha512-GqFJ9wLlbB9daxhVlrTe61vJtEY99/xB3C8e4ULVsVfflcpmR6c8UZXjtkMA6FhNONhj2eA5Tk9uAVw5orEs4Q==",
+            "version": "4.22.5",
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.22.5.tgz",
+            "integrity": "sha512-bR5nCojtpuMss6TDEmf/jnBnzlo+6n1UhgwqUvRoe4VIotC7FG1IKkyJbwsT7JDsF2jxR+NTnuOwiGv0hLyDoQ==",
             "cpu": [
                 "s390x"
             ],
@@ -3886,9 +3898,9 @@
             ]
         },
         "node_modules/@rollup/rollup-linux-x64-gnu": {
-            "version": "4.22.4",
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.22.4.tgz",
-            "integrity": "sha512-87v0ol2sH9GE3cLQLNEy0K/R0pz1nvg76o8M5nhMR0+Q+BBGLnb35P0fVz4CQxHYXaAOhE8HhlkaZfsdUOlHwg==",
+            "version": "4.22.5",
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.22.5.tgz",
+            "integrity": "sha512-N0jPPhHjGShcB9/XXZQWuWBKZQnC1F36Ce3sDqWpujsGjDz/CQtOL9LgTrJ+rJC8MJeesMWrMWVLKKNR/tMOCA==",
             "cpu": [
                 "x64"
             ],
@@ -3900,9 +3912,9 @@
             ]
         },
         "node_modules/@rollup/rollup-linux-x64-musl": {
-            "version": "4.22.4",
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.22.4.tgz",
-            "integrity": "sha512-UV6FZMUgePDZrFjrNGIWzDo/vABebuXBhJEqrHxrGiU6HikPy0Z3LfdtciIttEUQfuDdCn8fqh7wiFJjCNwO+g==",
+            "version": "4.22.5",
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.22.5.tgz",
+            "integrity": "sha512-uBa2e28ohzNNwjr6Uxm4XyaA1M/8aTgfF2T7UIlElLaeXkgpmIJ2EitVNQxjO9xLLLy60YqAgKn/AqSpCUkE9g==",
             "cpu": [
                 "x64"
             ],
@@ -3914,9 +3926,9 @@
             ]
         },
         "node_modules/@rollup/rollup-win32-arm64-msvc": {
-            "version": "4.22.4",
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.22.4.tgz",
-            "integrity": "sha512-BjI+NVVEGAXjGWYHz/vv0pBqfGoUH0IGZ0cICTn7kB9PyjrATSkX+8WkguNjWoj2qSr1im/+tTGRaY+4/PdcQw==",
+            "version": "4.22.5",
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.22.5.tgz",
+            "integrity": "sha512-RXT8S1HP8AFN/Kr3tg4fuYrNxZ/pZf1HemC5Tsddc6HzgGnJm0+Lh5rAHJkDuW3StI0ynNXukidROMXYl6ew8w==",
             "cpu": [
                 "arm64"
             ],
@@ -3928,9 +3940,9 @@
             ]
         },
         "node_modules/@rollup/rollup-win32-ia32-msvc": {
-            "version": "4.22.4",
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.22.4.tgz",
-            "integrity": "sha512-SiWG/1TuUdPvYmzmYnmd3IEifzR61Tragkbx9D3+R8mzQqDBz8v+BvZNDlkiTtI9T15KYZhP0ehn3Dld4n9J5g==",
+            "version": "4.22.5",
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.22.5.tgz",
+            "integrity": "sha512-ElTYOh50InL8kzyUD6XsnPit7jYCKrphmddKAe1/Ytt74apOxDq5YEcbsiKs0fR3vff3jEneMM+3I7jbqaMyBg==",
             "cpu": [
                 "ia32"
             ],
@@ -3942,9 +3954,9 @@
             ]
         },
         "node_modules/@rollup/rollup-win32-x64-msvc": {
-            "version": "4.22.4",
-            "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.22.4.tgz",
-            "integrity": "sha512-j8pPKp53/lq9lMXN57S8cFz0MynJk8OWNuUnXct/9KCpKU7DgU3bYMJhwWmcqC0UU29p8Lr0/7KEVcaM6bf47Q==",
+            "version": "4.22.5",
+            "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.22.5.tgz",
+            "integrity": "sha512-+lvL/4mQxSV8MukpkKyyvfwhH266COcWlXE/1qxwN08ajovta3459zrjLghYMgDerlzNwLAcFpvU+WWE5y6nAQ==",
             "cpu": [
                 "x64"
             ],
@@ -3963,44 +3975,44 @@
             "license": "MIT"
         },
         "node_modules/@shikijs/core": {
-            "version": "1.18.0",
-            "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-1.18.0.tgz",
-            "integrity": "sha512-VK4BNVCd2leY62Nm2JjyxtRLkyrZT/tv104O81eyaCjHq4Adceq2uJVFJJAIof6lT1mBwZrEo2qT/T+grv3MQQ==",
+            "version": "1.20.0",
+            "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-1.20.0.tgz",
+            "integrity": "sha512-KlO3iE0THzSdYkzDFugt8SHe6FR3qNYTkmpbdW1d6xo8juQkMjybxAw/cBi2npL2eb2F4PbbnSs5Z9tDusfvyg==",
             "license": "MIT",
             "dependencies": {
-                "@shikijs/engine-javascript": "1.18.0",
-                "@shikijs/engine-oniguruma": "1.18.0",
-                "@shikijs/types": "1.18.0",
+                "@shikijs/engine-javascript": "1.20.0",
+                "@shikijs/engine-oniguruma": "1.20.0",
+                "@shikijs/types": "1.20.0",
                 "@shikijs/vscode-textmate": "^9.2.2",
                 "@types/hast": "^3.0.4",
                 "hast-util-to-html": "^9.0.3"
             }
         },
         "node_modules/@shikijs/engine-javascript": {
-            "version": "1.18.0",
-            "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-1.18.0.tgz",
-            "integrity": "sha512-qoP/aO/ATNwYAUw1YMdaip/YVEstMZEgrwhePm83Ll9OeQPuxDZd48szZR8oSQNQBT8m8UlWxZv8EA3lFuyI5A==",
+            "version": "1.20.0",
+            "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-1.20.0.tgz",
+            "integrity": "sha512-ZUMo758uduM0Tfgzi/kd+0IKMbNdumCxxWjY36uf1DIs2Qyg9HIq3vA1Wfa/vc6HE7tHWFpANRi3mv7UzJ68MQ==",
             "license": "MIT",
             "dependencies": {
-                "@shikijs/types": "1.18.0",
+                "@shikijs/types": "1.20.0",
                 "@shikijs/vscode-textmate": "^9.2.2",
                 "oniguruma-to-js": "0.4.3"
             }
         },
         "node_modules/@shikijs/engine-oniguruma": {
-            "version": "1.18.0",
-            "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-1.18.0.tgz",
-            "integrity": "sha512-B9u0ZKI/cud+TcmF8Chyh+R4V5qQVvyDOqXC2l2a4x73PBSBc6sZ0JRAX3eqyJswqir6ktwApUUGBYePdKnMJg==",
+            "version": "1.20.0",
+            "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-1.20.0.tgz",
+            "integrity": "sha512-MQ40WkVTZk7by33ces4PGK6XNFSo6PYvKTSAr2kTWdRNhFmOcnaX+1XzvFwB26eySXR7U74t91czZ1qJkEgxTA==",
             "license": "MIT",
             "dependencies": {
-                "@shikijs/types": "1.18.0",
+                "@shikijs/types": "1.20.0",
                 "@shikijs/vscode-textmate": "^9.2.2"
             }
         },
         "node_modules/@shikijs/types": {
-            "version": "1.18.0",
-            "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-1.18.0.tgz",
-            "integrity": "sha512-O9N36UEaGGrxv1yUrN2nye7gDLG5Uq0/c1LyfmxsvzNPqlHzWo9DI0A4+fhW2y3bGKuQu/fwS7EPdKJJCowcVA==",
+            "version": "1.20.0",
+            "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-1.20.0.tgz",
+            "integrity": "sha512-y+EaDvU2K6/GaXOKXxJaGnr1XtmZMF7MfS0pSEDdxEq66gCtKsLwQvVwoQFdp7R7dLlNAro3ijEE19sMZ0pzqg==",
             "license": "MIT",
             "dependencies": {
                 "@shikijs/vscode-textmate": "^9.2.2",
@@ -4214,22 +4226,22 @@
             "license": "MIT"
         },
         "node_modules/@types/express": {
-            "version": "4.17.21",
-            "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz",
-            "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==",
+            "version": "5.0.0",
+            "resolved": "https://registry.npmjs.org/@types/express/-/express-5.0.0.tgz",
+            "integrity": "sha512-DvZriSMehGHL1ZNLzi6MidnsDhUZM/x2pRdDIKdwbUNqqwHxMlRdkxtn6/EPKyqKpHqTl/4nRZsRNLpZxZRpPQ==",
             "dev": true,
             "license": "MIT",
             "dependencies": {
                 "@types/body-parser": "*",
-                "@types/express-serve-static-core": "^4.17.33",
+                "@types/express-serve-static-core": "^5.0.0",
                 "@types/qs": "*",
                 "@types/serve-static": "*"
             }
         },
         "node_modules/@types/express-serve-static-core": {
-            "version": "4.19.5",
-            "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.5.tgz",
-            "integrity": "sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg==",
+            "version": "5.0.0",
+            "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.0.tgz",
+            "integrity": "sha512-AbXMTZGt40T+KON9/Fdxx0B2WK5hsgxcfXJLr5bFpZ7b4JCex2WyQPTEKdXqfHiY5nKKBScZ7yCoO6Pvgxfvnw==",
             "dev": true,
             "license": "MIT",
             "dependencies": {
@@ -4314,6 +4326,13 @@
                 "url": "https://github.com/inikulin/parse5?sponsor=1"
             }
         },
+        "node_modules/@types/json-schema": {
+            "version": "7.0.15",
+            "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
+            "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
+            "dev": true,
+            "license": "MIT"
+        },
         "node_modules/@types/json5": {
             "version": "0.0.29",
             "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
@@ -4395,9 +4414,9 @@
             "license": "MIT"
         },
         "node_modules/@types/node": {
-            "version": "22.5.5",
-            "resolved": "https://registry.npmjs.org/@types/node/-/node-22.5.5.tgz",
-            "integrity": "sha512-Xjs4y5UPO/CLdzpgR6GirZJx36yScjh73+2NlLlkFRSoQN8B0DpfXPdZGnvVmLRLOsqDpOfTNv7D9trgGhmOIA==",
+            "version": "22.7.4",
+            "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.4.tgz",
+            "integrity": "sha512-y+NPi1rFzDs1NdQHHToqeiX2TIS79SWEAw9GYhkkx8bD0ChpfqC+n2j5OXOCpzfojBEBt6DnEnnG9MY0zk1XLg==",
             "license": "MIT",
             "dependencies": {
                 "undici-types": "~6.19.2"
@@ -4522,17 +4541,17 @@
             }
         },
         "node_modules/@typescript-eslint/eslint-plugin": {
-            "version": "8.6.0",
-            "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.6.0.tgz",
-            "integrity": "sha512-UOaz/wFowmoh2G6Mr9gw60B1mm0MzUtm6Ic8G2yM1Le6gyj5Loi/N+O5mocugRGY+8OeeKmkMmbxNqUCq3B4Sg==",
+            "version": "8.7.0",
+            "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.7.0.tgz",
+            "integrity": "sha512-RIHOoznhA3CCfSTFiB6kBGLQtB/sox+pJ6jeFu6FxJvqL8qRxq/FfGO/UhsGgQM9oGdXkV4xUgli+dt26biB6A==",
             "dev": true,
             "license": "MIT",
             "dependencies": {
                 "@eslint-community/regexpp": "^4.10.0",
-                "@typescript-eslint/scope-manager": "8.6.0",
-                "@typescript-eslint/type-utils": "8.6.0",
-                "@typescript-eslint/utils": "8.6.0",
-                "@typescript-eslint/visitor-keys": "8.6.0",
+                "@typescript-eslint/scope-manager": "8.7.0",
+                "@typescript-eslint/type-utils": "8.7.0",
+                "@typescript-eslint/utils": "8.7.0",
+                "@typescript-eslint/visitor-keys": "8.7.0",
                 "graphemer": "^1.4.0",
                 "ignore": "^5.3.1",
                 "natural-compare": "^1.4.0",
@@ -4556,16 +4575,16 @@
             }
         },
         "node_modules/@typescript-eslint/parser": {
-            "version": "8.6.0",
-            "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.6.0.tgz",
-            "integrity": "sha512-eQcbCuA2Vmw45iGfcyG4y6rS7BhWfz9MQuk409WD47qMM+bKCGQWXxvoOs1DUp+T7UBMTtRTVT+kXr7Sh4O9Ow==",
+            "version": "8.7.0",
+            "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.7.0.tgz",
+            "integrity": "sha512-lN0btVpj2unxHlNYLI//BQ7nzbMJYBVQX5+pbNXvGYazdlgYonMn4AhhHifQ+J4fGRYA/m1DjaQjx+fDetqBOQ==",
             "dev": true,
             "license": "BSD-2-Clause",
             "dependencies": {
-                "@typescript-eslint/scope-manager": "8.6.0",
-                "@typescript-eslint/types": "8.6.0",
-                "@typescript-eslint/typescript-estree": "8.6.0",
-                "@typescript-eslint/visitor-keys": "8.6.0",
+                "@typescript-eslint/scope-manager": "8.7.0",
+                "@typescript-eslint/types": "8.7.0",
+                "@typescript-eslint/typescript-estree": "8.7.0",
+                "@typescript-eslint/visitor-keys": "8.7.0",
                 "debug": "^4.3.4"
             },
             "engines": {
@@ -4585,14 +4604,14 @@
             }
         },
         "node_modules/@typescript-eslint/scope-manager": {
-            "version": "8.6.0",
-            "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.6.0.tgz",
-            "integrity": "sha512-ZuoutoS5y9UOxKvpc/GkvF4cuEmpokda4wRg64JEia27wX+PysIE9q+lzDtlHHgblwUWwo5/Qn+/WyTUvDwBHw==",
+            "version": "8.7.0",
+            "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.7.0.tgz",
+            "integrity": "sha512-87rC0k3ZlDOuz82zzXRtQ7Akv3GKhHs0ti4YcbAJtaomllXoSO8hi7Ix3ccEvCd824dy9aIX+j3d2UMAfCtVpg==",
             "dev": true,
             "license": "MIT",
             "dependencies": {
-                "@typescript-eslint/types": "8.6.0",
-                "@typescript-eslint/visitor-keys": "8.6.0"
+                "@typescript-eslint/types": "8.7.0",
+                "@typescript-eslint/visitor-keys": "8.7.0"
             },
             "engines": {
                 "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -4603,14 +4622,14 @@
             }
         },
         "node_modules/@typescript-eslint/type-utils": {
-            "version": "8.6.0",
-            "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.6.0.tgz",
-            "integrity": "sha512-dtePl4gsuenXVwC7dVNlb4mGDcKjDT/Ropsk4za/ouMBPplCLyznIaR+W65mvCvsyS97dymoBRrioEXI7k0XIg==",
+            "version": "8.7.0",
+            "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.7.0.tgz",
+            "integrity": "sha512-tl0N0Mj3hMSkEYhLkjREp54OSb/FI6qyCzfiiclvJvOqre6hsZTGSnHtmFLDU8TIM62G7ygEa1bI08lcuRwEnQ==",
             "dev": true,
             "license": "MIT",
             "dependencies": {
-                "@typescript-eslint/typescript-estree": "8.6.0",
-                "@typescript-eslint/utils": "8.6.0",
+                "@typescript-eslint/typescript-estree": "8.7.0",
+                "@typescript-eslint/utils": "8.7.0",
                 "debug": "^4.3.4",
                 "ts-api-utils": "^1.3.0"
             },
@@ -4628,9 +4647,9 @@
             }
         },
         "node_modules/@typescript-eslint/types": {
-            "version": "8.6.0",
-            "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.6.0.tgz",
-            "integrity": "sha512-rojqFZGd4MQxw33SrOy09qIDS8WEldM8JWtKQLAjf/X5mGSeEFh5ixQlxssMNyPslVIk9yzWqXCsV2eFhYrYUw==",
+            "version": "8.7.0",
+            "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.7.0.tgz",
+            "integrity": "sha512-LLt4BLHFwSfASHSF2K29SZ+ZCsbQOM+LuarPjRUuHm+Qd09hSe3GCeaQbcCr+Mik+0QFRmep/FyZBO6fJ64U3w==",
             "dev": true,
             "license": "MIT",
             "engines": {
@@ -4642,14 +4661,14 @@
             }
         },
         "node_modules/@typescript-eslint/typescript-estree": {
-            "version": "8.6.0",
-            "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.6.0.tgz",
-            "integrity": "sha512-MOVAzsKJIPIlLK239l5s06YXjNqpKTVhBVDnqUumQJja5+Y94V3+4VUFRA0G60y2jNnTVwRCkhyGQpavfsbq/g==",
+            "version": "8.7.0",
+            "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.7.0.tgz",
+            "integrity": "sha512-MC8nmcGHsmfAKxwnluTQpNqceniT8SteVwd2voYlmiSWGOtjvGXdPl17dYu2797GVscK30Z04WRM28CrKS9WOg==",
             "dev": true,
             "license": "BSD-2-Clause",
             "dependencies": {
-                "@typescript-eslint/types": "8.6.0",
-                "@typescript-eslint/visitor-keys": "8.6.0",
+                "@typescript-eslint/types": "8.7.0",
+                "@typescript-eslint/visitor-keys": "8.7.0",
                 "debug": "^4.3.4",
                 "fast-glob": "^3.3.2",
                 "is-glob": "^4.0.3",
@@ -4697,16 +4716,16 @@
             }
         },
         "node_modules/@typescript-eslint/utils": {
-            "version": "8.6.0",
-            "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.6.0.tgz",
-            "integrity": "sha512-eNp9cWnYf36NaOVjkEUznf6fEgVy1TWpE0o52e4wtojjBx7D1UV2WAWGzR+8Y5lVFtpMLPwNbC67T83DWSph4A==",
+            "version": "8.7.0",
+            "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.7.0.tgz",
+            "integrity": "sha512-ZbdUdwsl2X/s3CiyAu3gOlfQzpbuG3nTWKPoIvAu1pu5r8viiJvv2NPN2AqArL35NCYtw/lrPPfM4gxrMLNLPw==",
             "dev": true,
             "license": "MIT",
             "dependencies": {
                 "@eslint-community/eslint-utils": "^4.4.0",
-                "@typescript-eslint/scope-manager": "8.6.0",
-                "@typescript-eslint/types": "8.6.0",
-                "@typescript-eslint/typescript-estree": "8.6.0"
+                "@typescript-eslint/scope-manager": "8.7.0",
+                "@typescript-eslint/types": "8.7.0",
+                "@typescript-eslint/typescript-estree": "8.7.0"
             },
             "engines": {
                 "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -4720,13 +4739,13 @@
             }
         },
         "node_modules/@typescript-eslint/visitor-keys": {
-            "version": "8.6.0",
-            "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.6.0.tgz",
-            "integrity": "sha512-wapVFfZg9H0qOYh4grNVQiMklJGluQrOUiOhYRrQWhx7BY/+I1IYb8BczWNbbUpO+pqy0rDciv3lQH5E1bCLrg==",
+            "version": "8.7.0",
+            "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.7.0.tgz",
+            "integrity": "sha512-b1tx0orFCCh/THWPQa2ZwWzvOeyzzp36vkJYOpVg0u8UVOIsfVrnuC9FqAw9gRKn+rG2VmWQ/zDJZzkxUnj/XQ==",
             "dev": true,
             "license": "MIT",
             "dependencies": {
-                "@typescript-eslint/types": "8.6.0",
+                "@typescript-eslint/types": "8.7.0",
                 "eslint-visitor-keys": "^3.4.3"
             },
             "engines": {
@@ -4757,16 +4776,16 @@
             "license": "ISC"
         },
         "node_modules/@virmator/compile": {
-            "version": "13.3.15",
-            "resolved": "https://registry.npmjs.org/@virmator/compile/-/compile-13.3.15.tgz",
-            "integrity": "sha512-eWkuOC6GzWVa/tgP+OHLdECajFXtm58ybWiSGJt1FvxX2MynGTIKTHN03LaFUAjF0/KLC3oHAmrIBJ+lxrMxbA==",
+            "version": "13.4.1",
+            "resolved": "https://registry.npmjs.org/@virmator/compile/-/compile-13.4.1.tgz",
+            "integrity": "sha512-sHn3wNKSXkGN4/Ah31ckC/ctfADbDepwqgD+1/L2fgVLWsE0huu9NG4OyrqyLpIAnNDNK3OsvfQnzkCNhcTnOg==",
             "dev": true,
             "license": "(MIT or CC0 1.0)",
             "dependencies": {
                 "@augment-vir/assert": "^30.0.4",
                 "@augment-vir/common": "^30.0.4",
                 "@augment-vir/node": "^30.0.4",
-                "@virmator/core": "^13.3.15"
+                "@virmator/core": "^13.4.1"
             },
             "engines": {
                 "node": ">=22"
@@ -4776,9 +4795,9 @@
             }
         },
         "node_modules/@virmator/core": {
-            "version": "13.3.15",
-            "resolved": "https://registry.npmjs.org/@virmator/core/-/core-13.3.15.tgz",
-            "integrity": "sha512-RR7M8ntnw7qt1lP1bvSuhpfUUhx9m2EBdc3JOUBnGBenar+wm2jSDl28DhLTINE/NwRdaMOIx9MbHq/878ZiHw==",
+            "version": "13.4.1",
+            "resolved": "https://registry.npmjs.org/@virmator/core/-/core-13.4.1.tgz",
+            "integrity": "sha512-ROfVwOb7F6nvpm3j5Y+1i/HJI8RDOzGI60tIAoPVUvb3+aZQreFZtdsz7aFjzQfrBb4KE9FfVL60x9ULzprn7Q==",
             "license": "(MIT or CC0 1.0)",
             "dependencies": {
                 "@augment-vir/assert": "^30.0.4",
@@ -4865,16 +4884,16 @@
             }
         },
         "node_modules/@virmator/deps": {
-            "version": "13.3.15",
-            "resolved": "https://registry.npmjs.org/@virmator/deps/-/deps-13.3.15.tgz",
-            "integrity": "sha512-nBF478mJB2DdWieZ45AXz2jH+gZmOkoDNp0+FNo/Ygz5y/I9MrYqhDDENrksncDDpRncRDyPkj22OiMUYBlthw==",
+            "version": "13.4.1",
+            "resolved": "https://registry.npmjs.org/@virmator/deps/-/deps-13.4.1.tgz",
+            "integrity": "sha512-a/4rPLM8biIOmLmM16IprCm0Roydv2JWsRfGn5QyfVGLQpNDkeQ4xvzrc+cjAXqbwCYLNgFSvBJiMx/mvANpvg==",
             "dev": true,
             "license": "(MIT or CC0 1.0)",
             "dependencies": {
                 "@augment-vir/assert": "^30.0.4",
                 "@augment-vir/common": "^30.0.4",
                 "@augment-vir/node": "^30.0.4",
-                "@virmator/core": "^13.3.15",
+                "@virmator/core": "^13.4.1",
                 "mri": "^1.2.0"
             },
             "engines": {
@@ -4882,15 +4901,15 @@
             }
         },
         "node_modules/@virmator/docs": {
-            "version": "13.3.15",
-            "resolved": "https://registry.npmjs.org/@virmator/docs/-/docs-13.3.15.tgz",
-            "integrity": "sha512-HM9iHQT/oIRnv9bxr8ZCQRWCUmm2GMa8UvGQIdPXfqG9xRXOpFgdC9qoP8B+0FXh9qdPFcdZkAG5Bq25GN+G8w==",
+            "version": "13.4.1",
+            "resolved": "https://registry.npmjs.org/@virmator/docs/-/docs-13.4.1.tgz",
+            "integrity": "sha512-ecRZ5DfGE4FifM24/uUIGb17V1uqkIR+0letDdl6r9XKAshe5JBjzcphr/7ncU/z59JX+cmQTBimZtQlCGKd7Q==",
             "license": "(MIT or CC0 1.0)",
             "dependencies": {
                 "@augment-vir/assert": "^30.0.4",
                 "@augment-vir/common": "^30.0.4",
                 "@augment-vir/node": "^30.0.4",
-                "@virmator/core": "^13.3.15",
+                "@virmator/core": "^13.4.1",
                 "chalk": "^5.3.0",
                 "mri": "^1.2.0"
             },
@@ -4899,15 +4918,15 @@
             }
         },
         "node_modules/@virmator/format": {
-            "version": "13.3.15",
-            "resolved": "https://registry.npmjs.org/@virmator/format/-/format-13.3.15.tgz",
-            "integrity": "sha512-LdEktHq0OhmkbVTHXPxrfsgyHzKRTzupMKqlfcnEduN5WlFYFGr1UsG595E+bROTAkaGIer0iHwqyvDvYsaoNQ==",
+            "version": "13.4.1",
+            "resolved": "https://registry.npmjs.org/@virmator/format/-/format-13.4.1.tgz",
+            "integrity": "sha512-EzRqTHdM/sYOwQ246+ARim+5tTqJbKiLXY553eOhdorCuWvpLwDncRQiPMyQNHUBoRBu4Yw9tkf2vTk8tJ21Fg==",
             "dev": true,
             "license": "(MIT or CC0 1.0)",
             "dependencies": {
                 "@augment-vir/assert": "^30.0.4",
                 "@augment-vir/common": "^30.0.4",
-                "@virmator/core": "^13.3.15",
+                "@virmator/core": "^13.4.1",
                 "mri": "^1.2.0"
             },
             "engines": {
@@ -4915,16 +4934,16 @@
             }
         },
         "node_modules/@virmator/frontend": {
-            "version": "13.3.15",
-            "resolved": "https://registry.npmjs.org/@virmator/frontend/-/frontend-13.3.15.tgz",
-            "integrity": "sha512-VxmkTm8j5BaLJfSgj1m1tNR+7o9Yue4SWjVsVUGHIqXIVYiaCLjflIXtaa9vL657NbS0eUe+7qsCshYMe/zHaA==",
+            "version": "13.4.1",
+            "resolved": "https://registry.npmjs.org/@virmator/frontend/-/frontend-13.4.1.tgz",
+            "integrity": "sha512-KshCE/PkRCa+jCEmjoobGjx59v2ajZPfnssu9FJ9Vrg+ctzNKQJVuwIA5CVdnVqQjmjSGvkMSgSVzQwoPoQG7Q==",
             "dev": true,
             "license": "(MIT or CC0 1.0)",
             "dependencies": {
                 "@augment-vir/assert": "^30.0.4",
                 "@augment-vir/common": "^30.0.4",
                 "@augment-vir/node": "^30.0.4",
-                "@virmator/core": "^13.3.15",
+                "@virmator/core": "^13.4.1",
                 "mri": "^1.2.0"
             },
             "engines": {
@@ -4932,32 +4951,32 @@
             }
         },
         "node_modules/@virmator/help": {
-            "version": "13.3.15",
-            "resolved": "https://registry.npmjs.org/@virmator/help/-/help-13.3.15.tgz",
-            "integrity": "sha512-qJDhIURdBnNjpQ6nxgeBgdax+LhByEdw/stz69zIGCYVDOvlM2eOciQQepOybglKGZKpDMRPwHHlvxtH1LJ7zA==",
+            "version": "13.4.1",
+            "resolved": "https://registry.npmjs.org/@virmator/help/-/help-13.4.1.tgz",
+            "integrity": "sha512-k80i+MUmnEHk59YJroY2PaXSf7HSM/eV8YmqwGz2LByNzz8pkxWwRdVhNWpQupQF6aP9yvEloapfPBg4Td09+Q==",
             "dev": true,
             "license": "(MIT or CC0 1.0)",
             "dependencies": {
                 "@augment-vir/assert": "^30.0.4",
                 "@augment-vir/common": "^30.0.4",
                 "@augment-vir/node": "^30.0.4",
-                "@virmator/core": "^13.3.15"
+                "@virmator/core": "^13.4.1"
             },
             "engines": {
                 "node": ">=22"
             }
         },
         "node_modules/@virmator/init": {
-            "version": "13.3.15",
-            "resolved": "https://registry.npmjs.org/@virmator/init/-/init-13.3.15.tgz",
-            "integrity": "sha512-dDyPnrR6/64StRz6PZb2h4CRQyfVwcN2woUODUwKpQEUVISIO88Vf6dYzju+rLUACeTJb+s0E8BviX/6V0Wx9Q==",
+            "version": "13.4.1",
+            "resolved": "https://registry.npmjs.org/@virmator/init/-/init-13.4.1.tgz",
+            "integrity": "sha512-KzWtWhbaWGLkG+IUfhH6IisimX1BRVUnr44I6yS6gs+Epam+vBxLAxkCCQfKJ+AmNy59Fkf0KoLk4CucA/yn7Q==",
             "dev": true,
             "license": "(MIT or CC0 1.0)",
             "dependencies": {
                 "@augment-vir/assert": "^30.0.4",
                 "@augment-vir/common": "^30.0.4",
                 "@augment-vir/node": "^30.0.4",
-                "@virmator/core": "^13.3.15",
+                "@virmator/core": "^13.4.1",
                 "simple-git": "^3.26.0"
             },
             "engines": {
@@ -4965,15 +4984,15 @@
             }
         },
         "node_modules/@virmator/lint": {
-            "version": "13.3.15",
-            "resolved": "https://registry.npmjs.org/@virmator/lint/-/lint-13.3.15.tgz",
-            "integrity": "sha512-/VkArQSCiKhHCNwwLjHEC6KmHT7YclWI8zUp4W3HFSrFjUPc+W1CV0PSDF2XEUi5T1pZn8nzLrAFvK6xS8HeIA==",
+            "version": "13.4.1",
+            "resolved": "https://registry.npmjs.org/@virmator/lint/-/lint-13.4.1.tgz",
+            "integrity": "sha512-dlW9GWWwzvkxW8hgeGKKAbyYoQSJCL+Yg5tROGVHaXKt2xF7j1Zl6di6t5B5pJn/5D0dBNZnctdK1zx75FwJ7g==",
             "dev": true,
             "license": "(MIT or CC0 1.0)",
             "dependencies": {
                 "@augment-vir/assert": "^30.0.4",
                 "@augment-vir/common": "^30.0.4",
-                "@virmator/core": "^13.3.15",
+                "@virmator/core": "^13.4.1",
                 "mri": "^1.2.0"
             },
             "engines": {
@@ -4981,16 +5000,16 @@
             }
         },
         "node_modules/@virmator/publish": {
-            "version": "13.3.15",
-            "resolved": "https://registry.npmjs.org/@virmator/publish/-/publish-13.3.15.tgz",
-            "integrity": "sha512-iKgFARnYOEotZf71xh+APXygYc2dBeETTs2vsuiRh781I/dGEitAoP7lFmDmjbRnQ6ccBDYvBG8VTZ5LzRbR1g==",
+            "version": "13.4.1",
+            "resolved": "https://registry.npmjs.org/@virmator/publish/-/publish-13.4.1.tgz",
+            "integrity": "sha512-zR+fyZCGIsQPDiLOlAvzEPyQAiGyu+OKkxjMKXt3lRUq3fFbkAvFKg7CJSErmtp7TPSM+9YcUkmZ7THlY/JXYg==",
             "dev": true,
             "license": "(MIT or CC0 1.0)",
             "dependencies": {
                 "@augment-vir/assert": "^30.0.4",
                 "@augment-vir/common": "^30.0.4",
                 "@augment-vir/node": "^30.0.4",
-                "@virmator/core": "^13.3.15",
+                "@virmator/core": "^13.4.1",
                 "chalk": "^5.3.0",
                 "mri": "^1.2.0",
                 "semver": "^7.6.3",
@@ -5002,16 +5021,16 @@
             }
         },
         "node_modules/@virmator/spellcheck": {
-            "version": "13.3.15",
-            "resolved": "https://registry.npmjs.org/@virmator/spellcheck/-/spellcheck-13.3.15.tgz",
-            "integrity": "sha512-5Jh9YDqeONo9Q100+JBrWBDZnP0bksbxo8tl5PSuqfIWPlWndmMjY2MUujdJoK/swR56uQ/XKtpmm891FBd3Bg==",
+            "version": "13.4.1",
+            "resolved": "https://registry.npmjs.org/@virmator/spellcheck/-/spellcheck-13.4.1.tgz",
+            "integrity": "sha512-pnNoUjHbQK4MCBEaiRW4906uRZ73lxxBcwXCLCpQEGDTURnFq63VspVFH7SweMilpOlIu+YxcC+gnrMH2ktgyQ==",
             "dev": true,
             "license": "(MIT or CC0 1.0)",
             "dependencies": {
                 "@augment-vir/assert": "^30.0.4",
                 "@augment-vir/common": "^30.0.4",
                 "@augment-vir/node": "^30.0.4",
-                "@virmator/core": "^13.3.15",
+                "@virmator/core": "^13.4.1",
                 "mri": "^1.2.0"
             },
             "engines": {
@@ -5019,16 +5038,16 @@
             }
         },
         "node_modules/@virmator/test": {
-            "version": "13.3.15",
-            "resolved": "https://registry.npmjs.org/@virmator/test/-/test-13.3.15.tgz",
-            "integrity": "sha512-YiVHruskjG2YleztqrL4ULukW7j9lQhi6jRY1zYgHXkX1o/LWOAV+tjmMHPg0ayHglfYTi8k/JM8hQcBGeI0uQ==",
+            "version": "13.4.1",
+            "resolved": "https://registry.npmjs.org/@virmator/test/-/test-13.4.1.tgz",
+            "integrity": "sha512-Hy1ujw8cCgKfchpKBzVzlKpJTELmNXp0B3sOG0zjd03nScqGxFuPh/14cAolS4d4XPvRl0HPeHZF8EGqgLKcgw==",
             "dev": true,
             "license": "(MIT or CC0 1.0)",
             "dependencies": {
                 "@augment-vir/assert": "^30.0.4",
                 "@augment-vir/common": "^30.0.4",
                 "@augment-vir/node": "^30.0.4",
-                "@virmator/core": "^13.3.15",
+                "@virmator/core": "^13.4.1",
                 "glob": "^11.0.0",
                 "mri": "^1.2.0"
             },
@@ -5071,9 +5090,9 @@
             }
         },
         "node_modules/@virmator/test/node_modules/jackspeak": {
-            "version": "4.0.1",
-            "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.0.1.tgz",
-            "integrity": "sha512-cub8rahkh0Q/bw1+GxP7aeSe29hHHn2V4m29nnDlvCdlgU+3UGxkZp7Z53jLUdpX3jdTO0nJZUDl3xvbWc2Xog==",
+            "version": "4.0.2",
+            "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.0.2.tgz",
+            "integrity": "sha512-bZsjR/iRjl1Nk1UkjGpAzLNfQtzuijhn2g+pbZb98HQ1Gk8vM9hfbxeMBP+M2/UUdwj0RqGG3mlvk2MsAqwvEw==",
             "dev": true,
             "license": "BlueOak-1.0.0",
             "dependencies": {
@@ -5084,9 +5103,6 @@
             },
             "funding": {
                 "url": "https://github.com/sponsors/isaacs"
-            },
-            "optionalDependencies": {
-                "@pkgjs/parseargs": "^0.11.0"
             }
         },
         "node_modules/@virmator/test/node_modules/lru-cache": {
@@ -5186,16 +5202,16 @@
             }
         },
         "node_modules/@web/dev-server-core": {
-            "version": "0.7.2",
-            "resolved": "https://registry.npmjs.org/@web/dev-server-core/-/dev-server-core-0.7.2.tgz",
-            "integrity": "sha512-Q/0jpF13Ipk+qGGQ+Yx/FW1TQBYazpkfgYHHo96HBE7qv4V4KKHqHglZcSUxti/zd4bToxX1cFTz8dmbTlb8JA==",
+            "version": "0.7.3",
+            "resolved": "https://registry.npmjs.org/@web/dev-server-core/-/dev-server-core-0.7.3.tgz",
+            "integrity": "sha512-GS+Ok6HiqNZOsw2oEv5V2OISZ2s/6icJodyGjUuD3RChr0G5HiESbKf2K8mZV4shTz9sRC9KSQf8qvno2gPKrQ==",
             "dev": true,
             "license": "MIT",
             "dependencies": {
                 "@types/koa": "^2.11.6",
                 "@types/ws": "^7.4.0",
                 "@web/parse5-utils": "^2.1.0",
-                "chokidar": "^3.4.3",
+                "chokidar": "^4.0.1",
                 "clone": "^2.1.2",
                 "es-module-lexer": "^1.0.0",
                 "get-stream": "^6.0.0",
@@ -5209,7 +5225,7 @@
                 "mime-types": "^2.1.27",
                 "parse5": "^6.0.1",
                 "picomatch": "^2.2.2",
-                "ws": "^7.4.2"
+                "ws": "^7.5.10"
             },
             "engines": {
                 "node": ">=18.0.0"
@@ -5782,9 +5798,9 @@
             }
         },
         "node_modules/@web/test-runner-core": {
-            "version": "0.13.3",
-            "resolved": "https://registry.npmjs.org/@web/test-runner-core/-/test-runner-core-0.13.3.tgz",
-            "integrity": "sha512-ilDqF/v2sj0sD69FNSIDT7uw4M1yTVedLBt32/lXy3MMi6suCM7m/ZlhsBy8PXhf879WMvzBOl/vhJBpEMB9vA==",
+            "version": "0.13.4",
+            "resolved": "https://registry.npmjs.org/@web/test-runner-core/-/test-runner-core-0.13.4.tgz",
+            "integrity": "sha512-84E1025aUSjvZU1j17eCTwV7m5Zg3cZHErV3+CaJM9JPCesZwLraIa0ONIQ9w4KLgcDgJFw9UnJ0LbFf42h6tg==",
             "dev": true,
             "license": "MIT",
             "dependencies": {
@@ -5796,8 +5812,8 @@
                 "@types/istanbul-lib-coverage": "^2.0.3",
                 "@types/istanbul-reports": "^3.0.0",
                 "@web/browser-logs": "^0.4.0",
-                "@web/dev-server-core": "^0.7.2",
-                "chokidar": "^3.4.3",
+                "@web/dev-server-core": "^0.7.3",
+                "chokidar": "^4.0.1",
                 "cli-cursor": "^3.1.0",
                 "co-body": "^6.1.0",
                 "convert-source-map": "^2.0.0",
@@ -6080,33 +6096,6 @@
                 "url": "https://github.com/chalk/ansi-styles?sponsor=1"
             }
         },
-        "node_modules/anymatch": {
-            "version": "3.1.3",
-            "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
-            "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
-            "dev": true,
-            "license": "ISC",
-            "dependencies": {
-                "normalize-path": "^3.0.0",
-                "picomatch": "^2.0.4"
-            },
-            "engines": {
-                "node": ">= 8"
-            }
-        },
-        "node_modules/anymatch/node_modules/picomatch": {
-            "version": "2.3.1",
-            "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
-            "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
-            "dev": true,
-            "license": "MIT",
-            "engines": {
-                "node": ">=8.6"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/jonschlinkert"
-            }
-        },
         "node_modules/are-docs-informative": {
             "version": "0.0.2",
             "resolved": "https://registry.npmjs.org/are-docs-informative/-/are-docs-informative-0.0.2.tgz",
@@ -6428,9 +6417,9 @@
             }
         },
         "node_modules/b4a": {
-            "version": "1.6.6",
-            "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.6.tgz",
-            "integrity": "sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg==",
+            "version": "1.6.7",
+            "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.7.tgz",
+            "integrity": "sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==",
             "dev": true,
             "license": "Apache-2.0"
         },
@@ -6493,9 +6482,9 @@
             "license": "MIT"
         },
         "node_modules/bare-events": {
-            "version": "2.4.2",
-            "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.4.2.tgz",
-            "integrity": "sha512-qMKFd2qG/36aA4GwvKq8MxnPgCQAmBWmSyLWsJcbn8v03wvIPQ/hG1Ms8bPzndZxMDoHpxez5VOS+gC9Yi24/Q==",
+            "version": "2.5.0",
+            "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.5.0.tgz",
+            "integrity": "sha512-/E8dDe9dsbLyh2qrZ64PEPadOQ0F4gbl1sUJOrmph7xOiIxfY8vwab/4bFLh4Y88/Hk/ujKcrQKc+ps0mv873A==",
             "dev": true,
             "license": "Apache-2.0",
             "optional": true
@@ -6575,19 +6564,6 @@
                 "node": ">=10.0.0"
             }
         },
-        "node_modules/binary-extensions": {
-            "version": "2.3.0",
-            "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
-            "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
-            "dev": true,
-            "license": "MIT",
-            "engines": {
-                "node": ">=8"
-            },
-            "funding": {
-                "url": "https://github.com/sponsors/sindresorhus"
-            }
-        },
         "node_modules/binary-searching": {
             "version": "2.0.5",
             "resolved": "https://registry.npmjs.org/binary-searching/-/binary-searching-2.0.5.tgz",
@@ -6633,9 +6609,9 @@
             "license": "MIT"
         },
         "node_modules/browserslist": {
-            "version": "4.23.3",
-            "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz",
-            "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==",
+            "version": "4.24.0",
+            "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.0.tgz",
+            "integrity": "sha512-Rmb62sR1Zpjql25eSanFGEhAxcFwfA1K0GuQcLoaJBAcENegrQut3hYdhXFF1obQfiDyqIW/cLM5HSJ/9k884A==",
             "dev": true,
             "funding": [
                 {
@@ -6653,8 +6629,8 @@
             ],
             "license": "MIT",
             "dependencies": {
-                "caniuse-lite": "^1.0.30001646",
-                "electron-to-chromium": "^1.5.4",
+                "caniuse-lite": "^1.0.30001663",
+                "electron-to-chromium": "^1.5.28",
                 "node-releases": "^2.0.18",
                 "update-browserslist-db": "^1.1.0"
             },
@@ -6815,9 +6791,9 @@
             }
         },
         "node_modules/caniuse-lite": {
-            "version": "1.0.30001663",
-            "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001663.tgz",
-            "integrity": "sha512-o9C3X27GLKbLeTYZ6HBOLU1tsAcBZsLis28wrVzddShCS16RujjHp9GDHKZqrB3meE0YjhawvMFsGb/igqiPzA==",
+            "version": "1.0.30001664",
+            "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001664.tgz",
+            "integrity": "sha512-AmE7k4dXiNKQipgn7a2xg558IRqPN3jMQY/rOsbxDhrd0tyChwbITBfiwtnqz8bi2M5mIWbxAYBvk7W7QBUS2g==",
             "dev": true,
             "funding": [
                 {
@@ -6905,41 +6881,19 @@
             }
         },
         "node_modules/chokidar": {
-            "version": "3.6.0",
-            "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
-            "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
+            "version": "4.0.1",
+            "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.1.tgz",
+            "integrity": "sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==",
             "dev": true,
             "license": "MIT",
             "dependencies": {
-                "anymatch": "~3.1.2",
-                "braces": "~3.0.2",
-                "glob-parent": "~5.1.2",
-                "is-binary-path": "~2.1.0",
-                "is-glob": "~4.0.1",
-                "normalize-path": "~3.0.0",
-                "readdirp": "~3.6.0"
+                "readdirp": "^4.0.1"
             },
             "engines": {
-                "node": ">= 8.10.0"
+                "node": ">= 14.16.0"
             },
             "funding": {
                 "url": "https://paulmillr.com/funding/"
-            },
-            "optionalDependencies": {
-                "fsevents": "~2.3.2"
-            }
-        },
-        "node_modules/chokidar/node_modules/glob-parent": {
-            "version": "5.1.2",
-            "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
-            "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
-            "dev": true,
-            "license": "ISC",
-            "dependencies": {
-                "is-glob": "^4.0.1"
-            },
-            "engines": {
-                "node": ">= 6"
             }
         },
         "node_modules/chrome-launcher": {
@@ -8259,9 +8213,9 @@
             "license": "MIT"
         },
         "node_modules/electron-to-chromium": {
-            "version": "1.5.27",
-            "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.27.tgz",
-            "integrity": "sha512-o37j1vZqCoEgBuWWXLHQgTN/KDKe7zwpiY5CPeq2RvUqOyJw9xnrULzZAEVQ5p4h+zjMk7hgtOoPdnLxr7m/jw==",
+            "version": "1.5.29",
+            "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.29.tgz",
+            "integrity": "sha512-PF8n2AlIhCKXQ+gTpiJi0VhcHDb69kYX4MtCiivctc2QD3XuNZ/XIOlbGzt7WAjjEev0TtaH6Cu3arZExm5DOw==",
             "dev": true,
             "license": "ISC"
         },
@@ -8673,21 +8627,24 @@
             }
         },
         "node_modules/eslint": {
-            "version": "9.11.0",
-            "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.11.0.tgz",
-            "integrity": "sha512-yVS6XODx+tMFMDFcG4+Hlh+qG7RM6cCJXtQhCKLSsr3XkLvWggHjCqjfh0XsPPnt1c56oaT6PMgW9XWQQjdHXA==",
+            "version": "9.11.1",
+            "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.11.1.tgz",
+            "integrity": "sha512-MobhYKIoAO1s1e4VUrgx1l1Sk2JBR/Gqjjgw8+mfgoLE2xwsHur4gdfTxyTgShrhvdVFTaJSgMiQBl1jv/AWxg==",
             "dev": true,
             "license": "MIT",
             "dependencies": {
                 "@eslint-community/eslint-utils": "^4.2.0",
                 "@eslint-community/regexpp": "^4.11.0",
                 "@eslint/config-array": "^0.18.0",
+                "@eslint/core": "^0.6.0",
                 "@eslint/eslintrc": "^3.1.0",
-                "@eslint/js": "9.11.0",
+                "@eslint/js": "9.11.1",
                 "@eslint/plugin-kit": "^0.2.0",
                 "@humanwhocodes/module-importer": "^1.0.1",
                 "@humanwhocodes/retry": "^0.3.0",
                 "@nodelib/fs.walk": "^1.2.8",
+                "@types/estree": "^1.0.6",
+                "@types/json-schema": "^7.0.15",
                 "ajv": "^6.12.4",
                 "chalk": "^4.0.0",
                 "cross-spawn": "^7.0.2",
@@ -8768,9 +8725,9 @@
             }
         },
         "node_modules/eslint-module-utils": {
-            "version": "2.11.0",
-            "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.11.0.tgz",
-            "integrity": "sha512-gbBE5Hitek/oG6MUVj6sFuzEjA/ClzNflVrLovHi/JgLdC7fiN5gLAY1WIPW1a0V5I999MnsrvVrCOGmmVqDBQ==",
+            "version": "2.12.0",
+            "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz",
+            "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==",
             "dev": true,
             "license": "MIT",
             "dependencies": {
@@ -8796,9 +8753,9 @@
             }
         },
         "node_modules/eslint-plugin-jsdoc": {
-            "version": "50.2.4",
-            "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-50.2.4.tgz",
-            "integrity": "sha512-020jA+dXaXdb+TML3ZJBvpPmzwbNROjnYuTYi/g6A5QEmEjhptz4oPJDKkOGMIByNxsPpdTLzSU1HYVqebOX1w==",
+            "version": "50.3.0",
+            "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-50.3.0.tgz",
+            "integrity": "sha512-P7qDB/RckdKETpBM4CtjHRQ5qXByPmFhRi86sN3E+J+tySchq+RSOGGhI2hDIefmmKFuTi/1ACjqsnDJDDDfzg==",
             "dev": true,
             "license": "BSD-3-Clause",
             "dependencies": {
@@ -8952,9 +8909,9 @@
             }
         },
         "node_modules/eslint-plugin-react": {
-            "version": "7.36.1",
-            "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.36.1.tgz",
-            "integrity": "sha512-/qwbqNXZoq+VP30s1d4Nc1C5GTxjJQjk4Jzs4Wq2qzxFM7dSmuG2UkIjg2USMLh3A/aVcUNrK7v0J5U1XEGGwA==",
+            "version": "7.37.0",
+            "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.0.tgz",
+            "integrity": "sha512-IHBePmfWH5lKhJnJ7WB1V+v/GolbB0rjS8XYVCSQCZKaQCAUhMoVoOEn1Ef8Z8Wf0a7l8KTJvuZg5/e4qrZ6nA==",
             "dev": true,
             "license": "MIT",
             "dependencies": {
@@ -9871,9 +9828,9 @@
             }
         },
         "node_modules/eslint-scope": {
-            "version": "8.0.2",
-            "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.0.2.tgz",
-            "integrity": "sha512-6E4xmrTw5wtxnLA5wYL3WDfhZ/1bUBGOXV0zQvVRDOtrR8D0p6W7fs3JweNYhwRYeGvd/1CKX2se0/2s7Q/nJA==",
+            "version": "8.1.0",
+            "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.1.0.tgz",
+            "integrity": "sha512-14dSvlhaVhKKsa9Fx1l8A17s7ah7Ef7wCakJ10LYk6+GYmP9yDti2oq2SEwcyndt6knfcZyhyxwY3i9yL78EQw==",
             "dev": true,
             "license": "BSD-2-Clause",
             "dependencies": {
@@ -9888,9 +9845,9 @@
             }
         },
         "node_modules/eslint-visitor-keys": {
-            "version": "4.0.0",
-            "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz",
-            "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==",
+            "version": "4.1.0",
+            "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.1.0.tgz",
+            "integrity": "sha512-Q7lok0mqMUSf5a/AdAZkA5a/gHcO6snwQClVNNvFKCAVlxXucdU8pKydU5ZVZjBx5xr37vGbFFWtLQYreLzrZg==",
             "dev": true,
             "license": "Apache-2.0",
             "engines": {
@@ -9997,15 +9954,15 @@
             }
         },
         "node_modules/espree": {
-            "version": "10.1.0",
-            "resolved": "https://registry.npmjs.org/espree/-/espree-10.1.0.tgz",
-            "integrity": "sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==",
+            "version": "10.2.0",
+            "resolved": "https://registry.npmjs.org/espree/-/espree-10.2.0.tgz",
+            "integrity": "sha512-upbkBJbckcCNBDBDXEbuhjbP68n+scUd3k/U2EkyM9nw+I/jPiL4cLF/Al06CF96wRltFda16sxDFrxsI1v0/g==",
             "dev": true,
             "license": "BSD-2-Clause",
             "dependencies": {
                 "acorn": "^8.12.0",
                 "acorn-jsx": "^5.3.2",
-                "eslint-visitor-keys": "^4.0.0"
+                "eslint-visitor-keys": "^4.1.0"
             },
             "engines": {
                 "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -10177,6 +10134,7 @@
             "version": "29.3.0",
             "resolved": "https://registry.npmjs.org/@augment-vir/node-js/-/node-js-29.3.0.tgz",
             "integrity": "sha512-MC+5HEcECwZ0SbG5Rtqv6+5gPINi/VIct2V+DLib4Zf6ZO8/0yiryQJsWKYHM2sumAbnlKB0mucj9jgPFepssA==",
+            "deprecated": "Use @augment-vir/node instead.",
             "dev": true,
             "license": "MIT",
             "dependencies": {
@@ -10308,9 +10266,9 @@
             "license": "MIT"
         },
         "node_modules/fast-uri": {
-            "version": "3.0.1",
-            "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.1.tgz",
-            "integrity": "sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==",
+            "version": "3.0.2",
+            "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.2.tgz",
+            "integrity": "sha512-GR6f0hD7XXyNJa25Tb9BuIdN0tdr+0BMi6/CJPH3wJO1JjNG3n/VsSw38AwRdKZABm8lGbPfakLRkYzx2V9row==",
             "dev": true,
             "license": "MIT"
         },
@@ -10516,9 +10474,9 @@
             }
         },
         "node_modules/fsevents": {
-            "version": "2.3.3",
-            "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
-            "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+            "version": "2.3.2",
+            "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
+            "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
             "dev": true,
             "hasInstallScript": true,
             "license": "MIT",
@@ -11424,19 +11382,6 @@
                 "url": "https://github.com/sponsors/ljharb"
             }
         },
-        "node_modules/is-binary-path": {
-            "version": "2.1.0",
-            "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
-            "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
-            "dev": true,
-            "license": "MIT",
-            "dependencies": {
-                "binary-extensions": "^2.0.0"
-            },
-            "engines": {
-                "node": ">=8"
-            }
-        },
         "node_modules/is-boolean-object": {
             "version": "1.1.2",
             "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz",
@@ -13490,16 +13435,6 @@
                 "semver": "bin/semver"
             }
         },
-        "node_modules/normalize-path": {
-            "version": "3.0.0",
-            "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
-            "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
-            "dev": true,
-            "license": "MIT",
-            "engines": {
-                "node": ">=0.10.0"
-            }
-        },
         "node_modules/npm-check-updates": {
             "version": "17.1.3",
             "resolved": "https://registry.npmjs.org/npm-check-updates/-/npm-check-updates-17.1.3.tgz",
@@ -13529,9 +13464,9 @@
             }
         },
         "node_modules/nwsapi": {
-            "version": "2.2.12",
-            "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.12.tgz",
-            "integrity": "sha512-qXDmcVlZV4XRtKFzddidpfVP4oMSGhga+xdMc25mv8kaLUHtgzCDhUxkrN8exkGdTlLNaXj7CV3GtON7zuGZ+w==",
+            "version": "2.2.13",
+            "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.13.tgz",
+            "integrity": "sha512-cTGB9ptp9dY9A5VbMSe7fQBcl/tt22Vcqdq8+eN93rblOuE0aCFu4aZ2vMwct/2t+lFnosm8RkQW1I0Omb1UtQ==",
             "license": "MIT"
         },
         "node_modules/object-assign": {
@@ -13925,9 +13860,9 @@
             }
         },
         "node_modules/package-json-from-dist": {
-            "version": "1.0.0",
-            "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz",
-            "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==",
+            "version": "1.0.1",
+            "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz",
+            "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==",
             "dev": true,
             "license": "BlueOak-1.0.0"
         },
@@ -14175,21 +14110,6 @@
                 "node": ">=18"
             }
         },
-        "node_modules/playwright/node_modules/fsevents": {
-            "version": "2.3.2",
-            "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
-            "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
-            "dev": true,
-            "hasInstallScript": true,
-            "license": "MIT",
-            "optional": true,
-            "os": [
-                "darwin"
-            ],
-            "engines": {
-                "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
-            }
-        },
         "node_modules/pluralize": {
             "version": "8.0.0",
             "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz",
@@ -14360,6 +14280,7 @@
             "version": "23.4.0",
             "resolved": "https://registry.npmjs.org/@augment-vir/node-js/-/node-js-23.4.0.tgz",
             "integrity": "sha512-t3CmXsAlZfCnhPAbWXeKYgXOvjt/1l0a5MxpCrvezzuwtwFDMNVDzVgm1HvUvgvsW9Q49ff+eY02x50vBb3Mzw==",
+            "deprecated": "Use @augment-vir/node instead.",
             "dev": true,
             "license": "MIT",
             "dependencies": {
@@ -14492,14 +14413,14 @@
             }
         },
         "node_modules/prisma": {
-            "version": "5.19.1",
-            "resolved": "https://registry.npmjs.org/prisma/-/prisma-5.19.1.tgz",
-            "integrity": "sha512-c5K9MiDaa+VAAyh1OiYk76PXOme9s3E992D7kvvIOhCrNsBQfy2mP2QAQtX0WNj140IgG++12kwZpYB9iIydNQ==",
+            "version": "5.20.0",
+            "resolved": "https://registry.npmjs.org/prisma/-/prisma-5.20.0.tgz",
+            "integrity": "sha512-6obb3ucKgAnsGS9x9gLOe8qa51XxvJ3vLQtmyf52CTey1Qcez3A6W6ROH5HIz5Q5bW+0VpmZb8WBohieMFGpig==",
             "dev": true,
             "hasInstallScript": true,
             "license": "Apache-2.0",
             "dependencies": {
-                "@prisma/engines": "5.19.1"
+                "@prisma/engines": "5.20.0"
             },
             "bin": {
                 "prisma": "build/index.js"
@@ -14511,6 +14432,21 @@
                 "fsevents": "2.3.3"
             }
         },
+        "node_modules/prisma/node_modules/fsevents": {
+            "version": "2.3.3",
+            "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+            "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+            "dev": true,
+            "hasInstallScript": true,
+            "license": "MIT",
+            "optional": true,
+            "os": [
+                "darwin"
+            ],
+            "engines": {
+                "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+            }
+        },
         "node_modules/progress": {
             "version": "2.0.3",
             "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
@@ -14667,9 +14603,9 @@
             }
         },
         "node_modules/puppeteer-core": {
-            "version": "23.4.0",
-            "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-23.4.0.tgz",
-            "integrity": "sha512-fqkIP5FOcb38jfBj/OcBz1wFaI9nk40uQKSORvnXws6wCbep2dg8yxZ3ddJxBIfQsxoiEOvnrykFinUScrB/ew==",
+            "version": "23.4.1",
+            "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-23.4.1.tgz",
+            "integrity": "sha512-uCxGtn8VE9PlKhdFJX/zZySi9K3Ufr3qUZe28jxJoZUqiMJOi+SFh2zhiFDSjWqZIDkc0FtnaCC+rewW3MYXmg==",
             "dev": true,
             "license": "Apache-2.0",
             "dependencies": {
@@ -14908,29 +14844,17 @@
             }
         },
         "node_modules/readdirp": {
-            "version": "3.6.0",
-            "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
-            "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
-            "dev": true,
-            "license": "MIT",
-            "dependencies": {
-                "picomatch": "^2.2.1"
-            },
-            "engines": {
-                "node": ">=8.10.0"
-            }
-        },
-        "node_modules/readdirp/node_modules/picomatch": {
-            "version": "2.3.1",
-            "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
-            "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+            "version": "4.0.1",
+            "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.0.1.tgz",
+            "integrity": "sha512-GkMg9uOTpIWWKbSsgwb5fA4EavTR+SG/PMPoAY8hkhHfEEY0/vqljY+XHqtDf2cr2IJtoNRDbrrEpZUiZCkYRw==",
             "dev": true,
             "license": "MIT",
             "engines": {
-                "node": ">=8.6"
+                "node": ">= 14.16.0"
             },
             "funding": {
-                "url": "https://github.com/sponsors/jonschlinkert"
+                "type": "individual",
+                "url": "https://paulmillr.com/funding/"
             }
         },
         "node_modules/rechoir": {
@@ -15292,13 +15216,13 @@
             }
         },
         "node_modules/rollup": {
-            "version": "4.22.4",
-            "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.22.4.tgz",
-            "integrity": "sha512-vD8HJ5raRcWOyymsR6Z3o6+RzfEPCnVLMFJ6vRslO1jt4LO6dUo5Qnpg7y4RkZFM2DMe3WUirkI5c16onjrc6A==",
+            "version": "4.22.5",
+            "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.22.5.tgz",
+            "integrity": "sha512-WoinX7GeQOFMGznEcWA1WrTQCd/tpEbMkc3nuMs9BT0CPjMdSjPMTVClwWd4pgSQwJdP65SK9mTCNvItlr5o7w==",
             "dev": true,
             "license": "MIT",
             "dependencies": {
-                "@types/estree": "1.0.5"
+                "@types/estree": "1.0.6"
             },
             "bin": {
                 "rollup": "dist/bin/rollup"
@@ -15308,32 +15232,25 @@
                 "npm": ">=8.0.0"
             },
             "optionalDependencies": {
-                "@rollup/rollup-android-arm-eabi": "4.22.4",
-                "@rollup/rollup-android-arm64": "4.22.4",
-                "@rollup/rollup-darwin-arm64": "4.22.4",
-                "@rollup/rollup-darwin-x64": "4.22.4",
-                "@rollup/rollup-linux-arm-gnueabihf": "4.22.4",
-                "@rollup/rollup-linux-arm-musleabihf": "4.22.4",
-                "@rollup/rollup-linux-arm64-gnu": "4.22.4",
-                "@rollup/rollup-linux-arm64-musl": "4.22.4",
-                "@rollup/rollup-linux-powerpc64le-gnu": "4.22.4",
-                "@rollup/rollup-linux-riscv64-gnu": "4.22.4",
-                "@rollup/rollup-linux-s390x-gnu": "4.22.4",
-                "@rollup/rollup-linux-x64-gnu": "4.22.4",
-                "@rollup/rollup-linux-x64-musl": "4.22.4",
-                "@rollup/rollup-win32-arm64-msvc": "4.22.4",
-                "@rollup/rollup-win32-ia32-msvc": "4.22.4",
-                "@rollup/rollup-win32-x64-msvc": "4.22.4",
+                "@rollup/rollup-android-arm-eabi": "4.22.5",
+                "@rollup/rollup-android-arm64": "4.22.5",
+                "@rollup/rollup-darwin-arm64": "4.22.5",
+                "@rollup/rollup-darwin-x64": "4.22.5",
+                "@rollup/rollup-linux-arm-gnueabihf": "4.22.5",
+                "@rollup/rollup-linux-arm-musleabihf": "4.22.5",
+                "@rollup/rollup-linux-arm64-gnu": "4.22.5",
+                "@rollup/rollup-linux-arm64-musl": "4.22.5",
+                "@rollup/rollup-linux-powerpc64le-gnu": "4.22.5",
+                "@rollup/rollup-linux-riscv64-gnu": "4.22.5",
+                "@rollup/rollup-linux-s390x-gnu": "4.22.5",
+                "@rollup/rollup-linux-x64-gnu": "4.22.5",
+                "@rollup/rollup-linux-x64-musl": "4.22.5",
+                "@rollup/rollup-win32-arm64-msvc": "4.22.5",
+                "@rollup/rollup-win32-ia32-msvc": "4.22.5",
+                "@rollup/rollup-win32-x64-msvc": "4.22.5",
                 "fsevents": "~2.3.2"
             }
         },
-        "node_modules/rollup/node_modules/@types/estree": {
-            "version": "1.0.5",
-            "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
-            "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==",
-            "dev": true,
-            "license": "MIT"
-        },
         "node_modules/rrweb-cssom": {
             "version": "0.7.1",
             "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.7.1.tgz",
@@ -15368,6 +15285,7 @@
             "version": "1.5.2",
             "resolved": "https://registry.npmjs.org/run-time-assertions/-/run-time-assertions-1.5.2.tgz",
             "integrity": "sha512-ccfwvjGuNU14cSSXLlmPRiqEgMfA7w3J2TViO79zMnzXGvE6FJ0dxnhIQGwe5r/vwySOJ4sqZksexo9wyAlA8g==",
+            "deprecated": "Use @augment-vir/assert instead.",
             "license": "(MIT or CC0 1.0)",
             "dependencies": {
                 "@augment-vir/common": "^29.3.0",
@@ -15582,15 +15500,15 @@
             }
         },
         "node_modules/shiki": {
-            "version": "1.18.0",
-            "resolved": "https://registry.npmjs.org/shiki/-/shiki-1.18.0.tgz",
-            "integrity": "sha512-8jo7tOXr96h9PBQmOHVrltnETn1honZZY76YA79MHheGQg55jBvbm9dtU+MI5pjC5NJCFuA6rvVTLVeSW5cE4A==",
+            "version": "1.20.0",
+            "resolved": "https://registry.npmjs.org/shiki/-/shiki-1.20.0.tgz",
+            "integrity": "sha512-MZJJ1PCFsQB1Piq+25wiz0a75yUv8Q3/fzy7SzRx5ONdjdtGdyiKwYn8vb/FnK5kjS0voWGnPpjG16POauUR+g==",
             "license": "MIT",
             "dependencies": {
-                "@shikijs/core": "1.18.0",
-                "@shikijs/engine-javascript": "1.18.0",
-                "@shikijs/engine-oniguruma": "1.18.0",
-                "@shikijs/types": "1.18.0",
+                "@shikijs/core": "1.20.0",
+                "@shikijs/engine-javascript": "1.20.0",
+                "@shikijs/engine-oniguruma": "1.20.0",
+                "@shikijs/types": "1.20.0",
                 "@shikijs/vscode-textmate": "^9.2.2",
                 "@types/hast": "^3.0.4"
             }
@@ -16411,21 +16329,21 @@
             "license": "MIT"
         },
         "node_modules/tldts": {
-            "version": "6.1.47",
-            "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.47.tgz",
-            "integrity": "sha512-R/K2tZ5MiY+mVrnSkNJkwqYT2vUv1lcT6wJvd2emGaMJ7PHUGRY4e3tUsdFCXgqxi2QgbHjL3yJgXCo40v9Hxw==",
+            "version": "6.1.48",
+            "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.48.tgz",
+            "integrity": "sha512-SPbnh1zaSzi/OsmHb1vrPNnYuwJbdWjwo5TbBYYMlTtH3/1DSb41t8bcSxkwDmmbG2q6VLPVvQc7Yf23T+1EEw==",
             "license": "MIT",
             "dependencies": {
-                "tldts-core": "^6.1.47"
+                "tldts-core": "^6.1.48"
             },
             "bin": {
                 "tldts": "bin/cli.js"
             }
         },
         "node_modules/tldts-core": {
-            "version": "6.1.47",
-            "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.47.tgz",
-            "integrity": "sha512-6SWyFMnlst1fEt7GQVAAu16EGgFK0cLouH/2Mk6Ftlwhv3Ol40L0dlpGMcnnNiiOMyD2EV/aF3S+U2nKvvLvrA==",
+            "version": "6.1.48",
+            "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.48.tgz",
+            "integrity": "sha512-3gD9iKn/n2UuFH1uilBviK9gvTNT6iYwdqrj1Vr5mh8FuelvpRNaYVH4pNYqUgOGU4aAdL9X35eLuuj0gRsx+A==",
             "license": "MIT"
         },
         "node_modules/to-fast-properties": {
@@ -17150,6 +17068,21 @@
                 "@esbuild/win32-x64": "0.23.1"
             }
         },
+        "node_modules/tsx/node_modules/fsevents": {
+            "version": "2.3.3",
+            "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+            "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+            "dev": true,
+            "hasInstallScript": true,
+            "license": "MIT",
+            "optional": true,
+            "os": [
+                "darwin"
+            ],
+            "engines": {
+                "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+            }
+        },
         "node_modules/type-check": {
             "version": "0.4.0",
             "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
@@ -17360,15 +17293,15 @@
             }
         },
         "node_modules/typescript-eslint": {
-            "version": "8.6.0",
-            "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.6.0.tgz",
-            "integrity": "sha512-eEhhlxCEpCd4helh3AO1hk0UP2MvbRi9CtIAJTVPQjuSXOOO2jsEacNi4UdcJzZJbeuVg1gMhtZ8UYb+NFYPrA==",
+            "version": "8.7.0",
+            "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.7.0.tgz",
+            "integrity": "sha512-nEHbEYJyHwsuf7c3V3RS7Saq+1+la3i0ieR3qP0yjqWSzVmh8Drp47uOl9LjbPANac4S7EFSqvcYIKXUUwIfIQ==",
             "dev": true,
             "license": "MIT",
             "dependencies": {
-                "@typescript-eslint/eslint-plugin": "8.6.0",
-                "@typescript-eslint/parser": "8.6.0",
-                "@typescript-eslint/utils": "8.6.0"
+                "@typescript-eslint/eslint-plugin": "8.7.0",
+                "@typescript-eslint/parser": "8.7.0",
+                "@typescript-eslint/utils": "8.7.0"
             },
             "engines": {
                 "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
@@ -17591,9 +17524,9 @@
             }
         },
         "node_modules/update-browserslist-db": {
-            "version": "1.1.0",
-            "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz",
-            "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==",
+            "version": "1.1.1",
+            "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz",
+            "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==",
             "dev": true,
             "funding": [
                 {
@@ -17611,8 +17544,8 @@
             ],
             "license": "MIT",
             "dependencies": {
-                "escalade": "^3.1.2",
-                "picocolors": "^1.0.1"
+                "escalade": "^3.2.0",
+                "picocolors": "^1.1.0"
             },
             "bin": {
                 "update-browserslist-db": "cli.js"
@@ -17745,26 +17678,26 @@
             }
         },
         "node_modules/virmator": {
-            "version": "13.3.15",
-            "resolved": "https://registry.npmjs.org/virmator/-/virmator-13.3.15.tgz",
-            "integrity": "sha512-eJ8qH5kvD8Rb3NDbuaPkylJM+PB9rWsOXRdyNIGIMfBkunB2h9Z5RJmEKBEjFDvVM0irv0UVBKdrM/o5KQj5Xw==",
+            "version": "13.4.1",
+            "resolved": "https://registry.npmjs.org/virmator/-/virmator-13.4.1.tgz",
+            "integrity": "sha512-TIvNKT+HqgzfG5W0cpxYjhKvDcBYl6OBrR4TYll2FGP9PavWXanosM56WbifDQaL15jcSA4z29Yzidud+k5Jvg==",
             "dev": true,
             "license": "(MIT or CC0 1.0)",
             "dependencies": {
                 "@augment-vir/common": "^30.0.4",
                 "@augment-vir/node": "^30.0.4",
-                "@virmator/compile": "^13.3.15",
-                "@virmator/core": "^13.3.15",
-                "@virmator/deps": "^13.3.15",
-                "@virmator/docs": "^13.3.15",
-                "@virmator/format": "^13.3.15",
-                "@virmator/frontend": "^13.3.15",
-                "@virmator/help": "^13.3.15",
-                "@virmator/init": "^13.3.15",
-                "@virmator/lint": "^13.3.15",
-                "@virmator/publish": "^13.3.15",
-                "@virmator/spellcheck": "^13.3.15",
-                "@virmator/test": "^13.3.15",
+                "@virmator/compile": "^13.4.1",
+                "@virmator/core": "^13.4.1",
+                "@virmator/deps": "^13.4.1",
+                "@virmator/docs": "^13.4.1",
+                "@virmator/format": "^13.4.1",
+                "@virmator/frontend": "^13.4.1",
+                "@virmator/help": "^13.4.1",
+                "@virmator/init": "^13.4.1",
+                "@virmator/lint": "^13.4.1",
+                "@virmator/publish": "^13.4.1",
+                "@virmator/spellcheck": "^13.4.1",
+                "@virmator/test": "^13.4.1",
                 "tsx": "^4.19.1"
             },
             "bin": {
@@ -17775,9 +17708,9 @@
             }
         },
         "node_modules/vite": {
-            "version": "5.4.7",
-            "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.7.tgz",
-            "integrity": "sha512-5l2zxqMEPVENgvzTuBpHer2awaetimj2BGkhBPdnwKbPNOlHsODU+oiazEZzLK7KhAnOrO+XGYJYn4ZlUhDtDQ==",
+            "version": "5.4.8",
+            "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.8.tgz",
+            "integrity": "sha512-FqrItQ4DT1NC4zCUqMB4c4AZORMKIa0m8/URVCZ77OZ/QSNeJ54bU1vrFADbDsuwfIPcgknRkmqakQcgnL4GiQ==",
             "dev": true,
             "license": "MIT",
             "dependencies": {
@@ -18284,6 +18217,21 @@
                 "@esbuild/win32-x64": "0.21.5"
             }
         },
+        "node_modules/vite/node_modules/fsevents": {
+            "version": "2.3.3",
+            "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+            "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
+            "dev": true,
+            "hasInstallScript": true,
+            "license": "MIT",
+            "optional": true,
+            "os": [
+                "darwin"
+            ],
+            "engines": {
+                "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+            }
+        },
         "node_modules/vscode-languageserver-textdocument": {
             "version": "1.0.12",
             "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.12.tgz",
@@ -18948,7 +18896,7 @@
             "license": "(MIT or CC0 1.0)",
             "dependencies": {
                 "@augment-vir/core": "^30.1.0",
-                "@date-vir/duration": "^6.0.0",
+                "@date-vir/duration": "^6.0.1",
                 "deep-eql": "^5.0.2",
                 "expect-type": "^0.20.0",
                 "type-fest": "^4.26.1"
@@ -18984,7 +18932,7 @@
             "dependencies": {
                 "@augment-vir/assert": "^30.1.0",
                 "@augment-vir/core": "^30.1.0",
-                "@date-vir/duration": "^6.0.0",
+                "@date-vir/duration": "^6.0.1",
                 "ansi-styles": "^6.2.1",
                 "json5": "^2.2.3",
                 "type-fest": "^4.26.1"
@@ -19080,13 +19028,13 @@
             "version": "30.1.0",
             "license": "(MIT or CC0 1.0)",
             "dependencies": {
-                "@date-vir/duration": "^6.0.0",
+                "@date-vir/duration": "^6.0.1",
                 "browser-or-node": "^3.0.0",
                 "json5": "^2.2.3",
                 "type-fest": "^4.26.1"
             },
             "devDependencies": {
-                "@types/node": "^22.5.5",
+                "@types/node": "^22.7.4",
                 "c8": "^10.1.2",
                 "istanbul-smart-text-reporter": "^1.1.4"
             },
@@ -19101,7 +19049,7 @@
             "dependencies": {
                 "@augment-vir/assert": "^30.1.0",
                 "@augment-vir/common": "^30.1.0",
-                "@date-vir/duration": "^6.0.0",
+                "@date-vir/duration": "^6.0.1",
                 "ansi-styles": "^6.2.1",
                 "terminate": "^2.8.0",
                 "type-fest": "^4.26.1",
@@ -19109,8 +19057,8 @@
             },
             "devDependencies": {
                 "@augment-vir/test": "^30.1.0",
-                "@prisma/client": "^5.19.1",
-                "@types/node": "^22.5.5",
+                "@prisma/client": "^5.20.0",
+                "@types/node": "^22.7.4",
                 "@web/dev-server-esbuild": "^1.0.2",
                 "@web/test-runner": "^0.19.0",
                 "@web/test-runner-commands": "^0.9.0",
@@ -19119,7 +19067,7 @@
                 "c8": "^10.1.2",
                 "concurrently": "^9.0.1",
                 "istanbul-smart-text-reporter": "^1.1.4",
-                "prisma": "^5.19.1"
+                "prisma": "^5.20.0"
             },
             "engines": {
                 "node": ">=22"
@@ -19204,14 +19152,14 @@
             "dependencies": {
                 "@augment-vir/assert": "^30.1.0",
                 "@augment-vir/core": "^30.1.0",
-                "@virmator/docs": "^13.3.15",
+                "@virmator/docs": "^13.4.1",
                 "jsdom": "^25.0.1",
                 "typedoc": "^0.26.7"
             },
             "devDependencies": {
                 "@augment-vir/test": "^30.1.0",
                 "@types/jsdom": "^21.1.7",
-                "@types/node": "^22.5.5"
+                "@types/node": "^22.7.4"
             },
             "engines": {
                 "node": ">=22"
@@ -19228,7 +19176,7 @@
                 "type-fest": "^4.26.1"
             },
             "devDependencies": {
-                "@types/node": "^22.5.5",
+                "@types/node": "^22.7.4",
                 "@web/dev-server-esbuild": "^1.0.2",
                 "@web/test-runner": "^0.19.0",
                 "@web/test-runner-commands": "^0.9.0",
@@ -19321,7 +19269,7 @@
             "dependencies": {
                 "@augment-vir/assert": "^30.1.0",
                 "@augment-vir/common": "^30.1.0",
-                "@date-vir/duration": "^6.0.0",
+                "@date-vir/duration": "^6.0.1",
                 "html-spec-tags": "^2.2.1",
                 "type-fest": "^4.26.1"
             },
diff --git a/package.json b/package.json
index a6a6f1a5..2530ec5f 100644
--- a/package.json
+++ b/package.json
@@ -39,16 +39,16 @@
     },
     "devDependencies": {
         "@eslint/eslintrc": "^3.1.0",
-        "@eslint/js": "^9.11.0",
+        "@eslint/js": "^9.11.1",
         "@stylistic/eslint-plugin": "^2.8.0",
         "@stylistic/eslint-plugin-ts": "^2.8.0",
-        "@typescript-eslint/eslint-plugin": "^8.6.0",
+        "@typescript-eslint/eslint-plugin": "^8.7.0",
         "cspell": "^8.14.4",
         "dependency-cruiser": "^16.4.2",
         "esbuild": "^0.24.0",
-        "eslint": "^9.11.0",
+        "eslint": "^9.11.1",
         "eslint-config-prettier": "^9.1.0",
-        "eslint-plugin-jsdoc": "^50.2.4",
+        "eslint-plugin-jsdoc": "^50.3.0",
         "eslint-plugin-monorepo-cop": "^1.0.2",
         "eslint-plugin-playwright": "^1.6.2",
         "eslint-plugin-prettier": "^5.2.1",
@@ -65,8 +65,8 @@
         "prettier-plugin-packagejson": "^2.5.2",
         "prettier-plugin-sort-json": "^4.0.0",
         "prettier-plugin-toml": "^2.0.1",
-        "typescript-eslint": "^8.6.0",
-        "virmator": "^13.3.15"
+        "typescript-eslint": "^8.7.0",
+        "virmator": "^13.4.1"
     },
     "engines": {
         "node": ">=22"
diff --git a/packages/assert/package.json b/packages/assert/package.json
index eac0bba8..4d4b279b 100644
--- a/packages/assert/package.json
+++ b/packages/assert/package.json
@@ -42,7 +42,7 @@
     },
     "dependencies": {
         "@augment-vir/core": "^30.1.0",
-        "@date-vir/duration": "^6.0.0",
+        "@date-vir/duration": "^6.0.1",
         "deep-eql": "^5.0.2",
         "expect-type": "^0.20.0",
         "type-fest": "^4.26.1"
diff --git a/packages/assert/src/assertions/output.ts b/packages/assert/src/assertions/output.ts
index 6f4de6b4..794fb2a0 100644
--- a/packages/assert/src/assertions/output.ts
+++ b/packages/assert/src/assertions/output.ts
@@ -8,7 +8,7 @@ import {
     stringify,
     wait,
 } from '@augment-vir/core';
-import {convertDuration, DurationUnit} from '@date-vir/duration';
+import {convertDuration} from '@date-vir/duration';
 import type {IsAny} from 'type-fest';
 import {AssertionError} from '../augments/assertion.error.js';
 import type {GuardGroup} from '../guard-types/guard-group.js';
@@ -427,8 +427,8 @@ export async function waitUntilOutput(
         ? emptyOrFailureMessage
         : (emptyOrFailureMessageOrOptions as string | undefined);
 
-    const timeout = convertDuration(options.timeout, DurationUnit.Milliseconds).milliseconds;
-    const interval = convertDuration(options.interval, DurationUnit.Milliseconds);
+    const timeout = convertDuration(options.timeout, {milliseconds: true}).milliseconds;
+    const interval = convertDuration(options.interval, {milliseconds: true});
 
     let lastCallbackOutput: unknown = notSetSymbol;
     let lastError: Error | undefined = undefined;
diff --git a/packages/assert/src/guard-types/wait-until-function.ts b/packages/assert/src/guard-types/wait-until-function.ts
index 5309610f..4abab310 100644
--- a/packages/assert/src/guard-types/wait-until-function.ts
+++ b/packages/assert/src/guard-types/wait-until-function.ts
@@ -15,7 +15,7 @@ import {
     type Overwrite,
     wait,
 } from '@augment-vir/core';
-import {type AnyDuration, convertDuration, DurationUnit} from '@date-vir/duration';
+import {type AnyDuration, convertDuration} from '@date-vir/duration';
 import type {AssertFunction} from './assert-function.js';
 import {autoGuardSymbol, pickOverride} from './guard-override.js';
 
@@ -64,8 +64,8 @@ export async function executeWaitUntil<const Assert extends AssertFunction<any>>
 ) {
     const {callback, extraAssertionArgs, failureMessage, options} = parseWaitUntilArgs(rawArgs);
 
-    const timeout = convertDuration(options.timeout, DurationUnit.Milliseconds).milliseconds;
-    const interval = convertDuration(options.interval, DurationUnit.Milliseconds);
+    const timeout = convertDuration(options.timeout, {milliseconds: true}).milliseconds;
+    const interval = convertDuration(options.interval, {milliseconds: true});
 
     let lastCallbackOutput: unknown = notSetSymbol;
     let lastError: Error | undefined = undefined;
diff --git a/packages/common/package.json b/packages/common/package.json
index 5a119d01..b2b416c1 100644
--- a/packages/common/package.json
+++ b/packages/common/package.json
@@ -41,7 +41,7 @@
     "dependencies": {
         "@augment-vir/assert": "^30.1.0",
         "@augment-vir/core": "^30.1.0",
-        "@date-vir/duration": "^6.0.0",
+        "@date-vir/duration": "^6.0.1",
         "ansi-styles": "^6.2.1",
         "json5": "^2.2.3",
         "type-fest": "^4.26.1"
diff --git a/packages/common/src/augments/function/debounce.ts b/packages/common/src/augments/function/debounce.ts
index f178a511..ce2b8973 100644
--- a/packages/common/src/augments/function/debounce.ts
+++ b/packages/common/src/augments/function/debounce.ts
@@ -1,5 +1,5 @@
 import {type MaybePromise} from '@augment-vir/core';
-import {AnyDuration, convertDuration, DurationUnit} from '@date-vir/duration';
+import {AnyDuration, convertDuration} from '@date-vir/duration';
 
 /**
  * Different types of debouncing for the {@link Debounce} class.
@@ -106,6 +106,6 @@ export class Debounce {
             }, this.debounceDuration.milliseconds);
         }
         this.nextCallTimestamp =
-            now + convertDuration(this.debounceDuration, DurationUnit.Milliseconds).milliseconds;
+            now + convertDuration(this.debounceDuration, {milliseconds: true}).milliseconds;
     }
 }
diff --git a/packages/common/src/augments/promise/timed-promise.ts b/packages/common/src/augments/promise/timed-promise.ts
index 5affbef9..ba677596 100644
--- a/packages/common/src/augments/promise/timed-promise.ts
+++ b/packages/common/src/augments/promise/timed-promise.ts
@@ -1,6 +1,6 @@
 import {check} from '@augment-vir/assert';
 import {ensureError} from '@augment-vir/core';
-import {AnyDuration, convertDuration, DurationUnit} from '@date-vir/duration';
+import {AnyDuration, convertDuration} from '@date-vir/duration';
 
 /**
  * An error thrown by {@link wrapPromiseInTimeout} when the timeout is reached.
@@ -19,7 +19,7 @@ export class PromiseTimeoutError extends Error {
         super(
             [
                 failureMessage,
-                `Promised timed out after ${convertDuration(duration, DurationUnit.Milliseconds).milliseconds} ms.`,
+                `Promised timed out after ${convertDuration(duration, {milliseconds: true}).milliseconds} ms.`,
             ]
                 .filter(check.isTruthy)
                 .join(': '),
@@ -40,7 +40,7 @@ export function wrapPromiseInTimeout<T>(
     originalPromise: PromiseLike<T>,
     failureMessage?: string | undefined,
 ): Promise<T> {
-    const milliseconds = convertDuration(duration, DurationUnit.Milliseconds).milliseconds;
+    const milliseconds = convertDuration(duration, {milliseconds: true}).milliseconds;
 
     return new Promise<T>(async (resolve, reject) => {
         const timeoutId =
diff --git a/packages/core/package.json b/packages/core/package.json
index 537565a2..26a19b41 100644
--- a/packages/core/package.json
+++ b/packages/core/package.json
@@ -27,13 +27,13 @@
         "test:update": "npm test"
     },
     "dependencies": {
-        "@date-vir/duration": "^6.0.0",
+        "@date-vir/duration": "^6.0.1",
         "browser-or-node": "^3.0.0",
         "json5": "^2.2.3",
         "type-fest": "^4.26.1"
     },
     "devDependencies": {
-        "@types/node": "^22.5.5",
+        "@types/node": "^22.7.4",
         "c8": "^10.1.2",
         "istanbul-smart-text-reporter": "^1.1.4"
     },
diff --git a/packages/core/src/augments/promise/wait.ts b/packages/core/src/augments/promise/wait.ts
index a9d3e60d..c2b725cf 100644
--- a/packages/core/src/augments/promise/wait.ts
+++ b/packages/core/src/augments/promise/wait.ts
@@ -1,4 +1,4 @@
-import {AnyDuration, convertDuration, DurationUnit} from '@date-vir/duration';
+import {AnyDuration, convertDuration} from '@date-vir/duration';
 import {DeferredPromise} from './deferred-promise.js';
 
 /**
@@ -12,7 +12,7 @@ import {DeferredPromise} from './deferred-promise.js';
  */
 export function wait(duration: Readonly<AnyDuration>): Promise<void> {
     const deferredPromise = new DeferredPromise();
-    const milliseconds = convertDuration(duration, DurationUnit.Milliseconds).milliseconds;
+    const milliseconds = convertDuration(duration, {milliseconds: true}).milliseconds;
 
     if (milliseconds !== Infinity) {
         setTimeout(
diff --git a/packages/node/package.json b/packages/node/package.json
index 3cc29fcf..b284703b 100644
--- a/packages/node/package.json
+++ b/packages/node/package.json
@@ -39,7 +39,7 @@
     "dependencies": {
         "@augment-vir/assert": "^30.1.0",
         "@augment-vir/common": "^30.1.0",
-        "@date-vir/duration": "^6.0.0",
+        "@date-vir/duration": "^6.0.1",
         "ansi-styles": "^6.2.1",
         "terminate": "^2.8.0",
         "type-fest": "^4.26.1",
@@ -47,8 +47,8 @@
     },
     "devDependencies": {
         "@augment-vir/test": "^30.1.0",
-        "@prisma/client": "^5.19.1",
-        "@types/node": "^22.5.5",
+        "@prisma/client": "^5.20.0",
+        "@types/node": "^22.7.4",
         "@web/dev-server-esbuild": "^1.0.2",
         "@web/test-runner": "^0.19.0",
         "@web/test-runner-commands": "^0.9.0",
@@ -57,7 +57,7 @@
         "c8": "^10.1.2",
         "concurrently": "^9.0.1",
         "istanbul-smart-text-reporter": "^1.1.4",
-        "prisma": "^5.19.1"
+        "prisma": "^5.20.0"
     },
     "engines": {
         "node": ">=22"
diff --git a/packages/node/src/augments/terminal/question.ts b/packages/node/src/augments/terminal/question.ts
index 7266378d..a4c9a8f9 100644
--- a/packages/node/src/augments/terminal/question.ts
+++ b/packages/node/src/augments/terminal/question.ts
@@ -1,5 +1,5 @@
 import {log} from '@augment-vir/common';
-import {convertDuration, DurationUnit, type AnyDuration} from '@date-vir/duration';
+import {convertDuration, type AnyDuration} from '@date-vir/duration';
 import {createInterface} from 'node:readline';
 
 /** Can't test requiring user input. */
@@ -67,7 +67,7 @@ export async function askQuestion(
     });
 
     return new Promise((resolve, reject) => {
-        const timeoutMs = convertDuration(timeout, DurationUnit.Milliseconds).milliseconds;
+        const timeoutMs = convertDuration(timeout, {milliseconds: true}).milliseconds;
 
         const timeoutId = timeoutMs
             ? setTimeout(() => {
diff --git a/packages/scripts/package.json b/packages/scripts/package.json
index e4ad1823..2218ce4d 100644
--- a/packages/scripts/package.json
+++ b/packages/scripts/package.json
@@ -26,14 +26,14 @@
     "dependencies": {
         "@augment-vir/assert": "^30.1.0",
         "@augment-vir/core": "^30.1.0",
-        "@virmator/docs": "^13.3.15",
+        "@virmator/docs": "^13.4.1",
         "jsdom": "^25.0.1",
         "typedoc": "^0.26.7"
     },
     "devDependencies": {
         "@augment-vir/test": "^30.1.0",
         "@types/jsdom": "^21.1.7",
-        "@types/node": "^22.5.5"
+        "@types/node": "^22.7.4"
     },
     "engines": {
         "node": ">=22"
diff --git a/packages/test/package.json b/packages/test/package.json
index b549d9ec..070a305d 100644
--- a/packages/test/package.json
+++ b/packages/test/package.json
@@ -48,7 +48,7 @@
         "type-fest": "^4.26.1"
     },
     "devDependencies": {
-        "@types/node": "^22.5.5",
+        "@types/node": "^22.7.4",
         "@web/dev-server-esbuild": "^1.0.2",
         "@web/test-runner": "^0.19.0",
         "@web/test-runner-commands": "^0.9.0",
diff --git a/packages/web/package.json b/packages/web/package.json
index 2e2f6df8..2c1fdf59 100644
--- a/packages/web/package.json
+++ b/packages/web/package.json
@@ -37,7 +37,7 @@
     "dependencies": {
         "@augment-vir/assert": "^30.1.0",
         "@augment-vir/common": "^30.1.0",
-        "@date-vir/duration": "^6.0.0",
+        "@date-vir/duration": "^6.0.1",
         "html-spec-tags": "^2.2.1",
         "type-fest": "^4.26.1"
     },
diff --git a/todo.md b/todo.md
index 972cb35b..8b0fe4fb 100644
--- a/todo.md
+++ b/todo.md
@@ -23,14 +23,10 @@
 -   just a plain `diff` function
     -   better outputs from `diffArray` (it should output a partial)
 -   add a function that batches `Promise.all` calls
+-   allow readonly inputs to all guards (like assert.deepEquals)
 
 ## Immediately after v30 release
 
--   finish updating `date-vir`
--   add `parseJsonWithShape` to `object-shape-tester`
-    -   in progress
--   rename `runtimeType` in `object-shape-tester`
--   deprecate `run-time-assertions`
 -   use `ListenTarget` for `ShellEmitter`
 -   update `typed-event-target` package
     -   convert `Debounce` into an ListenTarget and emit events when: