diff --git a/.github/workflows/test.web.yml b/.github/workflows/test.web.yml
index ae78b006..fc243da8 100644
--- a/.github/workflows/test.web.yml
+++ b/.github/workflows/test.web.yml
@@ -24,12 +24,14 @@ jobs:
- name: Install dependencies
working-directory: ./web
run: npm install
- shell: bash
+
+ - name: Run linter
+ working-directory: ./web
+ run: npm run lint
- name: Run formatter
working-directory: ./web
run: npm run format
- shell: bash
- name: Check for uncommitted changes
run: |
@@ -41,4 +43,3 @@ jobs:
- name: Build the app
working-directory: ./web
run: npm run build
- shell: bash
diff --git a/Makefile b/Makefile
index 2779cbf0..22086d56 100644
--- a/Makefile
+++ b/Makefile
@@ -46,6 +46,7 @@ format:
lint:
golangci-lint run
buf lint
+ cd web && npm run lint
vet:
go vet ./...
diff --git a/web/.prettierrc.json b/web/.prettierrc.json
index 17a23d07..29a2402e 100644
--- a/web/.prettierrc.json
+++ b/web/.prettierrc.json
@@ -1,4 +1,3 @@
-
{
"$schema": "https://json.schemastore.org/prettierrc",
"semi": false,
diff --git a/web/env.d.ts b/web/env.d.ts
index 29c29a18..b54b4c98 100644
--- a/web/env.d.ts
+++ b/web/env.d.ts
@@ -1,9 +1,9 @@
///
interface ImportMetaEnv {
- readonly VITE_API_URL: string;
+ readonly VITE_API_URL: string
}
interface ImportMeta {
- readonly env: ImportMetaEnv;
+ readonly env: ImportMetaEnv
}
diff --git a/web/eslint.config.js b/web/eslint.config.js
index 5101986e..700b3e7b 100644
--- a/web/eslint.config.js
+++ b/web/eslint.config.js
@@ -1,6 +1,4 @@
-import pluginVue from 'eslint-plugin-vue'
import pluginVitest from '@vitest/eslint-plugin'
-import perfectionist from 'eslint-plugin-perfectionist'
import vueTsEslintConfig from '@vue/eslint-config-typescript'
export default [
@@ -14,46 +12,10 @@ export default [
name: 'app/files-to-ignore',
},
- ...pluginVue.configs['flat/recommended'],
...vueTsEslintConfig(),
{
...pluginVitest.configs.recommended,
files: ['src/**/__tests__/*'],
},
-
-
- {
- plugins: {
- perfectionist,
- },
- rules: {
- 'perfectionist/sort-array-includes': ['error'],
- 'perfectionist/sort-classes': ['error'],
- 'perfectionist/sort-decorators': ['error'],
- 'perfectionist/sort-enums': ['error'],
- 'perfectionist/sort-exports': ['error'],
- 'perfectionist/sort-heritage-clauses': ['error'],
- 'perfectionist/sort-imports': [
- 'error',
- {
- order: 'asc',
- type: 'line-length',
- },
- ],
- 'perfectionist/sort-interfaces': ['error'],
- 'perfectionist/sort-intersection-types': ['error'],
- 'perfectionist/sort-jsx-props': ['error'],
- 'perfectionist/sort-maps': ['error'],
- 'perfectionist/sort-modules': ['error'],
- 'perfectionist/sort-named-exports': ['error'],
- 'perfectionist/sort-named-imports': ['error'],
- 'perfectionist/sort-object-types': ['error'],
- 'perfectionist/sort-objects': ['error'],
- 'perfectionist/sort-sets': ['error'],
- 'perfectionist/sort-switch-case': ['error'],
- 'perfectionist/sort-union-types': ['error'],
- 'perfectionist/sort-variable-declarations': ['error'],
- },
- }
]
diff --git a/web/index.html b/web/index.html
index 73ca4e58..509ef534 100644
--- a/web/index.html
+++ b/web/index.html
@@ -1,9 +1,12 @@
-
+
-
-
-
+
+
+
GetStronger
diff --git a/web/package-lock.json b/web/package-lock.json
index 60916bde..86067c99 100644
--- a/web/package-lock.json
+++ b/web/package-lock.json
@@ -47,8 +47,6 @@
"autoprefixer": "10.4.20",
"eslint": "9.16.0",
"eslint-plugin-import": "2.31.0",
- "eslint-plugin-perfectionist": "4.3.0",
- "eslint-plugin-vue": "9.32.0",
"jsdom": "25.0.1",
"npm-run-all2": "7.0.1",
"postcss": "8.4.49",
@@ -3679,7 +3677,8 @@
"resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
"integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==",
"dev": true,
- "license": "ISC"
+ "license": "ISC",
+ "peer": true
},
"node_modules/brace-expansion": {
"version": "2.0.1",
@@ -4925,131 +4924,6 @@
"semver": "bin/semver.js"
}
},
- "node_modules/eslint-plugin-perfectionist": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-perfectionist/-/eslint-plugin-perfectionist-4.3.0.tgz",
- "integrity": "sha512-8tQ/wn1dFelul2WoXL/NQOEwvWO8H4Vjmsqpt3fDQrfgybr8kQ5Vgb9BQyVRB33ywQqjUApsiwi5Ci7grMPPRA==",
- "dev": true,
- "dependencies": {
- "@typescript-eslint/types": "^8.18.0",
- "@typescript-eslint/utils": "^8.18.0",
- "natural-orderby": "^5.0.0"
- },
- "engines": {
- "node": "^18.0.0 || >=20.0.0"
- },
- "peerDependencies": {
- "eslint": ">=8.0.0"
- }
- },
- "node_modules/eslint-plugin-perfectionist/node_modules/@typescript-eslint/scope-manager": {
- "version": "8.18.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.18.0.tgz",
- "integrity": "sha512-PNGcHop0jkK2WVYGotk/hxj+UFLhXtGPiGtiaWgVBVP1jhMoMCHlTyJA+hEj4rszoSdLTK3fN4oOatrL0Cp+Xw==",
- "dev": true,
- "dependencies": {
- "@typescript-eslint/types": "8.18.0",
- "@typescript-eslint/visitor-keys": "8.18.0"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- }
- },
- "node_modules/eslint-plugin-perfectionist/node_modules/@typescript-eslint/types": {
- "version": "8.18.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.18.0.tgz",
- "integrity": "sha512-FNYxgyTCAnFwTrzpBGq+zrnoTO4x0c1CKYY5MuUTzpScqmY5fmsh2o3+57lqdI3NZucBDCzDgdEbIaNfAjAHQA==",
- "dev": true,
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- }
- },
- "node_modules/eslint-plugin-perfectionist/node_modules/@typescript-eslint/typescript-estree": {
- "version": "8.18.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.18.0.tgz",
- "integrity": "sha512-rqQgFRu6yPkauz+ms3nQpohwejS8bvgbPyIDq13cgEDbkXt4LH4OkDMT0/fN1RUtzG8e8AKJyDBoocuQh8qNeg==",
- "dev": true,
- "dependencies": {
- "@typescript-eslint/types": "8.18.0",
- "@typescript-eslint/visitor-keys": "8.18.0",
- "debug": "^4.3.4",
- "fast-glob": "^3.3.2",
- "is-glob": "^4.0.3",
- "minimatch": "^9.0.4",
- "semver": "^7.6.0",
- "ts-api-utils": "^1.3.0"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "typescript": ">=4.8.4 <5.8.0"
- }
- },
- "node_modules/eslint-plugin-perfectionist/node_modules/@typescript-eslint/utils": {
- "version": "8.18.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.18.0.tgz",
- "integrity": "sha512-p6GLdY383i7h5b0Qrfbix3Vc3+J2k6QWw6UMUeY5JGfm3C5LbZ4QIZzJNoNOfgyRe0uuYKjvVOsO/jD4SJO+xg==",
- "dev": true,
- "dependencies": {
- "@eslint-community/eslint-utils": "^4.4.0",
- "@typescript-eslint/scope-manager": "8.18.0",
- "@typescript-eslint/types": "8.18.0",
- "@typescript-eslint/typescript-estree": "8.18.0"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "eslint": "^8.57.0 || ^9.0.0",
- "typescript": ">=4.8.4 <5.8.0"
- }
- },
- "node_modules/eslint-plugin-perfectionist/node_modules/@typescript-eslint/visitor-keys": {
- "version": "8.18.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.18.0.tgz",
- "integrity": "sha512-pCh/qEA8Lb1wVIqNvBke8UaRjJ6wrAWkJO5yyIbs8Yx6TNGYyfNjOo61tLv+WwLvoLPp4BQ8B7AHKijl8NGUfw==",
- "dev": true,
- "dependencies": {
- "@typescript-eslint/types": "8.18.0",
- "eslint-visitor-keys": "^4.2.0"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- }
- },
- "node_modules/eslint-plugin-perfectionist/node_modules/eslint-visitor-keys": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz",
- "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==",
- "dev": true,
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
"node_modules/eslint-plugin-prettier": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.1.tgz",
@@ -5086,6 +4960,7 @@
"resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.32.0.tgz",
"integrity": "sha512-b/Y05HYmnB/32wqVcjxjHZzNpwxj1onBOvqW89W+V+XNG1dRuaFbNd3vT9CLbr2LXjEoq+3vn8DanWf7XU22Ug==",
"dev": true,
+ "peer": true,
"dependencies": {
"@eslint-community/eslint-utils": "^4.4.0",
"globals": "^13.24.0",
@@ -5109,6 +4984,7 @@
"integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
"dev": true,
"license": "MIT",
+ "peer": true,
"dependencies": {
"type-fest": "^0.20.2"
},
@@ -7124,16 +7000,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/natural-orderby": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/natural-orderby/-/natural-orderby-5.0.0.tgz",
- "integrity": "sha512-kKHJhxwpR/Okycz4HhQKKlhWe4ASEfPgkSWNmKFHd7+ezuQlxkA5cM3+XkBPvm1gmHen3w53qsYAv+8GwRrBlg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=18"
- }
- },
"node_modules/node-fetch-native": {
"version": "1.6.4",
"resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.4.tgz",
@@ -7291,6 +7157,7 @@
"integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==",
"dev": true,
"license": "BSD-2-Clause",
+ "peer": true,
"dependencies": {
"boolbase": "^1.0.0"
},
@@ -9147,6 +9014,7 @@
"integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
"dev": true,
"license": "(MIT OR CC0-1.0)",
+ "peer": true,
"engines": {
"node": ">=10"
},
@@ -10446,6 +10314,7 @@
"integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==",
"dev": true,
"license": "Apache-2.0",
+ "peer": true,
"engines": {
"node": ">=12"
}
diff --git a/web/package.json b/web/package.json
index ed6176e1..6bd6385b 100644
--- a/web/package.json
+++ b/web/package.json
@@ -10,8 +10,8 @@
"test:unit": "vitest",
"build-only": "vite build",
"type-check": "vue-tsc --build --force",
- "lint": "eslint --fix",
- "format": "prettier --write src"
+ "lint": "eslint .",
+ "format": "prettier --write ."
},
"dependencies": {
"@bufbuild/protobuf": "2.2.3",
@@ -53,8 +53,6 @@
"autoprefixer": "10.4.20",
"eslint": "9.16.0",
"eslint-plugin-import": "2.31.0",
- "eslint-plugin-perfectionist": "4.3.0",
- "eslint-plugin-vue": "9.32.0",
"jsdom": "25.0.1",
"npm-run-all2": "7.0.1",
"postcss": "8.4.49",
diff --git a/web/src/ui/users/UserPersonalBests.vue b/web/src/ui/users/UserPersonalBests.vue
index 9101bd70..a7a1a762 100644
--- a/web/src/ui/users/UserPersonalBests.vue
+++ b/web/src/ui/users/UserPersonalBests.vue
@@ -1,5 +1,4 @@