@kevisual/router 0.0.51 → 0.0.52
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/router-browser.js +1 -1
- package/dist/router.d.ts +6 -3
- package/dist/router.js +363 -6
- package/package.json +6 -6
- package/src/route.ts +1 -1
- package/src/server/server-base.ts +5 -1
- package/src/server/server-bun.ts +1 -0
- package/src/server/server-type.ts +1 -1
- package/src/server/ws-server.ts +2 -1
package/dist/router-browser.js
CHANGED
package/dist/router.d.ts
CHANGED
|
@@ -2,8 +2,7 @@ import * as http from 'node:http';
|
|
|
2
2
|
import http__default, { IncomingMessage, ServerResponse } from 'node:http';
|
|
3
3
|
import https from 'node:https';
|
|
4
4
|
import http2 from 'node:http2';
|
|
5
|
-
import EventEmitter from '
|
|
6
|
-
import { EventEmitter as EventEmitter$1 } from 'events';
|
|
5
|
+
import { EventEmitter } from 'eventemitter3';
|
|
7
6
|
import { WebSocketServer } from 'ws';
|
|
8
7
|
import { z } from 'zod';
|
|
9
8
|
import { IncomingMessage as IncomingMessage$1, ServerResponse as ServerResponse$1 } from 'http';
|
|
@@ -626,7 +625,7 @@ declare class ServerBase implements ServerType {
|
|
|
626
625
|
_callback: any;
|
|
627
626
|
cors: Cors$1;
|
|
628
627
|
listeners: Listener[];
|
|
629
|
-
emitter: EventEmitter
|
|
628
|
+
emitter: EventEmitter<string | symbol, any>;
|
|
630
629
|
showConnected: boolean;
|
|
631
630
|
constructor(opts?: ServerOpts);
|
|
632
631
|
listen(port: number, hostname?: string, backlog?: number, listeningListener?: () => void): void;
|
|
@@ -654,6 +653,10 @@ declare class ServerBase implements ServerType {
|
|
|
654
653
|
createCallback(): (req: IncomingMessage, res: ServerResponse) => Promise<void>;
|
|
655
654
|
on(listener: OnListener): void;
|
|
656
655
|
onWebSocket({ ws, message, pathname, token, id }: OnWebSocketOptions): Promise<void>;
|
|
656
|
+
/**
|
|
657
|
+
* 根据emitter提醒关闭ws连接
|
|
658
|
+
* @param ws
|
|
659
|
+
*/
|
|
657
660
|
onWsClose(ws: WS): Promise<void>;
|
|
658
661
|
sendConnected(ws: WS): Promise<void>;
|
|
659
662
|
}
|
package/dist/router.js
CHANGED
|
@@ -3,7 +3,7 @@ import require$$2 from 'node:http';
|
|
|
3
3
|
import require$$1$1 from 'node:https';
|
|
4
4
|
import http2 from 'node:http2';
|
|
5
5
|
import url from 'node:url';
|
|
6
|
-
import require$$0$3
|
|
6
|
+
import require$$0$3 from 'node:events';
|
|
7
7
|
import require$$3 from 'node:net';
|
|
8
8
|
import require$$4 from 'node:tls';
|
|
9
9
|
import require$$0$2 from 'node:stream';
|
|
@@ -649,7 +649,7 @@ class QueryRouter {
|
|
|
649
649
|
description: '列出当前应用下的所有的路由信息',
|
|
650
650
|
run: async (ctx) => {
|
|
651
651
|
const list = this.getList(filter);
|
|
652
|
-
ctx.body = list;
|
|
652
|
+
ctx.body = { list };
|
|
653
653
|
},
|
|
654
654
|
});
|
|
655
655
|
this.add(listRoute);
|
|
@@ -1174,6 +1174,360 @@ const parseIfJson = (input) => {
|
|
|
1174
1174
|
return str;
|
|
1175
1175
|
};
|
|
1176
1176
|
|
|
1177
|
+
function getDefaultExportFromCjs (x) {
|
|
1178
|
+
return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
|
|
1179
|
+
}
|
|
1180
|
+
|
|
1181
|
+
var eventemitter3 = {exports: {}};
|
|
1182
|
+
|
|
1183
|
+
var hasRequiredEventemitter3;
|
|
1184
|
+
|
|
1185
|
+
function requireEventemitter3 () {
|
|
1186
|
+
if (hasRequiredEventemitter3) return eventemitter3.exports;
|
|
1187
|
+
hasRequiredEventemitter3 = 1;
|
|
1188
|
+
(function (module) {
|
|
1189
|
+
|
|
1190
|
+
var has = Object.prototype.hasOwnProperty
|
|
1191
|
+
, prefix = '~';
|
|
1192
|
+
|
|
1193
|
+
/**
|
|
1194
|
+
* Constructor to create a storage for our `EE` objects.
|
|
1195
|
+
* An `Events` instance is a plain object whose properties are event names.
|
|
1196
|
+
*
|
|
1197
|
+
* @constructor
|
|
1198
|
+
* @private
|
|
1199
|
+
*/
|
|
1200
|
+
function Events() {}
|
|
1201
|
+
|
|
1202
|
+
//
|
|
1203
|
+
// We try to not inherit from `Object.prototype`. In some engines creating an
|
|
1204
|
+
// instance in this way is faster than calling `Object.create(null)` directly.
|
|
1205
|
+
// If `Object.create(null)` is not supported we prefix the event names with a
|
|
1206
|
+
// character to make sure that the built-in object properties are not
|
|
1207
|
+
// overridden or used as an attack vector.
|
|
1208
|
+
//
|
|
1209
|
+
if (Object.create) {
|
|
1210
|
+
Events.prototype = Object.create(null);
|
|
1211
|
+
|
|
1212
|
+
//
|
|
1213
|
+
// This hack is needed because the `__proto__` property is still inherited in
|
|
1214
|
+
// some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.
|
|
1215
|
+
//
|
|
1216
|
+
if (!new Events().__proto__) prefix = false;
|
|
1217
|
+
}
|
|
1218
|
+
|
|
1219
|
+
/**
|
|
1220
|
+
* Representation of a single event listener.
|
|
1221
|
+
*
|
|
1222
|
+
* @param {Function} fn The listener function.
|
|
1223
|
+
* @param {*} context The context to invoke the listener with.
|
|
1224
|
+
* @param {Boolean} [once=false] Specify if the listener is a one-time listener.
|
|
1225
|
+
* @constructor
|
|
1226
|
+
* @private
|
|
1227
|
+
*/
|
|
1228
|
+
function EE(fn, context, once) {
|
|
1229
|
+
this.fn = fn;
|
|
1230
|
+
this.context = context;
|
|
1231
|
+
this.once = once || false;
|
|
1232
|
+
}
|
|
1233
|
+
|
|
1234
|
+
/**
|
|
1235
|
+
* Add a listener for a given event.
|
|
1236
|
+
*
|
|
1237
|
+
* @param {EventEmitter} emitter Reference to the `EventEmitter` instance.
|
|
1238
|
+
* @param {(String|Symbol)} event The event name.
|
|
1239
|
+
* @param {Function} fn The listener function.
|
|
1240
|
+
* @param {*} context The context to invoke the listener with.
|
|
1241
|
+
* @param {Boolean} once Specify if the listener is a one-time listener.
|
|
1242
|
+
* @returns {EventEmitter}
|
|
1243
|
+
* @private
|
|
1244
|
+
*/
|
|
1245
|
+
function addListener(emitter, event, fn, context, once) {
|
|
1246
|
+
if (typeof fn !== 'function') {
|
|
1247
|
+
throw new TypeError('The listener must be a function');
|
|
1248
|
+
}
|
|
1249
|
+
|
|
1250
|
+
var listener = new EE(fn, context || emitter, once)
|
|
1251
|
+
, evt = prefix ? prefix + event : event;
|
|
1252
|
+
|
|
1253
|
+
if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;
|
|
1254
|
+
else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);
|
|
1255
|
+
else emitter._events[evt] = [emitter._events[evt], listener];
|
|
1256
|
+
|
|
1257
|
+
return emitter;
|
|
1258
|
+
}
|
|
1259
|
+
|
|
1260
|
+
/**
|
|
1261
|
+
* Clear event by name.
|
|
1262
|
+
*
|
|
1263
|
+
* @param {EventEmitter} emitter Reference to the `EventEmitter` instance.
|
|
1264
|
+
* @param {(String|Symbol)} evt The Event name.
|
|
1265
|
+
* @private
|
|
1266
|
+
*/
|
|
1267
|
+
function clearEvent(emitter, evt) {
|
|
1268
|
+
if (--emitter._eventsCount === 0) emitter._events = new Events();
|
|
1269
|
+
else delete emitter._events[evt];
|
|
1270
|
+
}
|
|
1271
|
+
|
|
1272
|
+
/**
|
|
1273
|
+
* Minimal `EventEmitter` interface that is molded against the Node.js
|
|
1274
|
+
* `EventEmitter` interface.
|
|
1275
|
+
*
|
|
1276
|
+
* @constructor
|
|
1277
|
+
* @public
|
|
1278
|
+
*/
|
|
1279
|
+
function EventEmitter() {
|
|
1280
|
+
this._events = new Events();
|
|
1281
|
+
this._eventsCount = 0;
|
|
1282
|
+
}
|
|
1283
|
+
|
|
1284
|
+
/**
|
|
1285
|
+
* Return an array listing the events for which the emitter has registered
|
|
1286
|
+
* listeners.
|
|
1287
|
+
*
|
|
1288
|
+
* @returns {Array}
|
|
1289
|
+
* @public
|
|
1290
|
+
*/
|
|
1291
|
+
EventEmitter.prototype.eventNames = function eventNames() {
|
|
1292
|
+
var names = []
|
|
1293
|
+
, events
|
|
1294
|
+
, name;
|
|
1295
|
+
|
|
1296
|
+
if (this._eventsCount === 0) return names;
|
|
1297
|
+
|
|
1298
|
+
for (name in (events = this._events)) {
|
|
1299
|
+
if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);
|
|
1300
|
+
}
|
|
1301
|
+
|
|
1302
|
+
if (Object.getOwnPropertySymbols) {
|
|
1303
|
+
return names.concat(Object.getOwnPropertySymbols(events));
|
|
1304
|
+
}
|
|
1305
|
+
|
|
1306
|
+
return names;
|
|
1307
|
+
};
|
|
1308
|
+
|
|
1309
|
+
/**
|
|
1310
|
+
* Return the listeners registered for a given event.
|
|
1311
|
+
*
|
|
1312
|
+
* @param {(String|Symbol)} event The event name.
|
|
1313
|
+
* @returns {Array} The registered listeners.
|
|
1314
|
+
* @public
|
|
1315
|
+
*/
|
|
1316
|
+
EventEmitter.prototype.listeners = function listeners(event) {
|
|
1317
|
+
var evt = prefix ? prefix + event : event
|
|
1318
|
+
, handlers = this._events[evt];
|
|
1319
|
+
|
|
1320
|
+
if (!handlers) return [];
|
|
1321
|
+
if (handlers.fn) return [handlers.fn];
|
|
1322
|
+
|
|
1323
|
+
for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {
|
|
1324
|
+
ee[i] = handlers[i].fn;
|
|
1325
|
+
}
|
|
1326
|
+
|
|
1327
|
+
return ee;
|
|
1328
|
+
};
|
|
1329
|
+
|
|
1330
|
+
/**
|
|
1331
|
+
* Return the number of listeners listening to a given event.
|
|
1332
|
+
*
|
|
1333
|
+
* @param {(String|Symbol)} event The event name.
|
|
1334
|
+
* @returns {Number} The number of listeners.
|
|
1335
|
+
* @public
|
|
1336
|
+
*/
|
|
1337
|
+
EventEmitter.prototype.listenerCount = function listenerCount(event) {
|
|
1338
|
+
var evt = prefix ? prefix + event : event
|
|
1339
|
+
, listeners = this._events[evt];
|
|
1340
|
+
|
|
1341
|
+
if (!listeners) return 0;
|
|
1342
|
+
if (listeners.fn) return 1;
|
|
1343
|
+
return listeners.length;
|
|
1344
|
+
};
|
|
1345
|
+
|
|
1346
|
+
/**
|
|
1347
|
+
* Calls each of the listeners registered for a given event.
|
|
1348
|
+
*
|
|
1349
|
+
* @param {(String|Symbol)} event The event name.
|
|
1350
|
+
* @returns {Boolean} `true` if the event had listeners, else `false`.
|
|
1351
|
+
* @public
|
|
1352
|
+
*/
|
|
1353
|
+
EventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {
|
|
1354
|
+
var evt = prefix ? prefix + event : event;
|
|
1355
|
+
|
|
1356
|
+
if (!this._events[evt]) return false;
|
|
1357
|
+
|
|
1358
|
+
var listeners = this._events[evt]
|
|
1359
|
+
, len = arguments.length
|
|
1360
|
+
, args
|
|
1361
|
+
, i;
|
|
1362
|
+
|
|
1363
|
+
if (listeners.fn) {
|
|
1364
|
+
if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);
|
|
1365
|
+
|
|
1366
|
+
switch (len) {
|
|
1367
|
+
case 1: return listeners.fn.call(listeners.context), true;
|
|
1368
|
+
case 2: return listeners.fn.call(listeners.context, a1), true;
|
|
1369
|
+
case 3: return listeners.fn.call(listeners.context, a1, a2), true;
|
|
1370
|
+
case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;
|
|
1371
|
+
case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;
|
|
1372
|
+
case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;
|
|
1373
|
+
}
|
|
1374
|
+
|
|
1375
|
+
for (i = 1, args = new Array(len -1); i < len; i++) {
|
|
1376
|
+
args[i - 1] = arguments[i];
|
|
1377
|
+
}
|
|
1378
|
+
|
|
1379
|
+
listeners.fn.apply(listeners.context, args);
|
|
1380
|
+
} else {
|
|
1381
|
+
var length = listeners.length
|
|
1382
|
+
, j;
|
|
1383
|
+
|
|
1384
|
+
for (i = 0; i < length; i++) {
|
|
1385
|
+
if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);
|
|
1386
|
+
|
|
1387
|
+
switch (len) {
|
|
1388
|
+
case 1: listeners[i].fn.call(listeners[i].context); break;
|
|
1389
|
+
case 2: listeners[i].fn.call(listeners[i].context, a1); break;
|
|
1390
|
+
case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;
|
|
1391
|
+
case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;
|
|
1392
|
+
default:
|
|
1393
|
+
if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {
|
|
1394
|
+
args[j - 1] = arguments[j];
|
|
1395
|
+
}
|
|
1396
|
+
|
|
1397
|
+
listeners[i].fn.apply(listeners[i].context, args);
|
|
1398
|
+
}
|
|
1399
|
+
}
|
|
1400
|
+
}
|
|
1401
|
+
|
|
1402
|
+
return true;
|
|
1403
|
+
};
|
|
1404
|
+
|
|
1405
|
+
/**
|
|
1406
|
+
* Add a listener for a given event.
|
|
1407
|
+
*
|
|
1408
|
+
* @param {(String|Symbol)} event The event name.
|
|
1409
|
+
* @param {Function} fn The listener function.
|
|
1410
|
+
* @param {*} [context=this] The context to invoke the listener with.
|
|
1411
|
+
* @returns {EventEmitter} `this`.
|
|
1412
|
+
* @public
|
|
1413
|
+
*/
|
|
1414
|
+
EventEmitter.prototype.on = function on(event, fn, context) {
|
|
1415
|
+
return addListener(this, event, fn, context, false);
|
|
1416
|
+
};
|
|
1417
|
+
|
|
1418
|
+
/**
|
|
1419
|
+
* Add a one-time listener for a given event.
|
|
1420
|
+
*
|
|
1421
|
+
* @param {(String|Symbol)} event The event name.
|
|
1422
|
+
* @param {Function} fn The listener function.
|
|
1423
|
+
* @param {*} [context=this] The context to invoke the listener with.
|
|
1424
|
+
* @returns {EventEmitter} `this`.
|
|
1425
|
+
* @public
|
|
1426
|
+
*/
|
|
1427
|
+
EventEmitter.prototype.once = function once(event, fn, context) {
|
|
1428
|
+
return addListener(this, event, fn, context, true);
|
|
1429
|
+
};
|
|
1430
|
+
|
|
1431
|
+
/**
|
|
1432
|
+
* Remove the listeners of a given event.
|
|
1433
|
+
*
|
|
1434
|
+
* @param {(String|Symbol)} event The event name.
|
|
1435
|
+
* @param {Function} fn Only remove the listeners that match this function.
|
|
1436
|
+
* @param {*} context Only remove the listeners that have this context.
|
|
1437
|
+
* @param {Boolean} once Only remove one-time listeners.
|
|
1438
|
+
* @returns {EventEmitter} `this`.
|
|
1439
|
+
* @public
|
|
1440
|
+
*/
|
|
1441
|
+
EventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {
|
|
1442
|
+
var evt = prefix ? prefix + event : event;
|
|
1443
|
+
|
|
1444
|
+
if (!this._events[evt]) return this;
|
|
1445
|
+
if (!fn) {
|
|
1446
|
+
clearEvent(this, evt);
|
|
1447
|
+
return this;
|
|
1448
|
+
}
|
|
1449
|
+
|
|
1450
|
+
var listeners = this._events[evt];
|
|
1451
|
+
|
|
1452
|
+
if (listeners.fn) {
|
|
1453
|
+
if (
|
|
1454
|
+
listeners.fn === fn &&
|
|
1455
|
+
(!once || listeners.once) &&
|
|
1456
|
+
(!context || listeners.context === context)
|
|
1457
|
+
) {
|
|
1458
|
+
clearEvent(this, evt);
|
|
1459
|
+
}
|
|
1460
|
+
} else {
|
|
1461
|
+
for (var i = 0, events = [], length = listeners.length; i < length; i++) {
|
|
1462
|
+
if (
|
|
1463
|
+
listeners[i].fn !== fn ||
|
|
1464
|
+
(once && !listeners[i].once) ||
|
|
1465
|
+
(context && listeners[i].context !== context)
|
|
1466
|
+
) {
|
|
1467
|
+
events.push(listeners[i]);
|
|
1468
|
+
}
|
|
1469
|
+
}
|
|
1470
|
+
|
|
1471
|
+
//
|
|
1472
|
+
// Reset the array, or remove it completely if we have no more listeners.
|
|
1473
|
+
//
|
|
1474
|
+
if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;
|
|
1475
|
+
else clearEvent(this, evt);
|
|
1476
|
+
}
|
|
1477
|
+
|
|
1478
|
+
return this;
|
|
1479
|
+
};
|
|
1480
|
+
|
|
1481
|
+
/**
|
|
1482
|
+
* Remove all listeners, or those of the specified event.
|
|
1483
|
+
*
|
|
1484
|
+
* @param {(String|Symbol)} [event] The event name.
|
|
1485
|
+
* @returns {EventEmitter} `this`.
|
|
1486
|
+
* @public
|
|
1487
|
+
*/
|
|
1488
|
+
EventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {
|
|
1489
|
+
var evt;
|
|
1490
|
+
|
|
1491
|
+
if (event) {
|
|
1492
|
+
evt = prefix ? prefix + event : event;
|
|
1493
|
+
if (this._events[evt]) clearEvent(this, evt);
|
|
1494
|
+
} else {
|
|
1495
|
+
this._events = new Events();
|
|
1496
|
+
this._eventsCount = 0;
|
|
1497
|
+
}
|
|
1498
|
+
|
|
1499
|
+
return this;
|
|
1500
|
+
};
|
|
1501
|
+
|
|
1502
|
+
//
|
|
1503
|
+
// Alias methods names because people roll like that.
|
|
1504
|
+
//
|
|
1505
|
+
EventEmitter.prototype.off = EventEmitter.prototype.removeListener;
|
|
1506
|
+
EventEmitter.prototype.addListener = EventEmitter.prototype.on;
|
|
1507
|
+
|
|
1508
|
+
//
|
|
1509
|
+
// Expose the prefix.
|
|
1510
|
+
//
|
|
1511
|
+
EventEmitter.prefixed = prefix;
|
|
1512
|
+
|
|
1513
|
+
//
|
|
1514
|
+
// Allow `EventEmitter` to be imported as module namespace.
|
|
1515
|
+
//
|
|
1516
|
+
EventEmitter.EventEmitter = EventEmitter;
|
|
1517
|
+
|
|
1518
|
+
//
|
|
1519
|
+
// Expose the module.
|
|
1520
|
+
//
|
|
1521
|
+
{
|
|
1522
|
+
module.exports = EventEmitter;
|
|
1523
|
+
}
|
|
1524
|
+
} (eventemitter3));
|
|
1525
|
+
return eventemitter3.exports;
|
|
1526
|
+
}
|
|
1527
|
+
|
|
1528
|
+
var eventemitter3Exports = requireEventemitter3();
|
|
1529
|
+
var EventEmitter = /*@__PURE__*/getDefaultExportFromCjs(eventemitter3Exports);
|
|
1530
|
+
|
|
1177
1531
|
// 实现函数
|
|
1178
1532
|
function createHandleCtx(req, res) {
|
|
1179
1533
|
// 用于存储所有的 Set-Cookie 字符串
|
|
@@ -1419,6 +1773,10 @@ class ServerBase {
|
|
|
1419
1773
|
end({ code: 500, message: `${type} server is error` });
|
|
1420
1774
|
}
|
|
1421
1775
|
}
|
|
1776
|
+
/**
|
|
1777
|
+
* 根据emitter提醒关闭ws连接
|
|
1778
|
+
* @param ws
|
|
1779
|
+
*/
|
|
1422
1780
|
async onWsClose(ws) {
|
|
1423
1781
|
const id = ws?.data?.id || '';
|
|
1424
1782
|
if (id) {
|
|
@@ -1436,10 +1794,6 @@ class ServerBase {
|
|
|
1436
1794
|
}
|
|
1437
1795
|
}
|
|
1438
1796
|
|
|
1439
|
-
function getDefaultExportFromCjs (x) {
|
|
1440
|
-
return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
|
|
1441
|
-
}
|
|
1442
|
-
|
|
1443
1797
|
var constants;
|
|
1444
1798
|
var hasRequiredConstants;
|
|
1445
1799
|
|
|
@@ -6390,6 +6744,8 @@ class WsServerBase {
|
|
|
6390
6744
|
});
|
|
6391
6745
|
this.server.sendConnected(ws);
|
|
6392
6746
|
this.wss.on('close', () => {
|
|
6747
|
+
// @ts-ignore
|
|
6748
|
+
ws?.data?.close?.();
|
|
6393
6749
|
this.server.onWsClose(ws);
|
|
6394
6750
|
});
|
|
6395
6751
|
});
|
|
@@ -6731,6 +7087,7 @@ class BunServer extends ServerBase {
|
|
|
6731
7087
|
},
|
|
6732
7088
|
close: (ws) => {
|
|
6733
7089
|
// WebSocket 连接关闭
|
|
7090
|
+
ws?.data?.close?.();
|
|
6734
7091
|
this.onWsClose(ws);
|
|
6735
7092
|
},
|
|
6736
7093
|
},
|
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.
|
|
4
|
+
"version": "0.0.52",
|
|
5
5
|
"description": "",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"main": "./dist/router.js",
|
|
@@ -32,9 +32,8 @@
|
|
|
32
32
|
"@types/bun": "^1.3.5",
|
|
33
33
|
"@types/node": "^25.0.3",
|
|
34
34
|
"@types/send": "^1.2.1",
|
|
35
|
-
"@types/ws": "^8.18.1",
|
|
36
35
|
"@types/xml2js": "^0.4.14",
|
|
37
|
-
"
|
|
36
|
+
"@types/ws": "^8.18.1",
|
|
38
37
|
"nanoid": "^5.1.6",
|
|
39
38
|
"rollup": "^4.54.0",
|
|
40
39
|
"rollup-plugin-dts": "^6.3.0",
|
|
@@ -43,15 +42,16 @@
|
|
|
43
42
|
"tslib": "^2.8.1",
|
|
44
43
|
"tsx": "^4.21.0",
|
|
45
44
|
"typescript": "^5.9.3",
|
|
46
|
-
"ws": "npm:@kevisual/ws",
|
|
47
45
|
"xml2js": "^0.6.2",
|
|
48
|
-
"zod": "^4.2.1"
|
|
46
|
+
"zod": "^4.2.1",
|
|
47
|
+
"ws": "npm:@kevisual/ws"
|
|
49
48
|
},
|
|
50
49
|
"repository": {
|
|
51
50
|
"type": "git",
|
|
52
51
|
"url": "git+https://github.com/abearxiong/kevisual-router.git"
|
|
53
52
|
},
|
|
54
53
|
"dependencies": {
|
|
54
|
+
"eventemitter3": "^5.0.1",
|
|
55
55
|
"path-to-regexp": "^8.3.0",
|
|
56
56
|
"selfsigned": "^5.4.0",
|
|
57
57
|
"send": "^1.2.1"
|
|
@@ -95,4 +95,4 @@
|
|
|
95
95
|
"require": "./src/*"
|
|
96
96
|
}
|
|
97
97
|
}
|
|
98
|
-
}
|
|
98
|
+
}
|
package/src/route.ts
CHANGED
|
@@ -3,7 +3,7 @@ import { handleServer } from './handle-server.ts';
|
|
|
3
3
|
import * as cookie from './cookie.ts';
|
|
4
4
|
import { ServerType, Listener, OnListener, ServerOpts, OnWebSocketOptions, OnWebSocketFn, WebSocketListenerFun, ListenerFun, HttpListenerFun, WS } from './server-type.ts';
|
|
5
5
|
import { parseIfJson } from '../utils/parse.ts';
|
|
6
|
-
import { EventEmitter } from '
|
|
6
|
+
import { EventEmitter } from 'eventemitter3';
|
|
7
7
|
type CookieFn = (name: string, value: string, options?: cookie.SerializeOptions, end?: boolean) => void;
|
|
8
8
|
|
|
9
9
|
export type HandleCtx = {
|
|
@@ -273,6 +273,10 @@ export class ServerBase implements ServerType {
|
|
|
273
273
|
end({ code: 500, message: `${type} server is error` });
|
|
274
274
|
}
|
|
275
275
|
}
|
|
276
|
+
/**
|
|
277
|
+
* 根据emitter提醒关闭ws连接
|
|
278
|
+
* @param ws
|
|
279
|
+
*/
|
|
276
280
|
async onWsClose(ws: WS) {
|
|
277
281
|
const id = ws?.data?.id || '';
|
|
278
282
|
if (id) {
|
package/src/server/server-bun.ts
CHANGED
package/src/server/ws-server.ts
CHANGED
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
import { WebSocketServer } from 'ws';
|
|
3
3
|
import type { WebSocket } from 'ws';
|
|
4
4
|
import { ServerType } from './server-type.ts'
|
|
5
|
-
import { parseIfJson } from '../utils/parse.ts';
|
|
6
5
|
import { isBun } from '../utils/is-engine.ts';
|
|
7
6
|
|
|
8
7
|
|
|
@@ -62,6 +61,8 @@ export class WsServerBase {
|
|
|
62
61
|
});
|
|
63
62
|
this.server.sendConnected(ws);
|
|
64
63
|
this.wss.on('close', () => {
|
|
64
|
+
// @ts-ignore
|
|
65
|
+
ws?.data?.close?.();
|
|
65
66
|
this.server.onWsClose(ws);
|
|
66
67
|
});
|
|
67
68
|
});
|