diff --git a/eslint.config.ts b/eslint.config.ts
index 20475f8..1ff979c 100644
--- a/eslint.config.ts
+++ b/eslint.config.ts
@@ -1,7 +1,9 @@
-import { globalIgnores } from 'eslint/config'
-import { defineConfigWithVueTs, vueTsConfigs } from '@vue/eslint-config-typescript'
-import pluginVue from 'eslint-plugin-vue'
import skipFormatting from '@vue/eslint-config-prettier/skip-formatting'
+import { defineConfigWithVueTs, vueTsConfigs } from '@vue/eslint-config-typescript'
+import { globalIgnores } from 'eslint/config'
+import simpleImportSort from 'eslint-plugin-simple-import-sort';
+import unusedImports from 'eslint-plugin-unused-imports';
+import pluginVue from 'eslint-plugin-vue'
// To allow more languages other than `ts` in `.vue` files, uncomment the following lines:
// import { configureVueProject } from '@vue/eslint-config-typescript'
@@ -19,4 +21,36 @@ export default defineConfigWithVueTs(
pluginVue.configs['flat/essential'],
vueTsConfigs.recommended,
skipFormatting,
+ {
+ plugins: {
+ 'simple-import-sort': simpleImportSort,
+ },
+ rules: {
+ // Основные правила сортировки
+ 'simple-import-sort/imports': 'error',
+ 'simple-import-sort/exports': 'error',
+ },
+ },
+ {
+ plugins: {
+ 'unused-imports': unusedImports,
+ },
+ rules: {
+ // Отключаем стандартное правило
+ 'no-unused-vars': 'off',
+ '@typescript-eslint/no-unused-vars': 'off',
+
+ // Включаем правила плагина
+ 'unused-imports/no-unused-imports': 'error', // 🔧 автофикс
+ 'unused-imports/no-unused-vars': [
+ 'warn',
+ {
+ vars: 'all',
+ varsIgnorePattern: '^_',
+ args: 'after-used',
+ argsIgnorePattern: '^_',
+ },
+ ],
+ },
+ }
)
diff --git a/package-lock.json b/package-lock.json
index a4ae9ca..e2a702c 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -30,6 +30,8 @@
"@vue/eslint-config-typescript": "^14.9.0",
"@vue/tsconfig": "^0.9.1",
"eslint": "^10.6.0",
+ "eslint-plugin-simple-import-sort": "^14.0.0",
+ "eslint-plugin-unused-imports": "^4.4.1",
"eslint-plugin-vue": "~10.9.2",
"jiti": "^2.7.0",
"naive-ui": "^2.44.1",
@@ -2679,6 +2681,32 @@
}
}
},
+ "node_modules/eslint-plugin-simple-import-sort": {
+ "version": "14.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-14.0.0.tgz",
+ "integrity": "sha512-NUJO0+XFCkk+o5EsAJruTgnfMEpeWrPWeJS15UVF60GgXmqz1BJ9/3hzlvG7lkL8Bubzos5cCLptThbFfPnSMQ==",
+ "dev": true,
+ "license": "MIT",
+ "peerDependencies": {
+ "eslint": ">=5.0.0"
+ }
+ },
+ "node_modules/eslint-plugin-unused-imports": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-unused-imports/-/eslint-plugin-unused-imports-4.4.1.tgz",
+ "integrity": "sha512-oZGYUz1X3sRMGUB+0cZyK2VcvRX5lm/vB56PgNNcU+7ficUCKm66oZWKUubXWnOuPjQ8PvmXtCViXBMONPe7tQ==",
+ "dev": true,
+ "license": "MIT",
+ "peerDependencies": {
+ "@typescript-eslint/eslint-plugin": "^8.0.0-0 || ^7.0.0 || ^6.0.0 || ^5.0.0",
+ "eslint": "^10.0.0 || ^9.0.0 || ^8.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@typescript-eslint/eslint-plugin": {
+ "optional": true
+ }
+ }
+ },
"node_modules/eslint-plugin-vue": {
"version": "10.9.2",
"resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-10.9.2.tgz",
diff --git a/package.json b/package.json
index f0d17b4..03ea80c 100644
--- a/package.json
+++ b/package.json
@@ -36,6 +36,8 @@
"@vue/eslint-config-typescript": "^14.9.0",
"@vue/tsconfig": "^0.9.1",
"eslint": "^10.6.0",
+ "eslint-plugin-simple-import-sort": "^14.0.0",
+ "eslint-plugin-unused-imports": "^4.4.1",
"eslint-plugin-vue": "~10.9.2",
"jiti": "^2.7.0",
"naive-ui": "^2.44.1",
diff --git a/src/App.vue b/src/App.vue
index 2c33034..b9b95fd 100644
--- a/src/App.vue
+++ b/src/App.vue
@@ -1,7 +1,7 @@
diff --git a/src/api/auth_client.ts b/src/api/auth_client.ts
index 95ca55d..2dbcdfe 100644
--- a/src/api/auth_client.ts
+++ b/src/api/auth_client.ts
@@ -1,4 +1,5 @@
import { useAuthStore } from "@/stores/auth";
+
import { createEveningDetectiveServerClient, type EveningDetectiveServer } from "./generated/crabs/evening_detective_server";
import { createHttpHandler } from "./generated/crabs/evening_detective_server/client";
@@ -30,7 +31,7 @@ function createAuthHttpHandler(
) => {
try {
return await handler(request)
- } catch (error) {
+ } catch {
await refreshTokens()
return await handler(request)
}
diff --git a/src/api/generated/crabs/evening_detective_server/index.ts b/src/api/generated/crabs/evening_detective_server/index.ts
index d574a9c..20f140c 100644
--- a/src/api/generated/crabs/evening_detective_server/index.ts
+++ b/src/api/generated/crabs/evening_detective_server/index.ts
@@ -1,5 +1,5 @@
// Code generated by protoc-gen-typescript-http. DO NOT EDIT.
-/* eslint-disable camelcase */
+
// @ts-nocheck
export type PingReq = {
@@ -285,8 +285,8 @@ export function createEveningDetectiveServerClient(
handler: RequestHandler
): EveningDetectiveServer {
return {
- Ping(request) { // eslint-disable-line @typescript-eslint/no-unused-vars
- const path = `api/test/ping`; // eslint-disable-line quotes
+ Ping(request) {
+ const path = `api/test/ping`;
const body = null;
const queryParams: string[] = [];
let uri = path;
@@ -302,8 +302,8 @@ export function createEveningDetectiveServerClient(
method: "Ping",
}) as Promise;
},
- Echo(request) { // eslint-disable-line @typescript-eslint/no-unused-vars
- const path = `api/test/echo`; // eslint-disable-line quotes
+ Echo(request) {
+ const path = `api/test/echo`;
const body = null;
const queryParams: string[] = [];
if (request.text) {
@@ -322,8 +322,8 @@ export function createEveningDetectiveServerClient(
method: "Echo",
}) as Promise;
},
- Signup(request) { // eslint-disable-line @typescript-eslint/no-unused-vars
- const path = `api/auth/signup`; // eslint-disable-line quotes
+ Signup(request) {
+ const path = `api/auth/signup`;
const body = JSON.stringify(request);
const queryParams: string[] = [];
let uri = path;
@@ -339,8 +339,8 @@ export function createEveningDetectiveServerClient(
method: "Signup",
}) as Promise;
},
- RefreshPassword(request) { // eslint-disable-line @typescript-eslint/no-unused-vars
- const path = `api/auth/refresh-password`; // eslint-disable-line quotes
+ RefreshPassword(request) {
+ const path = `api/auth/refresh-password`;
const body = JSON.stringify(request);
const queryParams: string[] = [];
let uri = path;
@@ -356,8 +356,8 @@ export function createEveningDetectiveServerClient(
method: "RefreshPassword",
}) as Promise;
},
- Login(request) { // eslint-disable-line @typescript-eslint/no-unused-vars
- const path = `api/auth/login`; // eslint-disable-line quotes
+ Login(request) {
+ const path = `api/auth/login`;
const body = JSON.stringify(request);
const queryParams: string[] = [];
let uri = path;
@@ -373,8 +373,8 @@ export function createEveningDetectiveServerClient(
method: "Login",
}) as Promise;
},
- Refresh(request) { // eslint-disable-line @typescript-eslint/no-unused-vars
- const path = `api/auth/refresh`; // eslint-disable-line quotes
+ Refresh(request) {
+ const path = `api/auth/refresh`;
const body = JSON.stringify(request);
const queryParams: string[] = [];
let uri = path;
@@ -390,8 +390,8 @@ export function createEveningDetectiveServerClient(
method: "Refresh",
}) as Promise;
},
- GetUsers(request) { // eslint-disable-line @typescript-eslint/no-unused-vars
- const path = `api/users`; // eslint-disable-line quotes
+ GetUsers(request) {
+ const path = `api/users`;
const body = null;
const queryParams: string[] = [];
let uri = path;
@@ -407,11 +407,11 @@ export function createEveningDetectiveServerClient(
method: "GetUsers",
}) as Promise;
},
- GetUserById(request) { // eslint-disable-line @typescript-eslint/no-unused-vars
+ GetUserById(request) {
if (!request.id) {
throw new Error("missing required field request.id");
}
- const path = `api/users/${request.id}`; // eslint-disable-line quotes
+ const path = `api/users/${request.id}`;
const body = null;
const queryParams: string[] = [];
let uri = path;
@@ -427,8 +427,8 @@ export function createEveningDetectiveServerClient(
method: "GetUserById",
}) as Promise;
},
- GetMe(request) { // eslint-disable-line @typescript-eslint/no-unused-vars
- const path = `api/users/me`; // eslint-disable-line quotes
+ GetMe(request) {
+ const path = `api/users/me`;
const body = null;
const queryParams: string[] = [];
let uri = path;
@@ -444,11 +444,11 @@ export function createEveningDetectiveServerClient(
method: "GetMe",
}) as Promise;
},
- AddUserRole(request) { // eslint-disable-line @typescript-eslint/no-unused-vars
+ AddUserRole(request) {
if (!request.id) {
throw new Error("missing required field request.id");
}
- const path = `api/users/${request.id}/role/add`; // eslint-disable-line quotes
+ const path = `api/users/${request.id}/role/add`;
const body = JSON.stringify(request);
const queryParams: string[] = [];
let uri = path;
@@ -464,11 +464,11 @@ export function createEveningDetectiveServerClient(
method: "AddUserRole",
}) as Promise;
},
- DeleteUserRole(request) { // eslint-disable-line @typescript-eslint/no-unused-vars
+ DeleteUserRole(request) {
if (!request.id) {
throw new Error("missing required field request.id");
}
- const path = `api/users/${request.id}/role/delete`; // eslint-disable-line quotes
+ const path = `api/users/${request.id}/role/delete`;
const body = JSON.stringify(request);
const queryParams: string[] = [];
let uri = path;
@@ -484,8 +484,8 @@ export function createEveningDetectiveServerClient(
method: "DeleteUserRole",
}) as Promise;
},
- GetPermissions(request) { // eslint-disable-line @typescript-eslint/no-unused-vars
- const path = `api/ui/permissions`; // eslint-disable-line quotes
+ GetPermissions(request) {
+ const path = `api/ui/permissions`;
const body = null;
const queryParams: string[] = [];
let uri = path;
@@ -501,8 +501,8 @@ export function createEveningDetectiveServerClient(
method: "GetPermissions",
}) as Promise;
},
- UploadFile(request) { // eslint-disable-line @typescript-eslint/no-unused-vars
- const path = `api/files/upload`; // eslint-disable-line quotes
+ UploadFile(request) {
+ const path = `api/files/upload`;
const body = JSON.stringify(request);
const queryParams: string[] = [];
let uri = path;
@@ -518,11 +518,11 @@ export function createEveningDetectiveServerClient(
method: "UploadFile",
}) as Promise;
},
- DownloadFile(request) { // eslint-disable-line @typescript-eslint/no-unused-vars
+ DownloadFile(request) {
if (!request.filename) {
throw new Error("missing required field request.filename");
}
- const path = `api/files/${request.filename}`; // eslint-disable-line quotes
+ const path = `api/files/${request.filename}`;
const body = null;
const queryParams: string[] = [];
let uri = path;
@@ -538,8 +538,8 @@ export function createEveningDetectiveServerClient(
method: "DownloadFile",
}) as Promise;
},
- AddScenario(request) { // eslint-disable-line @typescript-eslint/no-unused-vars
- const path = `api/scenario`; // eslint-disable-line quotes
+ AddScenario(request) {
+ const path = `api/scenario`;
const body = JSON.stringify(request);
const queryParams: string[] = [];
let uri = path;
@@ -555,8 +555,8 @@ export function createEveningDetectiveServerClient(
method: "AddScenario",
}) as Promise;
},
- GetMyScenarios(request) { // eslint-disable-line @typescript-eslint/no-unused-vars
- const path = `api/my-scenarios`; // eslint-disable-line quotes
+ GetMyScenarios(request) {
+ const path = `api/my-scenarios`;
const body = null;
const queryParams: string[] = [];
let uri = path;
@@ -572,11 +572,11 @@ export function createEveningDetectiveServerClient(
method: "GetMyScenarios",
}) as Promise;
},
- GetScenario(request) { // eslint-disable-line @typescript-eslint/no-unused-vars
+ GetScenario(request) {
if (!request.id) {
throw new Error("missing required field request.id");
}
- const path = `api/scenarios/${request.id}`; // eslint-disable-line quotes
+ const path = `api/scenarios/${request.id}`;
const body = null;
const queryParams: string[] = [];
let uri = path;
@@ -592,11 +592,11 @@ export function createEveningDetectiveServerClient(
method: "GetScenario",
}) as Promise;
},
- UpdateScenario(request) { // eslint-disable-line @typescript-eslint/no-unused-vars
+ UpdateScenario(request) {
if (!request.id) {
throw new Error("missing required field request.id");
}
- const path = `api/scenarios/${request.id}`; // eslint-disable-line quotes
+ const path = `api/scenarios/${request.id}`;
const body = JSON.stringify(request);
const queryParams: string[] = [];
let uri = path;
@@ -612,11 +612,11 @@ export function createEveningDetectiveServerClient(
method: "UpdateScenario",
}) as Promise;
},
- DeleteScenario(request) { // eslint-disable-line @typescript-eslint/no-unused-vars
+ DeleteScenario(request) {
if (!request.id) {
throw new Error("missing required field request.id");
}
- const path = `api/scenarios/${request.id}`; // eslint-disable-line quotes
+ const path = `api/scenarios/${request.id}`;
const body = null;
const queryParams: string[] = [];
let uri = path;
@@ -632,11 +632,11 @@ export function createEveningDetectiveServerClient(
method: "DeleteScenario",
}) as Promise;
},
- AddScenarioPlace(request) { // eslint-disable-line @typescript-eslint/no-unused-vars
+ AddScenarioPlace(request) {
if (!request.id) {
throw new Error("missing required field request.id");
}
- const path = `api/scenarios/${request.id}/places`; // eslint-disable-line quotes
+ const path = `api/scenarios/${request.id}/places`;
const body = JSON.stringify(request);
const queryParams: string[] = [];
let uri = path;
@@ -652,14 +652,14 @@ export function createEveningDetectiveServerClient(
method: "AddScenarioPlace",
}) as Promise;
},
- UpdateScenarioPlace(request) { // eslint-disable-line @typescript-eslint/no-unused-vars
+ UpdateScenarioPlace(request) {
if (!request.id) {
throw new Error("missing required field request.id");
}
if (!request.code) {
throw new Error("missing required field request.code");
}
- const path = `api/scenarios/${request.id}/places/${request.code}`; // eslint-disable-line quotes
+ const path = `api/scenarios/${request.id}/places/${request.code}`;
const body = JSON.stringify(request);
const queryParams: string[] = [];
let uri = path;
@@ -675,14 +675,14 @@ export function createEveningDetectiveServerClient(
method: "UpdateScenarioPlace",
}) as Promise;
},
- DeleteScenarioPlace(request) { // eslint-disable-line @typescript-eslint/no-unused-vars
+ DeleteScenarioPlace(request) {
if (!request.id) {
throw new Error("missing required field request.id");
}
if (!request.code) {
throw new Error("missing required field request.code");
}
- const path = `api/scenarios/${request.id}/places/${request.code}`; // eslint-disable-line quotes
+ const path = `api/scenarios/${request.id}/places/${request.code}`;
const body = null;
const queryParams: string[] = [];
let uri = path;
diff --git a/src/components/HeaderMenu.vue b/src/components/HeaderMenu.vue
index f1cd9fe..06915a6 100644
--- a/src/components/HeaderMenu.vue
+++ b/src/components/HeaderMenu.vue
@@ -18,17 +18,18 @@ const props = defineProps({
}
})
-import { getAuthClient } from '@/api/auth_client';
-import { useAuthStore } from '@/stores/auth';
-import { useMessage } from 'naive-ui';
-import { ref } from 'vue';
-import { useRouter } from 'vue-router';
-import { NIcon } from 'naive-ui'
-import { Key24Regular } from '@vicons/fluent'
import { DoorOpen } from '@vicons/fa'
-import { h } from 'vue'
+import { Key24Regular } from '@vicons/fluent'
import { DoorFrontFilled } from '@vicons/material'
import { Icon } from '@vicons/utils'
+import { useMessage } from 'naive-ui';
+import { NIcon } from 'naive-ui'
+import { ref } from 'vue';
+import { h } from 'vue'
+import { useRouter } from 'vue-router';
+
+import { getAuthClient } from '@/api/auth_client';
+import { useAuthStore } from '@/stores/auth';
const authStore = useAuthStore();
authStore.initFromStorage()
@@ -73,16 +74,20 @@ const goToLogout = () => {