@zhin.js/console 1.0.6 → 1.0.8

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.
Files changed (52) hide show
  1. package/README.md +86 -21
  2. package/app/bin.ts +52 -0
  3. package/app/build.ts +211 -0
  4. package/app/dev.ts +83 -0
  5. package/app/index.ts +193 -0
  6. package/app/websocket.ts +109 -0
  7. package/client/index.html +13 -0
  8. package/client/postcss.config.js +5 -0
  9. package/client/public/vendor/react-dom.production.min.js +1 -0
  10. package/client/public/vendor/react.production.min.js +1 -0
  11. package/client/src/components/PluginConfigForm/BasicFieldRenderers.tsx +253 -0
  12. package/client/src/components/PluginConfigForm/CollectionFieldRenderers.tsx +261 -0
  13. package/client/src/components/PluginConfigForm/CompositeFieldRenderers.tsx +105 -0
  14. package/client/src/components/PluginConfigForm/FieldRenderer.tsx +110 -0
  15. package/client/src/components/PluginConfigForm/NestedFieldRenderer.tsx +95 -0
  16. package/client/src/components/PluginConfigForm/index.tsx +237 -0
  17. package/client/src/components/PluginConfigForm/types.ts +46 -0
  18. package/client/src/components/ThemeToggle.tsx +21 -0
  19. package/client/src/hooks/useTheme.ts +17 -0
  20. package/client/src/layouts/dashboard.tsx +259 -0
  21. package/client/src/main.tsx +121 -0
  22. package/client/src/pages/dashboard-bots.tsx +198 -0
  23. package/client/src/pages/dashboard-home.tsx +301 -0
  24. package/client/src/pages/dashboard-logs.tsx +298 -0
  25. package/client/src/pages/dashboard-plugin-detail.tsx +360 -0
  26. package/client/src/pages/dashboard-plugins.tsx +166 -0
  27. package/client/src/style.css +1105 -0
  28. package/client/src/theme/index.ts +92 -0
  29. package/client/tailwind.config.js +85 -0
  30. package/client/tsconfig.json +17 -0
  31. package/lib/bin.d.ts +3 -0
  32. package/lib/bin.d.ts.map +1 -0
  33. package/lib/bin.js +45 -0
  34. package/lib/bin.js.map +1 -0
  35. package/lib/build.d.ts +33 -0
  36. package/lib/build.d.ts.map +1 -0
  37. package/lib/build.js +168 -0
  38. package/lib/build.js.map +1 -0
  39. package/lib/dev.d.ts +16 -0
  40. package/lib/dev.d.ts.map +1 -0
  41. package/lib/dev.js +70 -0
  42. package/lib/dev.js.map +1 -0
  43. package/lib/index.d.ts +4 -4
  44. package/lib/index.d.ts.map +1 -1
  45. package/lib/index.js +107 -269
  46. package/lib/index.js.map +1 -1
  47. package/lib/websocket.d.ts +14 -0
  48. package/lib/websocket.d.ts.map +1 -0
  49. package/lib/websocket.js +85 -0
  50. package/lib/websocket.js.map +1 -0
  51. package/package.json +28 -10
  52. package/src/index.ts +0 -370
