mirror of
https://github.com/ReaJason/MemShellParty.git
synced 2026-09-21 22:50:42 +08:00
style: lint and fmt code
This commit is contained in:
@@ -1,123 +0,0 @@
|
||||
import type { TokenLine } from "@/lib/decompile/decompile.worker";
|
||||
|
||||
import { memo, type ReactNode } from "react";
|
||||
|
||||
import { CopyMenuButton, type CopyOption } from "@/components/code-viewer";
|
||||
|
||||
/** material-dark palette (react-syntax-highlighter prism theme) */
|
||||
const TOKEN_COLORS: Record<string, string> = {
|
||||
atrule: "#c792ea",
|
||||
boolean: "#c792ea",
|
||||
builtin: "#ffcb6b",
|
||||
char: "#80cbc4",
|
||||
"class-name": "#f2ff00",
|
||||
comment: "#616161",
|
||||
constant: "#c792ea",
|
||||
function: "#c792ea",
|
||||
keyword: "#c792ea",
|
||||
number: "#fd9170",
|
||||
operator: "#89ddff",
|
||||
property: "#80cbc4",
|
||||
punctuation: "#89ddff",
|
||||
regex: "#f2ff00",
|
||||
string: "#a5e844",
|
||||
variable: "#ff6666",
|
||||
};
|
||||
|
||||
const BACKGROUND = "#2f2f2f";
|
||||
const PLAIN = "#eee";
|
||||
const GUTTER_COLOR = "#616161";
|
||||
const FONT_FAMILY = "Roboto Mono, monospace";
|
||||
|
||||
interface DecompiledCodeViewerProps {
|
||||
lines: TokenLine[] | null;
|
||||
placeholder: string;
|
||||
header?: ReactNode;
|
||||
button?: ReactNode;
|
||||
height: number;
|
||||
copyLabel: string;
|
||||
copyOptions: CopyOption[];
|
||||
}
|
||||
|
||||
export default memo(function DecompiledCodeViewer({
|
||||
lines,
|
||||
placeholder,
|
||||
header,
|
||||
button,
|
||||
height,
|
||||
copyLabel,
|
||||
copyOptions,
|
||||
}: Readonly<DecompiledCodeViewerProps>) {
|
||||
return (
|
||||
<div className="rounded-lg border">
|
||||
<div
|
||||
className={
|
||||
header
|
||||
? "flex items-center justify-between border-b p-2"
|
||||
: "flex items-center justify-end border-b p-2"
|
||||
}
|
||||
>
|
||||
{header}
|
||||
<div className="flex items-center gap-2">
|
||||
{button}
|
||||
<CopyMenuButton
|
||||
options={copyOptions}
|
||||
variant="ghost"
|
||||
size="sm"
|
||||
aria-label={copyLabel}
|
||||
title={copyLabel}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
className="overflow-auto text-xs"
|
||||
style={{
|
||||
height,
|
||||
background: BACKGROUND,
|
||||
color: PLAIN,
|
||||
borderRadius: "0 0 var(--radius) var(--radius)",
|
||||
}}
|
||||
>
|
||||
{lines ? (
|
||||
<div
|
||||
className="flex"
|
||||
style={{ fontFamily: FONT_FAMILY, lineHeight: "1.5em", tabSize: 4 }}
|
||||
>
|
||||
<div
|
||||
aria-hidden
|
||||
className="sticky left-0 shrink-0 pr-4 pl-4 text-right select-none"
|
||||
style={{ background: BACKGROUND, color: GUTTER_COLOR }}
|
||||
>
|
||||
{lines.map((_, index) => (
|
||||
<div key={index}>{index + 1}</div>
|
||||
))}
|
||||
</div>
|
||||
<pre className="m-0 flex-1 pr-4" style={{ fontFamily: "inherit", tabSize: 4 }}>
|
||||
{lines.map((line, index) => (
|
||||
<div key={index} style={{ whiteSpace: "pre" }}>
|
||||
{line.map(([type, text], segmentIndex) =>
|
||||
type === "plain" ? (
|
||||
text
|
||||
) : (
|
||||
<span key={segmentIndex} style={{ color: TOKEN_COLORS[type] ?? PLAIN }}>
|
||||
{text}
|
||||
</span>
|
||||
),
|
||||
)}
|
||||
{line.length === 0 ? " " : null}
|
||||
</div>
|
||||
))}
|
||||
</pre>
|
||||
</div>
|
||||
) : (
|
||||
<pre
|
||||
className="m-0 p-4"
|
||||
style={{ fontFamily: FONT_FAMILY, lineHeight: "1.5em", whiteSpace: "pre-wrap" }}
|
||||
>
|
||||
{placeholder}
|
||||
</pre>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
});
|
||||
@@ -23,6 +23,7 @@ import { FeedbackAlert } from "./feedback-alert";
|
||||
export function BasicInfo({ generateResult }: Readonly<{ generateResult?: MemShellResult }>) {
|
||||
const { t } = useTranslation(["memshell", "common"]);
|
||||
const isDubbo = generateResult?.shellConfig.server === "Dubbo";
|
||||
const shellToolConfig = generateResult?.shellToolConfig;
|
||||
return (
|
||||
<Card>
|
||||
<CardHeader>
|
||||
@@ -65,13 +66,13 @@ export function BasicInfo({ generateResult }: Readonly<{ generateResult?: MemShe
|
||||
/>
|
||||
<CopyableField
|
||||
label={t("shellToolConfig.behinder.pass")}
|
||||
text={(generateResult?.shellToolConfig as BehinderShellToolConfig).pass}
|
||||
value={(generateResult?.shellToolConfig as BehinderShellToolConfig).pass}
|
||||
text={(shellToolConfig as BehinderShellToolConfig).pass}
|
||||
value={(shellToolConfig as BehinderShellToolConfig).pass}
|
||||
/>
|
||||
<CopyableField
|
||||
label={t("shellToolConfig.behinder.header")}
|
||||
text={`${(generateResult?.shellToolConfig as BehinderShellToolConfig).headerName}: ${(generateResult?.shellToolConfig as BehinderShellToolConfig).headerValue}`}
|
||||
value={`${(generateResult?.shellToolConfig as BehinderShellToolConfig).headerName}: ${(generateResult?.shellToolConfig as BehinderShellToolConfig).headerValue}`}
|
||||
text={`${(shellToolConfig as BehinderShellToolConfig).headerName}: ${(shellToolConfig as BehinderShellToolConfig).headerValue}`}
|
||||
value={`${(shellToolConfig as BehinderShellToolConfig).headerName}: ${(shellToolConfig as BehinderShellToolConfig).headerValue}`}
|
||||
/>
|
||||
</>
|
||||
)}
|
||||
@@ -79,26 +80,28 @@ export function BasicInfo({ generateResult }: Readonly<{ generateResult?: MemShe
|
||||
<>
|
||||
<CopyableField
|
||||
label={t("shellToolConfig.godzilla.pass")}
|
||||
text={(generateResult?.shellToolConfig as GodzillaShellToolConfig).pass}
|
||||
value={(generateResult?.shellToolConfig as GodzillaShellToolConfig).pass}
|
||||
text={(shellToolConfig as GodzillaShellToolConfig).pass}
|
||||
value={(shellToolConfig as GodzillaShellToolConfig).pass}
|
||||
/>
|
||||
<CopyableField
|
||||
label={t("shellToolConfig.godzilla.key")}
|
||||
text={(generateResult?.shellToolConfig as GodzillaShellToolConfig).key}
|
||||
value={(generateResult?.shellToolConfig as GodzillaShellToolConfig).key}
|
||||
text={(shellToolConfig as GodzillaShellToolConfig).key}
|
||||
value={(shellToolConfig as GodzillaShellToolConfig).key}
|
||||
/>
|
||||
<CopyableField
|
||||
label={t("shellToolConfig.godzilla.encryptor")}
|
||||
text={
|
||||
generateResult?.shellConfig.shellType.includes("WebSocket")
|
||||
? "JAVA_WEBSOCKET_AES_RAW"
|
||||
: generateResult?.shellConfig.shellType.includes("Dubbo") ? "DUBBO_XOR_BASE64" : "JAVA_AES_BASE64"
|
||||
: generateResult?.shellConfig.shellType.includes("Dubbo")
|
||||
? "DUBBO_XOR_BASE64"
|
||||
: "JAVA_AES_BASE64"
|
||||
}
|
||||
/>
|
||||
<CopyableField
|
||||
label={t("shellToolConfig.godzilla.header")}
|
||||
text={`${(generateResult?.shellToolConfig as GodzillaShellToolConfig).headerName}: ${(generateResult?.shellToolConfig as GodzillaShellToolConfig).headerValue}`}
|
||||
value={`${(generateResult?.shellToolConfig as GodzillaShellToolConfig).headerName}: ${(generateResult?.shellToolConfig as GodzillaShellToolConfig).headerValue}`}
|
||||
text={`${(shellToolConfig as GodzillaShellToolConfig).headerName}: ${(shellToolConfig as GodzillaShellToolConfig).headerValue}`}
|
||||
value={`${(shellToolConfig as GodzillaShellToolConfig).headerName}: ${(shellToolConfig as GodzillaShellToolConfig).headerValue}`}
|
||||
/>
|
||||
</>
|
||||
)}
|
||||
@@ -107,8 +110,8 @@ export function BasicInfo({ generateResult }: Readonly<{ generateResult?: MemShe
|
||||
<CopyableField
|
||||
hidden={generateResult?.shellConfig.shellType.includes("WebSocket")}
|
||||
label={t("common:paramName")}
|
||||
text={(generateResult?.shellToolConfig as CommandShellToolConfig).paramName}
|
||||
value={(generateResult?.shellToolConfig as CommandShellToolConfig).paramName}
|
||||
text={(shellToolConfig as CommandShellToolConfig).paramName}
|
||||
value={(shellToolConfig as CommandShellToolConfig).paramName}
|
||||
/>
|
||||
<CopyableField
|
||||
hidden={
|
||||
@@ -118,8 +121,8 @@ export function BasicInfo({ generateResult }: Readonly<{ generateResult?: MemShe
|
||||
)
|
||||
}
|
||||
label={t("shellToolConfig.httpHeader")}
|
||||
text={`${(generateResult?.shellToolConfig as CommandShellToolConfig).headerName}: ${(generateResult?.shellToolConfig as CommandShellToolConfig).headerValue}`}
|
||||
value={`${(generateResult?.shellToolConfig as CommandShellToolConfig).headerName}: ${(generateResult?.shellToolConfig as CommandShellToolConfig).headerValue}`}
|
||||
text={`${(shellToolConfig as CommandShellToolConfig).headerName}: ${(shellToolConfig as CommandShellToolConfig).headerValue}`}
|
||||
value={`${(shellToolConfig as CommandShellToolConfig).headerName}: ${(shellToolConfig as CommandShellToolConfig).headerValue}`}
|
||||
/>
|
||||
</Fragment>
|
||||
)}
|
||||
@@ -127,28 +130,28 @@ export function BasicInfo({ generateResult }: Readonly<{ generateResult?: MemShe
|
||||
generateResult?.shellConfig.shellTool === ShellToolType.Suo5v2) && (
|
||||
<CopyableField
|
||||
label={t("shellToolConfig.suo5Header")}
|
||||
text={`${(generateResult?.shellToolConfig as Suo5ShellToolConfig).headerName}: ${(generateResult?.shellToolConfig as Suo5ShellToolConfig).headerValue}`}
|
||||
value={`${(generateResult?.shellToolConfig as Suo5ShellToolConfig).headerName}: ${(generateResult?.shellToolConfig as Suo5ShellToolConfig).headerValue}`}
|
||||
text={`${(shellToolConfig as Suo5ShellToolConfig).headerName}: ${(shellToolConfig as Suo5ShellToolConfig).headerValue}`}
|
||||
value={`${(shellToolConfig as Suo5ShellToolConfig).headerName}: ${(shellToolConfig as Suo5ShellToolConfig).headerValue}`}
|
||||
/>
|
||||
)}
|
||||
{generateResult?.shellConfig.shellTool === ShellToolType.Proxy && (
|
||||
<CopyableField
|
||||
label={t("shellToolConfig.httpHeader")}
|
||||
text={`${(generateResult?.shellToolConfig as ProxyShellToolConfig).headerName}: ${(generateResult?.shellToolConfig as ProxyShellToolConfig).headerValue}`}
|
||||
value={`${(generateResult?.shellToolConfig as ProxyShellToolConfig).headerName}: ${(generateResult?.shellToolConfig as ProxyShellToolConfig).headerValue}`}
|
||||
text={`${(shellToolConfig as ProxyShellToolConfig).headerName}: ${(shellToolConfig as ProxyShellToolConfig).headerValue}`}
|
||||
value={`${(shellToolConfig as ProxyShellToolConfig).headerName}: ${(shellToolConfig as ProxyShellToolConfig).headerValue}`}
|
||||
/>
|
||||
)}
|
||||
{generateResult?.shellConfig.shellTool === ShellToolType.AntSword && (
|
||||
<>
|
||||
<CopyableField
|
||||
label={t("shellToolConfig.antSword.pass")}
|
||||
text={(generateResult?.shellToolConfig as AntSwordShellToolConfig).pass}
|
||||
value={(generateResult?.shellToolConfig as AntSwordShellToolConfig).pass}
|
||||
text={(shellToolConfig as AntSwordShellToolConfig).pass}
|
||||
value={(shellToolConfig as AntSwordShellToolConfig).pass}
|
||||
/>
|
||||
<CopyableField
|
||||
label={t("shellToolConfig.httpHeader")}
|
||||
text={`${(generateResult?.shellToolConfig as AntSwordShellToolConfig).headerName}: ${(generateResult?.shellToolConfig as AntSwordShellToolConfig).headerValue}`}
|
||||
value={`${(generateResult?.shellToolConfig as AntSwordShellToolConfig).headerName}: ${(generateResult?.shellToolConfig as AntSwordShellToolConfig).headerValue}`}
|
||||
text={`${(shellToolConfig as AntSwordShellToolConfig).headerName}: ${(shellToolConfig as AntSwordShellToolConfig).headerValue}`}
|
||||
value={`${(shellToolConfig as AntSwordShellToolConfig).headerName}: ${(shellToolConfig as AntSwordShellToolConfig).headerValue}`}
|
||||
/>
|
||||
</>
|
||||
)}
|
||||
@@ -157,8 +160,8 @@ export function BasicInfo({ generateResult }: Readonly<{ generateResult?: MemShe
|
||||
<CopyableField label={t("shellToolConfig.neoreGeorgKey")} text="key" value="key" />
|
||||
<CopyableField
|
||||
label={t("shellToolConfig.neoreGeorgHeader")}
|
||||
text={`${(generateResult?.shellToolConfig as NeoreGeorgShellToolConfig).headerName}: ${(generateResult?.shellToolConfig as NeoreGeorgShellToolConfig).headerValue}`}
|
||||
value={`${(generateResult?.shellToolConfig as NeoreGeorgShellToolConfig).headerName}: ${(generateResult?.shellToolConfig as NeoreGeorgShellToolConfig).headerValue}`}
|
||||
text={`${(shellToolConfig as NeoreGeorgShellToolConfig).headerName}: ${(shellToolConfig as NeoreGeorgShellToolConfig).headerValue}`}
|
||||
value={`${(shellToolConfig as NeoreGeorgShellToolConfig).headerName}: ${(shellToolConfig as NeoreGeorgShellToolConfig).headerValue}`}
|
||||
/>
|
||||
</>
|
||||
)}
|
||||
|
||||
@@ -4,7 +4,7 @@ import { DownloadIcon } from "lucide-react";
|
||||
import { useTranslation } from "react-i18next";
|
||||
import { toast } from "sonner";
|
||||
|
||||
import DecompiledCodeViewer from "@/components/memshell/decompiled-code-viewer";
|
||||
import DecompiledCodeViewer from "@/components/decompiled-code-viewer";
|
||||
import { QuickUsage } from "@/components/memshell/quick-usage";
|
||||
import { Button } from "@/components/ui/button";
|
||||
import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs";
|
||||
|
||||
Reference in New Issue
Block a user