@kevisual/router 0.2.2 → 0.2.4
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/dist/app.js +112 -123
- package/dist/commander.d.ts +11 -14
- package/dist/commander.js +96 -90
- package/dist/opencode.d.ts +11 -14
- package/dist/opencode.js +84 -84
- package/dist/router-browser.d.ts +14 -14
- package/dist/router-browser.js +85 -85
- package/dist/router-define.d.ts +12 -12
- package/dist/router-simple.d.ts +2 -3
- package/dist/router-simple.js +1 -1
- package/dist/router.d.ts +16 -22
- package/dist/router.js +108 -119
- package/dist/ws.d.ts +11 -14
- package/dist/ws.js +23 -34
- package/package.json +3 -4
- package/src/commander.ts +6 -4
package/dist/ws.d.ts
CHANGED
|
@@ -218,7 +218,7 @@ declare class Route<M extends SimpleObject = SimpleObject, U extends SimpleObjec
|
|
|
218
218
|
description?: string;
|
|
219
219
|
metadata?: M;
|
|
220
220
|
middleware?: RouteMiddleware[];
|
|
221
|
-
type?: string;
|
|
221
|
+
type?: string | undefined;
|
|
222
222
|
/**
|
|
223
223
|
* 是否开启debug,开启后会打印错误信息
|
|
224
224
|
*/
|
|
@@ -316,7 +316,7 @@ declare class QueryRouter<T extends SimpleObject = SimpleObject> implements thro
|
|
|
316
316
|
[key: string]: any;
|
|
317
317
|
}> | {
|
|
318
318
|
code: number;
|
|
319
|
-
body:
|
|
319
|
+
body: null;
|
|
320
320
|
message: string;
|
|
321
321
|
}>;
|
|
322
322
|
/**
|
|
@@ -334,9 +334,9 @@ declare class QueryRouter<T extends SimpleObject = SimpleObject> implements thro
|
|
|
334
334
|
}, ctx?: RouteContext & {
|
|
335
335
|
[key: string]: any;
|
|
336
336
|
}): Promise<{
|
|
337
|
-
code: number;
|
|
338
|
-
data:
|
|
339
|
-
message: string;
|
|
337
|
+
code: number | undefined;
|
|
338
|
+
data: string | number | Object | null | undefined;
|
|
339
|
+
message: string | undefined;
|
|
340
340
|
}>;
|
|
341
341
|
/**
|
|
342
342
|
* Router Run获取数据
|
|
@@ -352,9 +352,9 @@ declare class QueryRouter<T extends SimpleObject = SimpleObject> implements thro
|
|
|
352
352
|
}, ctx?: RouteContext<T> & {
|
|
353
353
|
[key: string]: any;
|
|
354
354
|
}): Promise<{
|
|
355
|
-
code: number;
|
|
356
|
-
data:
|
|
357
|
-
message: string;
|
|
355
|
+
code: number | undefined;
|
|
356
|
+
data: string | number | Object | null | undefined;
|
|
357
|
+
message: string | undefined;
|
|
358
358
|
}>;
|
|
359
359
|
/**
|
|
360
360
|
* 设置上下文
|
|
@@ -389,12 +389,12 @@ declare class QueryRouter<T extends SimpleObject = SimpleObject> implements thro
|
|
|
389
389
|
importRoutes(routes: Route[]): void;
|
|
390
390
|
importRouter(router: QueryRouter): void;
|
|
391
391
|
throw(...args: any[]): void;
|
|
392
|
-
hasRoute(path: string, key?: string): Route<SimpleObject, SimpleObject
|
|
392
|
+
hasRoute(path: string, key?: string): Route<SimpleObject, SimpleObject> | undefined;
|
|
393
393
|
findRoute(opts?: {
|
|
394
394
|
path?: string;
|
|
395
395
|
key?: string;
|
|
396
396
|
rid?: string;
|
|
397
|
-
}): Route<SimpleObject, SimpleObject
|
|
397
|
+
}): Route<SimpleObject, SimpleObject> | undefined;
|
|
398
398
|
createRouteList(opts?: {
|
|
399
399
|
force?: boolean;
|
|
400
400
|
filter?: (route: Route) => boolean;
|
|
@@ -838,10 +838,7 @@ declare class App<U = {}> extends QueryRouterServer<AppRouteContext<U>> {
|
|
|
838
838
|
listen(handle: any, backlog?: number, listeningListener?: () => void): void;
|
|
839
839
|
listen(handle: any, listeningListener?: () => void): void;
|
|
840
840
|
Route: typeof Route;
|
|
841
|
-
static handleRequest(req: IncomingMessage$1, res: ServerResponse$1): Promise<
|
|
842
|
-
cookies: Record<string, string>;
|
|
843
|
-
token: string;
|
|
844
|
-
}>;
|
|
841
|
+
static handleRequest(req: IncomingMessage$1, res: ServerResponse$1): Promise<any>;
|
|
845
842
|
onServerRequest(fn: (req: IncomingMessage$1, res: ServerResponse$1) => void): void;
|
|
846
843
|
}
|
|
847
844
|
|
package/dist/ws.js
CHANGED
|
@@ -32,7 +32,7 @@ var __toESM = (mod, isNodeMode, target) => {
|
|
|
32
32
|
var __commonJS = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports);
|
|
33
33
|
var __require = /* @__PURE__ */ createRequire(import.meta.url);
|
|
34
34
|
|
|
35
|
-
//
|
|
35
|
+
// node_modules/ws/lib/constants.js
|
|
36
36
|
var require_constants = __commonJS((exports, module) => {
|
|
37
37
|
var BINARY_TYPES = ["nodebuffer", "arraybuffer", "fragments"];
|
|
38
38
|
var hasBlob = typeof Blob !== "undefined";
|
|
@@ -40,7 +40,6 @@ var require_constants = __commonJS((exports, module) => {
|
|
|
40
40
|
BINARY_TYPES.push("blob");
|
|
41
41
|
module.exports = {
|
|
42
42
|
BINARY_TYPES,
|
|
43
|
-
CLOSE_TIMEOUT: 30000,
|
|
44
43
|
EMPTY_BUFFER: Buffer.alloc(0),
|
|
45
44
|
GUID: "258EAFA5-E914-47DA-95CA-C5AB0DC85B11",
|
|
46
45
|
hasBlob,
|
|
@@ -52,7 +51,7 @@ var require_constants = __commonJS((exports, module) => {
|
|
|
52
51
|
};
|
|
53
52
|
});
|
|
54
53
|
|
|
55
|
-
//
|
|
54
|
+
// node_modules/ws/lib/buffer-util.js
|
|
56
55
|
var require_buffer_util = __commonJS((exports, module) => {
|
|
57
56
|
var { EMPTY_BUFFER } = require_constants();
|
|
58
57
|
var FastBuffer = Buffer[Symbol.species];
|
|
@@ -113,7 +112,7 @@ var require_buffer_util = __commonJS((exports, module) => {
|
|
|
113
112
|
};
|
|
114
113
|
});
|
|
115
114
|
|
|
116
|
-
//
|
|
115
|
+
// node_modules/ws/lib/limiter.js
|
|
117
116
|
var require_limiter = __commonJS((exports, module) => {
|
|
118
117
|
var kDone = Symbol("kDone");
|
|
119
118
|
var kRun = Symbol("kRun");
|
|
@@ -145,7 +144,7 @@ var require_limiter = __commonJS((exports, module) => {
|
|
|
145
144
|
module.exports = Limiter;
|
|
146
145
|
});
|
|
147
146
|
|
|
148
|
-
//
|
|
147
|
+
// node_modules/ws/lib/permessage-deflate.js
|
|
149
148
|
var require_permessage_deflate = __commonJS((exports, module) => {
|
|
150
149
|
var zlib = __require("zlib");
|
|
151
150
|
var bufferUtil = require_buffer_util();
|
|
@@ -400,16 +399,12 @@ var require_permessage_deflate = __commonJS((exports, module) => {
|
|
|
400
399
|
}
|
|
401
400
|
function inflateOnError(err) {
|
|
402
401
|
this[kPerMessageDeflate]._inflate = null;
|
|
403
|
-
if (this[kError]) {
|
|
404
|
-
this[kCallback](this[kError]);
|
|
405
|
-
return;
|
|
406
|
-
}
|
|
407
402
|
err[kStatusCode] = 1007;
|
|
408
403
|
this[kCallback](err);
|
|
409
404
|
}
|
|
410
405
|
});
|
|
411
406
|
|
|
412
|
-
//
|
|
407
|
+
// node_modules/ws/lib/validation.js
|
|
413
408
|
var require_validation = __commonJS((exports, module) => {
|
|
414
409
|
var { isUtf8 } = __require("buffer");
|
|
415
410
|
var { hasBlob } = require_constants();
|
|
@@ -589,7 +584,7 @@ var require_validation = __commonJS((exports, module) => {
|
|
|
589
584
|
}
|
|
590
585
|
});
|
|
591
586
|
|
|
592
|
-
//
|
|
587
|
+
// node_modules/ws/lib/receiver.js
|
|
593
588
|
var require_receiver = __commonJS((exports, module) => {
|
|
594
589
|
var { Writable } = __require("stream");
|
|
595
590
|
var PerMessageDeflate = require_permessage_deflate();
|
|
@@ -970,7 +965,7 @@ var require_receiver = __commonJS((exports, module) => {
|
|
|
970
965
|
module.exports = Receiver;
|
|
971
966
|
});
|
|
972
967
|
|
|
973
|
-
//
|
|
968
|
+
// node_modules/ws/lib/sender.js
|
|
974
969
|
var require_sender = __commonJS((exports, module) => {
|
|
975
970
|
var { Duplex } = __require("stream");
|
|
976
971
|
var { randomFillSync } = __require("crypto");
|
|
@@ -1324,7 +1319,7 @@ var require_sender = __commonJS((exports, module) => {
|
|
|
1324
1319
|
}
|
|
1325
1320
|
});
|
|
1326
1321
|
|
|
1327
|
-
//
|
|
1322
|
+
// node_modules/ws/lib/event-target.js
|
|
1328
1323
|
var require_event_target = __commonJS((exports, module) => {
|
|
1329
1324
|
var { kForOnEventAttribute, kListener } = require_constants();
|
|
1330
1325
|
var kCode = Symbol("kCode");
|
|
@@ -1475,7 +1470,7 @@ var require_event_target = __commonJS((exports, module) => {
|
|
|
1475
1470
|
}
|
|
1476
1471
|
});
|
|
1477
1472
|
|
|
1478
|
-
//
|
|
1473
|
+
// node_modules/ws/lib/extension.js
|
|
1479
1474
|
var require_extension = __commonJS((exports, module) => {
|
|
1480
1475
|
var { tokenChars } = require_validation();
|
|
1481
1476
|
function push(dest, name, elem) {
|
|
@@ -1640,7 +1635,7 @@ var require_extension = __commonJS((exports, module) => {
|
|
|
1640
1635
|
module.exports = { format, parse };
|
|
1641
1636
|
});
|
|
1642
1637
|
|
|
1643
|
-
//
|
|
1638
|
+
// node_modules/ws/lib/websocket.js
|
|
1644
1639
|
var require_websocket = __commonJS((exports, module) => {
|
|
1645
1640
|
var EventEmitter = __require("events");
|
|
1646
1641
|
var https = __require("https");
|
|
@@ -1656,7 +1651,6 @@ var require_websocket = __commonJS((exports, module) => {
|
|
|
1656
1651
|
var { isBlob } = require_validation();
|
|
1657
1652
|
var {
|
|
1658
1653
|
BINARY_TYPES,
|
|
1659
|
-
CLOSE_TIMEOUT,
|
|
1660
1654
|
EMPTY_BUFFER,
|
|
1661
1655
|
GUID,
|
|
1662
1656
|
kForOnEventAttribute,
|
|
@@ -1670,6 +1664,7 @@ var require_websocket = __commonJS((exports, module) => {
|
|
|
1670
1664
|
} = require_event_target();
|
|
1671
1665
|
var { format, parse } = require_extension();
|
|
1672
1666
|
var { toBuffer } = require_buffer_util();
|
|
1667
|
+
var closeTimeout = 30 * 1000;
|
|
1673
1668
|
var kAborted = Symbol("kAborted");
|
|
1674
1669
|
var protocolVersions = [8, 13];
|
|
1675
1670
|
var readyStates = ["CONNECTING", "OPEN", "CLOSING", "CLOSED"];
|
|
@@ -1709,7 +1704,6 @@ var require_websocket = __commonJS((exports, module) => {
|
|
|
1709
1704
|
initAsClient(this, address, protocols, options);
|
|
1710
1705
|
} else {
|
|
1711
1706
|
this._autoPong = options.autoPong;
|
|
1712
|
-
this._closeTimeout = options.closeTimeout;
|
|
1713
1707
|
this._isServer = true;
|
|
1714
1708
|
}
|
|
1715
1709
|
}
|
|
@@ -2001,7 +1995,6 @@ var require_websocket = __commonJS((exports, module) => {
|
|
|
2001
1995
|
const opts = {
|
|
2002
1996
|
allowSynchronousEvents: true,
|
|
2003
1997
|
autoPong: true,
|
|
2004
|
-
closeTimeout: CLOSE_TIMEOUT,
|
|
2005
1998
|
protocolVersion: protocolVersions[1],
|
|
2006
1999
|
maxPayload: 100 * 1024 * 1024,
|
|
2007
2000
|
skipUTF8Validation: false,
|
|
@@ -2019,7 +2012,6 @@ var require_websocket = __commonJS((exports, module) => {
|
|
|
2019
2012
|
port: undefined
|
|
2020
2013
|
};
|
|
2021
2014
|
websocket._autoPong = opts.autoPong;
|
|
2022
|
-
websocket._closeTimeout = opts.closeTimeout;
|
|
2023
2015
|
if (!protocolVersions.includes(opts.protocolVersion)) {
|
|
2024
2016
|
throw new RangeError(`Unsupported protocol version: ${opts.protocolVersion} ` + `(supported versions: ${protocolVersions.join(", ")})`);
|
|
2025
2017
|
}
|
|
@@ -2358,7 +2350,7 @@ var require_websocket = __commonJS((exports, module) => {
|
|
|
2358
2350
|
}
|
|
2359
2351
|
}
|
|
2360
2352
|
function setCloseTimer(websocket) {
|
|
2361
|
-
websocket._closeTimer = setTimeout(websocket._socket.destroy.bind(websocket._socket),
|
|
2353
|
+
websocket._closeTimer = setTimeout(websocket._socket.destroy.bind(websocket._socket), closeTimeout);
|
|
2362
2354
|
}
|
|
2363
2355
|
function socketOnClose() {
|
|
2364
2356
|
const websocket = this[kWebSocket];
|
|
@@ -2366,8 +2358,8 @@ var require_websocket = __commonJS((exports, module) => {
|
|
|
2366
2358
|
this.removeListener("data", socketOnData);
|
|
2367
2359
|
this.removeListener("end", socketOnEnd);
|
|
2368
2360
|
websocket._readyState = WebSocket.CLOSING;
|
|
2369
|
-
|
|
2370
|
-
|
|
2361
|
+
let chunk;
|
|
2362
|
+
if (!this._readableState.endEmitted && !websocket._closeFrameReceived && !websocket._receiver._writableState.errorEmitted && (chunk = websocket._socket.read()) !== null) {
|
|
2371
2363
|
websocket._receiver.write(chunk);
|
|
2372
2364
|
}
|
|
2373
2365
|
websocket._receiver.end();
|
|
@@ -2402,7 +2394,7 @@ var require_websocket = __commonJS((exports, module) => {
|
|
|
2402
2394
|
}
|
|
2403
2395
|
});
|
|
2404
2396
|
|
|
2405
|
-
//
|
|
2397
|
+
// node_modules/ws/lib/stream.js
|
|
2406
2398
|
var require_stream = __commonJS((exports, module) => {
|
|
2407
2399
|
var WebSocket = require_websocket();
|
|
2408
2400
|
var { Duplex } = __require("stream");
|
|
@@ -2505,7 +2497,7 @@ var require_stream = __commonJS((exports, module) => {
|
|
|
2505
2497
|
module.exports = createWebSocketStream;
|
|
2506
2498
|
});
|
|
2507
2499
|
|
|
2508
|
-
//
|
|
2500
|
+
// node_modules/ws/lib/subprotocol.js
|
|
2509
2501
|
var require_subprotocol = __commonJS((exports, module) => {
|
|
2510
2502
|
var { tokenChars } = require_validation();
|
|
2511
2503
|
function parse(header) {
|
|
@@ -2550,7 +2542,7 @@ var require_subprotocol = __commonJS((exports, module) => {
|
|
|
2550
2542
|
module.exports = { parse };
|
|
2551
2543
|
});
|
|
2552
2544
|
|
|
2553
|
-
//
|
|
2545
|
+
// node_modules/ws/lib/websocket-server.js
|
|
2554
2546
|
var require_websocket_server = __commonJS((exports, module) => {
|
|
2555
2547
|
var EventEmitter = __require("events");
|
|
2556
2548
|
var http = __require("http");
|
|
@@ -2560,7 +2552,7 @@ var require_websocket_server = __commonJS((exports, module) => {
|
|
|
2560
2552
|
var PerMessageDeflate = require_permessage_deflate();
|
|
2561
2553
|
var subprotocol = require_subprotocol();
|
|
2562
2554
|
var WebSocket = require_websocket();
|
|
2563
|
-
var {
|
|
2555
|
+
var { GUID, kWebSocket } = require_constants();
|
|
2564
2556
|
var keyRegex = /^[+/0-9A-Za-z]{22}==$/;
|
|
2565
2557
|
var RUNNING = 0;
|
|
2566
2558
|
var CLOSING = 1;
|
|
@@ -2577,7 +2569,6 @@ var require_websocket_server = __commonJS((exports, module) => {
|
|
|
2577
2569
|
perMessageDeflate: false,
|
|
2578
2570
|
handleProtocols: null,
|
|
2579
2571
|
clientTracking: true,
|
|
2580
|
-
closeTimeout: CLOSE_TIMEOUT,
|
|
2581
2572
|
verifyClient: null,
|
|
2582
2573
|
noServer: false,
|
|
2583
2574
|
backlog: null,
|
|
@@ -2698,11 +2689,9 @@ var require_websocket_server = __commonJS((exports, module) => {
|
|
|
2698
2689
|
abortHandshakeOrEmitwsClientError(this, req, socket, 400, message);
|
|
2699
2690
|
return;
|
|
2700
2691
|
}
|
|
2701
|
-
if (version !==
|
|
2692
|
+
if (version !== 8 && version !== 13) {
|
|
2702
2693
|
const message = "Missing or invalid Sec-WebSocket-Version header";
|
|
2703
|
-
abortHandshakeOrEmitwsClientError(this, req, socket, 400, message
|
|
2704
|
-
"Sec-WebSocket-Version": "13, 8"
|
|
2705
|
-
});
|
|
2694
|
+
abortHandshakeOrEmitwsClientError(this, req, socket, 400, message);
|
|
2706
2695
|
return;
|
|
2707
2696
|
}
|
|
2708
2697
|
if (!this.shouldHandle(req)) {
|
|
@@ -2841,18 +2830,18 @@ var require_websocket_server = __commonJS((exports, module) => {
|
|
|
2841
2830
|
\r
|
|
2842
2831
|
` + message);
|
|
2843
2832
|
}
|
|
2844
|
-
function abortHandshakeOrEmitwsClientError(server, req, socket, code, message
|
|
2833
|
+
function abortHandshakeOrEmitwsClientError(server, req, socket, code, message) {
|
|
2845
2834
|
if (server.listenerCount("wsClientError")) {
|
|
2846
2835
|
const err = new Error(message);
|
|
2847
2836
|
Error.captureStackTrace(err, abortHandshakeOrEmitwsClientError);
|
|
2848
2837
|
server.emit("wsClientError", err, socket, req);
|
|
2849
2838
|
} else {
|
|
2850
|
-
abortHandshake(socket, code, message
|
|
2839
|
+
abortHandshake(socket, code, message);
|
|
2851
2840
|
}
|
|
2852
2841
|
}
|
|
2853
2842
|
});
|
|
2854
2843
|
|
|
2855
|
-
//
|
|
2844
|
+
// node_modules/ws/wrapper.mjs
|
|
2856
2845
|
var import_stream = __toESM(require_stream(), 1);
|
|
2857
2846
|
var import_receiver = __toESM(require_receiver(), 1);
|
|
2858
2847
|
var import_sender = __toESM(require_sender(), 1);
|
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.2.
|
|
4
|
+
"version": "0.2.4",
|
|
5
5
|
"description": "",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"main": "./dist/router.js",
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
"@kevisual/query": "^0.0.55",
|
|
31
31
|
"@kevisual/remote-app": "^0.0.7",
|
|
32
32
|
"@kevisual/use-config": "^1.0.30",
|
|
33
|
-
"@opencode-ai/plugin": "^1.3.
|
|
33
|
+
"@opencode-ai/plugin": "^1.3.2",
|
|
34
34
|
"@types/bun": "^1.3.11",
|
|
35
35
|
"@types/crypto-js": "^4.2.2",
|
|
36
36
|
"@types/node": "^25.5.0",
|
|
@@ -42,11 +42,10 @@
|
|
|
42
42
|
"es-toolkit": "^1.45.1",
|
|
43
43
|
"eventemitter3": "^5.0.4",
|
|
44
44
|
"fast-glob": "^3.3.3",
|
|
45
|
-
"hono": "^4.12.8",
|
|
46
45
|
"nanoid": "^5.1.7",
|
|
47
46
|
"path-to-regexp": "^8.3.0",
|
|
48
47
|
"send": "^1.2.1",
|
|
49
|
-
"typescript": "^
|
|
48
|
+
"typescript": "^6.0.2",
|
|
50
49
|
"ws": "npm:@kevisual/ws",
|
|
51
50
|
"xml2js": "^0.6.2"
|
|
52
51
|
},
|
package/src/commander.ts
CHANGED
|
@@ -18,7 +18,7 @@ export const parseArgs = (args: string) => {
|
|
|
18
18
|
} catch {
|
|
19
19
|
// 尝试解析 a=b b=c 格式
|
|
20
20
|
const result: Record<string, string> = {};
|
|
21
|
-
const pairs = args.match(/(\S+?)=(
|
|
21
|
+
const pairs = args.match(/(\S+?)=(.*?)(?=\s|$)/g);
|
|
22
22
|
if (pairs && pairs.length > 0) {
|
|
23
23
|
for (const pair of pairs) {
|
|
24
24
|
const idx = pair.indexOf('=');
|
|
@@ -27,7 +27,8 @@ export const parseArgs = (args: string) => {
|
|
|
27
27
|
let value: string | number | boolean = raw;
|
|
28
28
|
if (raw === 'true') value = true;
|
|
29
29
|
else if (raw === 'false') value = false;
|
|
30
|
-
else if (raw
|
|
30
|
+
else if (raw === '') value = true;
|
|
31
|
+
else if (!isNaN(Number(raw))) value = Number(raw);
|
|
31
32
|
result[key] = value as string;
|
|
32
33
|
}
|
|
33
34
|
return result;
|
|
@@ -72,7 +73,6 @@ export const createCommand = (opts: { app: any, program: Command }) => {
|
|
|
72
73
|
const app = opts.app as App;
|
|
73
74
|
const routes = app.routes;
|
|
74
75
|
|
|
75
|
-
|
|
76
76
|
const groupRoutes = groupByPath(routes);
|
|
77
77
|
for (const path in groupRoutes) {
|
|
78
78
|
const routeList = groupRoutes[path];
|
|
@@ -174,7 +174,7 @@ const createCliList = (app: App) => {
|
|
|
174
174
|
q: z.string().optional().describe('查询关键词,支持模糊匹配命令'),
|
|
175
175
|
path: z.string().optional().describe('按路径前缀过滤,如 user、admin'),
|
|
176
176
|
tags: z.string().optional().describe('按标签过滤,多个标签用逗号分隔'),
|
|
177
|
-
sort: z.enum(['key', 'path', '
|
|
177
|
+
sort: z.enum(['key', 'path', '-key', '-path']).optional().describe('排序方式'),
|
|
178
178
|
limit: z.number().optional().describe('限制返回数量'),
|
|
179
179
|
offset: z.number().optional().describe('偏移量,用于分页'),
|
|
180
180
|
format: z.enum(['table', 'simple', 'json']).optional().describe('输出格式'),
|
|
@@ -222,6 +222,8 @@ const createCliList = (app: App) => {
|
|
|
222
222
|
routes.sort((a, b) => {
|
|
223
223
|
if (sort === 'path') return a.path.localeCompare(b.path);
|
|
224
224
|
if (sort === 'key') return a.key.localeCompare(b.key);
|
|
225
|
+
if (sort === '-path') return b.path.localeCompare(a.path);
|
|
226
|
+
if (sort === '-key') return b.key.localeCompare(a.key);
|
|
225
227
|
return a.key.localeCompare(b.key); // name 默认为 key
|
|
226
228
|
});
|
|
227
229
|
}
|