From 397ffc2d5e55dfba9c4ee42250a353b267e7678d Mon Sep 17 00:00:00 2001 From: sam Date: Tue, 17 Dec 2024 23:33:05 +0100 Subject: [PATCH 1/6] update sveltekit, migrate to $app/state --- Foxnouns.Frontend/package.json | 6 +- Foxnouns.Frontend/pnpm-lock.yaml | 250 +++++++++--------- .../src/lib/components/Navbar.svelte | 8 +- .../src/routes/settings/+layout.svelte | 10 +- .../settings/members/[id]/+layout@.svelte | 4 +- .../routes/settings/profile/+layout@.svelte | 4 +- 6 files changed, 141 insertions(+), 141 deletions(-) diff --git a/Foxnouns.Frontend/package.json b/Foxnouns.Frontend/package.json index b9e35fc..974cf17 100644 --- a/Foxnouns.Frontend/package.json +++ b/Foxnouns.Frontend/package.json @@ -13,7 +13,7 @@ }, "devDependencies": { "@sveltejs/adapter-node": "^5.2.10", - "@sveltejs/kit": "^2.11.1", + "@sveltejs/kit": "^2.12.1", "@sveltejs/vite-plugin-svelte": "^4.0.3", "@sveltestrap/sveltestrap": "^6.2.7", "@types/eslint": "^9.6.1", @@ -28,12 +28,12 @@ "prettier": "^3.4.2", "prettier-plugin-svelte": "^3.3.2", "sass": "^1.83.0", - "svelte": "^5.13.0", + "svelte": "^5.14.2", "svelte-bootstrap-icons": "^3.1.1", "svelte-check": "^4.1.1", "sveltekit-i18n": "^2.4.2", "typescript": "^5.7.2", - "typescript-eslint": "^8.18.0", + "typescript-eslint": "^8.18.1", "vite": "^5.4.11" }, "packageManager": "pnpm@9.15.0+sha512.76e2379760a4328ec4415815bcd6628dee727af3779aaa4c914e3944156c4299921a89f976381ee107d41f12cfa4b66681ca9c718f0668fa0831ed4c6d8ba56c", diff --git a/Foxnouns.Frontend/pnpm-lock.yaml b/Foxnouns.Frontend/pnpm-lock.yaml index 2ebd886..25bf13f 100644 --- a/Foxnouns.Frontend/pnpm-lock.yaml +++ b/Foxnouns.Frontend/pnpm-lock.yaml @@ -44,16 +44,16 @@ importers: devDependencies: '@sveltejs/adapter-node': specifier: ^5.2.10 - version: 5.2.10(@sveltejs/kit@2.11.1(@sveltejs/vite-plugin-svelte@4.0.3(svelte@5.13.0)(vite@5.4.11(sass@1.83.0)))(svelte@5.13.0)(vite@5.4.11(sass@1.83.0))) + version: 5.2.10(@sveltejs/kit@2.12.1(@sveltejs/vite-plugin-svelte@4.0.3(svelte@5.14.2)(vite@5.4.11(sass@1.83.0)))(svelte@5.14.2)(vite@5.4.11(sass@1.83.0))) '@sveltejs/kit': - specifier: ^2.11.1 - version: 2.11.1(@sveltejs/vite-plugin-svelte@4.0.3(svelte@5.13.0)(vite@5.4.11(sass@1.83.0)))(svelte@5.13.0)(vite@5.4.11(sass@1.83.0)) + specifier: ^2.12.1 + version: 2.12.1(@sveltejs/vite-plugin-svelte@4.0.3(svelte@5.14.2)(vite@5.4.11(sass@1.83.0)))(svelte@5.14.2)(vite@5.4.11(sass@1.83.0)) '@sveltejs/vite-plugin-svelte': specifier: ^4.0.3 - version: 4.0.3(svelte@5.13.0)(vite@5.4.11(sass@1.83.0)) + version: 4.0.3(svelte@5.14.2)(vite@5.4.11(sass@1.83.0)) '@sveltestrap/sveltestrap': specifier: ^6.2.7 - version: 6.2.7(svelte@5.13.0) + version: 6.2.7(svelte@5.14.2) '@types/eslint': specifier: ^9.6.1 version: 9.6.1 @@ -77,7 +77,7 @@ importers: version: 9.1.0(eslint@9.17.0) eslint-plugin-svelte: specifier: ^2.46.1 - version: 2.46.1(eslint@9.17.0)(svelte@5.13.0) + version: 2.46.1(eslint@9.17.0)(svelte@5.14.2) globals: specifier: ^15.13.0 version: 15.13.0 @@ -86,28 +86,28 @@ importers: version: 3.4.2 prettier-plugin-svelte: specifier: ^3.3.2 - version: 3.3.2(prettier@3.4.2)(svelte@5.13.0) + version: 3.3.2(prettier@3.4.2)(svelte@5.14.2) sass: specifier: ^1.83.0 version: 1.83.0 svelte: - specifier: ^5.13.0 - version: 5.13.0 + specifier: ^5.14.2 + version: 5.14.2 svelte-bootstrap-icons: specifier: ^3.1.1 version: 3.1.1 svelte-check: specifier: ^4.1.1 - version: 4.1.1(picomatch@4.0.2)(svelte@5.13.0)(typescript@5.7.2) + version: 4.1.1(picomatch@4.0.2)(svelte@5.14.2)(typescript@5.7.2) sveltekit-i18n: specifier: ^2.4.2 - version: 2.4.2(svelte@5.13.0) + version: 2.4.2(svelte@5.14.2) typescript: specifier: ^5.7.2 version: 5.7.2 typescript-eslint: - specifier: ^8.18.0 - version: 8.18.0(eslint@9.17.0)(typescript@5.7.2) + specifier: ^8.18.1 + version: 8.18.1(eslint@9.17.0)(typescript@5.7.2) vite: specifier: ^5.4.11 version: 5.4.11(sass@1.83.0) @@ -431,8 +431,8 @@ packages: '@popperjs/core@2.11.8': resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} - '@rollup/plugin-commonjs@28.0.1': - resolution: {integrity: sha512-+tNWdlWKbpB3WgBN7ijjYkq9X5uhjmcvyjEght4NmH5fAU++zfQzAJ6wumLS+dNcvwEZhKx2Z+skY8m7v0wGSA==} + '@rollup/plugin-commonjs@28.0.2': + resolution: {integrity: sha512-BEFI2EDqzl+vA1rl97IDRZ61AIwGH093d9nz8+dThxJNH8oSoB7MjWvPCX3dkaK1/RCJ/1v/R1XB15FuSs0fQw==} engines: {node: '>=16.0.0 || 14 >= 14.17'} peerDependencies: rollup: ^2.68.0||^3.0.0||^4.0.0 @@ -449,8 +449,8 @@ packages: rollup: optional: true - '@rollup/plugin-node-resolve@15.3.0': - resolution: {integrity: sha512-9eO5McEICxMzJpDW9OnMYSv4Sta3hmt7VtBFz5zR9273suNOydOyq/FrGeGy+KsTRFm8w0SLVhzig2ILFT63Ag==} + '@rollup/plugin-node-resolve@15.3.1': + resolution: {integrity: sha512-tgg6b91pAybXHJQMAAwW9VuWBO6Thi+q7BCNARLwSqlmsHz0XYURtGvh/AuwSADXSI4h/2uHbs7s4FzlZDGSGA==} engines: {node: '>=14.0.0'} peerDependencies: rollup: ^2.78.0||^3.0.0||^4.0.0 @@ -458,8 +458,8 @@ packages: rollup: optional: true - '@rollup/pluginutils@5.1.3': - resolution: {integrity: sha512-Pnsb6f32CD2W3uCaLZIzDmeFyQ2b8UWMFI7xtwUezpcGBDVDW6y9XgAWIlARiGAo6eNF5FK5aQTr0LFyNyqq5A==} + '@rollup/pluginutils@5.1.4': + resolution: {integrity: sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==} engines: {node: '>=14.0.0'} peerDependencies: rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 @@ -567,8 +567,8 @@ packages: peerDependencies: '@sveltejs/kit': ^2.4.0 - '@sveltejs/kit@2.11.1': - resolution: {integrity: sha512-dAiHDEd+AOm20eYdMPV1a2eKBOc0s/7XsSs7PCoNv2kKS7BAoVRC9uzR+FQmxLtp8xuEo9z8CtrMQoszkThltQ==} + '@sveltejs/kit@2.12.1': + resolution: {integrity: sha512-M3rPijGImeOkI0DBJSwjqz+YFX2DyOf6NzWgHVk3mqpT06dlYCpcv5xh1q4rYEqB58yQlk4QA1Y35PUqnUiFKw==} engines: {node: '>=18.13'} hasBin: true peerDependencies: @@ -634,51 +634,51 @@ packages: '@types/sanitize-html@2.13.0': resolution: {integrity: sha512-X31WxbvW9TjIhZZNyNBZ/p5ax4ti7qsNDBDEnH4zAgmEh35YnFD1UiS6z9Cd34kKm0LslFW0KPmTQzu/oGtsqQ==} - '@typescript-eslint/eslint-plugin@8.18.0': - resolution: {integrity: sha512-NR2yS7qUqCL7AIxdJUQf2MKKNDVNaig/dEB0GBLU7D+ZdHgK1NoH/3wsgO3OnPVipn51tG3MAwaODEGil70WEw==} + '@typescript-eslint/eslint-plugin@8.18.1': + resolution: {integrity: sha512-Ncvsq5CT3Gvh+uJG0Lwlho6suwDfUXH0HztslDf5I+F2wAFAZMRwYLEorumpKLzmO2suAXZ/td1tBg4NZIi9CQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.8.0' - '@typescript-eslint/parser@8.18.0': - resolution: {integrity: sha512-hgUZ3kTEpVzKaK3uNibExUYm6SKKOmTU2BOxBSvOYwtJEPdVQ70kZJpPjstlnhCHcuc2WGfSbpKlb/69ttyN5Q==} + '@typescript-eslint/parser@8.18.1': + resolution: {integrity: sha512-rBnTWHCdbYM2lh7hjyXqxk70wvon3p2FyaniZuey5TrcGBpfhVp0OxOa6gxr9Q9YhZFKyfbEnxc24ZnVbbUkCA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.8.0' - '@typescript-eslint/scope-manager@8.18.0': - resolution: {integrity: sha512-PNGcHop0jkK2WVYGotk/hxj+UFLhXtGPiGtiaWgVBVP1jhMoMCHlTyJA+hEj4rszoSdLTK3fN4oOatrL0Cp+Xw==} + '@typescript-eslint/scope-manager@8.18.1': + resolution: {integrity: sha512-HxfHo2b090M5s2+/9Z3gkBhI6xBH8OJCFjH9MhQ+nnoZqxU3wNxkLT+VWXWSFWc3UF3Z+CfPAyqdCTdoXtDPCQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/type-utils@8.18.0': - resolution: {integrity: sha512-er224jRepVAVLnMF2Q7MZJCq5CsdH2oqjP4dT7K6ij09Kyd+R21r7UVJrF0buMVdZS5QRhDzpvzAxHxabQadow==} + '@typescript-eslint/type-utils@8.18.1': + resolution: {integrity: sha512-jAhTdK/Qx2NJPNOTxXpMwlOiSymtR2j283TtPqXkKBdH8OAMmhiUfP0kJjc/qSE51Xrq02Gj9NY7MwK+UxVwHQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.8.0' - '@typescript-eslint/types@8.18.0': - resolution: {integrity: sha512-FNYxgyTCAnFwTrzpBGq+zrnoTO4x0c1CKYY5MuUTzpScqmY5fmsh2o3+57lqdI3NZucBDCzDgdEbIaNfAjAHQA==} + '@typescript-eslint/types@8.18.1': + resolution: {integrity: sha512-7uoAUsCj66qdNQNpH2G8MyTFlgerum8ubf21s3TSM3XmKXuIn+H2Sifh/ES2nPOPiYSRJWAk0fDkW0APBWcpfw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.18.0': - resolution: {integrity: sha512-rqQgFRu6yPkauz+ms3nQpohwejS8bvgbPyIDq13cgEDbkXt4LH4OkDMT0/fN1RUtzG8e8AKJyDBoocuQh8qNeg==} + '@typescript-eslint/typescript-estree@8.18.1': + resolution: {integrity: sha512-z8U21WI5txzl2XYOW7i9hJhxoKKNG1kcU4RzyNvKrdZDmbjkmLBo8bgeiOJmA06kizLI76/CCBAAGlTlEeUfyg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <5.8.0' - '@typescript-eslint/utils@8.18.0': - resolution: {integrity: sha512-p6GLdY383i7h5b0Qrfbix3Vc3+J2k6QWw6UMUeY5JGfm3C5LbZ4QIZzJNoNOfgyRe0uuYKjvVOsO/jD4SJO+xg==} + '@typescript-eslint/utils@8.18.1': + resolution: {integrity: sha512-8vikiIj2ebrC4WRdcAdDcmnu9Q/MXXwg+STf40BVfT8exDqBCUPdypvzcUPxEqRGKg9ALagZ0UWcYCtn+4W2iQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.8.0' - '@typescript-eslint/visitor-keys@8.18.0': - resolution: {integrity: sha512-pCh/qEA8Lb1wVIqNvBke8UaRjJ6wrAWkJO5yyIbs8Yx6TNGYyfNjOo61tLv+WwLvoLPp4BQ8B7AHKijl8NGUfw==} + '@typescript-eslint/visitor-keys@8.18.1': + resolution: {integrity: sha512-Vj0WLm5/ZsD013YeUKn+K0y8p1M0jPpxOkKdbD1wB0ns53a5piVY02zjf072TblEweAbcYiFiPoSMF3kp+VhhQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} acorn-jsx@5.3.2: @@ -747,8 +747,8 @@ packages: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} - chokidar@4.0.1: - resolution: {integrity: sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==} + chokidar@4.0.2: + resolution: {integrity: sha512-/b57FK+bblSU+dfewfFe0rT1YjVDfOmeLQwCAuC+vwvgLkXboATqqmy+Ipux6JrF6L5joe5CBnFOw+gLWH6yKg==} engines: {node: '>= 14.16.0'} color-convert@2.0.1: @@ -890,8 +890,8 @@ packages: resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} engines: {node: '>=0.10'} - esrap@1.2.3: - resolution: {integrity: sha512-ZlQmCCK+n7SGoqo7DnfKaP1sJZa49P01/dXzmjCASSo04p72w8EksT2NMK8CEX8DhKsfJXANioIw8VyHNsBfvQ==} + esrap@1.3.0: + resolution: {integrity: sha512-LPT4X5Ur2sGnkQscwgWXRPVDuQrbuJbrStLmVXVXd+lGQ/HoYmcAa47t0Egzw1bYHwhF0w+6DTkxL1Xctp10XQ==} esrecurse@4.3.0: resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} @@ -1093,8 +1093,8 @@ packages: resolution: {integrity: sha512-rh+Zjr6DNfUYR3bPwJEnuwDdqMbxZW7LOQfUN4B54+Cl+0o5zaU9RJ6bcidfDtC1cWCZXQ+nvX8bf6bAji37QQ==} engines: {node: '>=12'} - magic-string@0.30.15: - resolution: {integrity: sha512-zXeaYRgZ6ldS1RJJUrMrYgNJ4fdwnyI6tVqoiIhyCyv5IVTK9BU8Ic2l253GGETQHxI4HNUwhJ3fjDhKqEoaAw==} + magic-string@0.30.17: + resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} markdown-it@14.1.0: resolution: {integrity: sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==} @@ -1342,8 +1342,8 @@ packages: svelte-tippy@1.3.2: resolution: {integrity: sha512-41f+85hwhKBRqX0UNYrgFsi34Kk/KDvUkIZXYANxkWoA2NTVTCZbUC2J8hRNZ4TRVxObTshoZRjK2co5+i6LMw==} - svelte@5.13.0: - resolution: {integrity: sha512-ZG4VmBNze/j2KxT2GEeUm8Jr3RLYQ3P5Y9/flUDCgaAxgzx4ZRTdiyh+PCr7qRlOr5M8uidIqr+3DwUFVrdL+A==} + svelte@5.14.2: + resolution: {integrity: sha512-OxNh82bYjbutXNSZSPQspZzzmVzlRyNbiz0a6KrpOWvQ9LBUUZifXyeKhfl73LgyQC9UbsnVS9M55nQzqekMTA==} engines: {node: '>=18'} sveltekit-i18n@2.4.2: @@ -1379,8 +1379,8 @@ packages: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} - typescript-eslint@8.18.0: - resolution: {integrity: sha512-Xq2rRjn6tzVpAyHr3+nmSg1/9k9aIHnJ2iZeOH7cfGOWqTkXTm3kwpQglEuLGdNrYvPF+2gtAs+/KF5rjVo+WQ==} + typescript-eslint@8.18.1: + resolution: {integrity: sha512-Mlaw6yxuaDEPQvb/2Qwu3/TfgeBHy9iTJ3mTwe7OvpPmF6KPQjVOfGyEJpPv6Ez2C34OODChhXrzYw/9phI0MQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -1685,27 +1685,27 @@ snapshots: '@popperjs/core@2.11.8': {} - '@rollup/plugin-commonjs@28.0.1(rollup@4.28.1)': + '@rollup/plugin-commonjs@28.0.2(rollup@4.28.1)': dependencies: - '@rollup/pluginutils': 5.1.3(rollup@4.28.1) + '@rollup/pluginutils': 5.1.4(rollup@4.28.1) commondir: 1.0.1 estree-walker: 2.0.2 fdir: 6.4.2(picomatch@4.0.2) is-reference: 1.2.1 - magic-string: 0.30.15 + magic-string: 0.30.17 picomatch: 4.0.2 optionalDependencies: rollup: 4.28.1 '@rollup/plugin-json@6.1.0(rollup@4.28.1)': dependencies: - '@rollup/pluginutils': 5.1.3(rollup@4.28.1) + '@rollup/pluginutils': 5.1.4(rollup@4.28.1) optionalDependencies: rollup: 4.28.1 - '@rollup/plugin-node-resolve@15.3.0(rollup@4.28.1)': + '@rollup/plugin-node-resolve@15.3.1(rollup@4.28.1)': dependencies: - '@rollup/pluginutils': 5.1.3(rollup@4.28.1) + '@rollup/pluginutils': 5.1.4(rollup@4.28.1) '@types/resolve': 1.20.2 deepmerge: 4.3.1 is-module: 1.0.0 @@ -1713,7 +1713,7 @@ snapshots: optionalDependencies: rollup: 4.28.1 - '@rollup/pluginutils@5.1.3(rollup@4.28.1)': + '@rollup/pluginutils@5.1.4(rollup@4.28.1)': dependencies: '@types/estree': 1.0.6 estree-walker: 2.0.2 @@ -1778,64 +1778,64 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.28.1': optional: true - '@sveltejs/adapter-node@5.2.10(@sveltejs/kit@2.11.1(@sveltejs/vite-plugin-svelte@4.0.3(svelte@5.13.0)(vite@5.4.11(sass@1.83.0)))(svelte@5.13.0)(vite@5.4.11(sass@1.83.0)))': + '@sveltejs/adapter-node@5.2.10(@sveltejs/kit@2.12.1(@sveltejs/vite-plugin-svelte@4.0.3(svelte@5.14.2)(vite@5.4.11(sass@1.83.0)))(svelte@5.14.2)(vite@5.4.11(sass@1.83.0)))': dependencies: - '@rollup/plugin-commonjs': 28.0.1(rollup@4.28.1) + '@rollup/plugin-commonjs': 28.0.2(rollup@4.28.1) '@rollup/plugin-json': 6.1.0(rollup@4.28.1) - '@rollup/plugin-node-resolve': 15.3.0(rollup@4.28.1) - '@sveltejs/kit': 2.11.1(@sveltejs/vite-plugin-svelte@4.0.3(svelte@5.13.0)(vite@5.4.11(sass@1.83.0)))(svelte@5.13.0)(vite@5.4.11(sass@1.83.0)) + '@rollup/plugin-node-resolve': 15.3.1(rollup@4.28.1) + '@sveltejs/kit': 2.12.1(@sveltejs/vite-plugin-svelte@4.0.3(svelte@5.14.2)(vite@5.4.11(sass@1.83.0)))(svelte@5.14.2)(vite@5.4.11(sass@1.83.0)) rollup: 4.28.1 - '@sveltejs/kit@2.11.1(@sveltejs/vite-plugin-svelte@4.0.3(svelte@5.13.0)(vite@5.4.11(sass@1.83.0)))(svelte@5.13.0)(vite@5.4.11(sass@1.83.0))': + '@sveltejs/kit@2.12.1(@sveltejs/vite-plugin-svelte@4.0.3(svelte@5.14.2)(vite@5.4.11(sass@1.83.0)))(svelte@5.14.2)(vite@5.4.11(sass@1.83.0))': dependencies: - '@sveltejs/vite-plugin-svelte': 4.0.3(svelte@5.13.0)(vite@5.4.11(sass@1.83.0)) + '@sveltejs/vite-plugin-svelte': 4.0.3(svelte@5.14.2)(vite@5.4.11(sass@1.83.0)) '@types/cookie': 0.6.0 cookie: 0.6.0 devalue: 5.1.1 esm-env: 1.2.1 import-meta-resolve: 4.1.0 kleur: 4.1.5 - magic-string: 0.30.15 + magic-string: 0.30.17 mrmime: 2.0.0 sade: 1.8.1 set-cookie-parser: 2.7.1 sirv: 3.0.0 - svelte: 5.13.0 + svelte: 5.14.2 tiny-glob: 0.2.9 vite: 5.4.11(sass@1.83.0) - '@sveltejs/vite-plugin-svelte-inspector@3.0.1(@sveltejs/vite-plugin-svelte@4.0.3(svelte@5.13.0)(vite@5.4.11(sass@1.83.0)))(svelte@5.13.0)(vite@5.4.11(sass@1.83.0))': + '@sveltejs/vite-plugin-svelte-inspector@3.0.1(@sveltejs/vite-plugin-svelte@4.0.3(svelte@5.14.2)(vite@5.4.11(sass@1.83.0)))(svelte@5.14.2)(vite@5.4.11(sass@1.83.0))': dependencies: - '@sveltejs/vite-plugin-svelte': 4.0.3(svelte@5.13.0)(vite@5.4.11(sass@1.83.0)) + '@sveltejs/vite-plugin-svelte': 4.0.3(svelte@5.14.2)(vite@5.4.11(sass@1.83.0)) debug: 4.4.0 - svelte: 5.13.0 + svelte: 5.14.2 vite: 5.4.11(sass@1.83.0) transitivePeerDependencies: - supports-color - '@sveltejs/vite-plugin-svelte@4.0.3(svelte@5.13.0)(vite@5.4.11(sass@1.83.0))': + '@sveltejs/vite-plugin-svelte@4.0.3(svelte@5.14.2)(vite@5.4.11(sass@1.83.0))': dependencies: - '@sveltejs/vite-plugin-svelte-inspector': 3.0.1(@sveltejs/vite-plugin-svelte@4.0.3(svelte@5.13.0)(vite@5.4.11(sass@1.83.0)))(svelte@5.13.0)(vite@5.4.11(sass@1.83.0)) + '@sveltejs/vite-plugin-svelte-inspector': 3.0.1(@sveltejs/vite-plugin-svelte@4.0.3(svelte@5.14.2)(vite@5.4.11(sass@1.83.0)))(svelte@5.14.2)(vite@5.4.11(sass@1.83.0)) debug: 4.4.0 deepmerge: 4.3.1 kleur: 4.1.5 - magic-string: 0.30.15 - svelte: 5.13.0 + magic-string: 0.30.17 + svelte: 5.14.2 vite: 5.4.11(sass@1.83.0) vitefu: 1.0.4(vite@5.4.11(sass@1.83.0)) transitivePeerDependencies: - supports-color - '@sveltekit-i18n/base@1.3.7(svelte@5.13.0)': + '@sveltekit-i18n/base@1.3.7(svelte@5.14.2)': dependencies: - svelte: 5.13.0 + svelte: 5.14.2 '@sveltekit-i18n/parser-default@1.1.1': {} - '@sveltestrap/sveltestrap@6.2.7(svelte@5.13.0)': + '@sveltestrap/sveltestrap@6.2.7(svelte@5.14.2)': dependencies: '@popperjs/core': 2.11.8 - svelte: 5.13.0 + svelte: 5.14.2 '@types/cookie@0.6.0': {} @@ -1865,14 +1865,14 @@ snapshots: dependencies: htmlparser2: 8.0.2 - '@typescript-eslint/eslint-plugin@8.18.0(@typescript-eslint/parser@8.18.0(eslint@9.17.0)(typescript@5.7.2))(eslint@9.17.0)(typescript@5.7.2)': + '@typescript-eslint/eslint-plugin@8.18.1(@typescript-eslint/parser@8.18.1(eslint@9.17.0)(typescript@5.7.2))(eslint@9.17.0)(typescript@5.7.2)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.18.0(eslint@9.17.0)(typescript@5.7.2) - '@typescript-eslint/scope-manager': 8.18.0 - '@typescript-eslint/type-utils': 8.18.0(eslint@9.17.0)(typescript@5.7.2) - '@typescript-eslint/utils': 8.18.0(eslint@9.17.0)(typescript@5.7.2) - '@typescript-eslint/visitor-keys': 8.18.0 + '@typescript-eslint/parser': 8.18.1(eslint@9.17.0)(typescript@5.7.2) + '@typescript-eslint/scope-manager': 8.18.1 + '@typescript-eslint/type-utils': 8.18.1(eslint@9.17.0)(typescript@5.7.2) + '@typescript-eslint/utils': 8.18.1(eslint@9.17.0)(typescript@5.7.2) + '@typescript-eslint/visitor-keys': 8.18.1 eslint: 9.17.0 graphemer: 1.4.0 ignore: 5.3.2 @@ -1882,27 +1882,27 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.18.0(eslint@9.17.0)(typescript@5.7.2)': + '@typescript-eslint/parser@8.18.1(eslint@9.17.0)(typescript@5.7.2)': dependencies: - '@typescript-eslint/scope-manager': 8.18.0 - '@typescript-eslint/types': 8.18.0 - '@typescript-eslint/typescript-estree': 8.18.0(typescript@5.7.2) - '@typescript-eslint/visitor-keys': 8.18.0 + '@typescript-eslint/scope-manager': 8.18.1 + '@typescript-eslint/types': 8.18.1 + '@typescript-eslint/typescript-estree': 8.18.1(typescript@5.7.2) + '@typescript-eslint/visitor-keys': 8.18.1 debug: 4.4.0 eslint: 9.17.0 typescript: 5.7.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.18.0': + '@typescript-eslint/scope-manager@8.18.1': dependencies: - '@typescript-eslint/types': 8.18.0 - '@typescript-eslint/visitor-keys': 8.18.0 + '@typescript-eslint/types': 8.18.1 + '@typescript-eslint/visitor-keys': 8.18.1 - '@typescript-eslint/type-utils@8.18.0(eslint@9.17.0)(typescript@5.7.2)': + '@typescript-eslint/type-utils@8.18.1(eslint@9.17.0)(typescript@5.7.2)': dependencies: - '@typescript-eslint/typescript-estree': 8.18.0(typescript@5.7.2) - '@typescript-eslint/utils': 8.18.0(eslint@9.17.0)(typescript@5.7.2) + '@typescript-eslint/typescript-estree': 8.18.1(typescript@5.7.2) + '@typescript-eslint/utils': 8.18.1(eslint@9.17.0)(typescript@5.7.2) debug: 4.4.0 eslint: 9.17.0 ts-api-utils: 1.4.3(typescript@5.7.2) @@ -1910,12 +1910,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.18.0': {} + '@typescript-eslint/types@8.18.1': {} - '@typescript-eslint/typescript-estree@8.18.0(typescript@5.7.2)': + '@typescript-eslint/typescript-estree@8.18.1(typescript@5.7.2)': dependencies: - '@typescript-eslint/types': 8.18.0 - '@typescript-eslint/visitor-keys': 8.18.0 + '@typescript-eslint/types': 8.18.1 + '@typescript-eslint/visitor-keys': 8.18.1 debug: 4.4.0 fast-glob: 3.3.2 is-glob: 4.0.3 @@ -1926,20 +1926,20 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.18.0(eslint@9.17.0)(typescript@5.7.2)': + '@typescript-eslint/utils@8.18.1(eslint@9.17.0)(typescript@5.7.2)': dependencies: '@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0) - '@typescript-eslint/scope-manager': 8.18.0 - '@typescript-eslint/types': 8.18.0 - '@typescript-eslint/typescript-estree': 8.18.0(typescript@5.7.2) + '@typescript-eslint/scope-manager': 8.18.1 + '@typescript-eslint/types': 8.18.1 + '@typescript-eslint/typescript-estree': 8.18.1(typescript@5.7.2) eslint: 9.17.0 typescript: 5.7.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.18.0': + '@typescript-eslint/visitor-keys@8.18.1': dependencies: - '@typescript-eslint/types': 8.18.0 + '@typescript-eslint/types': 8.18.1 eslint-visitor-keys: 4.2.0 acorn-jsx@5.3.2(acorn@8.14.0): @@ -1999,7 +1999,7 @@ snapshots: ansi-styles: 4.3.0 supports-color: 7.2.0 - chokidar@4.0.1: + chokidar@4.0.2: dependencies: readdirp: 4.0.2 @@ -2093,7 +2093,7 @@ snapshots: dependencies: eslint: 9.17.0 - eslint-plugin-svelte@2.46.1(eslint@9.17.0)(svelte@5.13.0): + eslint-plugin-svelte@2.46.1(eslint@9.17.0)(svelte@5.14.2): dependencies: '@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0) '@jridgewell/sourcemap-codec': 1.5.0 @@ -2106,9 +2106,9 @@ snapshots: postcss-safe-parser: 6.0.0(postcss@8.4.49) postcss-selector-parser: 6.1.2 semver: 7.6.3 - svelte-eslint-parser: 0.43.0(svelte@5.13.0) + svelte-eslint-parser: 0.43.0(svelte@5.14.2) optionalDependencies: - svelte: 5.13.0 + svelte: 5.14.2 transitivePeerDependencies: - ts-node @@ -2183,10 +2183,10 @@ snapshots: dependencies: estraverse: 5.3.0 - esrap@1.2.3: + esrap@1.3.0: dependencies: '@jridgewell/sourcemap-codec': 1.5.0 - '@types/estree': 1.0.6 + '@typescript-eslint/types': 8.18.1 esrecurse@4.3.0: dependencies: @@ -2354,7 +2354,7 @@ snapshots: luxon@3.5.0: {} - magic-string@0.30.15: + magic-string@0.30.17: dependencies: '@jridgewell/sourcemap-codec': 1.5.0 @@ -2462,10 +2462,10 @@ snapshots: prelude-ls@1.2.1: {} - prettier-plugin-svelte@3.3.2(prettier@3.4.2)(svelte@5.13.0): + prettier-plugin-svelte@3.3.2(prettier@3.4.2)(svelte@5.14.2): dependencies: prettier: 3.4.2 - svelte: 5.13.0 + svelte: 5.14.2 prettier@3.4.2: {} @@ -2533,7 +2533,7 @@ snapshots: sass@1.83.0: dependencies: - chokidar: 4.0.1 + chokidar: 4.0.2 immutable: 5.0.3 source-map-js: 1.2.1 optionalDependencies: @@ -2567,19 +2567,19 @@ snapshots: svelte-bootstrap-icons@3.1.1: {} - svelte-check@4.1.1(picomatch@4.0.2)(svelte@5.13.0)(typescript@5.7.2): + svelte-check@4.1.1(picomatch@4.0.2)(svelte@5.14.2)(typescript@5.7.2): dependencies: '@jridgewell/trace-mapping': 0.3.25 - chokidar: 4.0.1 + chokidar: 4.0.2 fdir: 6.4.2(picomatch@4.0.2) picocolors: 1.1.1 sade: 1.8.1 - svelte: 5.13.0 + svelte: 5.14.2 typescript: 5.7.2 transitivePeerDependencies: - picomatch - svelte-eslint-parser@0.43.0(svelte@5.13.0): + svelte-eslint-parser@0.43.0(svelte@5.14.2): dependencies: eslint-scope: 7.2.2 eslint-visitor-keys: 3.4.3 @@ -2587,13 +2587,13 @@ snapshots: postcss: 8.4.49 postcss-scss: 4.0.9(postcss@8.4.49) optionalDependencies: - svelte: 5.13.0 + svelte: 5.14.2 svelte-tippy@1.3.2: dependencies: tippy.js: 6.3.7 - svelte@5.13.0: + svelte@5.14.2: dependencies: '@ampproject/remapping': 2.3.0 '@jridgewell/sourcemap-codec': 1.5.0 @@ -2603,17 +2603,17 @@ snapshots: aria-query: 5.3.2 axobject-query: 4.1.0 esm-env: 1.2.1 - esrap: 1.2.3 + esrap: 1.3.0 is-reference: 3.0.3 locate-character: 3.0.0 - magic-string: 0.30.15 + magic-string: 0.30.17 zimmerframe: 1.1.2 - sveltekit-i18n@2.4.2(svelte@5.13.0): + sveltekit-i18n@2.4.2(svelte@5.14.2): dependencies: - '@sveltekit-i18n/base': 1.3.7(svelte@5.13.0) + '@sveltekit-i18n/base': 1.3.7(svelte@5.14.2) '@sveltekit-i18n/parser-default': 1.1.1 - svelte: 5.13.0 + svelte: 5.14.2 tiny-glob@0.2.9: dependencies: @@ -2640,11 +2640,11 @@ snapshots: dependencies: prelude-ls: 1.2.1 - typescript-eslint@8.18.0(eslint@9.17.0)(typescript@5.7.2): + typescript-eslint@8.18.1(eslint@9.17.0)(typescript@5.7.2): dependencies: - '@typescript-eslint/eslint-plugin': 8.18.0(@typescript-eslint/parser@8.18.0(eslint@9.17.0)(typescript@5.7.2))(eslint@9.17.0)(typescript@5.7.2) - '@typescript-eslint/parser': 8.18.0(eslint@9.17.0)(typescript@5.7.2) - '@typescript-eslint/utils': 8.18.0(eslint@9.17.0)(typescript@5.7.2) + '@typescript-eslint/eslint-plugin': 8.18.1(@typescript-eslint/parser@8.18.1(eslint@9.17.0)(typescript@5.7.2))(eslint@9.17.0)(typescript@5.7.2) + '@typescript-eslint/parser': 8.18.1(eslint@9.17.0)(typescript@5.7.2) + '@typescript-eslint/utils': 8.18.1(eslint@9.17.0)(typescript@5.7.2) eslint: 9.17.0 typescript: 5.7.2 transitivePeerDependencies: diff --git a/Foxnouns.Frontend/src/lib/components/Navbar.svelte b/Foxnouns.Frontend/src/lib/components/Navbar.svelte index 68c1b14..4330312 100644 --- a/Foxnouns.Frontend/src/lib/components/Navbar.svelte +++ b/Foxnouns.Frontend/src/lib/components/Navbar.svelte @@ -8,7 +8,7 @@ NavLink, NavItem, } from "@sveltestrap/sveltestrap"; - import { page } from "$app/stores"; + import { page } from "$app/state"; import type { Meta, MeUser } from "$api/models/index"; import Logo from "$components/Logo.svelte"; import { t } from "$lib/i18n"; @@ -51,19 +51,19 @@ @{user.username} - + {$t("nav.settings")} {:else} - + {$t("nav.log-in")} diff --git a/Foxnouns.Frontend/src/routes/settings/+layout.svelte b/Foxnouns.Frontend/src/routes/settings/+layout.svelte index 6786e63..11801cf 100644 --- a/Foxnouns.Frontend/src/routes/settings/+layout.svelte +++ b/Foxnouns.Frontend/src/routes/settings/+layout.svelte @@ -1,6 +1,6 @@ diff --git a/Foxnouns.Frontend/src/routes/settings/members/[id]/+layout@.svelte b/Foxnouns.Frontend/src/routes/settings/members/[id]/+layout@.svelte index 7de4046..faae426 100644 --- a/Foxnouns.Frontend/src/routes/settings/members/[id]/+layout@.svelte +++ b/Foxnouns.Frontend/src/routes/settings/members/[id]/+layout@.svelte @@ -1,13 +1,13 @@ From ddd96e415a5d155d72752666f7ee94743dfa12cb Mon Sep 17 00:00:00 2001 From: sam Date: Wed, 18 Dec 2024 02:25:47 +0100 Subject: [PATCH 2/6] refactor(frontend): use handleError hook for errors instead of try/catch --- Foxnouns.Frontend/package.json | 9 +- Foxnouns.Frontend/pnpm-lock.yaml | 342 ++++++++++-------- Foxnouns.Frontend/src/app.d.ts | 9 + Foxnouns.Frontend/src/hooks.server.ts | 25 +- Foxnouns.Frontend/src/routes/+error.svelte | 19 +- .../src/routes/@[username]/+page.server.ts | 19 +- .../@[username]/[memberName]/+page.server.ts | 31 +- 7 files changed, 238 insertions(+), 216 deletions(-) diff --git a/Foxnouns.Frontend/package.json b/Foxnouns.Frontend/package.json index 974cf17..a2197f8 100644 --- a/Foxnouns.Frontend/package.json +++ b/Foxnouns.Frontend/package.json @@ -14,7 +14,7 @@ "devDependencies": { "@sveltejs/adapter-node": "^5.2.10", "@sveltejs/kit": "^2.12.1", - "@sveltejs/vite-plugin-svelte": "^4.0.3", + "@sveltejs/vite-plugin-svelte": "^5.0.2", "@sveltestrap/sveltestrap": "^6.2.7", "@types/eslint": "^9.6.1", "@types/luxon": "^3.4.2", @@ -34,7 +34,7 @@ "sveltekit-i18n": "^2.4.2", "typescript": "^5.7.2", "typescript-eslint": "^8.18.1", - "vite": "^5.4.11" + "vite": "^6.0.3" }, "packageManager": "pnpm@9.15.0+sha512.76e2379760a4328ec4415815bcd6628dee727af3779aaa4c914e3944156c4299921a89f976381ee107d41f12cfa4b66681ca9c718f0668fa0831ed4c6d8ba56c", "dependencies": { @@ -49,5 +49,10 @@ "svelte-tippy": "^1.3.2", "tippy.js": "^6.3.7", "tslog": "^4.9.3" + }, + "pnpm": { + "overrides": { + "esrap@1.3.0": "1.2.3" + } } } diff --git a/Foxnouns.Frontend/pnpm-lock.yaml b/Foxnouns.Frontend/pnpm-lock.yaml index 25bf13f..0016718 100644 --- a/Foxnouns.Frontend/pnpm-lock.yaml +++ b/Foxnouns.Frontend/pnpm-lock.yaml @@ -4,6 +4,9 @@ settings: autoInstallPeers: true excludeLinksFromLockfile: false +overrides: + esrap@1.3.0: 1.2.3 + importers: .: @@ -44,13 +47,13 @@ importers: devDependencies: '@sveltejs/adapter-node': specifier: ^5.2.10 - version: 5.2.10(@sveltejs/kit@2.12.1(@sveltejs/vite-plugin-svelte@4.0.3(svelte@5.14.2)(vite@5.4.11(sass@1.83.0)))(svelte@5.14.2)(vite@5.4.11(sass@1.83.0))) + version: 5.2.10(@sveltejs/kit@2.12.1(@sveltejs/vite-plugin-svelte@5.0.2(svelte@5.14.2)(vite@6.0.3(sass@1.83.0)))(svelte@5.14.2)(vite@6.0.3(sass@1.83.0))) '@sveltejs/kit': specifier: ^2.12.1 - version: 2.12.1(@sveltejs/vite-plugin-svelte@4.0.3(svelte@5.14.2)(vite@5.4.11(sass@1.83.0)))(svelte@5.14.2)(vite@5.4.11(sass@1.83.0)) + version: 2.12.1(@sveltejs/vite-plugin-svelte@5.0.2(svelte@5.14.2)(vite@6.0.3(sass@1.83.0)))(svelte@5.14.2)(vite@6.0.3(sass@1.83.0)) '@sveltejs/vite-plugin-svelte': - specifier: ^4.0.3 - version: 4.0.3(svelte@5.14.2)(vite@5.4.11(sass@1.83.0)) + specifier: ^5.0.2 + version: 5.0.2(svelte@5.14.2)(vite@6.0.3(sass@1.83.0)) '@sveltestrap/sveltestrap': specifier: ^6.2.7 version: 6.2.7(svelte@5.14.2) @@ -109,8 +112,8 @@ importers: specifier: ^8.18.1 version: 8.18.1(eslint@9.17.0)(typescript@5.7.2) vite: - specifier: ^5.4.11 - version: 5.4.11(sass@1.83.0) + specifier: ^6.0.3 + version: 6.0.3(sass@1.83.0) packages: @@ -118,141 +121,147 @@ packages: resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} - '@esbuild/aix-ppc64@0.21.5': - resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} - engines: {node: '>=12'} + '@esbuild/aix-ppc64@0.24.0': + resolution: {integrity: sha512-WtKdFM7ls47zkKHFVzMz8opM7LkcsIp9amDUBIAWirg70RM71WRSjdILPsY5Uv1D42ZpUfaPILDlfactHgsRkw==} + engines: {node: '>=18'} cpu: [ppc64] os: [aix] - '@esbuild/android-arm64@0.21.5': - resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} - engines: {node: '>=12'} + '@esbuild/android-arm64@0.24.0': + resolution: {integrity: sha512-Vsm497xFM7tTIPYK9bNTYJyF/lsP590Qc1WxJdlB6ljCbdZKU9SY8i7+Iin4kyhV/KV5J2rOKsBQbB77Ab7L/w==} + engines: {node: '>=18'} cpu: [arm64] os: [android] - '@esbuild/android-arm@0.21.5': - resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} - engines: {node: '>=12'} + '@esbuild/android-arm@0.24.0': + resolution: {integrity: sha512-arAtTPo76fJ/ICkXWetLCc9EwEHKaeya4vMrReVlEIUCAUncH7M4bhMQ+M9Vf+FFOZJdTNMXNBrWwW+OXWpSew==} + engines: {node: '>=18'} cpu: [arm] os: [android] - '@esbuild/android-x64@0.21.5': - resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} - engines: {node: '>=12'} + '@esbuild/android-x64@0.24.0': + resolution: {integrity: sha512-t8GrvnFkiIY7pa7mMgJd7p8p8qqYIz1NYiAoKc75Zyv73L3DZW++oYMSHPRarcotTKuSs6m3hTOa5CKHaS02TQ==} + engines: {node: '>=18'} cpu: [x64] os: [android] - '@esbuild/darwin-arm64@0.21.5': - resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} - engines: {node: '>=12'} + '@esbuild/darwin-arm64@0.24.0': + resolution: {integrity: sha512-CKyDpRbK1hXwv79soeTJNHb5EiG6ct3efd/FTPdzOWdbZZfGhpbcqIpiD0+vwmpu0wTIL97ZRPZu8vUt46nBSw==} + engines: {node: '>=18'} cpu: [arm64] os: [darwin] - '@esbuild/darwin-x64@0.21.5': - resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} - engines: {node: '>=12'} + '@esbuild/darwin-x64@0.24.0': + resolution: {integrity: sha512-rgtz6flkVkh58od4PwTRqxbKH9cOjaXCMZgWD905JOzjFKW+7EiUObfd/Kav+A6Gyud6WZk9w+xu6QLytdi2OA==} + engines: {node: '>=18'} cpu: [x64] os: [darwin] - '@esbuild/freebsd-arm64@0.21.5': - resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} - engines: {node: '>=12'} + '@esbuild/freebsd-arm64@0.24.0': + resolution: {integrity: sha512-6Mtdq5nHggwfDNLAHkPlyLBpE5L6hwsuXZX8XNmHno9JuL2+bg2BX5tRkwjyfn6sKbxZTq68suOjgWqCicvPXA==} + engines: {node: '>=18'} cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-x64@0.21.5': - resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} - engines: {node: '>=12'} + '@esbuild/freebsd-x64@0.24.0': + resolution: {integrity: sha512-D3H+xh3/zphoX8ck4S2RxKR6gHlHDXXzOf6f/9dbFt/NRBDIE33+cVa49Kil4WUjxMGW0ZIYBYtaGCa2+OsQwQ==} + engines: {node: '>=18'} cpu: [x64] os: [freebsd] - '@esbuild/linux-arm64@0.21.5': - resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} - engines: {node: '>=12'} + '@esbuild/linux-arm64@0.24.0': + resolution: {integrity: sha512-TDijPXTOeE3eaMkRYpcy3LarIg13dS9wWHRdwYRnzlwlA370rNdZqbcp0WTyyV/k2zSxfko52+C7jU5F9Tfj1g==} + engines: {node: '>=18'} cpu: [arm64] os: [linux] - '@esbuild/linux-arm@0.21.5': - resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} - engines: {node: '>=12'} + '@esbuild/linux-arm@0.24.0': + resolution: {integrity: sha512-gJKIi2IjRo5G6Glxb8d3DzYXlxdEj2NlkixPsqePSZMhLudqPhtZ4BUrpIuTjJYXxvF9njql+vRjB2oaC9XpBw==} + engines: {node: '>=18'} cpu: [arm] os: [linux] - '@esbuild/linux-ia32@0.21.5': - resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} - engines: {node: '>=12'} + '@esbuild/linux-ia32@0.24.0': + resolution: {integrity: sha512-K40ip1LAcA0byL05TbCQ4yJ4swvnbzHscRmUilrmP9Am7//0UjPreh4lpYzvThT2Quw66MhjG//20mrufm40mA==} + engines: {node: '>=18'} cpu: [ia32] os: [linux] - '@esbuild/linux-loong64@0.21.5': - resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} - engines: {node: '>=12'} + '@esbuild/linux-loong64@0.24.0': + resolution: {integrity: sha512-0mswrYP/9ai+CU0BzBfPMZ8RVm3RGAN/lmOMgW4aFUSOQBjA31UP8Mr6DDhWSuMwj7jaWOT0p0WoZ6jeHhrD7g==} + engines: {node: '>=18'} cpu: [loong64] os: [linux] - '@esbuild/linux-mips64el@0.21.5': - resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} - engines: {node: '>=12'} + '@esbuild/linux-mips64el@0.24.0': + resolution: {integrity: sha512-hIKvXm0/3w/5+RDtCJeXqMZGkI2s4oMUGj3/jM0QzhgIASWrGO5/RlzAzm5nNh/awHE0A19h/CvHQe6FaBNrRA==} + engines: {node: '>=18'} cpu: [mips64el] os: [linux] - '@esbuild/linux-ppc64@0.21.5': - resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} - engines: {node: '>=12'} + '@esbuild/linux-ppc64@0.24.0': + resolution: {integrity: sha512-HcZh5BNq0aC52UoocJxaKORfFODWXZxtBaaZNuN3PUX3MoDsChsZqopzi5UupRhPHSEHotoiptqikjN/B77mYQ==} + engines: {node: '>=18'} cpu: [ppc64] os: [linux] - '@esbuild/linux-riscv64@0.21.5': - resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} - engines: {node: '>=12'} + '@esbuild/linux-riscv64@0.24.0': + resolution: {integrity: sha512-bEh7dMn/h3QxeR2KTy1DUszQjUrIHPZKyO6aN1X4BCnhfYhuQqedHaa5MxSQA/06j3GpiIlFGSsy1c7Gf9padw==} + engines: {node: '>=18'} cpu: [riscv64] os: [linux] - '@esbuild/linux-s390x@0.21.5': - resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} - engines: {node: '>=12'} + '@esbuild/linux-s390x@0.24.0': + resolution: {integrity: sha512-ZcQ6+qRkw1UcZGPyrCiHHkmBaj9SiCD8Oqd556HldP+QlpUIe2Wgn3ehQGVoPOvZvtHm8HPx+bH20c9pvbkX3g==} + engines: {node: '>=18'} cpu: [s390x] os: [linux] - '@esbuild/linux-x64@0.21.5': - resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} - engines: {node: '>=12'} + '@esbuild/linux-x64@0.24.0': + resolution: {integrity: sha512-vbutsFqQ+foy3wSSbmjBXXIJ6PL3scghJoM8zCL142cGaZKAdCZHyf+Bpu/MmX9zT9Q0zFBVKb36Ma5Fzfa8xA==} + engines: {node: '>=18'} cpu: [x64] os: [linux] - '@esbuild/netbsd-x64@0.21.5': - resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} - engines: {node: '>=12'} + '@esbuild/netbsd-x64@0.24.0': + resolution: {integrity: sha512-hjQ0R/ulkO8fCYFsG0FZoH+pWgTTDreqpqY7UnQntnaKv95uP5iW3+dChxnx7C3trQQU40S+OgWhUVwCjVFLvg==} + engines: {node: '>=18'} cpu: [x64] os: [netbsd] - '@esbuild/openbsd-x64@0.21.5': - resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} - engines: {node: '>=12'} + '@esbuild/openbsd-arm64@0.24.0': + resolution: {integrity: sha512-MD9uzzkPQbYehwcN583yx3Tu5M8EIoTD+tUgKF982WYL9Pf5rKy9ltgD0eUgs8pvKnmizxjXZyLt0z6DC3rRXg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.24.0': + resolution: {integrity: sha512-4ir0aY1NGUhIC1hdoCzr1+5b43mw99uNwVzhIq1OY3QcEwPDO3B7WNXBzaKY5Nsf1+N11i1eOfFcq+D/gOS15Q==} + engines: {node: '>=18'} cpu: [x64] os: [openbsd] - '@esbuild/sunos-x64@0.21.5': - resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} - engines: {node: '>=12'} + '@esbuild/sunos-x64@0.24.0': + resolution: {integrity: sha512-jVzdzsbM5xrotH+W5f1s+JtUy1UWgjU0Cf4wMvffTB8m6wP5/kx0KiaLHlbJO+dMgtxKV8RQ/JvtlFcdZ1zCPA==} + engines: {node: '>=18'} cpu: [x64] os: [sunos] - '@esbuild/win32-arm64@0.21.5': - resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} - engines: {node: '>=12'} + '@esbuild/win32-arm64@0.24.0': + resolution: {integrity: sha512-iKc8GAslzRpBytO2/aN3d2yb2z8XTVfNV0PjGlCxKo5SgWmNXx82I/Q3aG1tFfS+A2igVCY97TJ8tnYwpUWLCA==} + engines: {node: '>=18'} cpu: [arm64] os: [win32] - '@esbuild/win32-ia32@0.21.5': - resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} - engines: {node: '>=12'} + '@esbuild/win32-ia32@0.24.0': + resolution: {integrity: sha512-vQW36KZolfIudCcTnaTpmLQ24Ha1RjygBo39/aLkM2kmjkWmZGEJ5Gn9l5/7tzXA42QGIoWbICfg6KLLkIw6yw==} + engines: {node: '>=18'} cpu: [ia32] os: [win32] - '@esbuild/win32-x64@0.21.5': - resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} - engines: {node: '>=12'} + '@esbuild/win32-x64@0.24.0': + resolution: {integrity: sha512-7IAFPrjSQIJrGsK6flwg7NFmwBoSTyF3rl7If0hNUFQU4ilTsEPL6GuMuU9BfIWVVGuRnuIidkSMC+c0Otu8IA==} + engines: {node: '>=18'} cpu: [x64] os: [win32] @@ -576,20 +585,20 @@ packages: svelte: ^4.0.0 || ^5.0.0-next.0 vite: ^5.0.3 || ^6.0.0 - '@sveltejs/vite-plugin-svelte-inspector@3.0.1': - resolution: {integrity: sha512-2CKypmj1sM4GE7HjllT7UKmo4Q6L5xFRd7VMGEWhYnZ+wc6AUVU01IBd7yUi6WnFndEwWoMNOd6e8UjoN0nbvQ==} + '@sveltejs/vite-plugin-svelte-inspector@4.0.1': + resolution: {integrity: sha512-J/Nmb2Q2y7mck2hyCX4ckVHcR5tu2J+MtBEQqpDrrgELZ2uvraQcK/ioCV61AqkdXFgriksOKIceDcQmqnGhVw==} engines: {node: ^18.0.0 || ^20.0.0 || >=22} peerDependencies: - '@sveltejs/vite-plugin-svelte': ^4.0.0-next.0||^4.0.0 - svelte: ^5.0.0-next.96 || ^5.0.0 - vite: ^5.0.0 + '@sveltejs/vite-plugin-svelte': ^5.0.0 + svelte: ^5.0.0 + vite: ^6.0.0 - '@sveltejs/vite-plugin-svelte@4.0.3': - resolution: {integrity: sha512-J7nC5gT5qpmvyD2pmzPUntLUgoinyEaNy9sTpGGE6N7pblggO0A1NyneJJvR2ELlzK6ti28aF2SLXG1yJdnJeA==} + '@sveltejs/vite-plugin-svelte@5.0.2': + resolution: {integrity: sha512-GElAxQMlznx1pRdodtkmiyBZcjlaJntJ8APa2hBhnbUAJqKAFGdmwjRPJhh+2DMxwARRLBzQIs/iZ5EbR4X/og==} engines: {node: ^18.0.0 || ^20.0.0 || >=22} peerDependencies: - svelte: ^5.0.0-next.96 || ^5.0.0 - vite: ^5.0.0 + svelte: ^5.0.0 + vite: ^6.0.0 '@sveltekit-i18n/base@1.3.7': resolution: {integrity: sha512-kg1kql1/ro/lIudwFiWrv949Q07gmweln87tflUZR51MNdXXzK4fiJQv5Mw50K/CdQ5BOk/dJ0WOH2vOtBI6yw==} @@ -818,9 +827,9 @@ packages: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} - esbuild@0.21.5: - resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} - engines: {node: '>=12'} + esbuild@0.24.0: + resolution: {integrity: sha512-FuLPevChGDshgSicjisSooU0cemp/sGXR841D5LHMB7mTVOmsEHcAxaH3irL53+8YDIeVNQEySh4DaYU/iuPqQ==} + engines: {node: '>=18'} hasBin: true escape-string-regexp@4.0.0: @@ -890,8 +899,8 @@ packages: resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} engines: {node: '>=0.10'} - esrap@1.3.0: - resolution: {integrity: sha512-LPT4X5Ur2sGnkQscwgWXRPVDuQrbuJbrStLmVXVXd+lGQ/HoYmcAa47t0Egzw1bYHwhF0w+6DTkxL1Xctp10XQ==} + esrap@1.2.3: + resolution: {integrity: sha512-ZlQmCCK+n7SGoqo7DnfKaP1sJZa49P01/dXzmjCASSo04p72w8EksT2NMK8CEX8DhKsfJXANioIw8VyHNsBfvQ==} esrecurse@4.3.0: resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} @@ -1400,22 +1409,27 @@ packages: util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - vite@5.4.11: - resolution: {integrity: sha512-c7jFQRklXua0mTzneGW9QVyxFjUgwcihC4bXEtujIo2ouWCe1Ajt/amn2PCxYnhYfd5k09JX3SB7OYWFKYqj8Q==} - engines: {node: ^18.0.0 || >=20.0.0} + vite@6.0.3: + resolution: {integrity: sha512-Cmuo5P0ENTN6HxLSo6IHsjCLn/81Vgrp81oaiFFMRa8gGDj5xEjIcEpf2ZymZtZR8oU0P2JX5WuUp/rlXcHkAw==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true peerDependencies: - '@types/node': ^18.0.0 || >=20.0.0 + '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 + jiti: '>=1.21.0' less: '*' lightningcss: ^1.21.0 sass: '*' sass-embedded: '*' stylus: '*' sugarss: '*' - terser: ^5.4.0 + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 peerDependenciesMeta: '@types/node': optional: true + jiti: + optional: true less: optional: true lightningcss: @@ -1430,6 +1444,10 @@ packages: optional: true terser: optional: true + tsx: + optional: true + yaml: + optional: true vitefu@1.0.4: resolution: {integrity: sha512-y6zEE3PQf6uu/Mt6DTJ9ih+kyJLr4XcSgHR2zUkM8SWDhuixEJxfJ6CZGMHh1Ec3vPLoEA0IHU5oWzVqw8ulow==} @@ -1466,73 +1484,76 @@ snapshots: '@jridgewell/gen-mapping': 0.3.8 '@jridgewell/trace-mapping': 0.3.25 - '@esbuild/aix-ppc64@0.21.5': + '@esbuild/aix-ppc64@0.24.0': optional: true - '@esbuild/android-arm64@0.21.5': + '@esbuild/android-arm64@0.24.0': optional: true - '@esbuild/android-arm@0.21.5': + '@esbuild/android-arm@0.24.0': optional: true - '@esbuild/android-x64@0.21.5': + '@esbuild/android-x64@0.24.0': optional: true - '@esbuild/darwin-arm64@0.21.5': + '@esbuild/darwin-arm64@0.24.0': optional: true - '@esbuild/darwin-x64@0.21.5': + '@esbuild/darwin-x64@0.24.0': optional: true - '@esbuild/freebsd-arm64@0.21.5': + '@esbuild/freebsd-arm64@0.24.0': optional: true - '@esbuild/freebsd-x64@0.21.5': + '@esbuild/freebsd-x64@0.24.0': optional: true - '@esbuild/linux-arm64@0.21.5': + '@esbuild/linux-arm64@0.24.0': optional: true - '@esbuild/linux-arm@0.21.5': + '@esbuild/linux-arm@0.24.0': optional: true - '@esbuild/linux-ia32@0.21.5': + '@esbuild/linux-ia32@0.24.0': optional: true - '@esbuild/linux-loong64@0.21.5': + '@esbuild/linux-loong64@0.24.0': optional: true - '@esbuild/linux-mips64el@0.21.5': + '@esbuild/linux-mips64el@0.24.0': optional: true - '@esbuild/linux-ppc64@0.21.5': + '@esbuild/linux-ppc64@0.24.0': optional: true - '@esbuild/linux-riscv64@0.21.5': + '@esbuild/linux-riscv64@0.24.0': optional: true - '@esbuild/linux-s390x@0.21.5': + '@esbuild/linux-s390x@0.24.0': optional: true - '@esbuild/linux-x64@0.21.5': + '@esbuild/linux-x64@0.24.0': optional: true - '@esbuild/netbsd-x64@0.21.5': + '@esbuild/netbsd-x64@0.24.0': optional: true - '@esbuild/openbsd-x64@0.21.5': + '@esbuild/openbsd-arm64@0.24.0': optional: true - '@esbuild/sunos-x64@0.21.5': + '@esbuild/openbsd-x64@0.24.0': optional: true - '@esbuild/win32-arm64@0.21.5': + '@esbuild/sunos-x64@0.24.0': optional: true - '@esbuild/win32-ia32@0.21.5': + '@esbuild/win32-arm64@0.24.0': optional: true - '@esbuild/win32-x64@0.21.5': + '@esbuild/win32-ia32@0.24.0': + optional: true + + '@esbuild/win32-x64@0.24.0': optional: true '@eslint-community/eslint-utils@4.4.1(eslint@9.17.0)': @@ -1778,17 +1799,17 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.28.1': optional: true - '@sveltejs/adapter-node@5.2.10(@sveltejs/kit@2.12.1(@sveltejs/vite-plugin-svelte@4.0.3(svelte@5.14.2)(vite@5.4.11(sass@1.83.0)))(svelte@5.14.2)(vite@5.4.11(sass@1.83.0)))': + '@sveltejs/adapter-node@5.2.10(@sveltejs/kit@2.12.1(@sveltejs/vite-plugin-svelte@5.0.2(svelte@5.14.2)(vite@6.0.3(sass@1.83.0)))(svelte@5.14.2)(vite@6.0.3(sass@1.83.0)))': dependencies: '@rollup/plugin-commonjs': 28.0.2(rollup@4.28.1) '@rollup/plugin-json': 6.1.0(rollup@4.28.1) '@rollup/plugin-node-resolve': 15.3.1(rollup@4.28.1) - '@sveltejs/kit': 2.12.1(@sveltejs/vite-plugin-svelte@4.0.3(svelte@5.14.2)(vite@5.4.11(sass@1.83.0)))(svelte@5.14.2)(vite@5.4.11(sass@1.83.0)) + '@sveltejs/kit': 2.12.1(@sveltejs/vite-plugin-svelte@5.0.2(svelte@5.14.2)(vite@6.0.3(sass@1.83.0)))(svelte@5.14.2)(vite@6.0.3(sass@1.83.0)) rollup: 4.28.1 - '@sveltejs/kit@2.12.1(@sveltejs/vite-plugin-svelte@4.0.3(svelte@5.14.2)(vite@5.4.11(sass@1.83.0)))(svelte@5.14.2)(vite@5.4.11(sass@1.83.0))': + '@sveltejs/kit@2.12.1(@sveltejs/vite-plugin-svelte@5.0.2(svelte@5.14.2)(vite@6.0.3(sass@1.83.0)))(svelte@5.14.2)(vite@6.0.3(sass@1.83.0))': dependencies: - '@sveltejs/vite-plugin-svelte': 4.0.3(svelte@5.14.2)(vite@5.4.11(sass@1.83.0)) + '@sveltejs/vite-plugin-svelte': 5.0.2(svelte@5.14.2)(vite@6.0.3(sass@1.83.0)) '@types/cookie': 0.6.0 cookie: 0.6.0 devalue: 5.1.1 @@ -1802,27 +1823,27 @@ snapshots: sirv: 3.0.0 svelte: 5.14.2 tiny-glob: 0.2.9 - vite: 5.4.11(sass@1.83.0) + vite: 6.0.3(sass@1.83.0) - '@sveltejs/vite-plugin-svelte-inspector@3.0.1(@sveltejs/vite-plugin-svelte@4.0.3(svelte@5.14.2)(vite@5.4.11(sass@1.83.0)))(svelte@5.14.2)(vite@5.4.11(sass@1.83.0))': + '@sveltejs/vite-plugin-svelte-inspector@4.0.1(@sveltejs/vite-plugin-svelte@5.0.2(svelte@5.14.2)(vite@6.0.3(sass@1.83.0)))(svelte@5.14.2)(vite@6.0.3(sass@1.83.0))': dependencies: - '@sveltejs/vite-plugin-svelte': 4.0.3(svelte@5.14.2)(vite@5.4.11(sass@1.83.0)) + '@sveltejs/vite-plugin-svelte': 5.0.2(svelte@5.14.2)(vite@6.0.3(sass@1.83.0)) debug: 4.4.0 svelte: 5.14.2 - vite: 5.4.11(sass@1.83.0) + vite: 6.0.3(sass@1.83.0) transitivePeerDependencies: - supports-color - '@sveltejs/vite-plugin-svelte@4.0.3(svelte@5.14.2)(vite@5.4.11(sass@1.83.0))': + '@sveltejs/vite-plugin-svelte@5.0.2(svelte@5.14.2)(vite@6.0.3(sass@1.83.0))': dependencies: - '@sveltejs/vite-plugin-svelte-inspector': 3.0.1(@sveltejs/vite-plugin-svelte@4.0.3(svelte@5.14.2)(vite@5.4.11(sass@1.83.0)))(svelte@5.14.2)(vite@5.4.11(sass@1.83.0)) + '@sveltejs/vite-plugin-svelte-inspector': 4.0.1(@sveltejs/vite-plugin-svelte@5.0.2(svelte@5.14.2)(vite@6.0.3(sass@1.83.0)))(svelte@5.14.2)(vite@6.0.3(sass@1.83.0)) debug: 4.4.0 deepmerge: 4.3.1 kleur: 4.1.5 magic-string: 0.30.17 svelte: 5.14.2 - vite: 5.4.11(sass@1.83.0) - vitefu: 1.0.4(vite@5.4.11(sass@1.83.0)) + vite: 6.0.3(sass@1.83.0) + vitefu: 1.0.4(vite@6.0.3(sass@1.83.0)) transitivePeerDependencies: - supports-color @@ -2056,31 +2077,32 @@ snapshots: entities@4.5.0: {} - esbuild@0.21.5: + esbuild@0.24.0: optionalDependencies: - '@esbuild/aix-ppc64': 0.21.5 - '@esbuild/android-arm': 0.21.5 - '@esbuild/android-arm64': 0.21.5 - '@esbuild/android-x64': 0.21.5 - '@esbuild/darwin-arm64': 0.21.5 - '@esbuild/darwin-x64': 0.21.5 - '@esbuild/freebsd-arm64': 0.21.5 - '@esbuild/freebsd-x64': 0.21.5 - '@esbuild/linux-arm': 0.21.5 - '@esbuild/linux-arm64': 0.21.5 - '@esbuild/linux-ia32': 0.21.5 - '@esbuild/linux-loong64': 0.21.5 - '@esbuild/linux-mips64el': 0.21.5 - '@esbuild/linux-ppc64': 0.21.5 - '@esbuild/linux-riscv64': 0.21.5 - '@esbuild/linux-s390x': 0.21.5 - '@esbuild/linux-x64': 0.21.5 - '@esbuild/netbsd-x64': 0.21.5 - '@esbuild/openbsd-x64': 0.21.5 - '@esbuild/sunos-x64': 0.21.5 - '@esbuild/win32-arm64': 0.21.5 - '@esbuild/win32-ia32': 0.21.5 - '@esbuild/win32-x64': 0.21.5 + '@esbuild/aix-ppc64': 0.24.0 + '@esbuild/android-arm': 0.24.0 + '@esbuild/android-arm64': 0.24.0 + '@esbuild/android-x64': 0.24.0 + '@esbuild/darwin-arm64': 0.24.0 + '@esbuild/darwin-x64': 0.24.0 + '@esbuild/freebsd-arm64': 0.24.0 + '@esbuild/freebsd-x64': 0.24.0 + '@esbuild/linux-arm': 0.24.0 + '@esbuild/linux-arm64': 0.24.0 + '@esbuild/linux-ia32': 0.24.0 + '@esbuild/linux-loong64': 0.24.0 + '@esbuild/linux-mips64el': 0.24.0 + '@esbuild/linux-ppc64': 0.24.0 + '@esbuild/linux-riscv64': 0.24.0 + '@esbuild/linux-s390x': 0.24.0 + '@esbuild/linux-x64': 0.24.0 + '@esbuild/netbsd-x64': 0.24.0 + '@esbuild/openbsd-arm64': 0.24.0 + '@esbuild/openbsd-x64': 0.24.0 + '@esbuild/sunos-x64': 0.24.0 + '@esbuild/win32-arm64': 0.24.0 + '@esbuild/win32-ia32': 0.24.0 + '@esbuild/win32-x64': 0.24.0 escape-string-regexp@4.0.0: {} @@ -2183,10 +2205,10 @@ snapshots: dependencies: estraverse: 5.3.0 - esrap@1.3.0: + esrap@1.2.3: dependencies: '@jridgewell/sourcemap-codec': 1.5.0 - '@typescript-eslint/types': 8.18.1 + '@types/estree': 1.0.6 esrecurse@4.3.0: dependencies: @@ -2603,7 +2625,7 @@ snapshots: aria-query: 5.3.2 axobject-query: 4.1.0 esm-env: 1.2.1 - esrap: 1.3.0 + esrap: 1.2.3 is-reference: 3.0.3 locate-character: 3.0.0 magic-string: 0.30.17 @@ -2660,18 +2682,18 @@ snapshots: util-deprecate@1.0.2: {} - vite@5.4.11(sass@1.83.0): + vite@6.0.3(sass@1.83.0): dependencies: - esbuild: 0.21.5 + esbuild: 0.24.0 postcss: 8.4.49 rollup: 4.28.1 optionalDependencies: fsevents: 2.3.3 sass: 1.83.0 - vitefu@1.0.4(vite@5.4.11(sass@1.83.0)): + vitefu@1.0.4(vite@6.0.3(sass@1.83.0)): optionalDependencies: - vite: 5.4.11(sass@1.83.0) + vite: 6.0.3(sass@1.83.0) which@2.0.2: dependencies: diff --git a/Foxnouns.Frontend/src/app.d.ts b/Foxnouns.Frontend/src/app.d.ts index da08e6d..ca8d85c 100644 --- a/Foxnouns.Frontend/src/app.d.ts +++ b/Foxnouns.Frontend/src/app.d.ts @@ -1,7 +1,16 @@ // See https://svelte.dev/docs/kit/types#app.d.ts + +import type { ErrorCode } from "$api/error"; + // for information about these interfaces declare global { namespace App { + interface Error { + message: string; + status: number; + code: ErrorCode; + id: string; + } // interface Error {} // interface Locals {} // interface PageData {} diff --git a/Foxnouns.Frontend/src/hooks.server.ts b/Foxnouns.Frontend/src/hooks.server.ts index e8ec723..2e8fccb 100644 --- a/Foxnouns.Frontend/src/hooks.server.ts +++ b/Foxnouns.Frontend/src/hooks.server.ts @@ -1,6 +1,8 @@ +import ApiError, { ErrorCode } from "$api/error"; import { PRIVATE_API_HOST, PRIVATE_INTERNAL_API_HOST } from "$env/static/private"; import { PUBLIC_API_BASE } from "$env/static/public"; -import type { HandleFetch } from "@sveltejs/kit"; +import log from "$lib/log"; +import type { HandleFetch, HandleServerError } from "@sveltejs/kit"; export const handleFetch: HandleFetch = async ({ request, fetch }) => { if (request.url.startsWith(`${PUBLIC_API_BASE}/internal`)) { @@ -11,3 +13,24 @@ export const handleFetch: HandleFetch = async ({ request, fetch }) => { return await fetch(request); }; + +export const handleError: HandleServerError = async ({ error, status, message }) => { + const id = crypto.randomUUID(); + + if (error instanceof ApiError) { + return { + id, + status: error.raw?.status || status, + message: error.raw?.message || "Unknown error", + code: error.code, + }; + } + + if (status >= 400 && status <= 499) { + return { id, status, message, code: ErrorCode.GenericApiError }; + } + + log.error("[%s] error in handler:", id, error); + + return { id, status, message, code: ErrorCode.InternalServerError }; +}; diff --git a/Foxnouns.Frontend/src/routes/+error.svelte b/Foxnouns.Frontend/src/routes/+error.svelte index ca116b9..e667611 100644 --- a/Foxnouns.Frontend/src/routes/+error.svelte +++ b/Foxnouns.Frontend/src/routes/+error.svelte @@ -1,5 +1,6 @@ + +{#if required} + * +{:else} + {$t("form.optional")} +{/if} diff --git a/Foxnouns.Frontend/src/lib/components/profile/ProfileButtons.svelte b/Foxnouns.Frontend/src/lib/components/profile/ProfileButtons.svelte new file mode 100644 index 0000000..d3de215 --- /dev/null +++ b/Foxnouns.Frontend/src/lib/components/profile/ProfileButtons.svelte @@ -0,0 +1,36 @@ + + +
+ + + {#if meUser && meUser.username !== user} + {$t("profile.report-button")} + {/if} +
diff --git a/Foxnouns.Frontend/src/lib/i18n/locales/en.json b/Foxnouns.Frontend/src/lib/i18n/locales/en.json index 2ede9a1..16f5527 100644 --- a/Foxnouns.Frontend/src/lib/i18n/locales/en.json +++ b/Foxnouns.Frontend/src/lib/i18n/locales/en.json @@ -18,7 +18,10 @@ "pronouns-header": "Pronouns", "default-members-header": "Members", "create-member-button": "Create member", - "back-to-user": "Back to {{name}}" + "back-to-user": "Back to {{name}}", + "copy-link-button": "Copy link", + "copy-short-link-button": "Copy short link", + "report-button": "Report profile" }, "title": { "log-in": "Log in", @@ -237,5 +240,35 @@ "custom-preference-muted": "Show as muted text", "custom-preference-favourite": "Treat like favourite" }, - "cancel": "Cancel" + "cancel": "Cancel", + "report": { + "title": "Reporting {{name}}", + "totalitarianism": "Support of totalitarian regimes", + "hate-speech": "Hate speech", + "racism": "Racism or xenophobia", + "homophobia": "Homophobia", + "transphobia": "Transphobia", + "queerphobia": "Queerphobia (other)", + "exclusionism": "Queer or plural exclusionism", + "sexism": "Sexism or misogyny", + "ableism": "Ableism", + "child-pornography": "Child pornography", + "pedophilia-advocacy": "Pedophilia advocacy", + "harassment": "Harassment", + "impersonation": "Impersonation", + "doxxing": "Doxxing", + "encouraging-self-harm": "Encouraging self-harm or suicide", + "spam": "Spam", + "trolling": "Trolling", + "advertisement": "Advertising", + "copyright-violation": "Copyright or trademark violation", + "success": "Successfully submitted report!", + "reason-label": "Why are you reporting this profile?", + "context-label": "Is there any context you'd like to give us?", + "submit-button": "Submit report" + }, + "form": { + "optional": "(optional)", + "required": "Required" + } } diff --git a/Foxnouns.Frontend/src/routes/@[username]/+page.svelte b/Foxnouns.Frontend/src/routes/@[username]/+page.svelte index cefd8bc..0562274 100644 --- a/Foxnouns.Frontend/src/routes/@[username]/+page.svelte +++ b/Foxnouns.Frontend/src/routes/@[username]/+page.svelte @@ -8,6 +8,7 @@ import { Icon } from "@sveltestrap/sveltestrap"; import Paginator from "$components/Paginator.svelte"; import MemberCard from "$components/profile/user/MemberCard.svelte"; + import ProfileButtons from "$components/profile/ProfileButtons.svelte"; type Props = { data: PageData }; let { data }: Props = $props(); @@ -28,6 +29,13 @@ + + {#if data.members.length > 0}

diff --git a/Foxnouns.Frontend/src/routes/@[username]/[memberName]/+page.svelte b/Foxnouns.Frontend/src/routes/@[username]/[memberName]/+page.svelte index a69544a..e0deff6 100644 --- a/Foxnouns.Frontend/src/routes/@[username]/[memberName]/+page.svelte +++ b/Foxnouns.Frontend/src/routes/@[username]/[memberName]/+page.svelte @@ -6,6 +6,7 @@ import ProfileFields from "$components/profile/ProfileFields.svelte"; import { Icon } from "@sveltestrap/sveltestrap"; import { t } from "$lib/i18n"; + import ProfileButtons from "$components/profile/ProfileButtons.svelte"; type Props = { data: PageData }; let { data }: Props = $props(); @@ -37,4 +38,12 @@ + + diff --git a/Foxnouns.Frontend/src/routes/report/[id]/+page.server.ts b/Foxnouns.Frontend/src/routes/report/[id]/+page.server.ts new file mode 100644 index 0000000..5d36696 --- /dev/null +++ b/Foxnouns.Frontend/src/routes/report/[id]/+page.server.ts @@ -0,0 +1,60 @@ +import { apiRequest, fastRequest } from "$api"; +import ApiError from "$api/error.js"; +import type { Member } from "$api/models/member.js"; +import { type CreateReportRequest, ReportReason } from "$api/models/moderation.js"; +import type { PartialUser, User } from "$api/models/user.js"; +import log from "$lib/log.js"; +import { redirect } from "@sveltejs/kit"; + +export const load = async ({ parent, params, fetch, cookies, url }) => { + const { meUser } = await parent(); + if (!meUser) redirect(303, "/"); + + let user: PartialUser; + let member: Member | null = null; + if (url.searchParams.has("member")) { + const resp = await apiRequest( + "GET", + `/users/${params.id}/members/${url.searchParams.get("member")}`, + { fetch, cookies }, + ); + + user = resp.user; + member = resp; + } else { + user = await apiRequest("GET", `/users/${params.id}`, { fetch, cookies }); + } + + if (meUser.id === user.id) redirect(303, "/"); + + return { user, member }; +}; + +export const actions = { + default: async ({ request, fetch, cookies }) => { + const body = await request.formData(); + + const targetIsMember = body.get("target-type") === "member"; + const target = body.get("target-id") as string; + const reason = body.get("reason") as ReportReason; + const context = body.get("context") as string | null; + + const url = targetIsMember + ? `/moderation/report-member/${target}` + : `/moderation/report-user/${target}`; + + try { + await fastRequest("POST", url, { + body: { reason, context }, + fetch, + cookies, + }); + + return { ok: true, error: null }; + } catch (e) { + if (e instanceof ApiError) return { ok: false, error: e.obj }; + log.error("error reporting user or member %s:", target, e); + throw e; + } + }, +}; diff --git a/Foxnouns.Frontend/src/routes/report/[id]/+page.svelte b/Foxnouns.Frontend/src/routes/report/[id]/+page.svelte new file mode 100644 index 0000000..24458ab --- /dev/null +++ b/Foxnouns.Frontend/src/routes/report/[id]/+page.svelte @@ -0,0 +1,72 @@ + + + + {$t("report.title", { name })} • pronouns.cc + + +
+
+

{$t("report.title", { name })}

+ + + + +

{$t("report.reason-label")}

+
+ {#each reasons as reason} +
+
+ + +
+
+ {/each} +
+ +

+ {$t("report.context-label")} + +

+ + +
+ + {$t("cancel")} +
+ +
From 546e900204d2e055f841ce2fce783d5241e15a45 Mon Sep 17 00:00:00 2001 From: sam Date: Wed, 18 Dec 2024 21:26:35 +0100 Subject: [PATCH 6/6] feat(backend): report context, fix deleting reports --- .../Moderation/ReportsController.cs | 7 ++ Foxnouns.Backend/Database/DatabaseContext.cs | 6 ++ .../20241218195457_AddContextToReports.cs | 30 +++++++++ ...41218201855_MakeAuditLogReportsNullable.cs | 65 +++++++++++++++++++ .../DatabaseContextModelSnapshot.cs | 15 ++++- .../Database/Models/AuditLogEntry.cs | 1 + Foxnouns.Backend/Database/Models/Report.cs | 3 + Foxnouns.Backend/Dto/Moderation.cs | 2 +- .../Utils/ValidationUtils.Strings.cs | 7 ++ 9 files changed, 133 insertions(+), 3 deletions(-) create mode 100644 Foxnouns.Backend/Database/Migrations/20241218195457_AddContextToReports.cs create mode 100644 Foxnouns.Backend/Database/Migrations/20241218201855_MakeAuditLogReportsNullable.cs diff --git a/Foxnouns.Backend/Controllers/Moderation/ReportsController.cs b/Foxnouns.Backend/Controllers/Moderation/ReportsController.cs index 3e9f905..c46defb 100644 --- a/Foxnouns.Backend/Controllers/Moderation/ReportsController.cs +++ b/Foxnouns.Backend/Controllers/Moderation/ReportsController.cs @@ -18,6 +18,7 @@ using Foxnouns.Backend.Database.Models; using Foxnouns.Backend.Dto; using Foxnouns.Backend.Middleware; using Foxnouns.Backend.Services; +using Foxnouns.Backend.Utils; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using Newtonsoft.Json; @@ -49,6 +50,8 @@ public class ReportsController( [FromBody] CreateReportRequest req ) { + ValidationUtils.Validate([("context", ValidationUtils.ValidateReportContext(req.Context))]); + User target = await db.ResolveUserAsync(id); if (target.Id == CurrentUser!.Id) @@ -96,6 +99,7 @@ public class ReportsController( TargetUserId = target.Id, TargetMemberId = null, Reason = req.Reason, + Context = req.Context, TargetType = ReportTargetType.User, TargetSnapshot = snapshot, }; @@ -112,6 +116,8 @@ public class ReportsController( [FromBody] CreateReportRequest req ) { + ValidationUtils.Validate([("context", ValidationUtils.ValidateReportContext(req.Context))]); + Member target = await db.ResolveMemberAsync(id); if (target.User.Id == CurrentUser!.Id) @@ -158,6 +164,7 @@ public class ReportsController( TargetUserId = target.User.Id, TargetMemberId = target.Id, Reason = req.Reason, + Context = req.Context, TargetType = ReportTargetType.Member, TargetSnapshot = snapshot, }; diff --git a/Foxnouns.Backend/Database/DatabaseContext.cs b/Foxnouns.Backend/Database/DatabaseContext.cs index 9baa143..42a5009 100644 --- a/Foxnouns.Backend/Database/DatabaseContext.cs +++ b/Foxnouns.Backend/Database/DatabaseContext.cs @@ -108,6 +108,12 @@ public class DatabaseContext(DbContextOptions options) : DbContext(options) .HasFilter("fediverse_application_id IS NULL") .IsUnique(); + modelBuilder + .Entity() + .HasOne(e => e.Report) + .WithOne(e => e.AuditLogEntry) + .OnDelete(DeleteBehavior.SetNull); + modelBuilder.Entity().Property(u => u.Sid).HasDefaultValueSql("find_free_user_sid()"); modelBuilder.Entity().Property(u => u.Fields).HasColumnType("jsonb"); modelBuilder.Entity().Property(u => u.Names).HasColumnType("jsonb"); diff --git a/Foxnouns.Backend/Database/Migrations/20241218195457_AddContextToReports.cs b/Foxnouns.Backend/Database/Migrations/20241218195457_AddContextToReports.cs new file mode 100644 index 0000000..3dc6029 --- /dev/null +++ b/Foxnouns.Backend/Database/Migrations/20241218195457_AddContextToReports.cs @@ -0,0 +1,30 @@ +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Foxnouns.Backend.Database.Migrations +{ + /// + [DbContext(typeof(DatabaseContext))] + [Migration("20241218195457_AddContextToReports")] + public partial class AddContextToReports : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "context", + table: "reports", + type: "text", + nullable: true + ); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn(name: "context", table: "reports"); + } + } +} diff --git a/Foxnouns.Backend/Database/Migrations/20241218201855_MakeAuditLogReportsNullable.cs b/Foxnouns.Backend/Database/Migrations/20241218201855_MakeAuditLogReportsNullable.cs new file mode 100644 index 0000000..53a1f72 --- /dev/null +++ b/Foxnouns.Backend/Database/Migrations/20241218201855_MakeAuditLogReportsNullable.cs @@ -0,0 +1,65 @@ +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Foxnouns.Backend.Database.Migrations +{ + /// + [DbContext(typeof(DatabaseContext))] + [Migration("20241218201855_MakeAuditLogReportsNullable")] + public partial class MakeAuditLogReportsNullable : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropForeignKey( + name: "fk_audit_log_reports_report_id", + table: "audit_log" + ); + + migrationBuilder.DropIndex(name: "ix_audit_log_report_id", table: "audit_log"); + + migrationBuilder.CreateIndex( + name: "ix_audit_log_report_id", + table: "audit_log", + column: "report_id", + unique: true + ); + + migrationBuilder.AddForeignKey( + name: "fk_audit_log_reports_report_id", + table: "audit_log", + column: "report_id", + principalTable: "reports", + principalColumn: "id", + onDelete: ReferentialAction.SetNull + ); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropForeignKey( + name: "fk_audit_log_reports_report_id", + table: "audit_log" + ); + + migrationBuilder.DropIndex(name: "ix_audit_log_report_id", table: "audit_log"); + + migrationBuilder.CreateIndex( + name: "ix_audit_log_report_id", + table: "audit_log", + column: "report_id" + ); + + migrationBuilder.AddForeignKey( + name: "fk_audit_log_reports_report_id", + table: "audit_log", + column: "report_id", + principalTable: "reports", + principalColumn: "id" + ); + } + } +} diff --git a/Foxnouns.Backend/Database/Migrations/DatabaseContextModelSnapshot.cs b/Foxnouns.Backend/Database/Migrations/DatabaseContextModelSnapshot.cs index 79a0232..a2fa6f2 100644 --- a/Foxnouns.Backend/Database/Migrations/DatabaseContextModelSnapshot.cs +++ b/Foxnouns.Backend/Database/Migrations/DatabaseContextModelSnapshot.cs @@ -113,6 +113,7 @@ namespace Foxnouns.Backend.Database.Migrations .HasName("pk_audit_log"); b.HasIndex("ReportId") + .IsUnique() .HasDatabaseName("ix_audit_log_report_id"); b.ToTable("audit_log", (string)null); @@ -409,6 +410,10 @@ namespace Foxnouns.Backend.Database.Migrations .HasColumnType("bigint") .HasColumnName("id"); + b.Property("Context") + .HasColumnType("text") + .HasColumnName("context"); + b.Property("Reason") .HasColumnType("integer") .HasColumnName("reason"); @@ -675,8 +680,9 @@ namespace Foxnouns.Backend.Database.Migrations modelBuilder.Entity("Foxnouns.Backend.Database.Models.AuditLogEntry", b => { b.HasOne("Foxnouns.Backend.Database.Models.Report", "Report") - .WithMany() - .HasForeignKey("ReportId") + .WithOne("AuditLogEntry") + .HasForeignKey("Foxnouns.Backend.Database.Models.AuditLogEntry", "ReportId") + .OnDelete(DeleteBehavior.SetNull) .HasConstraintName("fk_audit_log_reports_report_id"); b.Navigation("Report"); @@ -839,6 +845,11 @@ namespace Foxnouns.Backend.Database.Migrations b.Navigation("ProfileFlags"); }); + modelBuilder.Entity("Foxnouns.Backend.Database.Models.Report", b => + { + b.Navigation("AuditLogEntry"); + }); + modelBuilder.Entity("Foxnouns.Backend.Database.Models.User", b => { b.Navigation("AuthMethods"); diff --git a/Foxnouns.Backend/Database/Models/AuditLogEntry.cs b/Foxnouns.Backend/Database/Models/AuditLogEntry.cs index a4983ae..c65e675 100644 --- a/Foxnouns.Backend/Database/Models/AuditLogEntry.cs +++ b/Foxnouns.Backend/Database/Models/AuditLogEntry.cs @@ -12,6 +12,7 @@ // // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . +using System.ComponentModel.DataAnnotations.Schema; using Foxnouns.Backend.Utils; using Newtonsoft.Json; diff --git a/Foxnouns.Backend/Database/Models/Report.cs b/Foxnouns.Backend/Database/Models/Report.cs index e668f44..47b994f 100644 --- a/Foxnouns.Backend/Database/Models/Report.cs +++ b/Foxnouns.Backend/Database/Models/Report.cs @@ -29,9 +29,12 @@ public class Report : BaseModel public ReportStatus Status { get; set; } public ReportReason Reason { get; init; } + public string? Context { get; init; } public ReportTargetType TargetType { get; init; } public string? TargetSnapshot { get; init; } + + public AuditLogEntry? AuditLogEntry { get; set; } } [JsonConverter(typeof(ScreamingSnakeCaseEnumConverter))] diff --git a/Foxnouns.Backend/Dto/Moderation.cs b/Foxnouns.Backend/Dto/Moderation.cs index 0de65c7..f9e6ab7 100644 --- a/Foxnouns.Backend/Dto/Moderation.cs +++ b/Foxnouns.Backend/Dto/Moderation.cs @@ -57,7 +57,7 @@ public record NotificationResponse( public record AuditLogEntity(Snowflake Id, string Username); -public record CreateReportRequest(ReportReason Reason); +public record CreateReportRequest(ReportReason Reason, string? Context = null); public record IgnoreReportRequest(string? Reason = null); diff --git a/Foxnouns.Backend/Utils/ValidationUtils.Strings.cs b/Foxnouns.Backend/Utils/ValidationUtils.Strings.cs index ea12043..d38f274 100644 --- a/Foxnouns.Backend/Utils/ValidationUtils.Strings.cs +++ b/Foxnouns.Backend/Utils/ValidationUtils.Strings.cs @@ -196,6 +196,13 @@ public static partial class ValidationUtils }; } + public const int MaximumReportContextLength = 512; + + public static ValidationError? ValidateReportContext(string? context) => + context?.Length > MaximumReportContextLength + ? ValidationError.GenericValidationError("Avatar is too large", null) + : null; + public const int MinimumPasswordLength = 12; public const int MaximumPasswordLength = 1024;