Skip to content

Commit 647dd43

Browse files
committed
refactor: use react router
1 parent ab564de commit 647dd43

File tree

12 files changed

+151
-212
lines changed

12 files changed

+151
-212
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
11
package com.reajason.javaweb.boot.controller;
22

3-
import com.reajason.javaweb.boot.entity.Config;
43
import com.reajason.javaweb.memshell.Packers;
54
import com.reajason.javaweb.memshell.Server;
65
import com.reajason.javaweb.memshell.ShellTool;
76
import com.reajason.javaweb.memshell.server.AbstractShell;
8-
import org.springframework.http.ResponseEntity;
97
import org.springframework.web.bind.annotation.CrossOrigin;
108
import org.springframework.web.bind.annotation.RequestMapping;
119
import org.springframework.web.bind.annotation.RestController;
@@ -20,8 +18,28 @@
2018
@RequestMapping("/config")
2119
@CrossOrigin("*")
2220
public class ConfigController {
21+
22+
@RequestMapping("/servers")
23+
public Map<String, List<String>> getServers() {
24+
Map<String, List<String>> servers = new LinkedHashMap<>();
25+
for (Server server : Server.values()) {
26+
if (server.getShell() != null) {
27+
Set<String> supportedShellTypes = server.getShell().getShellInjectorMapping().getSupportedShellTypes();
28+
servers.put(server.name(), supportedShellTypes.stream().toList());
29+
}
30+
}
31+
return servers;
32+
}
33+
34+
@RequestMapping("/packers")
35+
public List<String> getPackers() {
36+
return Arrays.stream(Packers.values())
37+
.filter(packers -> packers.getParentPacker() == null)
38+
.map(Packers::name).toList();
39+
}
40+
2341
@RequestMapping
24-
public ResponseEntity<?> config() {
42+
public Map<String, Map<?, ?>> config() {
2543
Map<String, Map<?, ?>> coreMap = new HashMap<>(16);
2644
for (Server value : Server.values()) {
2745
AbstractShell shell = value.getShell();
@@ -38,21 +56,6 @@ public ResponseEntity<?> config() {
3856
}
3957
coreMap.put(value.name(), map);
4058
}
41-
Config config = new Config();
42-
Map<String, List<String>> servers = new LinkedHashMap<>();
43-
for (Server server : Server.values()) {
44-
if (server.getShell() != null) {
45-
Set<String> supportedShellTypes = server.getShell().getShellInjectorMapping().getSupportedShellTypes();
46-
servers.put(server.name(), supportedShellTypes.stream().toList());
47-
}
48-
}
49-
config.setServers(servers);
50-
config.setCore(coreMap);
51-
config.setPackers(
52-
Arrays.stream(Packers.values())
53-
.filter(packers -> packers.getParentPacker() == null)
54-
.map(Packers::name).toList()
55-
);
56-
return ResponseEntity.ok(config);
59+
return coreMap;
5760
}
5861
}
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,15 @@
11
package com.reajason.javaweb.boot.controller;
22

3-
import com.reajason.javaweb.memshell.MemShellGenerator;
43
import com.reajason.javaweb.boot.dto.GenerateRequest;
54
import com.reajason.javaweb.boot.dto.GenerateResponse;
5+
import com.reajason.javaweb.memshell.MemShellGenerator;
66
import com.reajason.javaweb.memshell.config.GenerateResult;
77
import com.reajason.javaweb.memshell.config.InjectorConfig;
88
import com.reajason.javaweb.memshell.config.ShellConfig;
99
import com.reajason.javaweb.memshell.config.ShellToolConfig;
1010
import com.reajason.javaweb.memshell.packer.AggregatePacker;
1111
import com.reajason.javaweb.memshell.packer.Packer;
1212
import com.reajason.javaweb.memshell.packer.jar.JarPacker;
13-
import org.springframework.http.ResponseEntity;
1413
import org.springframework.web.bind.annotation.*;
1514

1615
import java.util.Base64;
@@ -24,18 +23,18 @@
2423
@CrossOrigin("*")
2524
public class GeneratorController {
2625
@PostMapping
27-
public ResponseEntity<?> generate(@RequestBody GenerateRequest request) {
26+
public GenerateResponse generate(@RequestBody GenerateRequest request) {
2827
ShellConfig shellConfig = request.getShellConfig();
2928
ShellToolConfig shellToolConfig = request.parseShellToolConfig();
3029
InjectorConfig injectorConfig = request.getInjectorConfig();
3130
GenerateResult generateResult = MemShellGenerator.generate(shellConfig, injectorConfig, shellToolConfig);
3231
Packer packer = request.getPacker().getInstance();
3332
if (packer instanceof JarPacker) {
34-
return ResponseEntity.ok(new GenerateResponse(generateResult, Base64.getEncoder().encodeToString(((JarPacker) packer).packBytes(generateResult))));
33+
return new GenerateResponse(generateResult, Base64.getEncoder().encodeToString(((JarPacker) packer).packBytes(generateResult)));
3534
} else if (packer instanceof AggregatePacker) {
36-
return ResponseEntity.ok(new GenerateResponse(generateResult, ((AggregatePacker) packer).packAll(generateResult)));
35+
return new GenerateResponse(generateResult, ((AggregatePacker) packer).packAll(generateResult));
3736
} else {
38-
return ResponseEntity.ok(new GenerateResponse(generateResult, packer.pack(generateResult)));
37+
return new GenerateResponse(generateResult, packer.pack(generateResult));
3938
}
4039
}
4140
}

web/bun.lockb

-25.6 KB
Binary file not shown.

web/package.json

+9-12
Original file line numberDiff line numberDiff line change
@@ -15,17 +15,16 @@
1515
},
1616
"devDependencies": {
1717
"@biomejs/biome": "1.9.4",
18-
"@tanstack/router-plugin": "^1.114.32",
19-
"@types/node": "^22.13.17",
18+
"@types/node": "^22.14.0",
2019
"@types/react": "^19.1.0",
2120
"@types/react-copy-to-clipboard": "^5.0.7",
2221
"@types/react-dom": "^19.1.1",
2322
"@types/react-syntax-highlighter": "^15.5.13",
2423
"@vitejs/plugin-react": "^4.3.4",
2524
"rimraf": "^6.0.1",
26-
"tailwindcss": "^4.1.1",
27-
"typescript": "^5.8.2",
28-
"vite": "^6.2.4",
25+
"tailwindcss": "^4.1.3",
26+
"typescript": "^5.8.3",
27+
"vite": "^6.2.5",
2928
"vite-bundle-visualizer": "^1.2.1"
3029
},
3130
"dependencies": {
@@ -56,28 +55,26 @@
5655
"@radix-ui/react-toggle": "^1.1.2",
5756
"@radix-ui/react-toggle-group": "^1.1.2",
5857
"@radix-ui/react-tooltip": "^1.1.8",
59-
"@tailwindcss/vite": "^4.1.1",
60-
"@tanstack/react-query": "^5.71.3",
61-
"@tanstack/react-router": "^1.114.32",
62-
"@tanstack/router-devtools": "^1.114.32",
58+
"@tailwindcss/vite": "^4.1.3",
6359
"class-variance-authority": "^0.7.1",
6460
"clsx": "^2.1.1",
6561
"cmdk": "^1.1.1",
6662
"date-fns": "^4.1.0",
67-
"embla-carousel-react": "^8.5.2",
63+
"embla-carousel-react": "^8.6.0",
6864
"i18next": "^24.2.3",
6965
"input-otp": "^1.4.2",
7066
"lucide-react": "^0.487.0",
71-
"next-themes": "^0.4.6",
7267
"react": "^19.1.0",
7368
"react-copy-to-clipboard": "^5.1.0",
7469
"react-day-picker": "9.6.4",
7570
"react-dom": "^19.1.0",
7671
"react-hook-form": "^7.55.0",
7772
"react-i18next": "^15.4.1",
7873
"react-resizable-panels": "^2.1.7",
74+
"react-router": "^7.5.0",
75+
"react-router-dom": "^7.5.0",
7976
"react-syntax-highlighter": "^15.6.1",
80-
"recharts": "^2.15.1",
77+
"recharts": "^2.15.2",
8178
"sonner": "^2.0.3",
8279
"tailwind-merge": "^3.1.0",
8380
"tailwind-scrollbar": "^4.0.2",

web/src/routes/__root.tsx renamed to web/src/components/layouts/root-layout.tsx

+4-7
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,14 @@
11
import { LanguageSwitcher } from "@/components/language-switcher";
22
import { ModeToggle } from "@/components/mode-toggle.tsx";
33
import { ThemeProvider } from "@/components/theme-provider.tsx";
4-
import { Button } from "@/components/ui/button.tsx";
54
import { Toaster } from "@/components/ui/sonner";
65
import VersionBadge from "@/components/version-badge";
76
import { GitHubIcon } from "@/icon";
8-
import { Outlet, createRootRoute } from "@tanstack/react-router";
7+
import { Button } from "@/components/ui/button";
8+
import { Outlet } from "react-router-dom";
99

10-
export const Route = createRootRoute({
11-
component: RootComponent,
12-
});
1310

14-
function RootComponent() {
11+
export default function RootLayout() {
1512
return (
1613
<ThemeProvider defaultTheme="system" storageKey="vite-ui-theme">
1714
<Toaster />
@@ -42,4 +39,4 @@ function RootComponent() {
4239
</div>
4340
</ThemeProvider>
4441
);
45-
}
42+
}

web/src/main.tsx

+5-19
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,23 @@
1-
import { RouterProvider, createRouter } from "@tanstack/react-router";
21
import ReactDOM from "react-dom/client";
3-
import { routeTree } from "./routeTree.gen";
42
import "./index.css";
53
import { TailwindIndicator } from "@/components/tailwind-indicator.tsx";
64
import { env } from "@/config.ts";
7-
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
85
import { I18nextProvider } from "react-i18next";
96
import i18n from "./i18n/i18n";
10-
11-
const queryClient = new QueryClient();
12-
13-
const router = createRouter({
14-
routeTree,
15-
basepath: env.BASE_PATH,
16-
defaultPreload: "intent",
17-
});
18-
19-
declare module "@tanstack/react-router" {
20-
interface Register {
21-
router: typeof router;
22-
}
23-
}
7+
import { RouterProvider } from "react-router-dom";
8+
import { router } from "./router";
9+
import { QueryProvider } from "./providers/query-client-provider";
2410

2511
const rootElement = document.getElementById("app") as HTMLElement;
2612

2713
if (!rootElement.innerHTML) {
2814
const root = ReactDOM.createRoot(rootElement);
2915
root.render(
30-
<QueryClientProvider client={queryClient}>
16+
<QueryProvider>
3117
<I18nextProvider i18n={i18n}>
3218
<RouterProvider router={router} />
3319
{env.MODE !== "production" && <TailwindIndicator />}
3420
</I18nextProvider>
35-
</QueryClientProvider>,
21+
</QueryProvider>
3622
);
3723
}

0 commit comments

Comments
 (0)