package/lib/index.js CHANGED
@@ -1,14 +1,14 @@
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';
1
+ import { register, useContext, useLogger } from "@zhin.js/core";
2
+ import mime from "mime";
3
+ import connect from "koa-connect";
4
+ import * as fs from "fs";
5
+ import * as path from "path";
6
+ import { createViteDevServer } from "./dev.js";
7
+ import { setupWebSocket, notifyDataUpdate } from "./websocket.js";
8
+ const logger = useLogger();
9
9
  const createSyncMsg = (key, value) => {
10
10
  return {
11
- type: 'sync',
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: 'add',
20
+ type: "add",
21
21
  data: {
22
22
  key,
23
23
  value,
@@ -26,306 +26,144 @@ const createAddMsg = (key, value) => {
26
26
  };
27
27
  const createDeleteMsg = (key, value) => {
28
28
  return {
29
- type: 'delete',
29
+ type: "delete",
30
30
  data: {
31
31
  key,
32
32
  value,
33
33
  },
34
34
  };
35
35
  };
36
- useContext('router', async (router) => {
37
- const root = path.join(process.cwd(), 'node_modules', '@zhin.js', 'client', 'app');
38
- const base = '/vite/';
39
- const vite = await createServer({
40
- root,
41
- base,
42
- plugins: [
43
- react(),
44
- tailwindcss(),
45
- ],
46
- server: {
47
- middlewareMode: true,
48
- fs: {
49
- strict: false
50
- },
51
- },
52
- resolve: {
53
- dedupe: ['react', 'react-dom'],
54
- alias: {
55
- '@zhin.js/client': path.resolve(root, '../src'),
56
- '@': path.resolve(root, 'src'),
57
- },
58
- },
59
- optimizeDeps: {
60
- include: ['react', 'react-dom'],
61
- },
62
- build: {
63
- rollupOptions: {
64
- input: root + '/index.html',
65
- },
66
- },
67
- });
68
- // Vite 中间件 - 必须在其他路由之前
69
- router.use((ctx, next) => {
70
- if (ctx.request.originalUrl.startsWith('/api'))
71
- return next();
72
- return connect(vite.middlewares)(ctx, next);
73
- });
74
- // SPA 回退路由 - 处理所有未匹配的路由
75
- router.all('*all', async (ctx, next) => {
76
- const url = ctx.request.originalUrl.replace(base, '');
77
- const name = ctx.path.slice(1);
78
- const sendFile = (filename) => {
79
- ctx.type = path.extname(filename);
80
- if (filename.endsWith('.ts'))
81
- ctx.type = 'text/javascript';
82
- return (ctx.body = fs.createReadStream(filename));
83
- };
84
- // 1. 检查是否是动态入口
85
- if (Object.keys(webServer.entries).includes(name)) {
86
- return sendFile(path.resolve(process.cwd(), webServer.entries[name]));
87
- }
88
- // 2. 检查是否是静态文件
89
- const filename = path.resolve(root, name);
90
- if (filename.startsWith(root) || filename.includes('node_modules')) {
91
- if (fs.existsSync(filename)) {
92
- const fileState = fs.statSync(filename);
93
- if (fileState.isFile()) {
94
- return sendFile(filename);
95
- }
96
- }
97
- }
98
- else {
99
- // 安全检查:路径不在允许范围内
100
- return (ctx.status = 403);
101
- }
102
- // 3. 所有其他路径(包括 SPA 路由)都返回 index.html
103
- // 这样前端路由可以正确处理
104
- const template = fs.readFileSync(path.resolve(root, 'index.html'), 'utf8');
105
- ctx.type = 'html';
106
- ctx.body = await vite.transformIndexHtml(url, template);
107
- });
36
+ useContext("router", async (router) => {
37
+ const base = "/vite/";
108
38
  const webServer = {
109
- vite,
110
39
  entries: {},
111
40
  addEntry(entry) {
112
41
  const hash = Date.now().toString(16) + Math.random().toString(16).slice(2, 8);
113
- const entryFile = typeof entry === "string" ? entry : entry[process.env.NODE_ENV || 'development'];
42
+ const entryFile = typeof entry === "string"
43
+ ? entry
44
+ : entry[process.env.NODE_ENV ||
45
+ "development"];
114
46
  this.entries[hash] = `/vite/@fs/${entryFile}`;
115
47
  for (const ws of this.ws.clients || []) {
116
- ws.send(JSON.stringify(createAddMsg('entries', this.entries[hash])));
48
+ ws.send(JSON.stringify(createAddMsg("entries", this.entries[hash])));
117
49
  }
118
50
  return () => {
119
51
  for (const ws of this.ws.clients || []) {
120
- ws.send(JSON.stringify(createDeleteMsg('entries', this.entries[hash])));
52
+ ws.send(JSON.stringify(createDeleteMsg("entries", this.entries[hash])));
121
53
  }
122
54
  delete this.entries[hash];
123
55
  };
124
56
  },
125
- ws: router.ws('/server')
57
+ ws: router.ws("/server"),
126
58
  };
127
- // 数据推送函数
128
- const broadcastToAll = (message) => {
129
- for (const ws of webServer.ws.clients || []) {
130
- if (ws.readyState === WebSocket.OPEN) {
131
- ws.send(JSON.stringify(message));
59
+ const isDev = process.env.NODE_ENV === "development";
60
+ const root = isDev
61
+ ? path.join(import.meta.dirname, "../client")
62
+ : path.join(import.meta.dirname, "../dist");
63
+ logger.info({ isDev, root });
64
+ if (isDev) {
65
+ webServer.vite = await await createViteDevServer({
66
+ root,
67
+ base,
68
+ enableTailwind: true,
69
+ });
70
+ // Vite 中间件 - 必须在其他路由之前
71
+ router.use((ctx, next) => {
72
+ if (ctx.request.originalUrl.startsWith("/api"))
73
+ return next();
74
+ return connect(webServer.vite.middlewares)(ctx, next);
75
+ });
76
+ }
77
+ else {
78
+ router.use((ctx, next) => {
79
+ if (ctx.request.originalUrl.startsWith("/api"))
80
+ return next();
81
+ if (!ctx.path.startsWith('/vite/@fs/'))
82
+ return next();
83
+ const filename = ctx.path.replace(`/vite/@fs/`, '');
84
+ if (!fs.existsSync(filename))
85
+ return next();
86
+ ctx.type = mime.getType(filename) || path.extname(filename);
87
+ ctx.body = fs.createReadStream(filename);
88
+ });
89
+ }
90
+ // SPA 回退路由 - 处理所有未匹配的路由
91
+ router.all("*all", async (ctx, next) => {
92
+ const url = ctx.request.originalUrl.replace(base, "");
93
+ const name = isDev ? ctx.path.slice(1) : ctx.path.slice(1);
94
+ const sendFile = (filename) => {
95
+ console.log(`发送文件: ${filename}`);
96
+ // 安全检查:确保是常规文件
97
+ try {
98
+ const stat = fs.statSync(filename);
99
+ if (!stat.isFile()) {
100
+ ctx.status = 404;
101
+ return;
102
+ }
132
103
  }
104
+ catch (error) {
105
+ ctx.status = 404;
106
+ return;
107
+ }
108
+ ctx.type = path.extname(filename);
109
+ ctx.type = mime.getType(filename) || ctx.type;
110
+ return (ctx.body = fs.createReadStream(filename));
111
+ };
112
+ // 1. 检查是否是动态入口
113
+ if (Object.keys(webServer.entries).includes(name)) {
114
+ return sendFile(path.resolve(process.cwd(), webServer.entries[name]));
133
115
  }
134
- };
135
- // 推送数据更新通知
136
- const notifyDataUpdate = () => {
137
- broadcastToAll({
138
- type: 'data-update',
139
- timestamp: Date.now()
140
- });
141
- };
142
- // WebSocket 连接处理
143
- webServer.ws.on('connection', (ws) => {
144
- // 发送初始数据
145
- ws.send(JSON.stringify(createSyncMsg('entries', Array.from(new Set(Object.values(webServer.entries))))));
146
- // 通知客户端进行数据初始化
147
- ws.send(JSON.stringify({
148
- type: 'init-data',
149
- timestamp: Date.now()
150
- }));
151
- // 处理 WebSocket 消息
152
- ws.on('message', async (data) => {
116
+ // 2. 检查是否是静态文件
117
+ const filename = path.resolve(root, name);
118
+ if (filename.startsWith(root) || filename.includes("node_modules")) {
153
119
  try {
154
- const message = JSON.parse(data.toString());
155
- const { type, pluginName, requestId } = message;
156
- // 获取应用实例
157
- const app = useApp();
158
- switch (type) {
159
- case 'config:get':
160
- try {
161
- let config;
162
- if (pluginName === 'app') {
163
- config = app.getConfig();
164
- }
165
- else {
166
- const plugin = app.findPluginByName(pluginName);
167
- if (!plugin) {
168
- throw new Error(`Plugin ${pluginName} not found`);
169
- }
170
- config = plugin.config;
171
- }
172
- ws.send(JSON.stringify({
173
- requestId,
174
- data: config
175
- }));
176
- }
177
- catch (error) {
178
- ws.send(JSON.stringify({
179
- requestId,
180
- error: error.message
181
- }));
182
- }
183
- break;
184
- case 'config:set':
185
- try {
186
- const { data: newConfig } = message;
187
- if (pluginName === 'app') {
188
- app.config = newConfig;
189
- }
190
- else {
191
- const plugin = app.findPluginByName(pluginName);
192
- if (!plugin) {
193
- throw new Error(`Plugin ${pluginName} not found`);
194
- }
195
- plugin.config = newConfig;
196
- }
197
- // 响应成功
198
- ws.send(JSON.stringify({
199
- requestId,
200
- data: 'success'
201
- }));
202
- // 广播配置更新
203
- webServer.ws.clients.forEach((client) => {
204
- if (client.readyState === 1) { // WebSocket.OPEN
205
- client.send(JSON.stringify({
206
- type: 'config:updated',
207
- pluginName,
208
- data: newConfig
209
- }));
210
- }
211
- });
212
- }
213
- catch (error) {
214
- ws.send(JSON.stringify({
215
- requestId,
216
- error: error.message
217
- }));
218
- }
219
- break;
220
- case 'schema:get':
221
- try {
222
- let schema;
223
- if (pluginName === 'app') {
224
- schema = app.schema?.toJSON();
225
- }
226
- else {
227
- const plugin = app.findPluginByName(pluginName);
228
- if (!plugin) {
229
- throw new Error(`Plugin ${pluginName} not found`);
230
- }
231
- schema = plugin.schema?.toJSON();
232
- }
233
- ws.send(JSON.stringify({
234
- requestId,
235
- data: schema
236
- }));
237
- }
238
- catch (error) {
239
- ws.send(JSON.stringify({
240
- requestId,
241
- error: error.message
242
- }));
243
- }
244
- break;
245
- case 'config:get-all':
246
- try {
247
- const configs = {};
248
- // 获取 App 配置
249
- configs['app'] = app.getConfig();
250
- // 获取所有插件配置
251
- for (const plugin of app.dependencyList) {
252
- if (plugin.config && Object.keys(plugin.config).length > 0) {
253
- configs[plugin.name] = plugin.config;
254
- }
255
- }
256
- ws.send(JSON.stringify({
257
- requestId,
258
- data: configs
259
- }));
260
- }
261
- catch (error) {
262
- ws.send(JSON.stringify({
263
- requestId,
264
- error: error.message
265
- }));
266
- }
267
- break;
268
- case 'schema:get-all':
269
- try {
270
- const schemas = {};
271
- // 获取 App Schema
272
- const appSchema = app.schema?.toJSON();
273
- if (appSchema) {
274
- schemas['app'] = appSchema;
275
- }
276
- // 获取所有插件 Schema
277
- for (const plugin of app.dependencyList) {
278
- const schema = plugin.schema?.toJSON();
279
- if (schema) {
280
- schemas[plugin.name] = schema;
281
- }
282
- }
283
- ws.send(JSON.stringify({
284
- requestId,
285
- data: schemas
286
- }));
287
- }
288
- catch (error) {
289
- ws.send(JSON.stringify({
290
- requestId,
291
- error: error.message
292
- }));
293
- }
294
- break;
295
- // 其他消息类型保持不变,让 console 插件自己处理
120
+ if (fs.existsSync(filename)) {
121
+ const fileState = fs.statSync(filename);
122
+ // 只处理常规文件,忽略目录、socket、符号链接等
123
+ if (fileState.isFile() &&
124
+ !fileState.isSocket() &&
125
+ !fileState.isFIFO()) {
126
+ return sendFile(filename);
127
+ }
296
128
  }
297
129
  }
298
130
  catch (error) {
299
- console.error('WebSocket 消息处理错误:', error);
300
- ws.send(JSON.stringify({
301
- error: 'Invalid message format'
302
- }));
131
+ // 忽略文件系统错误,继续处理
132
+ console.warn(`文件访问错误: ${filename}`, error.message);
303
133
  }
304
- });
305
- ws.on('close', () => {
306
- });
307
- ws.on('error', (error) => {
308
- // console.error 已替换为注释
309
- });
134
+ }
135
+ else {
136
+ // 安全检查:路径不在允许范围内
137
+ return (ctx.status = 403);
138
+ }
139
+ // 3. 所有其他路径(包括 SPA 路由)都返回 index.html
140
+ // 这样前端路由可以正确处理
141
+ const indexFile = path.resolve(root, "index.html");
142
+ if (!isDev)
143
+ return sendFile(indexFile);
144
+ const template = fs.readFileSync(indexFile, "utf8");
145
+ ctx.type = "html";
146
+ ctx.body = await webServer.vite.transformIndexHtml(url, template);
310
147
  });
311
148
  // 定时通知客户端更新数据
312
149
  const dataUpdateInterval = setInterval(() => {
313
- notifyDataUpdate();
150
+ notifyDataUpdate(webServer);
314
151
  }, 5000); // 每5秒通知一次更新
152
+ setupWebSocket(webServer);
315
153
  // 插件卸载时清理定时器
316
- process.on('exit', () => {
154
+ process.on("exit", () => {
317
155
  clearInterval(dataUpdateInterval);
318
156
  });
319
157
  register({
320
- name: 'web',
158
+ name: "web",
321
159
  description: "web服务",
322
160
  async mounted() {
323
161
  return webServer;
324
162
  },
325
163
  async dispose(server) {
326
- await server.vite.close();
164
+ await server.vite?.close();
327
165
  server.ws.close();
328
- }
166
+ },
329
167
  });
330
168
  });
331
169
  //# sourceMappingURL=index.js.map
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../app/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { WebServer } from "./index.js";
2
+ /**
3
+ * 设置 WebSocket 连接处理
4
+ */
5
+ export declare function setupWebSocket(webServer: WebServer): void;
6
+ /**
7
+ * 广播消息给所有连接的客户端
8
+ */
9
+ export declare function broadcastToAll(webServer: WebServer, message: any): void;
10
+ /**
11
+ * 通知数据更新
12
+ */
13
+ export declare function notifyDataUpdate(webServer: WebServer): void;
14
+ //# sourceMappingURL=websocket.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websocket.d.ts","sourceRoot":"","sources":["../app/websocket.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C;;GAEG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,SAAS,QA4ClD;AAuCD;;GAEG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,QAMhE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,SAAS,QAKpD"}
@@ -0,0 +1,85 @@
1
+ import WebSocket from "ws";
2
+ /**
3
+ * 设置 WebSocket 连接处理
4
+ */
5
+ export function setupWebSocket(webServer) {
6
+ webServer.ws.on("connection", (ws) => {
7
+ // 发送初始数据同步
8
+ ws.send(JSON.stringify({
9
+ type: "sync",
10
+ data: {
11
+ key: "entries",
12
+ value: Object.values(webServer.entries),
13
+ },
14
+ }));
15
+ // 通知客户端进行数据初始化
16
+ ws.send(JSON.stringify({
17
+ type: "init-data",
18
+ timestamp: Date.now(),
19
+ }));
20
+ // 处理客户端消息
21
+ ws.on("message", async (data) => {
22
+ try {
23
+ const message = JSON.parse(data.toString());
24
+ await handleWebSocketMessage(ws, message, webServer);
25
+ }
26
+ catch (error) {
27
+ console.error("WebSocket 消息处理错误:", error);
28
+ ws.send(JSON.stringify({
29
+ error: "Invalid message format",
30
+ }));
31
+ }
32
+ });
33
+ ws.on("close", () => {
34
+ // 连接关闭时的清理工作
35
+ });
36
+ ws.on("error", (error) => {
37
+ console.error("WebSocket 错误:", error);
38
+ });
39
+ });
40
+ }
41
+ /**
42
+ * 处理 WebSocket 消息
43
+ */
44
+ async function handleWebSocketMessage(ws, message, webServer) {
45
+ const { type, requestId } = message;
46
+ switch (type) {
47
+ case "ping":
48
+ // 心跳检测
49
+ ws.send(JSON.stringify({ type: "pong", requestId }));
50
+ break;
51
+ case "entries:get":
52
+ // 获取所有入口文件
53
+ ws.send(JSON.stringify({
54
+ requestId,
55
+ data: Object.values(webServer.entries),
56
+ }));
57
+ break;
58
+ default:
59
+ // 未知消息类型
60
+ ws.send(JSON.stringify({
61
+ requestId,
62
+ error: `Unknown message type: ${type}`,
63
+ }));
64
+ }
65
+ }
66
+ /**
67
+ * 广播消息给所有连接的客户端
68
+ */
69
+ export function broadcastToAll(webServer, message) {
70
+ for (const ws of webServer.ws.clients || []) {
71
+ if (ws.readyState === WebSocket.OPEN) {
72
+ ws.send(JSON.stringify(message));
73
+ }
74
+ }
75
+ }
76
+ /**
77
+ * 通知数据更新
78
+ */
79
+ export function notifyDataUpdate(webServer) {
80
+ broadcastToAll(webServer, {
81
+ type: "data-update",
82
+ timestamp: Date.now(),
83
+ });
84
+ }
85
+ //# sourceMappingURL=websocket.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websocket.js","sourceRoot":"","sources":["../app/websocket.ts"],"names":[],"mappings":"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"}