From 1a88efc46b9bfa996f531d00775b0c2aedf03ada Mon Sep 17 00:00:00 2001 From: Julien Froidefond Date: Sat, 28 Feb 2026 11:52:27 +0100 Subject: [PATCH] chore: migrate lint to ESLint CLI with flat config --- eslint.config.mjs | 60 ++++++++++++++++++++++++++++ package.json | 2 +- src/lib/services/base-api.service.ts | 7 ++-- 3 files changed, 64 insertions(+), 5 deletions(-) create mode 100644 eslint.config.mjs diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 0000000..6143fde --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,60 @@ +import { defineConfig } from "eslint/config"; +import nextCoreWebVitals from "eslint-config-next/core-web-vitals"; +import nextTypescript from "eslint-config-next/typescript"; +import unusedImports from "eslint-plugin-unused-imports"; + +export default defineConfig([ + ...nextCoreWebVitals, + ...nextTypescript, + { + plugins: { + "unused-imports": unusedImports, + }, + rules: { + "@typescript-eslint/no-unused-vars": [ + "warn", + { + argsIgnorePattern: "^_", + varsIgnorePattern: "^_", + caughtErrorsIgnorePattern: "^_", + }, + ], + "no-console": [ + "warn", + { + allow: ["warn", "error"], + }, + ], + "@next/next/no-html-link-for-pages": "off", + "react/no-unescaped-entities": "off", + "no-unreachable": "error", + "no-unused-expressions": "warn", + "no-unused-private-class-members": "warn", + "unused-imports/no-unused-imports": "warn", + "unused-imports/no-unused-vars": [ + "warn", + { + vars: "all", + varsIgnorePattern: "^_", + args: "after-used", + argsIgnorePattern: "^_", + }, + ], + "no-empty-function": "warn", + "no-empty": ["warn", { allowEmptyCatch: true }], + "@typescript-eslint/no-explicit-any": "warn", + "@typescript-eslint/no-empty-object-type": "warn", + "@typescript-eslint/no-require-imports": "warn", + "react-hooks/error-boundaries": "warn", + "react-hooks/set-state-in-effect": "warn", + "react-hooks/refs": "warn", + "react-hooks/purity": "warn", + }, + }, + { + files: ["scripts/**/*.{js,mjs,cjs}"], + rules: { + "@typescript-eslint/no-require-imports": "off", + }, + }, +]); diff --git a/package.json b/package.json index cf3d945..72c1274 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "start:prod": "node scripts/init-db.mjs && pnpm start", "init-db": "node scripts/init-db.mjs", "reset-admin-password": "node scripts/reset-admin-password.mjs", - "lint": "next lint", + "lint": "eslint .", "typecheck": "tsc --noEmit", "icons": "node scripts/generate-icons.js", "postinstall": "prisma generate" diff --git a/src/lib/services/base-api.service.ts b/src/lib/services/base-api.service.ts index 321a20b..281515b 100644 --- a/src/lib/services/base-api.service.ts +++ b/src/lib/services/base-api.service.ts @@ -135,7 +135,7 @@ export abstract class BaseApiService { headers, ...options, signal: controller.signal, - // @ts-ignore - undici-specific options not in standard fetch types + // @ts-expect-error - undici-specific options not in standard fetch types connectTimeout: timeoutMs, bodyTimeout: timeoutMs, headersTimeout: timeoutMs, @@ -155,12 +155,11 @@ export abstract class BaseApiService { headers, ...options, signal: controller.signal, - // @ts-ignore - undici-specific options + // @ts-expect-error - undici-specific options connectTimeout: timeoutMs, bodyTimeout: timeoutMs, headersTimeout: timeoutMs, // Force IPv4 si IPv6 pose problème - // @ts-ignore family: 4, // Next.js cache with tags support next: options.tags @@ -177,7 +176,7 @@ export abstract class BaseApiService { headers, ...options, signal: controller.signal, - // @ts-ignore - undici-specific options + // @ts-expect-error - undici-specific options connectTimeout: timeoutMs, bodyTimeout: timeoutMs, headersTimeout: timeoutMs,