chore(web): upgrade ESLint and plugins (#22495)

* chore(web): upgrade ESLint and plugins, simplify linting configuration

- Update eslint from ^9.18.0 to ^9.36.0
- Update eslint plugins:
  - eslint-plugin-svelte: ^3.9.0 → ^3.12.4
  - eslint-plugin-unicorn: ^60.0.0 → ^61.0.2
  - svelte-eslint-parser: ^1.2.0 → ^1.3.3
  - typescript-eslint: ^8.28.0 → ^8.45.0
- Remove eslint-p dependency in favor of native eslint concurrency
- Add unicorn/no-array-sort rule exception
- Update linting scripts to use eslint's native --concurrency flag
- Update Makefile and mise.toml to reflect simplified lint commands
- Update GitHub Actions workflow to use standard pnpm lint command

* pnpm dedupe

---------

Co-authored-by: Ben McCann <322311+benmccann@users.noreply.github.com>
This commit is contained in:
Min Idzelis
2025-10-06 12:41:28 -04:00
committed by GitHub
parent 119f92bb20
commit b06b8ceef6
7 changed files with 172 additions and 172 deletions

View File

@@ -185,7 +185,7 @@ jobs:
- name: Run pnpm install
run: pnpm rebuild && pnpm install --frozen-lockfile
- name: Run linter
run: pnpm lint:p
run: pnpm lint
if: ${{ !cancelled() }}
- name: Run formatter
run: pnpm format

View File

@@ -91,8 +91,6 @@ format-%:
pnpm --filter $(call map-package,$*) run format:fix
lint-%:
pnpm --filter $(call map-package,$*) run lint:fix
lint-web:
pnpm --filter $(call map-package,$*) run lint:p
check-%:
pnpm --filter $(call map-package,$*) run check
check-web:

View File

@@ -278,12 +278,7 @@ run = "prettier --write ."
[tasks."web:lint"]
env._.path = "web/node_modules/.bin"
dir = "web"
run = "eslint . --max-warnings 0"
[tasks."web:lint-p"]
env._.path = "web/node_modules/.bin"
dir = "web"
run = "eslint-p . --max-warnings 0 --concurrency=4"
run = "eslint . --max-warnings 0 --concurrency 4"
[tasks."web:lint-fix"]
run = "mise run web:lint --fix"

310
pnpm-lock.yaml generated
View File

@@ -43,7 +43,7 @@ importers:
devDependencies:
'@eslint/js':
specifier: ^9.8.0
version: 9.35.0
version: 9.36.0
'@immich/sdk':
specifier: file:../open-api/typescript-sdk
version: link:../open-api/typescript-sdk
@@ -79,16 +79,16 @@ importers:
version: 12.1.0
eslint:
specifier: ^9.14.0
version: 9.35.0(jiti@2.5.1)
version: 9.36.0(jiti@2.5.1)
eslint-config-prettier:
specifier: ^10.1.8
version: 10.1.8(eslint@9.35.0(jiti@2.5.1))
version: 10.1.8(eslint@9.36.0(jiti@2.5.1))
eslint-plugin-prettier:
specifier: ^5.1.3
version: 5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.35.0(jiti@2.5.1)))(eslint@9.35.0(jiti@2.5.1))(prettier@3.6.2)
version: 5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.36.0(jiti@2.5.1)))(eslint@9.36.0(jiti@2.5.1))(prettier@3.6.2)
eslint-plugin-unicorn:
specifier: ^60.0.0
version: 60.0.0(eslint@9.35.0(jiti@2.5.1))
version: 60.0.0(eslint@9.36.0(jiti@2.5.1))
globals:
specifier: ^16.0.0
version: 16.4.0
@@ -106,7 +106,7 @@ importers:
version: 5.9.2
typescript-eslint:
specifier: ^8.28.0
version: 8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2)
version: 8.45.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)
vite:
specifier: ^7.0.0
version: 7.1.5(@types/node@22.18.5)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)
@@ -194,7 +194,7 @@ importers:
devDependencies:
'@eslint/js':
specifier: ^9.8.0
version: 9.35.0
version: 9.36.0
'@immich/cli':
specifier: file:../cli
version: link:../cli
@@ -227,16 +227,16 @@ importers:
version: 6.0.3
eslint:
specifier: ^9.14.0
version: 9.35.0(jiti@2.5.1)
version: 9.36.0(jiti@2.5.1)
eslint-config-prettier:
specifier: ^10.1.8
version: 10.1.8(eslint@9.35.0(jiti@2.5.1))
version: 10.1.8(eslint@9.36.0(jiti@2.5.1))
eslint-plugin-prettier:
specifier: ^5.1.3
version: 5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.35.0(jiti@2.5.1)))(eslint@9.35.0(jiti@2.5.1))(prettier@3.6.2)
version: 5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.36.0(jiti@2.5.1)))(eslint@9.36.0(jiti@2.5.1))(prettier@3.6.2)
eslint-plugin-unicorn:
specifier: ^60.0.0
version: 60.0.0(eslint@9.35.0(jiti@2.5.1))
version: 60.0.0(eslint@9.36.0(jiti@2.5.1))
exiftool-vendored:
specifier: ^28.3.1
version: 28.8.0
@@ -278,7 +278,7 @@ importers:
version: 5.9.2
typescript-eslint:
specifier: ^8.28.0
version: 8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2)
version: 8.45.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)
utimes:
specifier: ^5.2.1
version: 5.2.1(encoding@0.1.13)
@@ -529,7 +529,7 @@ importers:
devDependencies:
'@eslint/js':
specifier: ^9.8.0
version: 9.35.0
version: 9.36.0
'@nestjs/cli':
specifier: ^11.0.2
version: 11.0.10(@swc/core@1.13.5(@swc/helpers@0.5.17))(@types/node@22.18.5)
@@ -616,16 +616,16 @@ importers:
version: 3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.18.5)(happy-dom@18.0.1)(jiti@2.5.1)(jsdom@26.1.0(canvas@2.11.2))(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1))
eslint:
specifier: ^9.14.0
version: 9.35.0(jiti@2.5.1)
version: 9.36.0(jiti@2.5.1)
eslint-config-prettier:
specifier: ^10.1.8
version: 10.1.8(eslint@9.35.0(jiti@2.5.1))
version: 10.1.8(eslint@9.36.0(jiti@2.5.1))
eslint-plugin-prettier:
specifier: ^5.1.3
version: 5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.35.0(jiti@2.5.1)))(eslint@9.35.0(jiti@2.5.1))(prettier@3.6.2)
version: 5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.36.0(jiti@2.5.1)))(eslint@9.36.0(jiti@2.5.1))(prettier@3.6.2)
eslint-plugin-unicorn:
specifier: ^60.0.0
version: 60.0.0(eslint@9.35.0(jiti@2.5.1))
version: 60.0.0(eslint@9.36.0(jiti@2.5.1))
globals:
specifier: ^16.0.0
version: 16.4.0
@@ -661,7 +661,7 @@ importers:
version: 5.9.2
typescript-eslint:
specifier: ^8.28.0
version: 8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2)
version: 8.45.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)
unplugin-swc:
specifier: ^1.4.5
version: 1.5.7(@swc/core@1.13.5(@swc/helpers@0.5.17))(rollup@4.50.1)
@@ -781,14 +781,14 @@ importers:
version: 0.1.1
devDependencies:
'@eslint/js':
specifier: ^9.18.0
version: 9.35.0
specifier: ^9.36.0
version: 9.36.0
'@faker-js/faker':
specifier: ^10.0.0
version: 10.0.0
'@koddsson/eslint-plugin-tscompat':
specifier: ^0.2.0
version: 0.2.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2)
version: 0.2.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)
'@socket.io/component-emitter':
specifier: ^3.1.0
version: 3.1.2
@@ -841,23 +841,20 @@ importers:
specifier: ^17.0.0
version: 17.2.2
eslint:
specifier: ^9.18.0
version: 9.35.0(jiti@2.5.1)
specifier: ^9.36.0
version: 9.36.0(jiti@2.5.1)
eslint-config-prettier:
specifier: ^10.1.8
version: 10.1.8(eslint@9.35.0(jiti@2.5.1))
eslint-p:
specifier: ^0.26.0
version: 0.26.0(jiti@2.5.1)
version: 10.1.8(eslint@9.36.0(jiti@2.5.1))
eslint-plugin-compat:
specifier: ^6.0.2
version: 6.0.2(eslint@9.35.0(jiti@2.5.1))
version: 6.0.2(eslint@9.36.0(jiti@2.5.1))
eslint-plugin-svelte:
specifier: ^3.9.0
version: 3.12.3(eslint@9.35.0(jiti@2.5.1))(svelte@5.38.10)
specifier: ^3.12.4
version: 3.12.4(eslint@9.36.0(jiti@2.5.1))(svelte@5.38.10)
eslint-plugin-unicorn:
specifier: ^60.0.0
version: 60.0.0(eslint@9.35.0(jiti@2.5.1))
specifier: ^61.0.2
version: 61.0.2(eslint@9.36.0(jiti@2.5.1))
factory.ts:
specifier: ^1.4.1
version: 1.4.2
@@ -886,8 +883,8 @@ importers:
specifier: ^4.1.5
version: 4.3.1(picomatch@4.0.3)(svelte@5.38.10)(typescript@5.9.2)
svelte-eslint-parser:
specifier: ^1.2.0
version: 1.3.2(svelte@5.38.10)
specifier: ^1.3.3
version: 1.3.3(svelte@5.38.10)
tailwindcss:
specifier: ^4.1.7
version: 4.1.13
@@ -895,8 +892,8 @@ importers:
specifier: ^5.8.3
version: 5.9.2
typescript-eslint:
specifier: ^8.28.0
version: 8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2)
specifier: ^8.45.0
version: 8.45.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)
vite:
specifier: ^7.1.2
version: 7.1.5(@types/node@24.5.1)(jiti@2.5.1)(lightningcss@1.30.1)(terser@5.43.1)(yaml@2.8.1)
@@ -2491,8 +2488,8 @@ packages:
resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@eslint/js@9.35.0':
resolution: {integrity: sha512-30iXE9whjlILfWobBkNerJo+TXYsgVM5ERQwMcMKCHckHflCmf7wXDAHlARoWnh0s1U72WqlbeyE7iAcCzuCPw==}
'@eslint/js@9.36.0':
resolution: {integrity: sha512-uhCbYtYynH30iZErszX78U+nR3pJU3RHGQ57NXy5QupD4SBVwDeU8TNBy+MjMngc1UyIW9noKqsRqfjQTBU2dw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@eslint/object-schema@2.1.6':
@@ -4648,63 +4645,63 @@ packages:
'@types/yargs@17.0.33':
resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==}
'@typescript-eslint/eslint-plugin@8.43.0':
resolution: {integrity: sha512-8tg+gt7ENL7KewsKMKDHXR1vm8tt9eMxjJBYINf6swonlWgkYn5NwyIgXpbbDxTNU5DgpDFfj95prcTq2clIQQ==}
'@typescript-eslint/eslint-plugin@8.45.0':
resolution: {integrity: sha512-HC3y9CVuevvWCl/oyZuI47dOeDF9ztdMEfMH8/DW/Mhwa9cCLnK1oD7JoTVGW/u7kFzNZUKUoyJEqkaJh5y3Wg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
'@typescript-eslint/parser': ^8.43.0
'@typescript-eslint/parser': ^8.45.0
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <6.0.0'
'@typescript-eslint/parser@8.43.0':
resolution: {integrity: sha512-B7RIQiTsCBBmY+yW4+ILd6mF5h1FUwJsVvpqkrgpszYifetQ2Ke+Z4u6aZh0CblkUGIdR59iYVyXqqZGkZ3aBw==}
'@typescript-eslint/parser@8.45.0':
resolution: {integrity: sha512-TGf22kon8KW+DeKaUmOibKWktRY8b2NSAZNdtWh798COm1NWx8+xJ6iFBtk3IvLdv6+LGLJLRlyhrhEDZWargQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <6.0.0'
'@typescript-eslint/project-service@8.43.0':
resolution: {integrity: sha512-htB/+D/BIGoNTQYffZw4uM4NzzuolCoaA/BusuSIcC8YjmBYQioew5VUZAYdAETPjeed0hqCaW7EHg+Robq8uw==}
'@typescript-eslint/project-service@8.45.0':
resolution: {integrity: sha512-3pcVHwMG/iA8afdGLMuTibGR7pDsn9RjDev6CCB+naRsSYs2pns5QbinF4Xqw6YC/Sj3lMrm/Im0eMfaa61WUg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '>=4.8.4 <6.0.0'
'@typescript-eslint/scope-manager@8.43.0':
resolution: {integrity: sha512-daSWlQ87ZhsjrbMLvpuuMAt3y4ba57AuvadcR7f3nl8eS3BjRc8L9VLxFLk92RL5xdXOg6IQ+qKjjqNEimGuAg==}
'@typescript-eslint/scope-manager@8.45.0':
resolution: {integrity: sha512-clmm8XSNj/1dGvJeO6VGH7EUSeA0FMs+5au/u3lrA3KfG8iJ4u8ym9/j2tTEoacAffdW1TVUzXO30W1JTJS7dA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@typescript-eslint/tsconfig-utils@8.43.0':
resolution: {integrity: sha512-ALC2prjZcj2YqqL5X/bwWQmHA2em6/94GcbB/KKu5SX3EBDOsqztmmX1kMkvAJHzxk7TazKzJfFiEIagNV3qEA==}
'@typescript-eslint/tsconfig-utils@8.45.0':
resolution: {integrity: sha512-aFdr+c37sc+jqNMGhH+ajxPXwjv9UtFZk79k8pLoJ6p4y0snmYpPA52GuWHgt2ZF4gRRW6odsEj41uZLojDt5w==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '>=4.8.4 <6.0.0'
'@typescript-eslint/type-utils@8.43.0':
resolution: {integrity: sha512-qaH1uLBpBuBBuRf8c1mLJ6swOfzCXryhKND04Igr4pckzSEW9JX5Aw9AgW00kwfjWJF0kk0ps9ExKTfvXfw4Qg==}
'@typescript-eslint/type-utils@8.45.0':
resolution: {integrity: sha512-bpjepLlHceKgyMEPglAeULX1vixJDgaKocp0RVJ5u4wLJIMNuKtUXIczpJCPcn2waII0yuvks/5m5/h3ZQKs0A==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <6.0.0'
'@typescript-eslint/types@8.43.0':
resolution: {integrity: sha512-vQ2FZaxJpydjSZJKiSW/LJsabFFvV7KgLC5DiLhkBcykhQj8iK9BOaDmQt74nnKdLvceM5xmhaTF+pLekrxEkw==}
'@typescript-eslint/types@8.45.0':
resolution: {integrity: sha512-WugXLuOIq67BMgQInIxxnsSyRLFxdkJEJu8r4ngLR56q/4Q5LrbfkFRH27vMTjxEK8Pyz7QfzuZe/G15qQnVRA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@typescript-eslint/typescript-estree@8.43.0':
resolution: {integrity: sha512-7Vv6zlAhPb+cvEpP06WXXy/ZByph9iL6BQRBDj4kmBsW98AqEeQHlj/13X+sZOrKSo9/rNKH4Ul4f6EICREFdw==}
'@typescript-eslint/typescript-estree@8.45.0':
resolution: {integrity: sha512-GfE1NfVbLam6XQ0LcERKwdTTPlLvHvXXhOeUGC1OXi4eQBoyy1iVsW+uzJ/J9jtCz6/7GCQ9MtrQ0fml/jWCnA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '>=4.8.4 <6.0.0'
'@typescript-eslint/utils@8.43.0':
resolution: {integrity: sha512-S1/tEmkUeeswxd0GGcnwuVQPFWo8NzZTOMxCvw8BX7OMxnNae+i8Tm7REQen/SwUIPoPqfKn7EaZ+YLpiB3k9g==}
'@typescript-eslint/utils@8.45.0':
resolution: {integrity: sha512-bxi1ht+tLYg4+XV2knz/F7RVhU0k6VrSMc9sb8DQ6fyCTrGQLHfo7lDtN0QJjZjKkLA2ThrKuCdHEvLReqtIGg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <6.0.0'
'@typescript-eslint/visitor-keys@8.43.0':
resolution: {integrity: sha512-T+S1KqRD4sg/bHfLwrpF/K3gQLBM1n7Rp7OjjikjTEssI2YJzQpi5WXoynOaQ93ERIuq3O8RBTOUYDKszUCEHw==}
'@typescript-eslint/visitor-keys@8.45.0':
resolution: {integrity: sha512-qsaFBA3e09MIDAGFUrTk+dzqtfv1XPVz8t8d1f0ybTzrCY7BKiMC5cjrl1O/P7UmHsNyW90EYSkU/ZWpmXelag==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@ungap/structured-clone@1.3.0':
@@ -6298,12 +6295,6 @@ packages:
peerDependencies:
eslint: '>=7.0.0'
eslint-p@0.26.0:
resolution: {integrity: sha512-Y5bDWKIFEUE7dZrbBbq5SiHWadYC4h3+Q+xBAUNNAqU1VMokleoGGfK92Qsmi+EBOLUBbxrtOCND5BSqQn8NaQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
deprecated: ESLint has built-in support for multithread linting now. This package is no longer needed.
hasBin: true
eslint-plugin-compat@6.0.2:
resolution: {integrity: sha512-1ME+YfJjmOz1blH0nPZpHgjMGK4kjgEeoYqGCqoBPQ/mGu/dJzdoP0f1C8H2jcWZjzhZjAMccbM/VdXhPORIfA==}
engines: {node: '>=18.x'}
@@ -6324,8 +6315,8 @@ packages:
eslint-config-prettier:
optional: true
eslint-plugin-svelte@3.12.3:
resolution: {integrity: sha512-YVNhKsHZeXVvsjZcSMjnce9gO31frICu453p5JjFiXNszHoG9k8WvsA/LAoLi4K8T69G7DIrgg1AqasDJLpgoQ==}
eslint-plugin-svelte@3.12.4:
resolution: {integrity: sha512-hD7wPe+vrPgx3U2X2b/wyTMtWobm660PygMGKrWWYTc9lvtY8DpNFDaU2CJQn1szLjGbn/aJ3g8WiXuKakrEkw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.1 || ^9.0.0
@@ -6340,6 +6331,12 @@ packages:
peerDependencies:
eslint: '>=9.29.0'
eslint-plugin-unicorn@61.0.2:
resolution: {integrity: sha512-zLihukvneYT7f74GNbVJXfWIiNQmkc/a9vYBTE4qPkQZswolWNdu+Wsp9sIXno1JOzdn6OUwLPd19ekXVkahRA==}
engines: {node: ^20.10.0 || >=21.0.0}
peerDependencies:
eslint: '>=9.29.0'
eslint-scope@5.1.1:
resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==}
engines: {node: '>=8.0.0'}
@@ -6356,8 +6353,8 @@ packages:
resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
eslint@9.35.0:
resolution: {integrity: sha512-QePbBFMJFjgmlE+cXAlbHZbHpdFVS2E/6vzCy7aKlebddvl1vadiC4JFV5u/wqTkNUwEV8WrQi257jf5f06hrg==}
eslint@9.36.0:
resolution: {integrity: sha512-hB4FIzXovouYzwzECDcUkJ4OcfOEkXTv2zRY6B9bkwjx/cprAq0uvm1nl7zvQ0/TsUk0zQiN4uPfJpB9m+rPMQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
hasBin: true
peerDependencies:
@@ -10255,8 +10252,8 @@ packages:
svelte: ^4.0.0 || ^5.0.0-next.0
typescript: '>=5.0.0'
svelte-eslint-parser@1.3.2:
resolution: {integrity: sha512-whla4VlUbwJidn/bNyC3Ho3pBrXnR2CBEkuJwtaURW+wfwgKHPaYtZAmwAkp6HWWKCw1ILZL6iKsFdVY11rpDA==}
svelte-eslint-parser@1.3.3:
resolution: {integrity: sha512-oTrDR8Z7Wnguut7QH3YKh7JR19xv1seB/bz4dxU5J/86eJtZOU4eh0/jZq4dy6tAlz/KROxnkRQspv5ZEt7t+Q==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
svelte: ^3.37.0 || ^4.0.0 || ^5.0.0
@@ -10637,8 +10634,8 @@ packages:
typedarray@0.0.6:
resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==}
typescript-eslint@8.43.0:
resolution: {integrity: sha512-FyRGJKUGvcFekRRcBKFBlAhnp4Ng8rhe8tuvvkR9OiU0gfd4vyvTRQHEckO6VDlH57jbeUQem2IpqPq9kLJH+w==}
typescript-eslint@8.45.0:
resolution: {integrity: sha512-qzDmZw/Z5beNLUrXfd0HIW6MzIaAV5WNDxmMs9/3ojGOpYavofgNAAD/nC6tGV2PczIi0iw8vot2eAe/sBn7zg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
@@ -13801,9 +13798,9 @@ snapshots:
'@esbuild/win32-x64@0.25.9':
optional: true
'@eslint-community/eslint-utils@4.9.0(eslint@9.35.0(jiti@2.5.1))':
'@eslint-community/eslint-utils@4.9.0(eslint@9.36.0(jiti@2.5.1))':
dependencies:
eslint: 9.35.0(jiti@2.5.1)
eslint: 9.36.0(jiti@2.5.1)
eslint-visitor-keys: 3.4.3
'@eslint-community/regexpp@4.12.1': {}
@@ -13836,7 +13833,7 @@ snapshots:
transitivePeerDependencies:
- supports-color
'@eslint/js@9.35.0': {}
'@eslint/js@9.36.0': {}
'@eslint/object-schema@2.1.6': {}
@@ -14239,11 +14236,11 @@ snapshots:
transitivePeerDependencies:
- supports-color
'@koddsson/eslint-plugin-tscompat@0.2.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2)':
'@koddsson/eslint-plugin-tscompat@0.2.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)':
dependencies:
'@mdn/browser-compat-data': 6.0.27
'@typescript-eslint/type-utils': 8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2)
'@typescript-eslint/utils': 8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2)
'@typescript-eslint/type-utils': 8.45.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)
'@typescript-eslint/utils': 8.45.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)
browserslist: 4.25.3
transitivePeerDependencies:
- eslint
@@ -16266,15 +16263,15 @@ snapshots:
dependencies:
'@types/yargs-parser': 21.0.3
'@typescript-eslint/eslint-plugin@8.43.0(@typescript-eslint/parser@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2)':
'@typescript-eslint/eslint-plugin@8.45.0(@typescript-eslint/parser@8.45.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)':
dependencies:
'@eslint-community/regexpp': 4.12.1
'@typescript-eslint/parser': 8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2)
'@typescript-eslint/scope-manager': 8.43.0
'@typescript-eslint/type-utils': 8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2)
'@typescript-eslint/utils': 8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2)
'@typescript-eslint/visitor-keys': 8.43.0
eslint: 9.35.0(jiti@2.5.1)
'@typescript-eslint/parser': 8.45.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)
'@typescript-eslint/scope-manager': 8.45.0
'@typescript-eslint/type-utils': 8.45.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)
'@typescript-eslint/utils': 8.45.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)
'@typescript-eslint/visitor-keys': 8.45.0
eslint: 9.36.0(jiti@2.5.1)
graphemer: 1.4.0
ignore: 7.0.5
natural-compare: 1.4.0
@@ -16283,56 +16280,56 @@ snapshots:
transitivePeerDependencies:
- supports-color
'@typescript-eslint/parser@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2)':
'@typescript-eslint/parser@8.45.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)':
dependencies:
'@typescript-eslint/scope-manager': 8.43.0
'@typescript-eslint/types': 8.43.0
'@typescript-eslint/typescript-estree': 8.43.0(typescript@5.9.2)
'@typescript-eslint/visitor-keys': 8.43.0
'@typescript-eslint/scope-manager': 8.45.0
'@typescript-eslint/types': 8.45.0
'@typescript-eslint/typescript-estree': 8.45.0(typescript@5.9.2)
'@typescript-eslint/visitor-keys': 8.45.0
debug: 4.4.3
eslint: 9.35.0(jiti@2.5.1)
eslint: 9.36.0(jiti@2.5.1)
typescript: 5.9.2
transitivePeerDependencies:
- supports-color
'@typescript-eslint/project-service@8.43.0(typescript@5.9.2)':
'@typescript-eslint/project-service@8.45.0(typescript@5.9.2)':
dependencies:
'@typescript-eslint/tsconfig-utils': 8.43.0(typescript@5.9.2)
'@typescript-eslint/types': 8.43.0
'@typescript-eslint/tsconfig-utils': 8.45.0(typescript@5.9.2)
'@typescript-eslint/types': 8.45.0
debug: 4.4.3
typescript: 5.9.2
transitivePeerDependencies:
- supports-color
'@typescript-eslint/scope-manager@8.43.0':
'@typescript-eslint/scope-manager@8.45.0':
dependencies:
'@typescript-eslint/types': 8.43.0
'@typescript-eslint/visitor-keys': 8.43.0
'@typescript-eslint/types': 8.45.0
'@typescript-eslint/visitor-keys': 8.45.0
'@typescript-eslint/tsconfig-utils@8.43.0(typescript@5.9.2)':
'@typescript-eslint/tsconfig-utils@8.45.0(typescript@5.9.2)':
dependencies:
typescript: 5.9.2
'@typescript-eslint/type-utils@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2)':
'@typescript-eslint/type-utils@8.45.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)':
dependencies:
'@typescript-eslint/types': 8.43.0
'@typescript-eslint/typescript-estree': 8.43.0(typescript@5.9.2)
'@typescript-eslint/utils': 8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2)
'@typescript-eslint/types': 8.45.0
'@typescript-eslint/typescript-estree': 8.45.0(typescript@5.9.2)
'@typescript-eslint/utils': 8.45.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)
debug: 4.4.3
eslint: 9.35.0(jiti@2.5.1)
eslint: 9.36.0(jiti@2.5.1)
ts-api-utils: 2.1.0(typescript@5.9.2)
typescript: 5.9.2
transitivePeerDependencies:
- supports-color
'@typescript-eslint/types@8.43.0': {}
'@typescript-eslint/types@8.45.0': {}
'@typescript-eslint/typescript-estree@8.43.0(typescript@5.9.2)':
'@typescript-eslint/typescript-estree@8.45.0(typescript@5.9.2)':
dependencies:
'@typescript-eslint/project-service': 8.43.0(typescript@5.9.2)
'@typescript-eslint/tsconfig-utils': 8.43.0(typescript@5.9.2)
'@typescript-eslint/types': 8.43.0
'@typescript-eslint/visitor-keys': 8.43.0
'@typescript-eslint/project-service': 8.45.0(typescript@5.9.2)
'@typescript-eslint/tsconfig-utils': 8.45.0(typescript@5.9.2)
'@typescript-eslint/types': 8.45.0
'@typescript-eslint/visitor-keys': 8.45.0
debug: 4.4.3
fast-glob: 3.3.3
is-glob: 4.0.3
@@ -16343,20 +16340,20 @@ snapshots:
transitivePeerDependencies:
- supports-color
'@typescript-eslint/utils@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2)':
'@typescript-eslint/utils@8.45.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)':
dependencies:
'@eslint-community/eslint-utils': 4.9.0(eslint@9.35.0(jiti@2.5.1))
'@typescript-eslint/scope-manager': 8.43.0
'@typescript-eslint/types': 8.43.0
'@typescript-eslint/typescript-estree': 8.43.0(typescript@5.9.2)
eslint: 9.35.0(jiti@2.5.1)
'@eslint-community/eslint-utils': 4.9.0(eslint@9.36.0(jiti@2.5.1))
'@typescript-eslint/scope-manager': 8.45.0
'@typescript-eslint/types': 8.45.0
'@typescript-eslint/typescript-estree': 8.45.0(typescript@5.9.2)
eslint: 9.36.0(jiti@2.5.1)
typescript: 5.9.2
transitivePeerDependencies:
- supports-color
'@typescript-eslint/visitor-keys@8.43.0':
'@typescript-eslint/visitor-keys@8.45.0':
dependencies:
'@typescript-eslint/types': 8.43.0
'@typescript-eslint/types': 8.45.0
eslint-visitor-keys: 4.2.1
'@ungap/structured-clone@1.3.0': {}
@@ -18141,44 +18138,37 @@ snapshots:
source-map: 0.6.1
optional: true
eslint-config-prettier@10.1.8(eslint@9.35.0(jiti@2.5.1)):
eslint-config-prettier@10.1.8(eslint@9.36.0(jiti@2.5.1)):
dependencies:
eslint: 9.35.0(jiti@2.5.1)
eslint: 9.36.0(jiti@2.5.1)
eslint-p@0.26.0(jiti@2.5.1):
dependencies:
eslint: 9.35.0(jiti@2.5.1)
transitivePeerDependencies:
- jiti
- supports-color
eslint-plugin-compat@6.0.2(eslint@9.35.0(jiti@2.5.1)):
eslint-plugin-compat@6.0.2(eslint@9.36.0(jiti@2.5.1)):
dependencies:
'@mdn/browser-compat-data': 5.7.6
ast-metadata-inferer: 0.8.1
browserslist: 4.25.3
caniuse-lite: 1.0.30001735
eslint: 9.35.0(jiti@2.5.1)
eslint: 9.36.0(jiti@2.5.1)
find-up: 5.0.0
globals: 15.15.0
lodash.memoize: 4.1.2
semver: 7.7.2
eslint-plugin-prettier@5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.35.0(jiti@2.5.1)))(eslint@9.35.0(jiti@2.5.1))(prettier@3.6.2):
eslint-plugin-prettier@5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.36.0(jiti@2.5.1)))(eslint@9.36.0(jiti@2.5.1))(prettier@3.6.2):
dependencies:
eslint: 9.35.0(jiti@2.5.1)
eslint: 9.36.0(jiti@2.5.1)
prettier: 3.6.2
prettier-linter-helpers: 1.0.0
synckit: 0.11.11
optionalDependencies:
'@types/eslint': 9.6.1
eslint-config-prettier: 10.1.8(eslint@9.35.0(jiti@2.5.1))
eslint-config-prettier: 10.1.8(eslint@9.36.0(jiti@2.5.1))
eslint-plugin-svelte@3.12.3(eslint@9.35.0(jiti@2.5.1))(svelte@5.38.10):
eslint-plugin-svelte@3.12.4(eslint@9.36.0(jiti@2.5.1))(svelte@5.38.10):
dependencies:
'@eslint-community/eslint-utils': 4.9.0(eslint@9.35.0(jiti@2.5.1))
'@eslint-community/eslint-utils': 4.9.0(eslint@9.36.0(jiti@2.5.1))
'@jridgewell/sourcemap-codec': 1.5.5
eslint: 9.35.0(jiti@2.5.1)
eslint: 9.36.0(jiti@2.5.1)
esutils: 2.0.3
globals: 16.4.0
known-css-properties: 0.37.0
@@ -18186,22 +18176,44 @@ snapshots:
postcss-load-config: 3.1.4(postcss@8.5.6)
postcss-safe-parser: 7.0.1(postcss@8.5.6)
semver: 7.7.2
svelte-eslint-parser: 1.3.2(svelte@5.38.10)
svelte-eslint-parser: 1.3.3(svelte@5.38.10)
optionalDependencies:
svelte: 5.38.10
transitivePeerDependencies:
- ts-node
eslint-plugin-unicorn@60.0.0(eslint@9.35.0(jiti@2.5.1)):
eslint-plugin-unicorn@60.0.0(eslint@9.36.0(jiti@2.5.1)):
dependencies:
'@babel/helper-validator-identifier': 7.27.1
'@eslint-community/eslint-utils': 4.9.0(eslint@9.35.0(jiti@2.5.1))
'@eslint-community/eslint-utils': 4.9.0(eslint@9.36.0(jiti@2.5.1))
'@eslint/plugin-kit': 0.3.5
change-case: 5.4.4
ci-info: 4.3.0
clean-regexp: 1.0.0
core-js-compat: 3.45.0
eslint: 9.35.0(jiti@2.5.1)
eslint: 9.36.0(jiti@2.5.1)
esquery: 1.6.0
find-up-simple: 1.0.1
globals: 16.4.0
indent-string: 5.0.0
is-builtin-module: 5.0.0
jsesc: 3.1.0
pluralize: 8.0.0
regexp-tree: 0.1.27
regjsparser: 0.12.0
semver: 7.7.2
strip-indent: 4.0.0
eslint-plugin-unicorn@61.0.2(eslint@9.36.0(jiti@2.5.1)):
dependencies:
'@babel/helper-validator-identifier': 7.27.1
'@eslint-community/eslint-utils': 4.9.0(eslint@9.36.0(jiti@2.5.1))
'@eslint/plugin-kit': 0.3.5
change-case: 5.4.4
ci-info: 4.3.0
clean-regexp: 1.0.0
core-js-compat: 3.45.0
eslint: 9.36.0(jiti@2.5.1)
esquery: 1.6.0
find-up-simple: 1.0.1
globals: 16.4.0
@@ -18228,15 +18240,15 @@ snapshots:
eslint-visitor-keys@4.2.1: {}
eslint@9.35.0(jiti@2.5.1):
eslint@9.36.0(jiti@2.5.1):
dependencies:
'@eslint-community/eslint-utils': 4.9.0(eslint@9.35.0(jiti@2.5.1))
'@eslint-community/eslint-utils': 4.9.0(eslint@9.36.0(jiti@2.5.1))
'@eslint-community/regexpp': 4.12.1
'@eslint/config-array': 0.21.0
'@eslint/config-helpers': 0.3.1
'@eslint/core': 0.15.2
'@eslint/eslintrc': 3.3.1
'@eslint/js': 9.35.0
'@eslint/js': 9.36.0
'@eslint/plugin-kit': 0.3.5
'@humanfs/node': 0.16.7
'@humanwhocodes/module-importer': 1.0.1
@@ -23017,7 +23029,7 @@ snapshots:
transitivePeerDependencies:
- picomatch
svelte-eslint-parser@1.3.2(svelte@5.38.10):
svelte-eslint-parser@1.3.3(svelte@5.38.10):
dependencies:
eslint-scope: 8.4.0
eslint-visitor-keys: 4.2.1
@@ -23448,13 +23460,13 @@ snapshots:
typedarray@0.0.6: {}
typescript-eslint@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2):
typescript-eslint@8.45.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2):
dependencies:
'@typescript-eslint/eslint-plugin': 8.43.0(@typescript-eslint/parser@8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2)
'@typescript-eslint/parser': 8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2)
'@typescript-eslint/typescript-estree': 8.43.0(typescript@5.9.2)
'@typescript-eslint/utils': 8.43.0(eslint@9.35.0(jiti@2.5.1))(typescript@5.9.2)
eslint: 9.35.0(jiti@2.5.1)
'@typescript-eslint/eslint-plugin': 8.45.0(@typescript-eslint/parser@8.45.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2))(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)
'@typescript-eslint/parser': 8.45.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)
'@typescript-eslint/typescript-estree': 8.45.0(typescript@5.9.2)
'@typescript-eslint/utils': 8.45.0(eslint@9.36.0(jiti@2.5.1))(typescript@5.9.2)
eslint: 9.36.0(jiti@2.5.1)
typescript: 5.9.2
transitivePeerDependencies:
- supports-color

