@zhin.js/console 1.0.0 → 1.0.1

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAiB,EAAC,eAAe,EAAC,MAAM,IAAI,CAAC;AAC7C,OAAO,EAAc,aAAa,EAAwB,MAAM,MAAM,CAAC;AASvE,OAAO,QAAQ,gBAAgB,CAAC;IAC5B,UAAU,aAAa;QACnB,GAAG,EAAE,SAAS,CAAC;KAClB;CACJ;AACD,MAAM,MAAM,QAAQ,GAAC,MAAM,GAAC;IACxB,UAAU,EAAC,MAAM,CAAA;IACjB,WAAW,EAAC,MAAM,CAAA;CACrB,CAAA;AACD,MAAM,MAAM,SAAS,GAAG;IACpB,IAAI,EAAC,aAAa,CAAC;IACnB,QAAQ,CAAC,KAAK,EAAE,QAAQ,GAAG,MAAM,IAAI,CAAC;IACtC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,EAAE,EAAC,eAAe,CAAA;CACrB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAiB,EAAC,eAAe,EAAC,MAAM,IAAI,CAAC;AAC7C,OAAO,EAAc,aAAa,EAAwB,MAAM,MAAM,CAAC;AAOvE,OAAO,QAAQ,gBAAgB,CAAC;IAC5B,UAAU,aAAa;QACnB,GAAG,EAAE,SAAS,CAAC;KAClB;CACJ;AACD,MAAM,MAAM,QAAQ,GAAC,MAAM,GAAC;IACxB,UAAU,EAAC,MAAM,CAAA;IACjB,WAAW,EAAC,MAAM,CAAA;CACrB,CAAA;AACD,MAAM,MAAM,SAAS,GAAG;IACpB,IAAI,EAAC,aAAa,CAAC;IACnB,QAAQ,CAAC,KAAK,EAAE,QAAQ,GAAG,MAAM,IAAI,CAAC;IACtC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,EAAE,EAAC,eAAe,CAAA;CACrB,CAAC"}
package/lib/index.js CHANGED
@@ -1,13 +1,12 @@
1
- import { register, useContext, useLogger } from '@zhin.js/core';
1
+ import { register, useContext } from '@zhin.js/core';
2
+ import react from '@vitejs/plugin-react';
2
3
  import WebSocket from 'ws';
3
4
  import { createServer, searchForWorkspaceRoot } from 'vite';
4
- import Components from 'unplugin-vue-components/vite';
5
- import { PrimeVueResolver } from '@primevue/auto-import-resolver';
6
5
  import connect from 'koa-connect';
7
- import vuePlugin from "@vitejs/plugin-vue";
8
6
  import * as fs from 'fs';
9
7
  import * as path from 'path';
10
8
  import { fileURLToPath } from "node:url";
9
+ import tailwindcss from '@tailwindcss/vite';
11
10
  const createSyncMsg = (key, value) => {
12
11
  return {
13
12
  type: 'sync',
@@ -35,7 +34,6 @@ const createDeleteMsg = (key, value) => {
35
34
  },
36
35
  };
37
36
  };
