@kevisual/router 0.0.48 → 0.0.50

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.
@@ -280,7 +280,7 @@ declare class QueryRouter {
280
280
  hasRoute(path: string, key?: string): Route<{
281
281
  [key: string]: any;
282
282
  }, SimpleObject$1>;
283
- createRouteList(force?: boolean): void;
283
+ createRouteList(force?: boolean, filter?: (route: Route) => boolean): void;
284
284
  /**
285
285
  * 等待程序运行, 获取到message的数据,就执行
286
286
  *
@@ -620,13 +620,13 @@ class QueryRouter {
620
620
  hasRoute(path, key = '') {
621
621
  return this.routes.find((r) => r.path === path && r.key === key);
622
622
  }
623
- createRouteList(force = false) {
624
- const hasListRoute = this.hasRoute('route', 'list');
623
+ createRouteList(force = false, filter) {
624
+ const hasListRoute = this.hasRoute('router', 'list');
625
625
  if (!hasListRoute || force) {
626
- const listRoute = new Route('route', 'list', {
626
+ const listRoute = new Route('router', 'list', {
627
627
  description: '列出当前应用下的所有的路由信息',
628
628
  run: async (ctx) => {
629
- const list = this.getList();
629
+ const list = this.getList(filter);
630
630
  ctx.body = list;
631
631
  },
632
632
  });
package/dist/router.d.ts CHANGED
@@ -286,7 +286,7 @@ declare class QueryRouter {
286
286
  hasRoute(path: string, key?: string): Route<{
287
287
  [key: string]: any;
288
288
  }, SimpleObject$1>;
289
- createRouteList(force?: boolean): void;
289
+ createRouteList(force?: boolean, filter?: (route: Route) => boolean): void;
290
290
  /**
291
291
  * 等待程序运行, 获取到message的数据,就执行
292
292
  *
@@ -428,11 +428,11 @@ interface ServerType {
428
428
  */
429
429
  on(listener: OnListener): void;
430
430
  onWebSocket({ ws, message, pathname, token, id }: OnWebSocketOptions): void;
431
- onWsClose(ws: WS): void;
432
- sendConnected(ws: WS): void;
431
+ onWsClose<T = {}>(ws: WS<T>): void;
432
+ sendConnected<T = {}>(ws: WS<T>): void;
433
433
  }
