From 7045e582c70b145b6f1d01e2f714829d655da94a Mon Sep 17 00:00:00 2001 From: afiqzudinhadi Date: Tue, 8 Jul 2025 21:34:24 +0800 Subject: [PATCH] chore: eslint --- apps/express-template/src/routes/products.ts | 12 +++++++---- apps/express-template/src/routes/users.ts | 16 ++++++++------ apps/vite-template/src/app/productIndex.tsx | 12 ++++++----- packages/db/src/database.ts | 2 +- .../src/components/template/create-form.tsx | 21 ++++++++++++++----- turbo.json | 1 + 6 files changed, 43 insertions(+), 21 deletions(-) diff --git a/apps/express-template/src/routes/products.ts b/apps/express-template/src/routes/products.ts index ff8fe3a..b6db4f5 100644 --- a/apps/express-template/src/routes/products.ts +++ b/apps/express-template/src/routes/products.ts @@ -18,9 +18,11 @@ router.get("/", async (req, res) => { const result = await getProducts(page, limit); res.status(200).json(result); - } catch (e: any) { + } catch (e: unknown) { console.log("Error fetching products:", e); - res.status(500).json({ error: e.message }); + res.status(500).json({ + error: e instanceof Error ? e.message : "Unknown error", + }); } }); @@ -30,9 +32,11 @@ router.post("/", async (req, res) => { const { name, price, description } = req.body; await createProduct({ name, price, description }); res.status(201).json({ ok: true }); - } catch (e: any) { + } catch (e: unknown) { console.error("Error creating product:", e); - res.status(500).json({ error: e.message }); + res.status(500).json({ + error: e instanceof Error ? e.message : "Unknown error", + }); } }); diff --git a/apps/express-template/src/routes/users.ts b/apps/express-template/src/routes/users.ts index 1271b5c..fb20a8e 100644 --- a/apps/express-template/src/routes/users.ts +++ b/apps/express-template/src/routes/users.ts @@ -9,11 +9,11 @@ router.get("/", async (req, res) => { try { const users = await getUsers(); res.json(users); - } catch (error: any) { + } catch (error: unknown) { console.error("Error fetching users:", error); res.status(500).json({ error: "Failed to fetch users", - message: error.message, + message: error instanceof Error ? error.message : "Unknown error", }); } }); @@ -21,7 +21,7 @@ router.get("/", async (req, res) => { // POST /api/users - Create new user router.post("/", async (req, res) => { try { - const { name, email, password, role, isActive } = req.body; + const { name, email, password, role } = req.body; // Validation if (!name || !email || !password) { @@ -60,17 +60,21 @@ router.post("/", async (req, res) => { const newUser = await createUser(userData); res.status(201).json(newUser); - } catch (error: any) { + } catch (error: unknown) { console.error("Error creating user:", error); // Handle unique constraint violation (duplicate email) - if (error.message?.includes("duplicate") || error.code === "23505") { + if ( + error instanceof Error && + (error.message?.includes("duplicate") || + (error as any).code === "23505") + ) { return res.status(409).json({ error: "Email already exists" }); } res.status(500).json({ error: "Failed to create user", - message: error.message, + message: error instanceof Error ? error.message : "Unknown error", }); } }); diff --git a/apps/vite-template/src/app/productIndex.tsx b/apps/vite-template/src/app/productIndex.tsx index ee3eab7..809d88f 100644 --- a/apps/vite-template/src/app/productIndex.tsx +++ b/apps/vite-template/src/app/productIndex.tsx @@ -51,8 +51,8 @@ const ProductIndex: React.FC = () => { const result = await fetchProducts(page); setPaginatedProducts(result); setError(null); - } catch (err: any) { - setError(err.message); + } catch (err: unknown) { + setError(err instanceof Error ? err.message : "An error occurred"); } finally { setLoading(false); } @@ -90,9 +90,11 @@ const ProductIndex: React.FC = () => { // Refresh current page loadProducts(paginatedProducts.pagination.page); - } catch (err: any) { - console.error("Delete error:", err.message); - alert("Failed to delete product: " + err.message); + } catch (err: unknown) { + const errorMessage = + err instanceof Error ? err.message : "An error occurred"; + console.error("Delete error:", errorMessage); + alert("Failed to delete product: " + errorMessage); } }; diff --git a/packages/db/src/database.ts b/packages/db/src/database.ts index 251f7d0..e608391 100644 --- a/packages/db/src/database.ts +++ b/packages/db/src/database.ts @@ -6,7 +6,7 @@ dotenv.config({ path: ".env" }); let db_url = process.env.DATABASE_URL!; try { db_url = decodeURI(db_url); -} catch (e) { +} catch { console.warn("Failed to decode DATABASE_URL, using as is."); } diff --git a/packages/ui/src/components/template/create-form.tsx b/packages/ui/src/components/template/create-form.tsx index 77db2b9..e170522 100644 --- a/packages/ui/src/components/template/create-form.tsx +++ b/packages/ui/src/components/template/create-form.tsx @@ -35,7 +35,7 @@ export interface FormField { // Generic form data interface export interface FormData { - [key: string]: any; + [key: string]: string | number | boolean; } interface CreateFormProps { @@ -78,7 +78,10 @@ export function CreateForm({ const [errors, setErrors] = useState>({}); const [isSubmitting, setIsSubmitting] = useState(false); - const validateField = (field: FormField, value: any): string | null => { + const validateField = ( + field: FormField, + value: string | number | boolean + ): string | null => { if ( field.required && (!value || (typeof value === "string" && !value.trim())) @@ -129,7 +132,10 @@ export function CreateForm({ return Object.keys(newErrors).length === 0; }; - const handleInputChange = (key: string, value: any) => { + const handleInputChange = ( + key: string, + value: string | number | boolean + ) => { setFormData((prev) => ({ ...prev, [key]: value })); // Clear error when user starts typing @@ -161,8 +167,13 @@ export function CreateForm({ }); setFormData(resetData); setErrors({}); - } catch (error: any) { - setErrors({ submit: error.message || "An error occurred" }); + } catch (error: unknown) { + setErrors({ + submit: + error instanceof Error + ? error.message + : "An error occurred", + }); } finally { setIsSubmitting(false); } diff --git a/turbo.json b/turbo.json index 144ffa7..ff0d255 100644 --- a/turbo.json +++ b/turbo.json @@ -1,6 +1,7 @@ { "$schema": "https://turborepo.com/schema.json", "ui": "tui", + "globalEnv": ["DATABASE_URL"], "tasks": { "build": { "inputs": ["$TURBO_DEFAULT$", ".env*"],