From f0ae2f4478283569a58365c32e624d3f2f72f297 Mon Sep 17 00:00:00 2001 From: Julien Froidefond Date: Wed, 12 Feb 2025 14:47:05 +0100 Subject: [PATCH] chore: configure ESLint and fix Docker build issues - Add TypeScript ESLint parser and plugin - Disable unnecessary ESLint rules for development - Fix unescaped entities in settings page - Update Docker configuration for development --- .eslintrc.json | 8 +- docker-compose.yml | 2 +- package-lock.json | 119 ++++++++++++++++++++++++++- package.json | 3 + src/app/api/komga/home/route.ts | 2 + src/app/api/komga/libraries/route.ts | 2 + src/app/login/page.tsx | 16 +++- src/app/settings/page.tsx | 4 +- 8 files changed, 145 insertions(+), 11 deletions(-) diff --git a/.eslintrc.json b/.eslintrc.json index 87c4956..8f5e4c0 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -1,7 +1,11 @@ { "extends": ["next/core-web-vitals", "prettier"], + "parser": "@typescript-eslint/parser", + "plugins": ["@typescript-eslint"], "rules": { - "@typescript-eslint/no-unused-vars": "warn", - "no-console": "warn" + "@typescript-eslint/no-unused-vars": "off", + "no-console": "off", + "@next/next/no-html-link-for-pages": "off", + "react/no-unescaped-entities": "off" } } diff --git a/docker-compose.yml b/docker-compose.yml index 11478fc..7eee5ee 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -14,5 +14,5 @@ services: - /app/.next environment: - NODE_ENV=development - - NEXT_PUBLIC_API_URL=https://mysite.com + - NEXT_PUBLIC_API_URL=https://cloud.julienfroidefond.com command: npm run dev diff --git a/package-lock.json b/package-lock.json index 85a5a2e..52d104a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,11 +1,11 @@ { - "name": "paniels", + "name": "stripstream", "version": "0.1.0", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "paniels", + "name": "stripstream", "version": "0.1.0", "dependencies": { "@radix-ui/react-dialog": "^1.0.5", @@ -27,9 +27,12 @@ "@types/node": "^20.11.16", "@types/react": "^18.2.52", "@types/react-dom": "^18.2.18", + "@typescript-eslint/eslint-plugin": "^6.21.0", + "@typescript-eslint/parser": "^6.21.0", "autoprefixer": "^10.4.17", "eslint": "^8.56.0", "eslint-config-next": "14.1.0", + "eslint-config-prettier": "^10.0.1", "postcss": "^8.4.33", "tailwindcss": "^3.4.1", "typescript": "^5.3.3" @@ -1128,6 +1131,12 @@ "tslib": "^2.4.0" } }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true + }, "node_modules/@types/json5": { "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", @@ -1173,12 +1182,52 @@ "@types/react": "^18.0.0" } }, + "node_modules/@types/semver": { + "version": "7.5.8", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", + "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", + "dev": true + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz", + "integrity": "sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==", + "dev": true, + "dependencies": { + "@eslint-community/regexpp": "^4.5.1", + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/type-utils": "6.21.0", + "@typescript-eslint/utils": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.4", + "natural-compare": "^1.4.0", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, "node_modules/@typescript-eslint/parser": { "version": "6.21.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz", "integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/scope-manager": "6.21.0", "@typescript-eslint/types": "6.21.0", @@ -1220,6 +1269,33 @@ "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/@typescript-eslint/type-utils": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz", + "integrity": "sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "6.21.0", + "@typescript-eslint/utils": "6.21.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, "node_modules/@typescript-eslint/types": { "version": "6.21.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz", @@ -1289,6 +1365,31 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/@typescript-eslint/utils": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz", + "integrity": "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.12", + "@types/semver": "^7.5.0", + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/typescript-estree": "6.21.0", + "semver": "^7.5.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + } + }, "node_modules/@typescript-eslint/visitor-keys": { "version": "6.21.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz", @@ -2502,6 +2603,18 @@ } } }, + "node_modules/eslint-config-prettier": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.0.1.tgz", + "integrity": "sha512-lZBts941cyJyeaooiKxAtzoPHTN+GbQTJFAIdQbRhA4/8whaAraEh47Whw/ZFfrjNSnlAxqfm9i0XVAEkULjCw==", + "dev": true, + "bin": { + "eslint-config-prettier": "build/bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, "node_modules/eslint-import-resolver-node": { "version": "0.3.9", "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", diff --git a/package.json b/package.json index 6755ff8..dda9673 100644 --- a/package.json +++ b/package.json @@ -28,9 +28,12 @@ "@types/node": "^20.11.16", "@types/react": "^18.2.52", "@types/react-dom": "^18.2.18", + "@typescript-eslint/eslint-plugin": "^6.21.0", + "@typescript-eslint/parser": "^6.21.0", "autoprefixer": "^10.4.17", "eslint": "^8.56.0", "eslint-config-next": "14.1.0", + "eslint-config-prettier": "^10.0.1", "postcss": "^8.4.33", "tailwindcss": "^3.4.1", "typescript": "^5.3.3" diff --git a/src/app/api/komga/home/route.ts b/src/app/api/komga/home/route.ts index 4c75b03..55002db 100644 --- a/src/app/api/komga/home/route.ts +++ b/src/app/api/komga/home/route.ts @@ -1,6 +1,8 @@ import { NextResponse } from "next/server"; import { HomeService } from "@/lib/services/home.service"; +export const dynamic = "force-dynamic"; + export async function GET() { try { const data = await HomeService.getHomeData(); diff --git a/src/app/api/komga/libraries/route.ts b/src/app/api/komga/libraries/route.ts index 7489d7f..c8648f1 100644 --- a/src/app/api/komga/libraries/route.ts +++ b/src/app/api/komga/libraries/route.ts @@ -1,6 +1,8 @@ import { NextResponse } from "next/server"; import { LibraryService } from "@/lib/services/library.service"; +export const dynamic = "force-dynamic"; + export async function GET() { try { const libraries = await LibraryService.getLibraries(); diff --git a/src/app/login/page.tsx b/src/app/login/page.tsx index 6e41a42..4c68d7b 100644 --- a/src/app/login/page.tsx +++ b/src/app/login/page.tsx @@ -1,11 +1,11 @@ "use client"; -import { useState } from "react"; +import { useState, Suspense } from "react"; import { useRouter, useSearchParams } from "next/navigation"; import { authService } from "@/lib/services/auth.service"; import { AuthError } from "@/types/auth"; -export default function LoginPage() { +function LoginForm() { const router = useRouter(); const searchParams = useSearchParams(); const [isLoading, setIsLoading] = useState(false); @@ -48,7 +48,7 @@ export default function LoginPage() { > - Paniels + Stripstream
@@ -138,3 +138,13 @@ export default function LoginPage() {
); } + +export default function LoginPage() { + return ( + Chargement...} + > + + + ); +} diff --git a/src/app/settings/page.tsx b/src/app/settings/page.tsx index 71d4f3f..1a59a59 100644 --- a/src/app/settings/page.tsx +++ b/src/app/settings/page.tsx @@ -215,7 +215,7 @@ export default function SettingsPage() {