@zhin.js/console 1.0.7 → 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.
package/lib/index.js CHANGED
@@ -1,11 +1,11 @@
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";
1
+ import { register, useContext, useLogger } from "@zhin.js/core";
2
+ import mime from "mime";
5
3
  import connect from "koa-connect";
6
4
  import * as fs from "fs";
7
5
  import * as path from "path";
8
- import tailwindcss from "@tailwindcss/vite";
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
11
  type: "sync",
@@ -34,85 +34,8 @@ const createDeleteMsg = (key, value) => {
34
34
  };
35
35
  };
36
36
  useContext("router", async (router) => {
37
- const root = path.join(import.meta.dirname, "../client");
38
37
  const base = "/vite/";
39
- const vite = await createServer({
40
- root,
41
- base,
42
- plugins: [react(), tailwindcss()],
43
- server: {
44
- middlewareMode: true,
45
- fs: {
46
- strict: false,
47
- },
48
- },
49
- resolve: {
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
- ],
60
- alias: {
61
- "@zhin.js/client": path.resolve(root, "../../client/client"),
62
- "@": path.resolve(root, "../client/src"),
63
- },
64
- },
65
- optimizeDeps: {
66
- include: ["react", "react-dom"],
67
- },
68
- build: {
69
- rollupOptions: {
70
- input: root + "/index.html",
71
- },
72
- },
73
- });
74
- // Vite 中间件 - 必须在其他路由之前
75
- router.use((ctx, next) => {
76
- if (ctx.request.originalUrl.startsWith("/api"))
77
- return next();
78
- return connect(vite.middlewares)(ctx, next);
79
- });
80
- // SPA 回退路由 - 处理所有未匹配的路由
81
- router.all("*all", async (ctx, next) => {
82
- const url = ctx.request.originalUrl.replace(base, "");
83
- const name = ctx.path.slice(1);
84
- const sendFile = (filename) => {
85
- ctx.type = path.extname(filename);
86
- if (filename.endsWith(".ts"))
87
- ctx.type = "text/javascript";
88
- return (ctx.body = fs.createReadStream(filename));
89
- };
90
- // 1. 检查是否是动态入口
91
- if (Object.keys(webServer.entries).includes(name)) {
92
- return sendFile(path.resolve(process.cwd(), webServer.entries[name]));
93
- }
94
- // 2. 检查是否是静态文件
95
- const filename = path.resolve(root, name);
96
- if (filename.startsWith(root) || filename.includes("node_modules")) {
97
- if (fs.existsSync(filename)) {
98
- const fileState = fs.statSync(filename);
99
- if (fileState.isFile()) {
100
- return sendFile(filename);
101
- }
102
- }
103
- }
104
- else {
105
- // 安全检查:路径不在允许范围内
106
- return (ctx.status = 403);
107
- }
108
- // 3. 所有其他路径(包括 SPA 路由)都返回 index.html
109
- // 这样前端路由可以正确处理
110
- const template = fs.readFileSync(path.resolve(root, "index.html"), "utf8");
111
- ctx.type = "html";
112
- ctx.body = await vite.transformIndexHtml(url, template);
113
- });
114
38
  const webServer = {
115
- vite,
116
39
  entries: {},
117
40
  addEntry(entry) {
118
41
  const hash = Date.now().toString(16) + Math.random().toString(16).slice(2, 8);
@@ -133,194 +56,100 @@ useContext("router", async (router) => {
133
56
  },
134
57
  ws: router.ws("/server"),
135
58
  };
136
- // 数据推送函数
137
- const broadcastToAll = (message) => {
138
- for (const ws of webServer.ws.clients || []) {
139
- if (ws.readyState === WebSocket.OPEN) {
140
- 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
+ }
141
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]));
142
115
  }
143
- };
144
- // 推送数据更新通知
145
- const notifyDataUpdate = () => {
146
- broadcastToAll({
147
- type: "data-update",
148
- timestamp: Date.now(),
149
- });
150
- };
151
- // WebSocket 连接处理
152
- webServer.ws.on("connection", (ws) => {
153
- // 发送初始数据
154
- ws.send(JSON.stringify(createSyncMsg("entries", Array.from(new Set(Object.values(webServer.entries))))));
155
- // 通知客户端进行数据初始化
156
- ws.send(JSON.stringify({
157
- type: "init-data",
158
- timestamp: Date.now(),
159
- }));
160
- // 处理 WebSocket 消息
161
- ws.on("message", async (data) => {
116
+ // 2. 检查是否是静态文件
117
+ const filename = path.resolve(root, name);
118
+ if (filename.startsWith(root) || filename.includes("node_modules")) {
162
119
  try {
163
- const message = JSON.parse(data.toString());
164
- const { type, pluginName, requestId } = message;
165
- // 获取应用实例
166
- const app = useApp();
167
- switch (type) {
168
- case "config:get":
169
- try {
170
- let config;
171
- if (pluginName === "app") {
172
- config = app.getConfig();
173
- }
174
- else {
175
- const plugin = app.findPluginByName(pluginName);
176
- if (!plugin) {
177
- throw new Error(`Plugin ${pluginName} not found`);
178
- }
179
- config = plugin.config;
180
- }
181
- ws.send(JSON.stringify({
182
- requestId,
183
- data: config,
184
- }));
185
- }
186
- catch (error) {
187
- ws.send(JSON.stringify({
188
- requestId,
189
- error: error.message,
190
- }));
191
- }
192
- break;
193
- case "config:set":
194
- try {
195
- const { data: newConfig } = message;
196
- if (pluginName === "app") {
197
- app.config = newConfig;
198
- }
199
- else {
200
- const plugin = app.findPluginByName(pluginName);
201
- if (!plugin) {
202
- throw new Error(`Plugin ${pluginName} not found`);
203
- }
204
- plugin.config = newConfig;
205
- }
206
- // 响应成功
207
- ws.send(JSON.stringify({
208
- requestId,
209
- data: "success",
210
- }));
211
- // 广播配置更新
212
- webServer.ws.clients.forEach((client) => {
213
- if (client.readyState === 1) {
214
- // WebSocket.OPEN
215
- client.send(JSON.stringify({
216
- type: "config:updated",
217
- pluginName,
218
- data: newConfig,
219
- }));
220
- }
221
- });
222
- }
223
- catch (error) {
224
- ws.send(JSON.stringify({
225
- requestId,
226
- error: error.message,
227
- }));
228
- }
229
- break;
230
- case "schema:get":
231
- try {
232
- let schema;
233
- if (pluginName === "app") {
234
- schema = app.schema?.toJSON();
235
- }
236
- else {
237
- const plugin = app.findPluginByName(pluginName);
238
- if (!plugin) {
239
- throw new Error(`Plugin ${pluginName} not found`);
240
- }
241
- schema = plugin.schema?.toJSON();
242
- }
243
- ws.send(JSON.stringify({
244
- requestId,
245
- data: schema,
246
- }));
247
- }
248
- catch (error) {
249
- ws.send(JSON.stringify({
250
- requestId,
251
- error: error.message,
252
- }));
253
- }
254
- break;
255
- case "config:get-all":
256
- try {
257
- const configs = {};
258
- // 获取 App 配置
259
- configs["app"] = app.getConfig();
260
- // 获取所有插件配置
261
- for (const plugin of app.dependencyList) {
262
- if (plugin.config && Object.keys(plugin.config).length > 0) {
263
- configs[plugin.name] = plugin.config;
264
- }
265
- }
266
- ws.send(JSON.stringify({
267
- requestId,
268
- data: configs,
269
- }));
270
- }
271
- catch (error) {
272
- ws.send(JSON.stringify({
273
- requestId,
274
- error: error.message,
275
- }));
276
- }
277
- break;
278
- case "schema:get-all":
279
- try {
280
- const schemas = {};
281
- // 获取 App Schema
282
- const appSchema = app.schema?.toJSON();
283
- if (appSchema) {
284
- schemas["app"] = appSchema;
285
- }
286
- // 获取所有插件 Schema
287
- for (const plugin of app.dependencyList) {
288
- const schema = plugin.schema?.toJSON();
289
- if (schema) {
290
- schemas[plugin.name] = schema;
291
- }
292
- }
293
- ws.send(JSON.stringify({
294
- requestId,
295
- data: schemas,
296
- }));
297
- }
298
- catch (error) {
299
- ws.send(JSON.stringify({
300
- requestId,
301
- error: error.message,
302
- }));
303
- }
304
- break;
305
- // 其他消息类型保持不变,让 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
+ }
306
128
  }
307
129
  }
308
130
  catch (error) {
309
- console.error("WebSocket 消息处理错误:", error);
310
- ws.send(JSON.stringify({
311
- error: "Invalid message format",
312
- }));
131
+ // 忽略文件系统错误,继续处理
132
+ console.warn(`文件访问错误: ${filename}`, error.message);
313
133
  }
314
- });
315
- ws.on("close", () => { });
316
- ws.on("error", (error) => {
317
- // console.error 已替换为注释
318
- });
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);
319
147
  });
