@zhin.js/console 1.0.6 → 1.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/app/index.ts +419 -0
- package/client/index.html +13 -0
- package/client/postcss.config.js +5 -0
- package/client/src/components/PluginConfigForm/BasicFieldRenderers.tsx +253 -0
- package/client/src/components/PluginConfigForm/CollectionFieldRenderers.tsx +261 -0
- package/client/src/components/PluginConfigForm/CompositeFieldRenderers.tsx +105 -0
- package/client/src/components/PluginConfigForm/FieldRenderer.tsx +110 -0
- package/client/src/components/PluginConfigForm/NestedFieldRenderer.tsx +95 -0
- package/client/src/components/PluginConfigForm/index.tsx +237 -0
- package/client/src/components/PluginConfigForm/types.ts +46 -0
- package/client/src/components/ThemeToggle.tsx +21 -0
- package/client/src/hooks/useTheme.ts +17 -0
- package/client/src/layouts/dashboard.tsx +259 -0
- package/client/src/main.tsx +121 -0
- package/client/src/pages/dashboard-bots.tsx +198 -0
- package/client/src/pages/dashboard-home.tsx +301 -0
- package/client/src/pages/dashboard-logs.tsx +298 -0
- package/client/src/pages/dashboard-plugin-detail.tsx +360 -0
- package/client/src/pages/dashboard-plugins.tsx +166 -0
- package/client/src/style.css +1105 -0
- package/client/src/theme/index.ts +92 -0
- package/client/tailwind.config.js +70 -0
- package/client/tsconfig.json +17 -0
- package/lib/index.d.ts +3 -3
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +83 -74
- package/lib/index.js.map +1 -1
- package/package.json +22 -10
- package/src/index.ts +0 -370
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
// Theme configuration
|
|
2
|
+
export const themes = {
|
|
3
|
+
light: {
|
|
4
|
+
background: '0 0% 100%',
|
|
5
|
+
foreground: '222.2 84% 4.9%',
|
|
6
|
+
card: '0 0% 100%',
|
|
7
|
+
'card-foreground': '222.2 84% 4.9%',
|
|
8
|
+
popover: '0 0% 100%',
|
|
9
|
+
'popover-foreground': '222.2 84% 4.9%',
|
|
10
|
+
primary: '221.2 83.2% 53.3%',
|
|
11
|
+
'primary-foreground': '210 40% 98%',
|
|
12
|
+
secondary: '210 40% 96.1%',
|
|
13
|
+
'secondary-foreground': '222.2 47.4% 11.2%',
|
|
14
|
+
muted: '210 40% 96.1%',
|
|
15
|
+
'muted-foreground': '215.4 16.3% 46.9%',
|
|
16
|
+
accent: '210 40% 96.1%',
|
|
17
|
+
'accent-foreground': '222.2 47.4% 11.2%',
|
|
18
|
+
destructive: '0 84.2% 60.2%',
|
|
19
|
+
'destructive-foreground': '210 40% 98%',
|
|
20
|
+
border: '214.3 31.8% 91.4%',
|
|
21
|
+
input: '214.3 31.8% 91.4%',
|
|
22
|
+
ring: '221.2 83.2% 53.3%',
|
|
23
|
+
radius: '0.5rem',
|
|
24
|
+
},
|
|
25
|
+
dark: {
|
|
26
|
+
background: '222.2 84% 4.9%',
|
|
27
|
+
foreground: '210 40% 98%',
|
|
28
|
+
card: '222.2 84% 4.9%',
|
|
29
|
+
'card-foreground': '210 40% 98%',
|
|
30
|
+
popover: '222.2 84% 4.9%',
|
|
31
|
+
'popover-foreground': '210 40% 98%',
|
|
32
|
+
primary: '217.2 91.2% 59.8%',
|
|
33
|
+
'primary-foreground': '222.2 47.4% 11.2%',
|
|
34
|
+
secondary: '217.2 32.6% 17.5%',
|
|
35
|
+
'secondary-foreground': '210 40% 98%',
|
|
36
|
+
muted: '217.2 32.6% 17.5%',
|
|
37
|
+
'muted-foreground': '215 20.2% 65.1%',
|
|
38
|
+
accent: '217.2 32.6% 17.5%',
|
|
39
|
+
'accent-foreground': '210 40% 98%',
|
|
40
|
+
destructive: '0 62.8% 30.6%',
|
|
41
|
+
'destructive-foreground': '210 40% 98%',
|
|
42
|
+
border: '217.2 32.6% 17.5%',
|
|
43
|
+
input: '217.2 32.6% 17.5%',
|
|
44
|
+
ring: '224.3 76.3% 48%',
|
|
45
|
+
radius: '0.5rem',
|
|
46
|
+
},
|
|
47
|
+
} as const
|
|
48
|
+
|
|
49
|
+
export type Theme = keyof typeof themes
|
|
50
|
+
export type ThemeColors = typeof themes.light
|
|
51
|
+
|
|
52
|
+
// Apply theme to document
|
|
53
|
+
export function applyTheme(theme: Theme) {
|
|
54
|
+
const root = document.documentElement
|
|
55
|
+
const colors = themes[theme]
|
|
56
|
+
|
|
57
|
+
// Remove old theme class
|
|
58
|
+
root.classList.remove('light', 'dark')
|
|
59
|
+
// Add new theme class
|
|
60
|
+
root.classList.add(theme)
|
|
61
|
+
|
|
62
|
+
// Apply CSS variables
|
|
63
|
+
Object.entries(colors).forEach(([key, value]) => {
|
|
64
|
+
root.style.setProperty(`--${key}`, value)
|
|
65
|
+
})
|
|
66
|
+
|
|
67
|
+
// Save to localStorage
|
|
68
|
+
localStorage.setItem('theme', theme)
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
// Get current theme from localStorage or system preference
|
|
72
|
+
export function getInitialTheme(): Theme {
|
|
73
|
+
const stored = localStorage.getItem('theme') as Theme | null
|
|
74
|
+
if (stored && (stored === 'light' || stored === 'dark')) {
|
|
75
|
+
return stored
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
// Check system preference
|
|
79
|
+
if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) {
|
|
80
|
+
return 'dark'
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
return 'light'
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
// Initialize theme on app load
|
|
87
|
+
export function initializeTheme() {
|
|
88
|
+
const theme = getInitialTheme()
|
|
89
|
+
applyTheme(theme)
|
|
90
|
+
return theme
|
|
91
|
+
}
|
|
92
|
+
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/** @type {import('tailwindcss').Config} */
|
|
2
|
+
const cwd = process.cwd();
|
|
3
|
+
export default {
|
|
4
|
+
content: [
|
|
5
|
+
"./index.html",
|
|
6
|
+
'./src/**/*.{js,ts,jsx,tsx,mdx}',
|
|
7
|
+
`${cwd}/**/radix-ui/**/*.{js,ts,jsx,tsx}`,
|
|
8
|
+
`${cwd}/**/@radix-ui/themes/**/*.{js,ts,jsx,tsx}`,
|
|
9
|
+
],
|
|
10
|
+
theme: {
|
|
11
|
+
extend: {
|
|
12
|
+
colors: {
|
|
13
|
+
border: 'hsl(var(--border))',
|
|
14
|
+
input: 'hsl(var(--input))',
|
|
15
|
+
ring: 'hsl(var(--ring))',
|
|
16
|
+
background: 'hsl(var(--background))',
|
|
17
|
+
foreground: 'hsl(var(--foreground))',
|
|
18
|
+
primary: {
|
|
19
|
+
DEFAULT: 'hsl(var(--primary))',
|
|
20
|
+
foreground: 'hsl(var(--primary-foreground))',
|
|
21
|
+
},
|
|
22
|
+
secondary: {
|
|
23
|
+
DEFAULT: 'hsl(var(--secondary))',
|
|
24
|
+
foreground: 'hsl(var(--secondary-foreground))',
|
|
25
|
+
},
|
|
26
|
+
destructive: {
|
|
27
|
+
DEFAULT: 'hsl(var(--destructive))',
|
|
28
|
+
foreground: 'hsl(var(--destructive-foreground))',
|
|
29
|
+
},
|
|
30
|
+
muted: {
|
|
31
|
+
DEFAULT: 'hsl(var(--muted))',
|
|
32
|
+
foreground: 'hsl(var(--muted-foreground))',
|
|
33
|
+
},
|
|
34
|
+
accent: {
|
|
35
|
+
DEFAULT: 'hsl(var(--accent))',
|
|
36
|
+
foreground: 'hsl(var(--accent-foreground))',
|
|
37
|
+
},
|
|
38
|
+
popover: {
|
|
39
|
+
DEFAULT: 'hsl(var(--popover))',
|
|
40
|
+
foreground: 'hsl(var(--popover-foreground))',
|
|
41
|
+
},
|
|
42
|
+
card: {
|
|
43
|
+
DEFAULT: 'hsl(var(--card))',
|
|
44
|
+
foreground: 'hsl(var(--card-foreground))',
|
|
45
|
+
},
|
|
46
|
+
},
|
|
47
|
+
borderRadius: {
|
|
48
|
+
lg: 'var(--radius)',
|
|
49
|
+
md: 'calc(var(--radius) - 2px)',
|
|
50
|
+
sm: 'calc(var(--radius) - 4px)',
|
|
51
|
+
},
|
|
52
|
+
keyframes: {
|
|
53
|
+
"accordion-down": {
|
|
54
|
+
from: { height: "0" },
|
|
55
|
+
to: { height: "var(--radix-accordion-content-height)" },
|
|
56
|
+
},
|
|
57
|
+
"accordion-up": {
|
|
58
|
+
from: { height: "var(--radix-accordion-content-height)" },
|
|
59
|
+
to: { height: "0" },
|
|
60
|
+
},
|
|
61
|
+
},
|
|
62
|
+
animation: {
|
|
63
|
+
"accordion-down": "accordion-down 0.2s ease-out",
|
|
64
|
+
"accordion-up": "accordion-up 0.2s ease-out",
|
|
65
|
+
},
|
|
66
|
+
},
|
|
67
|
+
},
|
|
68
|
+
darkMode: "class",
|
|
69
|
+
plugins: [],
|
|
70
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"baseUrl": ".",
|
|
4
|
+
"target": "ES2020",
|
|
5
|
+
"lib": ["ES2020", "DOM", "DOM.Iterable"],
|
|
6
|
+
"moduleResolution": "bundler",
|
|
7
|
+
"module": "ESNext",
|
|
8
|
+
"jsx": "react-jsx",
|
|
9
|
+
"paths": {
|
|
10
|
+
"@/*": ["src/*"],
|
|
11
|
+
"lucide-react": ["../node_modules/lucide-react"],
|
|
12
|
+
"react": ["../node_modules/@types/react"],
|
|
13
|
+
"react-dom": ["../node_modules/@types/react-dom"]
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
package/lib/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { WebSocketServer } from
|
|
2
|
-
import { ViteDevServer } from
|
|
3
|
-
declare module
|
|
1
|
+
import { WebSocketServer } from "ws";
|
|
2
|
+
import { ViteDevServer } from "vite";
|
|
3
|
+
declare module "@zhin.js/types" {
|
|
4
4
|
interface GlobalContext {
|
|
5
5
|
web: WebServer;
|
|
6
6
|
}
|
package/lib/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../app/index.ts"],"names":[],"mappings":"AAEA,OAAkB,EAAE,eAAe,EAAE,MAAM,IAAI,CAAC;AAChD,OAAO,EAAgB,aAAa,EAA0B,MAAM,MAAM,CAAC;AAO3E,OAAO,QAAQ,gBAAgB,CAAC;IAC9B,UAAU,aAAa;QACrB,GAAG,EAAE,SAAS,CAAC;KAChB;CACF;AACD,MAAM,MAAM,QAAQ,GAChB,MAAM,GACN;IACE,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AACN,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,aAAa,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,QAAQ,GAAG,MAAM,IAAI,CAAC;IACtC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,EAAE,EAAE,eAAe,CAAC;CACrB,CAAC"}
|
package/lib/index.js
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import { register, useContext, useApp } from
|
|
2
|
-
import react from
|
|
3
|
-
import WebSocket from
|
|
4
|
-
import { createServer } from
|
|
5
|
-
import connect from
|
|
6
|
-
import * as fs from
|
|
7
|
-
import * as path from
|
|
8
|
-
import tailwindcss from
|
|
1
|
+
import { register, useContext, useApp } from "@zhin.js/core";
|
|
2
|
+
import react from "@vitejs/plugin-react";
|
|
3
|
+
import WebSocket from "ws";
|
|
4
|
+
import { createServer } from "vite";
|
|
5
|
+
import connect from "koa-connect";
|
|
6
|
+
import * as fs from "fs";
|
|
7
|
+
import * as path from "path";
|
|
8
|
+
import tailwindcss from "@tailwindcss/vite";
|
|
9
9
|
const createSyncMsg = (key, value) => {
|
|
10
10
|
return {
|
|
11
|
-
type:
|
|
11
|
+
type: "sync",
|
|
12
12
|
data: {
|
|
13
13
|
key,
|
|
14
14
|
value,
|
|
@@ -17,7 +17,7 @@ const createSyncMsg = (key, value) => {
|
|
|
17
17
|
};
|
|
18
18
|
const createAddMsg = (key, value) => {
|
|
19
19
|
return {
|
|
20
|
-
type:
|
|
20
|
+
type: "add",
|
|
21
21
|
data: {
|
|
22
22
|
key,
|
|
23
23
|
value,
|
|
@@ -26,59 +26,65 @@ const createAddMsg = (key, value) => {
|
|
|
26
26
|
};
|
|
27
27
|
const createDeleteMsg = (key, value) => {
|
|
28
28
|
return {
|
|
29
|
-
type:
|
|
29
|
+
type: "delete",
|
|
30
30
|
data: {
|
|
31
31
|
key,
|
|
32
32
|
value,
|
|
33
33
|
},
|
|
34
34
|
};
|
|
35
35
|
};
|
|
36
|
-
useContext(
|
|
37
|
-
const root = path.join(
|
|
38
|
-
const base =
|
|
36
|
+
useContext("router", async (router) => {
|
|
37
|
+
const root = path.join(import.meta.dirname, "../client");
|
|
38
|
+
const base = "/vite/";
|
|
39
39
|
const vite = await createServer({
|
|
40
40
|
root,
|
|
41
41
|
base,
|
|
42
|
-
plugins: [
|
|
43
|
-
react(),
|
|
44
|
-
tailwindcss(),
|
|
45
|
-
],
|
|
42
|
+
plugins: [react(), tailwindcss()],
|
|
46
43
|
server: {
|
|
47
44
|
middlewareMode: true,
|
|
48
45
|
fs: {
|
|
49
|
-
strict: false
|
|
46
|
+
strict: false,
|
|
50
47
|
},
|
|
51
48
|
},
|
|
52
49
|
resolve: {
|
|
53
|
-
dedupe: [
|
|
50
|
+
dedupe: [
|
|
51
|
+
"react",
|
|
52
|
+
"react-dom",
|
|
53
|
+
"clsx",
|
|
54
|
+
"tailwind-merge",
|
|
55
|
+
"@reduxjs/toolkit",
|
|
56
|
+
"react-router",
|
|
57
|
+
"react-redux",
|
|
58
|
+
"redux-persist",
|
|
59
|
+
],
|
|
54
60
|
alias: {
|
|
55
|
-
|
|
56
|
-
|
|
61
|
+
"@zhin.js/client": path.resolve(root, "../../client/client"),
|
|
62
|
+
"@": path.resolve(root, "../client/src"),
|
|
57
63
|
},
|
|
58
64
|
},
|
|
59
65
|
optimizeDeps: {
|
|
60
|
-
include: [
|
|
66
|
+
include: ["react", "react-dom"],
|
|
61
67
|
},
|
|
62
68
|
build: {
|
|
63
69
|
rollupOptions: {
|
|
64
|
-
input: root +
|
|
70
|
+
input: root + "/index.html",
|
|
65
71
|
},
|
|
66
72
|
},
|
|
67
73
|
});
|
|
68
74
|
// Vite 中间件 - 必须在其他路由之前
|
|
69
75
|
router.use((ctx, next) => {
|
|
70
|
-
if (ctx.request.originalUrl.startsWith(
|
|
76
|
+
if (ctx.request.originalUrl.startsWith("/api"))
|
|
71
77
|
return next();
|
|
72
78
|
return connect(vite.middlewares)(ctx, next);
|
|
73
79
|
});
|
|
74
80
|
// SPA 回退路由 - 处理所有未匹配的路由
|
|
75
|
-
router.all(
|
|
76
|
-
const url = ctx.request.originalUrl.replace(base,
|
|
81
|
+
router.all("*all", async (ctx, next) => {
|
|
82
|
+
const url = ctx.request.originalUrl.replace(base, "");
|
|
77
83
|
const name = ctx.path.slice(1);
|
|
78
84
|
const sendFile = (filename) => {
|
|
79
85
|
ctx.type = path.extname(filename);
|
|
80
|
-
if (filename.endsWith(
|
|
81
|
-
ctx.type =
|
|
86
|
+
if (filename.endsWith(".ts"))
|
|
87
|
+
ctx.type = "text/javascript";
|
|
82
88
|
return (ctx.body = fs.createReadStream(filename));
|
|
83
89
|
};
|
|
84
90
|
// 1. 检查是否是动态入口
|
|
@@ -87,7 +93,7 @@ useContext('router', async (router) => {
|
|
|
87
93
|
}
|
|
88
94
|
// 2. 检查是否是静态文件
|
|
89
95
|
const filename = path.resolve(root, name);
|
|
90
|
-
if (filename.startsWith(root) || filename.includes(
|
|
96
|
+
if (filename.startsWith(root) || filename.includes("node_modules")) {
|
|
91
97
|
if (fs.existsSync(filename)) {
|
|
92
98
|
const fileState = fs.statSync(filename);
|
|
93
99
|
if (fileState.isFile()) {
|
|
@@ -101,8 +107,8 @@ useContext('router', async (router) => {
|
|
|
101
107
|
}
|
|
102
108
|
// 3. 所有其他路径(包括 SPA 路由)都返回 index.html
|
|
103
109
|
// 这样前端路由可以正确处理
|
|
104
|
-
const template = fs.readFileSync(path.resolve(root,
|
|
105
|
-
ctx.type =
|
|
110
|
+
const template = fs.readFileSync(path.resolve(root, "index.html"), "utf8");
|
|
111
|
+
ctx.type = "html";
|
|
106
112
|
ctx.body = await vite.transformIndexHtml(url, template);
|
|
107
113
|
});
|
|
108
114
|
const webServer = {
|
|
@@ -110,19 +116,22 @@ useContext('router', async (router) => {
|
|
|
110
116
|
entries: {},
|
|
111
117
|
addEntry(entry) {
|
|
112
118
|
const hash = Date.now().toString(16) + Math.random().toString(16).slice(2, 8);
|
|
113
|
-
const entryFile = typeof entry === "string"
|
|
119
|
+
const entryFile = typeof entry === "string"
|
|
120
|
+
? entry
|
|
121
|
+
: entry[process.env.NODE_ENV ||
|
|
122
|
+
"development"];
|
|
114
123
|
this.entries[hash] = `/vite/@fs/${entryFile}`;
|
|
115
124
|
for (const ws of this.ws.clients || []) {
|
|
116
|
-
ws.send(JSON.stringify(createAddMsg(
|
|
125
|
+
ws.send(JSON.stringify(createAddMsg("entries", this.entries[hash])));
|
|
117
126
|
}
|
|
118
127
|
return () => {
|
|
119
128
|
for (const ws of this.ws.clients || []) {
|
|
120
|
-
ws.send(JSON.stringify(createDeleteMsg(
|
|
129
|
+
ws.send(JSON.stringify(createDeleteMsg("entries", this.entries[hash])));
|
|
121
130
|
}
|
|
122
131
|
delete this.entries[hash];
|
|
123
132
|
};
|
|
124
133
|
},
|
|
125
|
-
ws: router.ws(
|
|
134
|
+
ws: router.ws("/server"),
|
|
126
135
|
};
|
|
127
136
|
// 数据推送函数
|
|
128
137
|
const broadcastToAll = (message) => {
|
|
@@ -135,31 +144,31 @@ useContext('router', async (router) => {
|
|
|
135
144
|
// 推送数据更新通知
|
|
136
145
|
const notifyDataUpdate = () => {
|
|
137
146
|
broadcastToAll({
|
|
138
|
-
type:
|
|
139
|
-
timestamp: Date.now()
|
|
147
|
+
type: "data-update",
|
|
148
|
+
timestamp: Date.now(),
|
|
140
149
|
});
|
|
141
150
|
};
|
|
142
151
|
// WebSocket 连接处理
|
|
143
|
-
webServer.ws.on(
|
|
152
|
+
webServer.ws.on("connection", (ws) => {
|
|
144
153
|
// 发送初始数据
|
|
145
|
-
ws.send(JSON.stringify(createSyncMsg(
|
|
154
|
+
ws.send(JSON.stringify(createSyncMsg("entries", Array.from(new Set(Object.values(webServer.entries))))));
|
|
146
155
|
// 通知客户端进行数据初始化
|
|
147
156
|
ws.send(JSON.stringify({
|
|
148
|
-
type:
|
|
149
|
-
timestamp: Date.now()
|
|
157
|
+
type: "init-data",
|
|
158
|
+
timestamp: Date.now(),
|
|
150
159
|
}));
|
|
151
160
|
// 处理 WebSocket 消息
|
|
152
|
-
ws.on(
|
|
161
|
+
ws.on("message", async (data) => {
|
|
153
162
|
try {
|
|
154
163
|
const message = JSON.parse(data.toString());
|
|
155
164
|
const { type, pluginName, requestId } = message;
|
|
156
165
|
// 获取应用实例
|
|
157
166
|
const app = useApp();
|
|
158
167
|
switch (type) {
|
|
159
|
-
case
|
|
168
|
+
case "config:get":
|
|
160
169
|
try {
|
|
161
170
|
let config;
|
|
162
|
-
if (pluginName ===
|
|
171
|
+
if (pluginName === "app") {
|
|
163
172
|
config = app.getConfig();
|
|
164
173
|
}
|
|
165
174
|
else {
|
|
@@ -171,20 +180,20 @@ useContext('router', async (router) => {
|
|
|
171
180
|
}
|
|
172
181
|
ws.send(JSON.stringify({
|
|
173
182
|
requestId,
|
|
174
|
-
data: config
|
|
183
|
+
data: config,
|
|
175
184
|
}));
|
|
176
185
|
}
|
|
177
186
|
catch (error) {
|
|
178
187
|
ws.send(JSON.stringify({
|
|
179
188
|
requestId,
|
|
180
|
-
error: error.message
|
|
189
|
+
error: error.message,
|
|
181
190
|
}));
|
|
182
191
|
}
|
|
183
192
|
break;
|
|
184
|
-
case
|
|
193
|
+
case "config:set":
|
|
185
194
|
try {
|
|
186
195
|
const { data: newConfig } = message;
|
|
187
|
-
if (pluginName ===
|
|
196
|
+
if (pluginName === "app") {
|
|
188
197
|
app.config = newConfig;
|
|
189
198
|
}
|
|
190
199
|
else {
|
|
@@ -197,15 +206,16 @@ useContext('router', async (router) => {
|
|
|
197
206
|
// 响应成功
|
|
198
207
|
ws.send(JSON.stringify({
|
|
199
208
|
requestId,
|
|
200
|
-
data:
|
|
209
|
+
data: "success",
|
|
201
210
|
}));
|
|
202
211
|
// 广播配置更新
|
|
203
212
|
webServer.ws.clients.forEach((client) => {
|
|
204
|
-
if (client.readyState === 1) {
|
|
213
|
+
if (client.readyState === 1) {
|
|
214
|
+
// WebSocket.OPEN
|
|
205
215
|
client.send(JSON.stringify({
|
|
206
|
-
type:
|
|
216
|
+
type: "config:updated",
|
|
207
217
|
pluginName,
|
|
208
|
-
data: newConfig
|
|
218
|
+
data: newConfig,
|
|
209
219
|
}));
|
|
210
220
|
}
|
|
211
221
|
});
|
|
@@ -213,14 +223,14 @@ useContext('router', async (router) => {
|
|
|
213
223
|
catch (error) {
|
|
214
224
|
ws.send(JSON.stringify({
|
|
215
225
|
requestId,
|
|
216
|
-
error: error.message
|
|
226
|
+
error: error.message,
|
|
217
227
|
}));
|
|
218
228
|
}
|
|
219
229
|
break;
|
|
220
|
-
case
|
|
230
|
+
case "schema:get":
|
|
221
231
|
try {
|
|
222
232
|
let schema;
|
|
223
|
-
if (pluginName ===
|
|
233
|
+
if (pluginName === "app") {
|
|
224
234
|
schema = app.schema?.toJSON();
|
|
225
235
|
}
|
|
226
236
|
else {
|
|
@@ -232,21 +242,21 @@ useContext('router', async (router) => {
|
|
|
232
242
|
}
|
|
233
243
|
ws.send(JSON.stringify({
|
|
234
244
|
requestId,
|
|
235
|
-
data: schema
|
|
245
|
+
data: schema,
|
|
236
246
|
}));
|
|
237
247
|
}
|
|
238
248
|
catch (error) {
|
|
239
249
|
ws.send(JSON.stringify({
|
|
240
250
|
requestId,
|
|
241
|
-
error: error.message
|
|
251
|
+
error: error.message,
|
|
242
252
|
}));
|
|
243
253
|
}
|
|
244
254
|
break;
|
|
245
|
-
case
|
|
255
|
+
case "config:get-all":
|
|
246
256
|
try {
|
|
247
257
|
const configs = {};
|
|
248
258
|
// 获取 App 配置
|
|
249
|
-
configs[
|
|
259
|
+
configs["app"] = app.getConfig();
|
|
250
260
|
// 获取所有插件配置
|
|
251
261
|
for (const plugin of app.dependencyList) {
|
|
252
262
|
if (plugin.config && Object.keys(plugin.config).length > 0) {
|
|
@@ -255,23 +265,23 @@ useContext('router', async (router) => {
|
|
|
255
265
|
}
|
|
256
266
|
ws.send(JSON.stringify({
|
|
257
267
|
requestId,
|
|
258
|
-
data: configs
|
|
268
|
+
data: configs,
|
|
259
269
|
}));
|
|
260
270
|
}
|
|
261
271
|
catch (error) {
|
|
262
272
|
ws.send(JSON.stringify({
|
|
263
273
|
requestId,
|
|
264
|
-
error: error.message
|
|
274
|
+
error: error.message,
|
|
265
275
|
}));
|
|
266
276
|
}
|
|
267
277
|
break;
|
|
268
|
-
case
|
|
278
|
+
case "schema:get-all":
|
|
269
279
|
try {
|
|
270
280
|
const schemas = {};
|
|
271
281
|
// 获取 App Schema
|
|
272
282
|
const appSchema = app.schema?.toJSON();
|
|
273
283
|
if (appSchema) {
|
|
274
|
-
schemas[
|
|
284
|
+
schemas["app"] = appSchema;
|
|
275
285
|
}
|
|
276
286
|
// 获取所有插件 Schema
|
|
277
287
|
for (const plugin of app.dependencyList) {
|
|
@@ -282,13 +292,13 @@ useContext('router', async (router) => {
|
|
|
282
292
|
}
|
|
283
293
|
ws.send(JSON.stringify({
|
|
284
294
|
requestId,
|
|
285
|
-
data: schemas
|
|
295
|
+
data: schemas,
|
|
286
296
|
}));
|
|
287
297
|
}
|
|
288
298
|
catch (error) {
|
|
289
299
|
ws.send(JSON.stringify({
|
|
290
300
|
requestId,
|
|
291
|
-
error: error.message
|
|
301
|
+
error: error.message,
|
|
292
302
|
}));
|
|
293
303
|
}
|
|
294
304
|
break;
|
|
@@ -296,15 +306,14 @@ useContext('router', async (router) => {
|
|
|
296
306
|
}
|
|
297
307
|
}
|
|
298
308
|
catch (error) {
|
|
299
|
-
console.error(
|
|
309
|
+
console.error("WebSocket 消息处理错误:", error);
|
|
300
310
|
ws.send(JSON.stringify({
|
|
301
|
-
error:
|
|
311
|
+
error: "Invalid message format",
|
|
302
312
|
}));
|
|
303
313
|
}
|
|
304
314
|
});
|
|
305
|
-
ws.on(
|
|
306
|
-
|
|
307
|
-
ws.on('error', (error) => {
|
|
315
|
+
ws.on("close", () => { });
|
|
316
|
+
ws.on("error", (error) => {
|
|
308
317
|
// console.error 已替换为注释
|
|
309
318
|
});
|
|
310
319
|
});
|
|
@@ -313,11 +322,11 @@ useContext('router', async (router) => {
|
|
|
313
322
|
notifyDataUpdate();
|
|
314
323
|
}, 5000); // 每5秒通知一次更新
|
|
315
324
|
// 插件卸载时清理定时器
|
|
316
|
-
process.on(
|
|
325
|
+
process.on("exit", () => {
|
|
317
326
|
clearInterval(dataUpdateInterval);
|
|
318
327
|
});
|
|
319
328
|
register({
|
|
320
|
-
name:
|
|
329
|
+
name: "web",
|
|
321
330
|
description: "web服务",
|
|
322
331
|
async mounted() {
|
|
323
332
|
return webServer;
|
|
@@ -325,7 +334,7 @@ useContext('router', async (router) => {
|
|
|
325
334
|
async dispose(server) {
|
|
326
335
|
await server.vite.close();
|
|
327
336
|
server.ws.close();
|
|
328
|
-
}
|
|
337
|
+
},
|
|
329
338
|
});
|
|
330
339
|
});
|
|
331
340
|
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../app/index.ts"],"names":[],"mappings":"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"}
|