38
- const logger = useLogger();
39
37
  useContext('router', async (router) => {
40
38
  const root = path.join(process.cwd(), 'node_modules', '@zhin.js', 'client', 'app');
41
39
  const base = '/vite/';
@@ -43,12 +41,8 @@ useContext('router', async (router) => {
43
41
  root,
44
42
  base,
45
43
  plugins: [
46
- vuePlugin(),
47
- Components({
48
- resolvers: [
49
- PrimeVueResolver()
50
- ]
51
- })
44
+ react(),
45
+ tailwindcss(),
52
46
  ],
53
47
  server: {
54
48
  middlewareMode: true,
@@ -57,13 +51,14 @@ useContext('router', async (router) => {
57
51
  },
58
52
  },
59
53
  resolve: {
60
- dedupe: ['vue', 'vue-router', 'pinia', 'primevue', 'primeicons'],
54
+ dedupe: ['react', 'react-dom'],
61
55
  alias: {
62
56
  '@zhin.js/client': path.resolve(root, '../src'),
57
+ '@': path.resolve(root, 'src'),
63
58
  },
64
59
  },
65
60
  optimizeDeps: {
66
- include: ['vue', 'pinia'],
61
+ include: ['react', 'react-dom'],
67
62
  },
68
63
  build: {
69
64
  rollupOptions: {
@@ -71,8 +66,14 @@ useContext('router', async (router) => {
71
66
  },
72
67
  },
73
68
  });
69
+ // Vite 中间件 - 必须在其他路由之前
70
+ router.use((ctx, next) => {
71
+ if (ctx.request.originalUrl.startsWith('/api'))
72
+ return next();
73
+ return connect(vite.middlewares)(ctx, next);
74
+ });
75
+ // SPA 回退路由 - 处理所有未匹配的路由
74
76
  router.all('*all', async (ctx, next) => {
75
- await next();
76
77
  const url = ctx.request.originalUrl.replace(base, '');
77
78
  const name = ctx.path.slice(1);
78
79
  const sendFile = (filename) => {
@@ -81,32 +82,35 @@ useContext('router', async (router) => {
81
82
  ctx.type = 'text/javascript';
82
83
  return (ctx.body = fs.createReadStream(filename));
83
84
  };
85
+ // 1. 检查是否是动态入口
84
86
  if (Object.keys(webServer.entries).includes(name)) {
85
87
  return sendFile(path.resolve(process.cwd(), webServer.entries[name]));
86
88
  }
89
+ // 2. 检查是否是静态文件
87
90
  const filename = path.resolve(root, name);
88
- if (!filename.startsWith(root) && !filename.includes('node_modules')) {
89
- return (ctx.status = 403);
91
+ if (filename.startsWith(root) || filename.includes('node_modules')) {
92
+ if (fs.existsSync(filename)) {
93
+ const fileState = fs.statSync(filename);
94
+ if (fileState.isFile()) {
95
+ return sendFile(filename);
96
+ }
97
+ }
90
98
  }
91
- if (fs.existsSync(filename)) {
92
- const fileState = fs.statSync(filename);
93
- if (fileState.isFile())
94
- return sendFile(filename);
99
+ else {
100
+ // 安全检查:路径不在允许范围内
101
+ return (ctx.status = 403);
95
102
  }
103
+ // 3. 所有其他路径(包括 SPA 路由)都返回 index.html
104
+ // 这样前端路由可以正确处理
96
105
  const template = fs.readFileSync(path.resolve(root, 'index.html'), 'utf8');
97
106
  ctx.type = 'html';
98
107
  ctx.body = await vite.transformIndexHtml(url, template);
99
108
  });
100
- router.use((ctx, next) => {
101
- if (ctx.request.originalUrl.startsWith('/api'))
102
- return next();
103
- return connect(vite.middlewares)(ctx, next);
104
- });
105
109
  const webServer = {
106
110
  vite,
107
111
  entries: {},
108
112
  addEntry(entry) {
109
- const hash = Date.now().toString(16);
113
+ const hash = Date.now().toString(16) + Math.random().toString(16).slice(2, 8);
110
114
  const entryFile = typeof entry === "string" ? entry : entry[process.env.NODE_ENV || 'development'];
111
115
  this.entries[hash] = `/vite/@fs/${entryFile}`;
112
116
  for (const ws of this.ws.clients || []) {
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":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zhin.js/console",
3
- "version": "1.0.0",
3
+ "version": "1.0.1",
4
4
  "description": "Zhin 控制台",
5
5
  "type": "module",
6
6
  "main": "./lib/index.js",
@@ -12,20 +12,21 @@
12
12
  }
13
13
  },
14
14
  "dependencies": {
15
- "@vitejs/plugin-vue": "^6.0.1",
15
+ "@vitejs/plugin-react": "^4.3.4",
16
+ "@tailwindcss/vite": "4.1.14",
17
+ "radix-ui": "^1.4.3",
18
+ "@radix-ui/themes": "^3.2.1",
19
+ "lucide-react": "^0.469.0",
16
20
  "koa-connect": "^2.1.0",
17
21
  "ws": "^8.18.3",
18
- "vue": "^3.5.18",
19
22
  "vite": "^7.0.6"
20
23
  },
21
24
  "peerDependencies": {
22
25
  "@types/ws": "^8.18.1",
23
- "unplugin-vue-components": "^29.0.0",
24
- "@primevue/auto-import-resolver": "^4.3.7",
25
- "@zhin.js/client": "^1.0.0",
26
+ "@zhin.js/client": "^1.0.1",
27
+ "@zhin.js/core": "^1.0.3",
26
28
  "@zhin.js/http": "^1.0.1",
27
- "@zhin.js/core": "^1.0.1",
28
- "@zhin.js/types": "^1.0.1"
29
+ "@zhin.js/types": "^1.0.2"
29
30
  },
30
31
  "peerDependenciesMeta": {
31
32
  "@zhin.js/types": {
package/src/index.ts CHANGED
@@ -1,13 +1,12 @@
1
- import {register, useContext, useLogger} from '@zhin.js/core';
1
+ import {register, useContext} from '@zhin.js/core';
2
+ import react from '@vitejs/plugin-react';
2
3
  import WebSocket,{WebSocketServer} from 'ws';
3
4
  import {createServer,ViteDevServer,searchForWorkspaceRoot} from 'vite';
4
- import Components from 'unplugin-vue-components/vite';
5
- import {PrimeVueResolver} from '@primevue/auto-import-resolver';
6
5
  import connect from 'koa-connect';
7
- import vuePlugin from "@vitejs/plugin-vue";
8
6
  import * as fs from 'fs';
9
7
  import * as path from 'path';
10
8
  import {fileURLToPath} from "node:url";
9
+ import tailwindcss from '@tailwindcss/vite';
11
10
 
12
11
  declare module '@zhin.js/types' {
13
12
  interface GlobalContext {
@@ -51,7 +50,6 @@ const createDeleteMsg = (key: string, value: any) => {
51
50
  },
52
51
  };
53
52
  };
54
- const logger=useLogger();
55
53
  useContext('router', async (router) => {
56
54
  const root = path.join(process.cwd(),'node_modules','@zhin.js','client','app');
57
55
  const base='/vite/'
@@ -59,12 +57,8 @@ useContext('router', async (router) => {
59
57
  root,
60
58
  base,
61
59
  plugins: [
62
- vuePlugin(),
63
- Components({
64
- resolvers: [
65
- PrimeVueResolver()
66
- ]
67
- })
60
+ react(),
61
+ tailwindcss(),
68
62
  ],
69
63
  server: {
70
64
  middlewareMode: true,
@@ -73,13 +67,14 @@ useContext('router', async (router) => {
73
67
  },
74
68
  },
75
69
  resolve: {
76
- dedupe: ['vue', 'vue-router', 'pinia','primevue','primeicons'],
70
+ dedupe: ['react', 'react-dom'],
77
71
  alias: {
78
72
  '@zhin.js/client': path.resolve(root, '../src'),
73
+ '@': path.resolve(root, 'src'),
79
74
  },
80
75
  },
81
76
  optimizeDeps: {
82
- include: ['vue', 'pinia'],
77
+ include: ['react', 'react-dom'],
83
78
  },
84
79
  build: {
85
80
  rollupOptions: {
@@ -87,40 +82,55 @@ useContext('router', async (router) => {
87
82
  },
88
83
  },
89
84
  });
85
+
86
+ // Vite 中间件 - 必须在其他路由之前
87
+ router.use((ctx: any, next: any) => {
88
+ if(ctx.request.originalUrl.startsWith('/api')) return next()
89
+ return connect(vite.middlewares)(ctx,next);
90
+ });
91
+
92
+ // SPA 回退路由 - 处理所有未匹配的路由
90
93
  router.all('*all', async (ctx, next) => {
91
- await next();
92
- const url=ctx.request.originalUrl.replace(base,'')
94
+ const url = ctx.request.originalUrl.replace(base, '')
93
95
  const name = ctx.path.slice(1);
96
+
94
97
  const sendFile = (filename: string) => {
95
98
  ctx.type = path.extname(filename);
96
99
  if (filename.endsWith('.ts')) ctx.type = 'text/javascript';
97
100
  return (ctx.body = fs.createReadStream(filename));
98
101
  };
102
+
103
+ // 1. 检查是否是动态入口
99
104
  if (Object.keys(webServer.entries).includes(name)) {
100
105
  return sendFile(path.resolve(process.cwd(), webServer.entries[name]));
101
106
  }
107
+
108
+ // 2. 检查是否是静态文件
102
109
  const filename = path.resolve(root, name);
103
- if (!filename.startsWith(root) && !filename.includes('node_modules')) {
110
+ if (filename.startsWith(root) || filename.includes('node_modules')) {
111
+ if (fs.existsSync(filename)) {
112
+ const fileState = fs.statSync(filename);
113
+ if (fileState.isFile()) {
114
+ return sendFile(filename);
115
+ }
116
+ }
117
+ } else {
118
+ // 安全检查:路径不在允许范围内
104
119
  return (ctx.status = 403);
105
120
  }
106
- if (fs.existsSync(filename)) {
107
- const fileState = fs.statSync(filename);
108
- if (fileState.isFile()) return sendFile(filename);
109
- }
121
+
122
+ // 3. 所有其他路径(包括 SPA 路由)都返回 index.html
123
+ // 这样前端路由可以正确处理
110
124
  const template = fs.readFileSync(path.resolve(root, 'index.html'), 'utf8');
111
125
  ctx.type = 'html';
112
126
  ctx.body = await vite.transformIndexHtml(url, template);
113
127
  });
114
- router.use((ctx: any, next: any) => {
115
- if(ctx.request.originalUrl.startsWith('/api')) return next()
116
- return connect(vite.middlewares)(ctx,next);
117
- });
118
128
 
119
129
  const webServer:WebServer={
120
130
  vite,
121
131
  entries: {},
122
132
  addEntry(entry) {
123
- const hash = Date.now().toString(16);
133
+ const hash = Date.now().toString(16)+Math.random().toString(16).slice(2,8);
124
134
  const entryFile=typeof entry==="string"?entry:entry[(process.env.NODE_ENV as 'development'|'production')||'development'];
125
135
  this.entries[hash] = `/vite/@fs/${entryFile}`;
126
136
  for (const ws of this.ws.clients || []) {