feat: support staticInitialize

This commit is contained in:
ReaJason
2025-11-20 00:36:25 +08:00
parent 1cf3c58b7b
commit 8c77a4049b
19 changed files with 109 additions and 24 deletions
BIN
View File
Binary file not shown.
+13 -13
View File
@@ -15,27 +15,27 @@
},
"devDependencies": {
"@biomejs/biome": "2.1.4",
"@react-router/dev": "^7.9.5",
"@types/node": "^24.10.0",
"@types/react": "^19.2.2",
"@react-router/dev": "^7.9.6",
"@types/node": "^24.10.1",
"@types/react": "^19.2.5",
"@types/react-copy-to-clipboard": "^5.0.7",
"@types/react-dom": "^19.2.2",
"@types/react-dom": "^19.2.3",
"@types/react-syntax-highlighter": "^15.5.13",
"@vitejs/plugin-react": "^5.1.0",
"@vitejs/plugin-react": "^5.1.1",
"rimraf": "^6.1.0",
"tailwindcss": "^4.1.16",
"tailwindcss": "^4.1.17",
"typescript": "^5.9.3",
"vite": "^7.1.12",
"vite": "^7.2.2",
"vite-bundle-visualizer": "^1.2.1"
},
"dependencies": {
"@hookform/resolvers": "^5.2.2",
"@tailwindcss/vite": "^4.1.16",
"@tanstack/react-query": "^5.90.6",
"@tailwindcss/vite": "^4.1.17",
"@tanstack/react-query": "^5.90.9",
"class-variance-authority": "^0.7.1",
"clsx": "^2.1.1",
"framer-motion": "^12.23.24",
"i18next": "^25.6.0",
"i18next": "^25.6.2",
"lucide-react": "^0.539.0",
"motion": "^12.23.24",
"radix-ui": "^1.4.3",
@@ -44,11 +44,11 @@
"react-dom": "^19.2.0",
"react-hook-form": "^7.66.0",
"react-i18next": "^15.7.4",
"react-router": "^7.9.5",
"react-router-dom": "^7.9.5",
"react-router": "^7.9.6",
"react-router-dom": "^7.9.6",
"react-syntax-highlighter": "^15.6.6",
"sonner": "^2.0.7",
"tailwind-merge": "^3.3.1",
"tailwind-merge": "^3.4.0",
"tw-animate-css": "^1.4.0",
"yup": "^1.7.1"
},
@@ -383,6 +383,22 @@ export default function MainConfigCard({
</FormItem>
)}
/>
<FormField
control={form.control}
name="staticInitialize"
render={({ field }) => (
<FormItem className="flex items-center space-x-2 space-y-0">
<FormControl>
<Switch
id="staticInitialize"
checked={field.value}
onCheckedChange={field.onChange}
/>
</FormControl>
<Label htmlFor="staticInitialize">{t("common:staticInitialize")}</Label>
</FormItem>
)}
/>
</div>
</CardContent>
</Card>
@@ -324,6 +324,24 @@ export default function MainConfigCard({ form, servers }: MainConfigCardProps) {
</FormItem>
)}
/>
<FormField
control={form.control}
name="staticInitialize"
render={({ field }) => (
<FormItem className="flex items-center space-x-2 space-y-0">
<FormControl>
<Switch
id="staticInitialize"
checked={field.value}
onCheckedChange={field.onChange}
/>
</FormControl>
<Label htmlFor="staticInitialize">
{t("common:staticInitialize")}
</Label>
</FormItem>
)}
/>
</div>
),
[form.control, t],
+1
View File
@@ -28,6 +28,7 @@
"server": "Server",
"serverVersion": "Server Version",
"shrink": "Shrink",
"staticInitialize": "StaticInitialize",
"toast.generateError": "Generation failed, {{error}}",
"toast.generateSuccess": "Generation successful",
"urlPattern": "URL Pattern",
+1
View File
@@ -28,6 +28,7 @@
"server": "服务类型",
"serverVersion": "服务版本",
"shrink": "缩小字节码",
"staticInitialize": "静态初始化",
"toast.generateError": "生成失败,{{error}}",
"toast.generateSuccess": "生成成功",
"urlPattern": "请求路径",
+1
View File
@@ -77,6 +77,7 @@ export default function MemShellPage() {
injectorClassName: urlParams.injectorClassName ?? "",
packingMethod: urlParams.packingMethod ?? "",
shrink: urlParams.shrink ?? true,
staticInitialize: true,
shellClassBase64: urlParams.shellClassBase64 ?? "",
},
});
+1
View File
@@ -57,6 +57,7 @@ export default function ProbeShellGenerator() {
seconds: 5,
sleepServer: "Tomcat",
shrink: true,
staticInitialize: true
},
});
+1
View File
@@ -67,6 +67,7 @@ export interface InjectorConfig {
injectorClassName?: string;
classInheritance?: string;
urlPattern?: string;
staticInitialize?: boolean;
}
export interface ConfigResponseType {
+1
View File
@@ -16,6 +16,7 @@ export interface ProbeConfig {
debug?: boolean;
byPassJavaModule?: boolean;
shrink?: boolean;
staticInitialize?: boolean;
}
export interface ProbeContentConfig {
+2
View File
@@ -10,6 +10,7 @@ export const memShellFormSchema = yup.object({
targetJdkVersion: yup.string().optional(),
debug: yup.boolean().optional(),
byPassJavaModule: yup.boolean().optional(),
staticInitialize: yup.boolean().optional(),
shellClassName: yup.string().optional(),
shellTool: yup.string().required().min(1),
shellType: yup.string().required().min(1),
@@ -152,6 +153,7 @@ export const probeShellFormSchema = yup.object().shape({
debug: yup.boolean().optional(),
byPassJavaModule: yup.boolean().optional(),
shrink: yup.boolean().optional(),
staticInitialize: yup.boolean().optional()
});
type ProbeValidationResult = ResolverResult<ProbeShellFormSchema>;
+2
View File
@@ -37,6 +37,7 @@ export function transformToPostData(formValue: MemShellFormSchema) {
const injectorConfig: InjectorConfig = {
urlPattern: formValue.urlPattern,
injectorClassName: formValue.injectorClassName,
staticInitialize: formValue.staticInitialize
};
return {
shellConfig,
@@ -54,6 +55,7 @@ export function transformToProbePostData(formValue: ProbeShellFormSchema) {
shrink: formValue.shrink,
debug: formValue.debug,
byPassJavaModule: formValue.byPassJavaModule,
staticInitialize: formValue.staticInitialize
};
const probeContentConfig: ProbeContentConfig = {
host: formValue.host,