320
148
  // 定时通知客户端更新数据
321
149
  const dataUpdateInterval = setInterval(() => {
322
- notifyDataUpdate();
150
+ notifyDataUpdate(webServer);
323
151
  }, 5000); // 每5秒通知一次更新
152
+ setupWebSocket(webServer);
324
153
  // 插件卸载时清理定时器
325
154
  process.on("exit", () => {
326
155
  clearInterval(dataUpdateInterval);
@@ -332,7 +161,7 @@ useContext("router", async (router) => {
332
161
  return webServer;
333
162
  },
334
163
  async dispose(server) {
335
- await server.vite.close();
164
+ await server.vite?.close();
336
165
  server.ws.close();
337
166
  },
338
167
  });
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../app/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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"}
package/package.json CHANGED
@@ -1,10 +1,13 @@
1
1
  {
2
2
  "name": "@zhin.js/console",
3
- "version": "1.0.7",
3
+ "version": "1.0.8",
4
4
  "description": "Zhin 控制台",
5
5
  "type": "module",
6
6
  "main": "./lib/index.js",
7
7
  "types": "./lib/index.d.ts",
8
+ "bin": {
9
+ "zhin-client": "./lib/bin.js"
10
+ },
8
11
  "exports": {
9
12
  ".": {
10
13
  "types": "./lib/index.d.ts",
@@ -19,6 +22,7 @@
19
22
  "dependencies": {
20
23
  "react": "19.2.0",
21
24
  "react-dom": "19.2.0",
25
+ "mime": "^4.1.0",
22
26
  "@vitejs/plugin-react": "^4.3.4",
23
27
  "@tailwindcss/vite": "4.1.14",
24
28
  "radix-ui": "^1.4.3",
@@ -38,10 +42,10 @@
38
42
  },
39
43
  "peerDependencies": {
40
44
  "@types/ws": "^8.18.1",
41
- "@zhin.js/client": "^1.0.5",
42
- "@zhin.js/types": "^1.0.3",
43
45
  "@zhin.js/http": "^1.0.6",
44
- "@zhin.js/core": "^1.0.9"
46
+ "@zhin.js/core": "^1.0.10",
47
+ "@zhin.js/types": "^1.0.4",
48
+ "@zhin.js/client": "^1.0.5"
45
49
  },
46
50
  "peerDependenciesMeta": {
47
51
  "@zhin.js/types": {
@@ -55,6 +59,8 @@
55
59
  ],
56
60
  "scripts": {
57
61
  "build": "tsc",
62
+ "build:app": "tsc",
63
+ "build:client": "node lib/bin.js build:console",
58
64
  "clean": "rm -rf lib"
59
65
  }
60
66
  }