mirror of
https://github.com/hamster1963/nezha-dash.git
synced 2025-04-24 21:10:45 +08:00
fix: eslint
This commit is contained in:
parent
1110b23dbf
commit
30e8a6349c
7
.eslintrc.json
Normal file
7
.eslintrc.json
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
{
|
||||||
|
"extends": ["next/core-web-vitals", "next/typescript"],
|
||||||
|
"rules": {
|
||||||
|
"@typescript-eslint/no-explicit-any": "off",
|
||||||
|
"@next/next/no-img-element": "off"
|
||||||
|
}
|
||||||
|
}
|
@ -2,7 +2,6 @@
|
|||||||
|
|
||||||
import NetworkChartLoading from "@/app/(main)/ClientComponents/NetworkChartLoading";
|
import NetworkChartLoading from "@/app/(main)/ClientComponents/NetworkChartLoading";
|
||||||
import { NezhaAPIMonitor, ServerMonitorChart } from "@/app/types/nezha-api";
|
import { NezhaAPIMonitor, ServerMonitorChart } from "@/app/types/nezha-api";
|
||||||
import { BackIcon } from "@/components/Icon";
|
|
||||||
import {
|
import {
|
||||||
Card,
|
Card,
|
||||||
CardContent,
|
CardContent,
|
||||||
@ -21,9 +20,7 @@ import {
|
|||||||
import getEnv from "@/lib/env-entry";
|
import getEnv from "@/lib/env-entry";
|
||||||
import { formatTime, nezhaFetcher } from "@/lib/utils";
|
import { formatTime, nezhaFetcher } from "@/lib/utils";
|
||||||
import { formatRelativeTime } from "@/lib/utils";
|
import { formatRelativeTime } from "@/lib/utils";
|
||||||
import { useLocale } from "next-intl";
|
|
||||||
import { useTranslations } from "next-intl";
|
import { useTranslations } from "next-intl";
|
||||||
import { useRouter } from "next/navigation";
|
|
||||||
import * as React from "react";
|
import * as React from "react";
|
||||||
import { useCallback, useMemo } from "react";
|
import { useCallback, useMemo } from "react";
|
||||||
import { CartesianGrid, Line, LineChart, XAxis, YAxis } from "recharts";
|
import { CartesianGrid, Line, LineChart, XAxis, YAxis } from "recharts";
|
||||||
|
@ -131,7 +131,7 @@ function CpuChart({ data }: { data: NezhaAPISafe }) {
|
|||||||
}
|
}
|
||||||
setCpuChartData(newData);
|
setCpuChartData(newData);
|
||||||
}
|
}
|
||||||
}, [data]);
|
}, [data, cpu, cpuChartData]);
|
||||||
|
|
||||||
const chartConfig = {
|
const chartConfig = {
|
||||||
cpu: {
|
cpu: {
|
||||||
@ -234,7 +234,7 @@ function ProcessChart({ data }: { data: NezhaAPISafe }) {
|
|||||||
}
|
}
|
||||||
setProcessChartData(newData);
|
setProcessChartData(newData);
|
||||||
}
|
}
|
||||||
}, [data]);
|
}, [data, process, processChartData]);
|
||||||
|
|
||||||
const chartConfig = {
|
const chartConfig = {
|
||||||
process: {
|
process: {
|
||||||
@ -324,7 +324,7 @@ function MemChart({ data }: { data: NezhaAPISafe }) {
|
|||||||
}
|
}
|
||||||
setMemChartData(newData);
|
setMemChartData(newData);
|
||||||
}
|
}
|
||||||
}, [data]);
|
}, [data, mem, memChartData, swap]);
|
||||||
|
|
||||||
const chartConfig = {
|
const chartConfig = {
|
||||||
mem: {
|
mem: {
|
||||||
@ -448,7 +448,7 @@ function DiskChart({ data }: { data: NezhaAPISafe }) {
|
|||||||
}
|
}
|
||||||
setDiskChartData(newData);
|
setDiskChartData(newData);
|
||||||
}
|
}
|
||||||
}, [data]);
|
}, [data, disk, diskChartData]);
|
||||||
|
|
||||||
const chartConfig = {
|
const chartConfig = {
|
||||||
disk: {
|
disk: {
|
||||||
@ -551,7 +551,7 @@ function NetworkChart({ data }: { data: NezhaAPISafe }) {
|
|||||||
}
|
}
|
||||||
setNetworkChartData(newData);
|
setNetworkChartData(newData);
|
||||||
}
|
}
|
||||||
}, [data]);
|
}, [data, up, down, networkChartData]);
|
||||||
|
|
||||||
let maxDownload = Math.max(...networkChartData.map((item) => item.download));
|
let maxDownload = Math.max(...networkChartData.map((item) => item.download));
|
||||||
maxDownload = Math.ceil(maxDownload);
|
maxDownload = Math.ceil(maxDownload);
|
||||||
@ -677,7 +677,7 @@ function ConnectChart({ data }: { data: NezhaAPISafe }) {
|
|||||||
}
|
}
|
||||||
setConnectChartData(newData);
|
setConnectChartData(newData);
|
||||||
}
|
}
|
||||||
}, [data]);
|
}, [data, tcp, udp, connectChartData]);
|
||||||
|
|
||||||
const chartConfig = {
|
const chartConfig = {
|
||||||
tcp: {
|
tcp: {
|
||||||
|
@ -8,7 +8,7 @@ import { Badge } from "@/components/ui/badge";
|
|||||||
import { Card, CardContent } from "@/components/ui/card";
|
import { Card, CardContent } from "@/components/ui/card";
|
||||||
import getEnv from "@/lib/env-entry";
|
import getEnv from "@/lib/env-entry";
|
||||||
import { cn, formatBytes, nezhaFetcher } from "@/lib/utils";
|
import { cn, formatBytes, nezhaFetcher } from "@/lib/utils";
|
||||||
import { useLocale, useTranslations } from "next-intl";
|
import { useTranslations } from "next-intl";
|
||||||
import { useRouter } from "next/navigation";
|
import { useRouter } from "next/navigation";
|
||||||
import { useEffect, useState } from "react";
|
import { useEffect, useState } from "react";
|
||||||
import useSWR from "swr";
|
import useSWR from "swr";
|
||||||
@ -51,7 +51,6 @@ export default function ServerDetailClient({
|
|||||||
nezhaFetcher,
|
nezhaFetcher,
|
||||||
);
|
);
|
||||||
const fallbackData = allFallbackData?.result?.find(
|
const fallbackData = allFallbackData?.result?.find(
|
||||||
// @ts-ignore
|
|
||||||
(item) => item.id === server_id,
|
(item) => item.id === server_id,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
import { BackIcon } from "@/components/Icon";
|
import { BackIcon } from "@/components/Icon";
|
||||||
import { Skeleton } from "@/components/ui/skeleton";
|
import { Skeleton } from "@/components/ui/skeleton";
|
||||||
import { useLocale } from "next-intl";
|
|
||||||
import { useRouter } from "next/navigation";
|
import { useRouter } from "next/navigation";
|
||||||
|
|
||||||
export function ServerDetailChartLoading() {
|
export function ServerDetailChartLoading() {
|
||||||
|
@ -61,8 +61,8 @@ function Header() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// https://github.com/streamich/react-use/blob/master/src/useInterval.ts
|
// https://github.com/streamich/react-use/blob/master/src/useInterval.ts
|
||||||
const useInterval = (callback: Function, delay?: number | null) => {
|
const useInterval = (callback: () => void, delay: number | null) => {
|
||||||
const savedCallback = useRef<Function>(() => {});
|
const savedCallback = useRef<() => void>(() => {});
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
savedCallback.current = callback;
|
savedCallback.current = callback;
|
||||||
});
|
});
|
||||||
|
@ -6,6 +6,11 @@ import { NextRequest, NextResponse } from "next/server";
|
|||||||
|
|
||||||
export const dynamic = "force-dynamic";
|
export const dynamic = "force-dynamic";
|
||||||
|
|
||||||
|
interface ResError extends Error {
|
||||||
|
statusCode: number;
|
||||||
|
message: string;
|
||||||
|
}
|
||||||
|
|
||||||
export async function GET(req: NextRequest) {
|
export async function GET(req: NextRequest) {
|
||||||
const session = await auth();
|
const session = await auth();
|
||||||
|
|
||||||
@ -35,11 +40,10 @@ export async function GET(req: NextRequest) {
|
|||||||
const detailData = await GetServerDetail({ server_id: serverIdNum });
|
const detailData = await GetServerDetail({ server_id: serverIdNum });
|
||||||
return NextResponse.json(detailData, { status: 200 });
|
return NextResponse.json(detailData, { status: 200 });
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error("Error in GET handler:", error);
|
const err = error as ResError;
|
||||||
// @ts-ignore
|
console.error("Error in GET handler:", err);
|
||||||
const statusCode = error.statusCode || 500;
|
const statusCode = err.statusCode || 500;
|
||||||
// @ts-ignore
|
const message = err.message || "Internal Server Error";
|
||||||
const message = error.message || "Internal Server Error";
|
|
||||||
return NextResponse.json({ error: message }, { status: statusCode });
|
return NextResponse.json({ error: message }, { status: statusCode });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6,6 +6,11 @@ import { NextRequest, NextResponse } from "next/server";
|
|||||||
|
|
||||||
export const dynamic = "force-dynamic";
|
export const dynamic = "force-dynamic";
|
||||||
|
|
||||||
|
interface ResError extends Error {
|
||||||
|
statusCode: number;
|
||||||
|
message: string;
|
||||||
|
}
|
||||||
|
|
||||||
export async function GET(req: NextRequest) {
|
export async function GET(req: NextRequest) {
|
||||||
const session = await auth();
|
const session = await auth();
|
||||||
|
|
||||||
@ -36,11 +41,10 @@ export async function GET(req: NextRequest) {
|
|||||||
});
|
});
|
||||||
return NextResponse.json(monitorData, { status: 200 });
|
return NextResponse.json(monitorData, { status: 200 });
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error("Error in GET handler:", error);
|
const err = error as ResError;
|
||||||
// @ts-ignore
|
console.error("Error in GET handler:", err);
|
||||||
const statusCode = error.statusCode || 500;
|
const statusCode = err.statusCode || 500;
|
||||||
// @ts-ignore
|
const message = err.message || "Internal Server Error";
|
||||||
const message = error.message || "Internal Server Error";
|
|
||||||
return NextResponse.json({ error: message }, { status: statusCode });
|
return NextResponse.json({ error: message }, { status: statusCode });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,11 +2,16 @@ import { auth } from "@/auth";
|
|||||||
import getEnv from "@/lib/env-entry";
|
import getEnv from "@/lib/env-entry";
|
||||||
import { GetNezhaData } from "@/lib/serverFetch";
|
import { GetNezhaData } from "@/lib/serverFetch";
|
||||||
import { redirect } from "next/navigation";
|
import { redirect } from "next/navigation";
|
||||||
import { NextRequest, NextResponse } from "next/server";
|
import { NextResponse } from "next/server";
|
||||||
|
|
||||||
export const dynamic = "force-dynamic";
|
export const dynamic = "force-dynamic";
|
||||||
|
|
||||||
export async function GET(req: NextRequest) {
|
interface ResError extends Error {
|
||||||
|
statusCode: number;
|
||||||
|
message: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function GET() {
|
||||||
const session = await auth();
|
const session = await auth();
|
||||||
|
|
||||||
if (!session && getEnv("SitePassword")) {
|
if (!session && getEnv("SitePassword")) {
|
||||||
@ -17,11 +22,10 @@ export async function GET(req: NextRequest) {
|
|||||||
const data = await GetNezhaData();
|
const data = await GetNezhaData();
|
||||||
return NextResponse.json(data, { status: 200 });
|
return NextResponse.json(data, { status: 200 });
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error("Error in GET handler:", error);
|
const err = error as ResError;
|
||||||
// @ts-ignore
|
console.error("Error in GET handler:", err);
|
||||||
const statusCode = error.statusCode || 500;
|
const statusCode = err.statusCode || 500;
|
||||||
// @ts-ignore
|
const message = err.message || "Internal Server Error";
|
||||||
const message = error.message || "Internal Server Error";
|
|
||||||
return NextResponse.json({ error: message }, { status: statusCode });
|
return NextResponse.json({ error: message }, { status: statusCode });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -10,7 +10,7 @@ import {
|
|||||||
} from "@/components/ui/popover";
|
} from "@/components/ui/popover";
|
||||||
import getEnv from "@/lib/env-entry";
|
import getEnv from "@/lib/env-entry";
|
||||||
import { cn, formatBytes, formatNezhaInfo } from "@/lib/utils";
|
import { cn, formatBytes, formatNezhaInfo } from "@/lib/utils";
|
||||||
import { useLocale, useTranslations } from "next-intl";
|
import { useTranslations } from "next-intl";
|
||||||
import Link from "next/link";
|
import Link from "next/link";
|
||||||
import { useRouter } from "next/navigation";
|
import { useRouter } from "next/navigation";
|
||||||
|
|
||||||
@ -21,7 +21,7 @@ export default function ServerCard({
|
|||||||
}) {
|
}) {
|
||||||
const t = useTranslations("ServerCard");
|
const t = useTranslations("ServerCard");
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
const { id, name, country_code, online, cpu, up, down, mem, stg, ...props } =
|
const { id, name, country_code, online, cpu, up, down, mem, stg } =
|
||||||
formatNezhaInfo(serverInfo);
|
formatNezhaInfo(serverInfo);
|
||||||
|
|
||||||
const showFlag = getEnv("NEXT_PUBLIC_ShowFlag") === "true";
|
const showFlag = getEnv("NEXT_PUBLIC_ShowFlag") === "true";
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
import { cn } from "@/lib/utils";
|
import { cn } from "@/lib/utils";
|
||||||
import { motion } from "framer-motion";
|
import { motion } from "framer-motion";
|
||||||
import { useTranslations } from "next-intl";
|
import { useTranslations } from "next-intl";
|
||||||
import React, { createRef, useEffect, useRef, useState } from "react";
|
import React, { createRef, useEffect, useRef } from "react";
|
||||||
|
|
||||||
export default function Switch({
|
export default function Switch({
|
||||||
allTag,
|
allTag,
|
||||||
@ -23,7 +23,7 @@ export default function Switch({
|
|||||||
if (savedTag && allTag.includes(savedTag)) {
|
if (savedTag && allTag.includes(savedTag)) {
|
||||||
onTagChange(savedTag);
|
onTagChange(savedTag);
|
||||||
}
|
}
|
||||||
}, [allTag]);
|
}, [allTag, onTagChange]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const container = scrollRef.current;
|
const container = scrollRef.current;
|
||||||
@ -53,7 +53,7 @@ export default function Switch({
|
|||||||
inline: "center",
|
inline: "center",
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}, [nowTag]);
|
}, [nowTag, allTag]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div
|
<div
|
||||||
|
@ -8,7 +8,7 @@ import * as RechartsPrimitive from "recharts";
|
|||||||
const THEMES = { light: "", dark: ".dark" } as const;
|
const THEMES = { light: "", dark: ".dark" } as const;
|
||||||
|
|
||||||
export type ChartConfig = {
|
export type ChartConfig = {
|
||||||
[k in string]: {
|
[k: string]: {
|
||||||
label?: React.ReactNode;
|
label?: React.ReactNode;
|
||||||
icon?: React.ComponentType;
|
icon?: React.ComponentType;
|
||||||
} & (
|
} & (
|
||||||
@ -68,7 +68,7 @@ ChartContainer.displayName = "Chart";
|
|||||||
|
|
||||||
const ChartStyle = ({ id, config }: { id: string; config: ChartConfig }) => {
|
const ChartStyle = ({ id, config }: { id: string; config: ChartConfig }) => {
|
||||||
const colorConfig = Object.entries(config).filter(
|
const colorConfig = Object.entries(config).filter(
|
||||||
([_, config]) => config.theme || config.color,
|
([, config]) => config.theme || config.color,
|
||||||
);
|
);
|
||||||
|
|
||||||
if (!colorConfig.length) {
|
if (!colorConfig.length) {
|
||||||
|
@ -1,8 +1,7 @@
|
|||||||
import { cn } from "@/lib/utils";
|
import { cn } from "@/lib/utils";
|
||||||
import * as React from "react";
|
import * as React from "react";
|
||||||
|
|
||||||
export interface InputProps
|
export type InputProps = React.InputHTMLAttributes<HTMLInputElement>;
|
||||||
extends React.InputHTMLAttributes<HTMLInputElement> {}
|
|
||||||
|
|
||||||
const Input = React.forwardRef<HTMLInputElement, InputProps>(
|
const Input = React.forwardRef<HTMLInputElement, InputProps>(
|
||||||
({ className, type, ...props }, ref) => {
|
({ className, type, ...props }, ref) => {
|
||||||
|
@ -76,9 +76,9 @@ export const nezhaFetcher = async (url: string) => {
|
|||||||
|
|
||||||
if (!res.ok) {
|
if (!res.ok) {
|
||||||
const error = new Error("An error occurred while fetching the data.");
|
const error = new Error("An error occurred while fetching the data.");
|
||||||
// @ts-ignore
|
// @ts-expect-error - res.json() returns a Promise<any>
|
||||||
error.info = await res.json();
|
error.info = await res.json();
|
||||||
// @ts-ignore
|
// @ts-expect-error - res.status is a number
|
||||||
error.status = res.status;
|
error.status = res.status;
|
||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
|
@ -46,7 +46,8 @@
|
|||||||
"sharp": "^0.33.5",
|
"sharp": "^0.33.5",
|
||||||
"swr": "^2.2.6-beta.4",
|
"swr": "^2.2.6-beta.4",
|
||||||
"tailwind-merge": "^2.5.4",
|
"tailwind-merge": "^2.5.4",
|
||||||
"tailwindcss-animate": "^1.0.7"
|
"tailwindcss-animate": "^1.0.7",
|
||||||
|
"typescript-eslint": "^8.12.2"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"eslint-plugin-turbo": "^2.2.3",
|
"eslint-plugin-turbo": "^2.2.3",
|
||||||
@ -68,5 +69,6 @@
|
|||||||
"@types/react": "npm:types-react@19.0.0-rc.1",
|
"@types/react": "npm:types-react@19.0.0-rc.1",
|
||||||
"@types/react-dom": "npm:types-react-dom@19.0.0-rc.1",
|
"@types/react-dom": "npm:types-react-dom@19.0.0-rc.1",
|
||||||
"react-is": "^19.0.0-rc-69d4b800-20241021"
|
"react-is": "^19.0.0-rc-69d4b800-20241021"
|
||||||
}
|
},
|
||||||
|
"packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e"
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user