View File

@@ -121,6 +121,7 @@ export default typescriptEslint.config(
'unicorn/filename-case': 'off',
'unicorn/prefer-top-level-await': 'off',
'unicorn/import-style': 'off',
'unicorn/no-array-sort': 'off',
'svelte/button-has-type': 'error',
'@typescript-eslint/await-thenable': 'error',
'@typescript-eslint/no-floating-promises': 'error',

View File

@@ -14,8 +14,7 @@
"check:watch": "npm run check:svelte -- --watch",
"check:code": "npm run format && npm run lint:p && npm run check:svelte && npm run check:typescript",
"check:all": "npm run check:code && npm run test:cov",
"lint": "eslint . --max-warnings 0",
"lint:p": "eslint-p . --max-warnings 0 --concurrency=4",
"lint": "eslint . --max-warnings 0 --concurrency 4",
"lint:fix": "npm run lint -- --fix",
"format": "prettier --check .",
"format:fix": "prettier --write . && npm run format:i18n",
@@ -63,7 +62,7 @@
"thumbhash": "^0.1.1"
},
"devDependencies": {
"@eslint/js": "^9.18.0",
"@eslint/js": "^9.36.0",
"@faker-js/faker": "^10.0.0",
"@koddsson/eslint-plugin-tscompat": "^0.2.0",
"@socket.io/component-emitter": "^3.1.0",
@@ -83,12 +82,11 @@
"@types/qrcode": "^1.5.5",
"@vitest/coverage-v8": "^3.0.0",
"dotenv": "^17.0.0",
"eslint": "^9.18.0",
"eslint": "^9.36.0",
"eslint-config-prettier": "^10.1.8",
"eslint-p": "^0.26.0",
"eslint-plugin-compat": "^6.0.2",
"eslint-plugin-svelte": "^3.9.0",
"eslint-plugin-unicorn": "^60.0.0",
"eslint-plugin-svelte": "^3.12.4",
"eslint-plugin-unicorn": "^61.0.2",
"factory.ts": "^1.4.1",
"globals": "^16.0.0",
"happy-dom": "^18.0.1",
@@ -99,10 +97,10 @@
"rollup-plugin-visualizer": "^6.0.0",
"svelte": "5.38.10",
"svelte-check": "^4.1.5",
"svelte-eslint-parser": "^1.2.0",
"svelte-eslint-parser": "^1.3.3",
"tailwindcss": "^4.1.7",
"typescript": "^5.8.3",
"typescript-eslint": "^8.28.0",
"typescript-eslint": "^8.45.0",
"vite": "^7.1.2",
"vitest": "^3.0.0"
},

View File

@@ -67,11 +67,7 @@ class ThemeManager {
const theme: ThemeSetting =
value === 'system' ? { system: true, value: getDefaultTheme() } : { system: false, value };
if (theme.value === Theme.LIGHT) {
document.documentElement.classList.remove('dark');
} else {
document.documentElement.classList.add('dark');
}
document.documentElement.classList.toggle('dark', !(theme.value === Theme.LIGHT));
this.#theme.current = theme;