434
- type OnWebSocketOptions = {
435
- ws: WS;
434
+ type OnWebSocketOptions<T = {}> = {
435
+ ws: WS<T>;
436
436
  message: string | Buffer;
437
437
  pathname: string;
438
438
  token?: string;
@@ -458,13 +458,18 @@ type Listener = {
458
458
  io?: boolean;
459
459
  path?: string;
460
460
  func: WebSocketListenerFun | HttpListenerFun;
461
+ /**
462
+ * @description 是否默认解析为 JSON,如果为 true,则 message 会被 JSON.parse 处理,默认是 true
463
+ */
464
+ json?: boolean;
461
465
  };
462
466
  type WebSocketListenerFun = (req: WebSocketReq, res: WebSocketRes) => Promise<void> | void;
463
467
  type HttpListenerFun = (req: RouterReq, res: RouterRes) => Promise<void> | void;
464
- type WebSocketReq = {
468
+ type WebSocketReq<T = {}, U = Record<string, any>> = {
465
469
  emitter?: EventEmitter;
466
- ws: WS;
467
- data: any;
470
+ ws: WS<T>;
471
+ data?: U;
472
+ message?: string | Buffer;
468
473
  pathname?: string;
469
474
  token?: string;
470
475
  id?: string;
package/dist/router.js CHANGED
@@ -642,13 +642,13 @@ class QueryRouter {
642
642
  hasRoute(path, key = '') {
643
643
  return this.routes.find((r) => r.path === path && r.key === key);
644
644
  }
645
- createRouteList(force = false) {
646
- const hasListRoute = this.hasRoute('route', 'list');
645
+ createRouteList(force = false, filter) {
646
+ const hasListRoute = this.hasRoute('router', 'list');
647
647
  if (!hasListRoute || force) {
648
- const listRoute = new Route('route', 'list', {
648
+ const listRoute = new Route('router', 'list', {
649
649
  description: '列出当前应用下的所有的路由信息',
650
650
  run: async (ctx) => {
651
- const list = this.getList();
651
+ const list = this.getList(filter);
652
652
  ctx.body = list;
653
653
  },
654
654
  });
@@ -1325,14 +1325,15 @@ class ServerBase {
1325
1325
  }
1326
1326
  on(listener) {
1327
1327
  this.listeners = [];
1328
+ const randomId = Math.random().toString(36).substring(2, 15);
1328
1329
  if (typeof listener === 'function') {
1329
- this.listeners.push({ func: listener });
1330
+ this.listeners.push({ func: listener, id: 'all-' + randomId });
1330
1331
  return;
1331
1332
  }
1332
1333
  if (Array.isArray(listener)) {
1333
1334
  for (const item of listener) {
1334
1335
  if (typeof item === 'function') {
1335
- this.listeners.push({ func: item });
1336
+ this.listeners.push({ func: item, id: 'all-' + randomId });
1336
1337
  }
1337
1338
  else {
1338
1339
  this.listeners.push(item);
@@ -1345,20 +1346,28 @@ class ServerBase {
1345
1346
  }
1346
1347
  async onWebSocket({ ws, message, pathname, token, id }) {
1347
1348
  const listener = this.listeners.find((item) => item.path === pathname && item.io);
1348
- const data = parseIfJson(message);
1349
1349
  if (listener) {
1350
1350
  const end = (data) => {
1351
1351
  ws.send(JSON.stringify(data));
1352
1352
  };
1353
+ let data = {};
1354
+ const isJson = listener.json !== false;
1355
+ if (isJson) {
1356
+ data = parseIfJson(message);
1357
+ }
1353
1358
  listener.func({
1354
1359
  emitter: this.emitter,
1355
1360
  data,
1356
1361
  token,
1362
+ message,
1363
+ pathname,
1357
1364
  id,
1358
1365
  ws,
1359
1366
  }, { end });
1360
1367
  return;
1361
1368
  }
1369
+ // 默认处理方案,直接调用 handle 方法
1370
+ const data = parseIfJson(message);
1362
1371
  if (typeof data === 'string') {
1363
1372
  const cleanMessage = data.trim().replace(/^["']|["']$/g, '');
1364
1373
  if (cleanMessage === 'close') {
@@ -11209,7 +11218,7 @@ class App {
11209
11218
  }
11210
11219
  this.server.on({
11211
11220
  id: 'app-request-listener',
11212
- fun: fn,
11221
+ func: fn,
11213
11222
  });
11214
11223
  }
11215
11224
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json.schemastore.org/package",
3
3
  "name": "@kevisual/router",
4
- "version": "0.0.48",
4
+ "version": "0.0.50",
5
5
  "description": "",
6
6
  "type": "module",
7
7
  "main": "./dist/router.js",
@@ -84,11 +84,6 @@
84
84
  "require": "./dist/router-define.js",
85
85
  "types": "./dist/router-define.d.ts"
86
86
  },
87
- "./simple-lib": {
88
- "import": "./dist/router-simple-lib.js",
89
- "require": "./dist/router-simple-lib.js",
90
- "types": "./dist/router-simple-lib.d.ts"
91
- },
92
87
  "./mod.ts": {
93
88
  "import": "./mod.ts",
94
89
  "require": "./mod.ts",
package/src/app.ts CHANGED
@@ -134,7 +134,7 @@ export class App<U = {}> {
134
134
  }
135
135
  this.server.on({
136
136
  id: 'app-request-listener',
137
- fun: fn as any,
137
+ func: fn as any,
138
138
  });
139
139
  }
140
140
  }
package/src/route.ts CHANGED
@@ -555,13 +555,13 @@ export class QueryRouter {
555
555
  hasRoute(path: string, key: string = '') {
556
556
  return this.routes.find((r) => r.path === path && r.key === key);
557
557
  }
558
- createRouteList(force: boolean = false) {
559
- const hasListRoute = this.hasRoute('route', 'list');
558
+ createRouteList(force: boolean = false, filter?: (route: Route) => boolean) {
559
+ const hasListRoute = this.hasRoute('router', 'list');
560
560
  if (!hasListRoute || force) {
561
- const listRoute = new Route('route', 'list', {
561
+ const listRoute = new Route('router', 'list', {
562
562
  description: '列出当前应用下的所有的路由信息',
563
563
  run: async (ctx: RouteContext) => {
564
- const list = this.getList();
564
+ const list = this.getList(filter);
565
565
  ctx.body = list;
566
566
  },
567
567
  });
@@ -179,14 +179,15 @@ export class ServerBase implements ServerType {
179
179
  }
180
180
  on(listener: OnListener) {
181
181
  this.listeners = [];
182
+ const randomId = Math.random().toString(36).substring(2, 15);
182
183
  if (typeof listener === 'function') {
183
- this.listeners.push({ func: listener });
184
+ this.listeners.push({ func: listener, id: 'all-' + randomId });
184
185
  return;
185
186
  }
186
187
  if (Array.isArray(listener)) {
187
188
  for (const item of listener) {
188
189
  if (typeof item === 'function') {
189
- this.listeners.push({ func: item });
190
+ this.listeners.push({ func: item, id: 'all-' + randomId });
190
191
  } else {
191
192
  this.listeners.push(item);
192
193
  }
@@ -197,22 +198,29 @@ export class ServerBase implements ServerType {
197
198
  }
198
199
  async onWebSocket({ ws, message, pathname, token, id }: OnWebSocketOptions) {
199
200
  const listener = this.listeners.find((item) => item.path === pathname && item.io);
200
- const data: any = parseIfJson(message);
201
201
 
202
202
  if (listener) {
203
203
  const end = (data: any) => {
204
204
  ws.send(JSON.stringify(data));
205
205
  }
206
+ let data: any = {};
207
+ const isJson = listener.json !== false;
208
+ if (isJson) {
209
+ data = parseIfJson(message);
210
+ }
206
211
  (listener.func as WebSocketListenerFun)({
207
212
  emitter: this.emitter,
208
213
  data,
209
214
  token,
215
+ message,
216
+ pathname,
210
217
  id,
211
218
  ws,
212
219
  }, { end });
213
220
  return;
214
221
  }
215
-
222
+ // 默认处理方案,直接调用 handle 方法
223
+ const data: any = parseIfJson(message);
216
224
  if (typeof data === 'string') {
217
225
  const cleanMessage = data.trim().replace(/^["']|["']$/g, '');
218
226
  if (cleanMessage === 'close') {
@@ -40,11 +40,17 @@ export interface ServerType {
40
40
  */
41
41
  on(listener: OnListener): void;
42
42
  onWebSocket({ ws, message, pathname, token, id }: OnWebSocketOptions): void;
43
- onWsClose(ws: WS): void;
44
- sendConnected(ws: WS): void;
43
+ onWsClose<T = {}>(ws: WS<T>): void;
44
+ sendConnected<T = {}>(ws: WS<T>): void;
45
45
  }
46
46
 
47
- export type OnWebSocketOptions = { ws: WS; message: string | Buffer; pathname: string, token?: string, id?: string }
47
+ export type OnWebSocketOptions<T = {}> = {
48
+ ws: WS<T>;
49
+ message: string | Buffer;
50
+ pathname: string,
51
+ token?: string,
52
+ id?: string,
53
+ }
48
54
  export type OnWebSocketFn = (options: OnWebSocketOptions) => Promise<void> | void;
49
55
  export type WS<T = {}> = {
50
56
  send: (data: any) => void;
@@ -65,15 +71,20 @@ export type Listener = {
65
71
  io?: boolean;
66
72
  path?: string;
67
73
  func: WebSocketListenerFun | HttpListenerFun;
74
+ /**
75
+ * @description 是否默认解析为 JSON,如果为 true,则 message 会被 JSON.parse 处理,默认是 true
76
+ */
77
+ json?: boolean,
68
78
  }
69
79
 
70
80
  export type WebSocketListenerFun = (req: WebSocketReq, res: WebSocketRes) => Promise<void> | void;
71
81
  export type HttpListenerFun = (req: RouterReq, res: RouterRes) => Promise<void> | void;
72
82
 
73
- export type WebSocketReq = {
83
+ export type WebSocketReq<T = {}, U = Record<string, any>> = {
74
84
  emitter?: EventEmitter;
75
- ws: WS;
76
- data: any;
85
+ ws: WS<T>;
86
+ data?: U;
87
+ message?: string | Buffer;
77
88
  pathname?: string;
78
89
  token?: string;
79
90
  id?: string;
@@ -1,3 +0,0 @@
1
- declare const parseXml: (req: any) => Promise<any>;
2
-
3
- export { parseXml };
@@ -1,35 +0,0 @@
1
- import xml2js from 'xml2js';
2
-
3
- const parseXml = async (req) => {
4
- return await new Promise((resolve) => {
5
- // 读取请求数据
6
- let data = '';
7
- req.setEncoding('utf8');
8
- // 监听data事件,接收数据片段
9
- req.on('data', (chunk) => {
10
- data += chunk;
11
- });
12
- // 当请求结束时处理数据
13
- req.on('end', () => {
14
- try {
15
- // 使用xml2js解析XML
16
- xml2js.parseString(data, function (err, result) {
17
- if (err) {
18
- console.error('XML解析错误:', err);
19
- resolve(null);
20
- }
21
- else {
22
- const jsonString = JSON.stringify(result);
23
- resolve(jsonString);
24
- }
25
- });
26
- }
27
- catch (error) {
28
- console.error('处理请求时出错:', error);
29
- resolve(null);
30
- }
31
- });
32
- });
33
- };
34
-
35
- export { parseXml };