@lsby/net-core 0.3.36 → 0.3.37

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.
Files changed (48) hide show
  1. package/dist/bin/gen-type/addition.cjs +14 -0
  2. package/dist/bin/gen-type/bin.cjs +51 -8
  3. package/dist/bin/gen-type/index.cjs +51 -8
  4. package/dist/cjs/bin/gen-type/addition.cjs +14 -0
  5. package/dist/cjs/bin/gen-type/bin.cjs +51 -8
  6. package/dist/cjs/bin/gen-type/index.cjs +51 -8
  7. package/dist/cjs/global/global.cjs +24 -0
  8. package/dist/cjs/global/global.d.cts +3 -1
  9. package/dist/cjs/global/ws.cjs +46 -0
  10. package/dist/cjs/global/ws.d.cts +13 -0
  11. package/dist/cjs/index.cjs +94 -15
  12. package/dist/cjs/index.d.cts +2 -1
  13. package/dist/cjs/interface/extend/json-base.cjs +24 -0
  14. package/dist/cjs/interface/extend/json-wrap.cjs +24 -0
  15. package/dist/cjs/plugin/extend/json.cjs +24 -0
  16. package/dist/cjs/plugin/extend/web-socket.cjs +111 -0
  17. package/dist/cjs/plugin/extend/web-socket.d.cts +22 -0
  18. package/dist/cjs/plugin/plug.d.cts +2 -1
  19. package/dist/cjs/result/result.cjs +24 -0
  20. package/dist/cjs/server/server.cjs +57 -15
  21. package/dist/esm/bin/gen-type/addition.js +1 -1
  22. package/dist/esm/bin/gen-type/bin.js +2 -2
  23. package/dist/esm/bin/gen-type/index.js +2 -2
  24. package/dist/esm/{chunk-7RH7Z7VC.js → chunk-3DVNMDUP.js} +38 -9
  25. package/dist/esm/chunk-56BD5FOG.js +45 -0
  26. package/dist/esm/{chunk-AHCV3LQ7.js → chunk-BC6IISWS.js} +7 -0
  27. package/dist/esm/{chunk-XM66T73O.js → chunk-BEJF4KW3.js} +34 -16
  28. package/dist/esm/chunk-EAVNASDB.js +22 -0
  29. package/dist/esm/{chunk-AMBUPXY3.js → chunk-FGAYTB2N.js} +1 -1
  30. package/dist/esm/{chunk-OMGVOLYE.js → chunk-KRQ6KUVY.js} +14 -0
  31. package/dist/esm/{chunk-PVTF4VYK.js → chunk-QOCDUZSU.js} +4 -4
  32. package/dist/esm/{chunk-B55VVACL.js → chunk-W7UNHY6S.js} +4 -4
  33. package/dist/esm/{chunk-IPDMEQ3O.js → chunk-XU67JT6R.js} +1 -1
  34. package/dist/esm/global/global.d.ts +3 -1
  35. package/dist/esm/global/global.js +2 -1
  36. package/dist/esm/global/ws.d.ts +13 -0
  37. package/dist/esm/global/ws.js +6 -0
  38. package/dist/esm/index.d.ts +2 -1
  39. package/dist/esm/index.js +18 -13
  40. package/dist/esm/interface/extend/json-base.js +4 -3
  41. package/dist/esm/interface/extend/json-wrap.js +4 -3
  42. package/dist/esm/plugin/extend/json.js +3 -2
  43. package/dist/esm/plugin/extend/web-socket.d.ts +22 -0
  44. package/dist/esm/plugin/extend/web-socket.js +9 -0
  45. package/dist/esm/plugin/plug.d.ts +2 -1
  46. package/dist/esm/result/result.js +3 -2
  47. package/dist/esm/server/server.js +3 -2
  48. package/package.json +3 -1
@@ -34,6 +34,7 @@ __export(src_exports, {
34
34
  JSON\u72B6\u6001\u63A5\u53E3: () => JSON\u72B6\u6001\u63A5\u53E3,
35
35
  JSON\u72B6\u6001\u63A5\u53E3\u7C7B\u578B: () => JSON\u72B6\u6001\u63A5\u53E3\u7C7B\u578B,
36
36
  JSON\u89E3\u6790\u63D2\u4EF6: () => JSON\u89E3\u6790\u63D2\u4EF6,
37
+ WebSocket\u63D2\u4EF6: () => WebSocket\u63D2\u4EF6,
37
38
  \u4E1A\u52A1\u884C\u4E3A: () => \u4E1A\u52A1\u884C\u4E3A,
38
39
  \u4E2D\u6587\u8DEF\u5F84\u652F\u6301\u63D2\u4EF6: () => \u4E2D\u6587\u8DEF\u5F84\u652F\u6301\u63D2\u4EF6,
39
40
  \u63A5\u53E3: () => \u63A5\u53E3,
@@ -192,9 +193,33 @@ var \u4E1A\u52A1\u884C\u4E3A = class _\u4E1A\u52A1\u884C\u4E3A {
192
193
  // src/global/global.ts
193
194
  var import_ts_global = require("@lsby/ts-global");
194
195
  var import_ts_log = require("@lsby/ts-log");
196
+
197
+ // src/global/ws.ts
198
+ var WebSocket\u7BA1\u7406\u8005 = class {
199
+ constructor(\u8FDE\u63A5\u8868) {
200
+ this.\u8FDE\u63A5\u8868 = \u8FDE\u63A5\u8868;
201
+ }
202
+ async \u589E\u52A0\u8FDE\u63A5(\u8BF7\u6C42id, ws\u53E5\u67C4) {
203
+ this.\u8FDE\u63A5\u8868[\u8BF7\u6C42id] = ws\u53E5\u67C4;
204
+ }
205
+ async \u67E5\u8BE2\u8FDE\u63A5\u5B58\u5728(\u8BF7\u6C42id) {
206
+ return this.\u8FDE\u63A5\u8868[\u8BF7\u6C42id] == null ? false : true;
207
+ }
208
+ async \u83B7\u5F97\u53E5\u67C4(\u8BF7\u6C42id) {
209
+ return this.\u8FDE\u63A5\u8868[\u8BF7\u6C42id] || null;
210
+ }
211
+ async \u5220\u9664\u8FDE\u63A5(id) {
212
+ delete this.\u8FDE\u63A5\u8868[id];
213
+ }
214
+ };
215
+
216
+ // src/global/global.ts
195
217
  var Global = new import_ts_global.GlobalService([
196
218
  new import_ts_global.GlobalAsyncItem("log", async () => {
197
219
  return new import_ts_log.Log("@lsby:net-core");
220
+ }),
221
+ new import_ts_global.GlobalAsyncItem("WebSocket\u7BA1\u7406\u8005", async () => {
222
+ return new WebSocket\u7BA1\u7406\u8005({});
198
223
  })
199
224
  ]);
200
225
 
@@ -417,10 +442,46 @@ var \u8868\u5355\u89E3\u6790\u63D2\u4EF6 = class extends \u63D2\u4EF6 {
417
442
  }
418
443
  };
419
444
 
445
+ // src/plugin/extend/web-socket.ts
446
+ var import_zod3 = require("zod");
447
+ var WebSocket\u63D2\u4EF6 = class extends \u63D2\u4EF6 {
448
+ constructor(\u4FE1\u606F\u63CF\u8FF0) {
449
+ super(
450
+ import_zod3.z.object({
451
+ ws\u64CD\u4F5C: import_zod3.z.object({
452
+ \u53D1\u9001ws\u4FE1\u606F: import_zod3.z.function(import_zod3.z.tuple([\u4FE1\u606F\u63CF\u8FF0]), import_zod3.z.promise(import_zod3.z.void())),
453
+ \u5173\u95EDws\u8FDE\u63A5: import_zod3.z.function(import_zod3.z.tuple([]), import_zod3.z.promise(import_zod3.z.void()))
454
+ }).or(import_zod3.z.undefined())
455
+ }),
456
+ async (req, _res) => {
457
+ var wsId = req.headers["ws-client-id"];
458
+ var WebSocket\u7BA1\u7406\u80052 = await Global.getItem("WebSocket\u7BA1\u7406\u8005");
459
+ var ws\u53E5\u67C4 = null;
460
+ if (typeof wsId == "string")
461
+ ws\u53E5\u67C4 = await WebSocket\u7BA1\u7406\u80052.\u83B7\u5F97\u53E5\u67C4(wsId);
462
+ if (!ws\u53E5\u67C4)
463
+ return { ws\u64CD\u4F5C: void 0 };
464
+ var \u5B58\u5728\u7684ws\u53E5\u67C4 = ws\u53E5\u67C4;
465
+ return {
466
+ ws\u64CD\u4F5C: {
467
+ async \u53D1\u9001ws\u4FE1\u606F(\u4FE1\u606F) {
468
+ \u5B58\u5728\u7684ws\u53E5\u67C4.send(JSON.stringify(\u4FE1\u606F));
469
+ },
470
+ async \u5173\u95EDws\u8FDE\u63A5() {
471
+ \u5B58\u5728\u7684ws\u53E5\u67C4.close();
472
+ }
473
+ }
474
+ };
475
+ }
476
+ );
477
+ }
478
+ };
479
+
420
480
  // src/server/server.ts
421
481
  var import_node_os = require("os");
422
482
  var import_express3 = __toESM(require("express"), 1);
423
483
  var import_short_uuid = __toESM(require("short-uuid"), 1);
484
+ var import_ws2 = require("ws");
424
485
  var \u670D\u52A1\u5668 = class {
425
486
  constructor(\u63A5\u53E3\u4EEC, \u7AEF\u53E3, \u9759\u6001\u8D44\u6E90\u8DEF\u5F84) {
426
487
  this.\u63A5\u53E3\u4EEC = \u63A5\u53E3\u4EEC;
@@ -429,27 +490,27 @@ var \u670D\u52A1\u5668 = class {
429
490
  }
430
491
  log = Global.getItem("log");
431
492
  async run() {
432
- const app = (0, import_express3.default)();
493
+ var app = (0, import_express3.default)();
433
494
  app.use(async (req, res) => {
434
495
  var log = (await this.log).extend("\u8BF7\u6C42").extend((0, import_short_uuid.default)().new());
435
496
  try {
436
- const \u8BF7\u6C42\u8DEF\u5F84 = req.path;
437
- const \u8BF7\u6C42\u65B9\u6CD5 = req.method.toLowerCase();
497
+ var \u8BF7\u6C42\u8DEF\u5F84 = req.path;
498
+ var \u8BF7\u6C42\u65B9\u6CD5 = req.method.toLowerCase();
438
499
  await log.debug("\u6536\u5230\u8BF7\u6C42, \u8DEF\u5F84: %o, \u65B9\u6CD5: %o", \u8BF7\u6C42\u8DEF\u5F84, \u8BF7\u6C42\u65B9\u6CD5);
439
500
  await log.debug("\u5C1D\u8BD5\u5339\u914D\u63A5\u53E3...");
440
- const \u76EE\u6807\u63A5\u53E3 = this.\u63A5\u53E3\u4EEC.find((\u63A5\u53E32) => {
441
- const \u63A5\u53E3\u7C7B\u578B2 = \u63A5\u53E32.\u83B7\u5F97\u63A5\u53E3\u7C7B\u578B();
442
- return \u8BF7\u6C42\u8DEF\u5F84 == \u63A5\u53E3\u7C7B\u578B2.\u83B7\u5F97\u8DEF\u5F84() && \u8BF7\u6C42\u65B9\u6CD5 == \u63A5\u53E3\u7C7B\u578B2.\u83B7\u5F97\u65B9\u6CD5();
501
+ var \u76EE\u6807\u63A5\u53E3 = this.\u63A5\u53E3\u4EEC.find((\u63A5\u53E32) => {
502
+ var \u63A5\u53E3\u7C7B\u578B3 = \u63A5\u53E32.\u83B7\u5F97\u63A5\u53E3\u7C7B\u578B();
503
+ return \u8BF7\u6C42\u8DEF\u5F84 == \u63A5\u53E3\u7C7B\u578B3.\u83B7\u5F97\u8DEF\u5F84() && \u8BF7\u6C42\u65B9\u6CD5 == \u63A5\u53E3\u7C7B\u578B3.\u83B7\u5F97\u65B9\u6CD5();
443
504
  });
444
505
  if (\u76EE\u6807\u63A5\u53E3 != null) {
445
506
  await log.debug("\u547D\u4E2D\u63A5\u53E3");
446
- const \u63A5\u53E3\u7C7B\u578B2 = \u76EE\u6807\u63A5\u53E3.\u83B7\u5F97\u63A5\u53E3\u7C7B\u578B();
447
- const \u63A5\u53E3\u63D2\u4EF6 = \u63A5\u53E3\u7C7B\u578B2.\u83B7\u5F97\u63D2\u4EF6\u4EEC();
507
+ var \u63A5\u53E3\u7C7B\u578B2 = \u76EE\u6807\u63A5\u53E3.\u83B7\u5F97\u63A5\u53E3\u7C7B\u578B();
508
+ var \u63A5\u53E3\u63D2\u4EF6 = \u63A5\u53E3\u7C7B\u578B2.\u83B7\u5F97\u63D2\u4EF6\u4EEC();
448
509
  await log.debug("\u627E\u5230 %o \u4E2A \u63D2\u4EF6, \u51C6\u5907\u6267\u884C...", \u63A5\u53E3\u63D2\u4EF6.length);
449
- const \u63D2\u4EF6\u7ED3\u679C = (await Promise.all(\u63A5\u53E3\u63D2\u4EF6.map(async (\u63D2\u4EF62) => await (await \u63D2\u4EF62.run()).\u83B7\u5F97\u5B9E\u73B0()(req, res)))).reduce((s, a) => Object.assign(s, a), {});
510
+ var \u63D2\u4EF6\u7ED3\u679C = (await Promise.all(\u63A5\u53E3\u63D2\u4EF6.map(async (\u63D2\u4EF62) => await (await \u63D2\u4EF62.run()).\u83B7\u5F97\u5B9E\u73B0()(req, res)))).reduce((s, a) => Object.assign(s, a), {});
450
511
  await log.debug("\u63D2\u4EF6 \u6267\u884C\u5B8C\u6BD5");
451
512
  await log.debug("\u51C6\u5907\u6267\u884C\u63A5\u53E3\u903B\u8F91...");
452
- const \u63A5\u53E3\u7ED3\u679C = await \u76EE\u6807\u63A5\u53E3.\u63A5\u53E3\u5B9E\u73B0(\u63D2\u4EF6\u7ED3\u679C);
513
+ var \u63A5\u53E3\u7ED3\u679C = await \u76EE\u6807\u63A5\u53E3.\u63A5\u53E3\u5B9E\u73B0(\u63D2\u4EF6\u7ED3\u679C);
453
514
  await log.debug("\u63A5\u53E3\u903B\u8F91\u6267\u884C\u5B8C\u6BD5");
454
515
  await log.debug("\u51C6\u5907\u6267\u884C\u8FD4\u56DE\u903B\u8F91...");
455
516
  await \u63A5\u53E3\u7ED3\u679C.run(req, res);
@@ -476,12 +537,29 @@ var \u670D\u52A1\u5668 = class {
476
537
  res.send("\u670D\u52A1\u5668\u5185\u90E8\u9519\u8BEF");
477
538
  }
478
539
  });
479
- var server = null;
480
- await new Promise((res, _rej) => {
481
- server = app.listen(this.\u7AEF\u53E3, () => res());
540
+ var server = app.listen(this.\u7AEF\u53E3);
541
+ var wss = new import_ws2.WebSocketServer({ server });
542
+ wss.on("connection", async (ws, req) => {
543
+ var log = (await this.log).extend("WebSocket").extend((0, import_short_uuid.default)().new());
544
+ await log.debug(`WebSocket \u8BF7\u6C42\u8FDE\u63A5: ${req.url}`);
545
+ var WebSocket\u7BA1\u7406\u80052 = await Global.getItem("WebSocket\u7BA1\u7406\u8005");
546
+ var \u5BA2\u6237\u7AEFid = req.url?.split("?id=")[1];
547
+ if (!\u5BA2\u6237\u7AEFid)
548
+ return ws.close(4001, "\u7F3A\u5C11\u5BA2\u6237\u7AEF ID");
549
+ if (await WebSocket\u7BA1\u7406\u80052.\u67E5\u8BE2\u8FDE\u63A5\u5B58\u5728(\u5BA2\u6237\u7AEFid) == true)
550
+ return ws.close(4002, "\u5BA2\u6237\u7AEF ID \u5DF2\u5B58\u5728");
551
+ var \u5B58\u5728\u7684\u5BA2\u6237\u7AEFid = \u5BA2\u6237\u7AEFid;
552
+ await WebSocket\u7BA1\u7406\u80052.\u589E\u52A0\u8FDE\u63A5(\u5BA2\u6237\u7AEFid, ws);
553
+ await log.debug(`WebSocket \u8FDE\u63A5\u5DF2\u5EFA\u7ACB, \u5BA2\u6237\u7AEFid: ${\u5BA2\u6237\u7AEFid}`);
554
+ ws.on("close", async () => {
555
+ await log.debug(`WebSocket \u8FDE\u63A5\u5DF2\u5173\u95ED: ${\u5BA2\u6237\u7AEFid}`);
556
+ await WebSocket\u7BA1\u7406\u80052.\u5220\u9664\u8FDE\u63A5(\u5B58\u5728\u7684\u5BA2\u6237\u7AEFid);
557
+ });
558
+ ws.on("error", async (err) => {
559
+ await log.err(`WebSocket \u51FA\u73B0\u9519\u8BEF ${\u5BA2\u6237\u7AEFid}: %o`, err);
560
+ await WebSocket\u7BA1\u7406\u80052.\u5220\u9664\u8FDE\u63A5(\u5B58\u5728\u7684\u5BA2\u6237\u7AEFid);
561
+ });
482
562
  });
483
- if (server == null)
484
- throw new Error("\u542F\u52A8\u670D\u52A1\u5668\u5931\u8D25");
485
563
  return {
486
564
  ip: Object.values((0, import_node_os.networkInterfaces)()).flat().flatMap((address) => address !== void 0 ? [address] : []).map((wrappedAddress) => wrappedAddress.address).map((address) => `http://${address}:${this.\u7AEF\u53E3}`),
487
565
  server
@@ -494,6 +572,7 @@ var \u670D\u52A1\u5668 = class {
494
572
  JSON\u72B6\u6001\u63A5\u53E3,
495
573
  JSON\u72B6\u6001\u63A5\u53E3\u7C7B\u578B,
496
574
  JSON\u89E3\u6790\u63D2\u4EF6,
575
+ WebSocket\u63D2\u4EF6,
497
576
  \u4E1A\u52A1\u884C\u4E3A,
498
577
  \u4E2D\u6587\u8DEF\u5F84\u652F\u6301\u63D2\u4EF6,
499
578
  \u63A5\u53E3,
@@ -8,7 +8,8 @@ export { 中文路径支持插件 } from './plugin/extend/chinese-path.cjs';
8
8
  export { 自定义数据插件 } from './plugin/extend/custom-data.cjs';
9
9
  export { JSON解析插件, 从接口类型获得JSON参数, 任意JSON解析插件, 任意JSON解析插件项, 合并JSON插件结果 } from './plugin/extend/json.cjs';
10
10
  export { 表单解析插件 } from './plugin/extend/urlencoded.cjs';
11
- export { 任意插件, 包装插件项,Task插件内部类型, 取插件内部ts类型, 合并插件结果, 插件, 插件项类型 } from './plugin/plug.cjs';
11
+ export { WebSocket插件, 任意WS插件, 任意WS插件项, WS插件泛型, 取第一个WS插件结果 } from './plugin/extend/web-socket.cjs';
12
+ export { 任意插件, 包装插件项, 取Task插件内部类型, 取Task插件类型, 取插件内部ts类型, 合并插件结果, 插件, 插件项类型 } from './plugin/plug.cjs';
12
13
  export { 正确JSON结果, 正确结果, 正确自定义结果, 结果, 错误JSON结果, 错误结果 } from './result/result.cjs';
13
14
  export { 服务器 } from './server/server.cjs';
14
15
  import '@lsby/ts-fp-data';
@@ -27,9 +27,33 @@ module.exports = __toCommonJS(json_base_exports);
27
27
  // src/global/global.ts
28
28
  var import_ts_global = require("@lsby/ts-global");
29
29
  var import_ts_log = require("@lsby/ts-log");
30
+
31
+ // src/global/ws.ts
32
+ var WebSocket\u7BA1\u7406\u8005 = class {
33
+ constructor(\u8FDE\u63A5\u8868) {
34
+ this.\u8FDE\u63A5\u8868 = \u8FDE\u63A5\u8868;
35
+ }
36
+ async \u589E\u52A0\u8FDE\u63A5(\u8BF7\u6C42id, ws\u53E5\u67C4) {
37
+ this.\u8FDE\u63A5\u8868[\u8BF7\u6C42id] = ws\u53E5\u67C4;
38
+ }
39
+ async \u67E5\u8BE2\u8FDE\u63A5\u5B58\u5728(\u8BF7\u6C42id) {
40
+ return this.\u8FDE\u63A5\u8868[\u8BF7\u6C42id] == null ? false : true;
41
+ }
42
+ async \u83B7\u5F97\u53E5\u67C4(\u8BF7\u6C42id) {
43
+ return this.\u8FDE\u63A5\u8868[\u8BF7\u6C42id] || null;
44
+ }
45
+ async \u5220\u9664\u8FDE\u63A5(id) {
46
+ delete this.\u8FDE\u63A5\u8868[id];
47
+ }
48
+ };
49
+
50
+ // src/global/global.ts
30
51
  var Global = new import_ts_global.GlobalService([
31
52
  new import_ts_global.GlobalAsyncItem("log", async () => {
32
53
  return new import_ts_log.Log("@lsby:net-core");
54
+ }),
55
+ new import_ts_global.GlobalAsyncItem("WebSocket\u7BA1\u7406\u8005", async () => {
56
+ return new WebSocket\u7BA1\u7406\u8005({});
33
57
  })
34
58
  ]);
35
59
 
@@ -29,9 +29,33 @@ var import_zod = require("zod");
29
29
  // src/global/global.ts
30
30
  var import_ts_global = require("@lsby/ts-global");
31
31
  var import_ts_log = require("@lsby/ts-log");
32
+
33
+ // src/global/ws.ts
34
+ var WebSocket\u7BA1\u7406\u8005 = class {
35
+ constructor(\u8FDE\u63A5\u8868) {
36
+ this.\u8FDE\u63A5\u8868 = \u8FDE\u63A5\u8868;
37
+ }
38
+ async \u589E\u52A0\u8FDE\u63A5(\u8BF7\u6C42id, ws\u53E5\u67C4) {
39
+ this.\u8FDE\u63A5\u8868[\u8BF7\u6C42id] = ws\u53E5\u67C4;
40
+ }
41
+ async \u67E5\u8BE2\u8FDE\u63A5\u5B58\u5728(\u8BF7\u6C42id) {
42
+ return this.\u8FDE\u63A5\u8868[\u8BF7\u6C42id] == null ? false : true;
43
+ }
44
+ async \u83B7\u5F97\u53E5\u67C4(\u8BF7\u6C42id) {
45
+ return this.\u8FDE\u63A5\u8868[\u8BF7\u6C42id] || null;
46
+ }
47
+ async \u5220\u9664\u8FDE\u63A5(id) {
48
+ delete this.\u8FDE\u63A5\u8868[id];
49
+ }
50
+ };
51
+
52
+ // src/global/global.ts
32
53
  var Global = new import_ts_global.GlobalService([
33
54
  new import_ts_global.GlobalAsyncItem("log", async () => {
34
55
  return new import_ts_log.Log("@lsby:net-core");
56
+ }),
57
+ new import_ts_global.GlobalAsyncItem("WebSocket\u7BA1\u7406\u8005", async () => {
58
+ return new WebSocket\u7BA1\u7406\u8005({});
35
59
  })
36
60
  ]);
37
61
 
@@ -39,9 +39,33 @@ var import_express = __toESM(require("express"), 1);
39
39
  // src/global/global.ts
40
40
  var import_ts_global = require("@lsby/ts-global");
41
41
  var import_ts_log = require("@lsby/ts-log");
42
+
43
+ // src/global/ws.ts
44
+ var WebSocket\u7BA1\u7406\u8005 = class {
45
+ constructor(\u8FDE\u63A5\u8868) {
46
+ this.\u8FDE\u63A5\u8868 = \u8FDE\u63A5\u8868;
47
+ }
48
+ async \u589E\u52A0\u8FDE\u63A5(\u8BF7\u6C42id, ws\u53E5\u67C4) {
49
+ this.\u8FDE\u63A5\u8868[\u8BF7\u6C42id] = ws\u53E5\u67C4;
50
+ }
51
+ async \u67E5\u8BE2\u8FDE\u63A5\u5B58\u5728(\u8BF7\u6C42id) {
52
+ return this.\u8FDE\u63A5\u8868[\u8BF7\u6C42id] == null ? false : true;
53
+ }
54
+ async \u83B7\u5F97\u53E5\u67C4(\u8BF7\u6C42id) {
55
+ return this.\u8FDE\u63A5\u8868[\u8BF7\u6C42id] || null;
56
+ }
57
+ async \u5220\u9664\u8FDE\u63A5(id) {
58
+ delete this.\u8FDE\u63A5\u8868[id];
59
+ }
60
+ };
61
+
62
+ // src/global/global.ts
42
63
  var Global = new import_ts_global.GlobalService([
43
64
  new import_ts_global.GlobalAsyncItem("log", async () => {
44
65
  return new import_ts_log.Log("@lsby:net-core");
66
+ }),
67
+ new import_ts_global.GlobalAsyncItem("WebSocket\u7BA1\u7406\u8005", async () => {
68
+ return new WebSocket\u7BA1\u7406\u8005({});
45
69
  })
46
70
  ]);
47
71
 
@@ -0,0 +1,111 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/plugin/extend/web-socket.ts
21
+ var web_socket_exports = {};
22
+ __export(web_socket_exports, {
23
+ WebSocket\u63D2\u4EF6: () => WebSocket\u63D2\u4EF6
24
+ });
25
+ module.exports = __toCommonJS(web_socket_exports);
26
+ var import_zod = require("zod");
27
+
28
+ // src/global/global.ts
29
+ var import_ts_global = require("@lsby/ts-global");
30
+ var import_ts_log = require("@lsby/ts-log");
31
+
32
+ // src/global/ws.ts
33
+ var WebSocket\u7BA1\u7406\u8005 = class {
34
+ constructor(\u8FDE\u63A5\u8868) {
35
+ this.\u8FDE\u63A5\u8868 = \u8FDE\u63A5\u8868;
36
+ }
37
+ async \u589E\u52A0\u8FDE\u63A5(\u8BF7\u6C42id, ws\u53E5\u67C4) {
38
+ this.\u8FDE\u63A5\u8868[\u8BF7\u6C42id] = ws\u53E5\u67C4;
39
+ }
40
+ async \u67E5\u8BE2\u8FDE\u63A5\u5B58\u5728(\u8BF7\u6C42id) {
41
+ return this.\u8FDE\u63A5\u8868[\u8BF7\u6C42id] == null ? false : true;
42
+ }
43
+ async \u83B7\u5F97\u53E5\u67C4(\u8BF7\u6C42id) {
44
+ return this.\u8FDE\u63A5\u8868[\u8BF7\u6C42id] || null;
45
+ }
46
+ async \u5220\u9664\u8FDE\u63A5(id) {
47
+ delete this.\u8FDE\u63A5\u8868[id];
48
+ }
49
+ };
50
+
51
+ // src/global/global.ts
52
+ var Global = new import_ts_global.GlobalService([
53
+ new import_ts_global.GlobalAsyncItem("log", async () => {
54
+ return new import_ts_log.Log("@lsby:net-core");
55
+ }),
56
+ new import_ts_global.GlobalAsyncItem("WebSocket\u7BA1\u7406\u8005", async () => {
57
+ return new WebSocket\u7BA1\u7406\u8005({});
58
+ })
59
+ ]);
60
+
61
+ // src/plugin/plug.ts
62
+ var \u63D2\u4EF6 = class {
63
+ constructor(\u7C7B\u578B, \u5B9E\u73B0) {
64
+ this.\u7C7B\u578B = \u7C7B\u578B;
65
+ this.\u5B9E\u73B0 = \u5B9E\u73B0;
66
+ }
67
+ \u83B7\u5F97\u7C7B\u578B() {
68
+ return this.\u7C7B\u578B;
69
+ }
70
+ \u83B7\u5F97\u5B9E\u73B0() {
71
+ return this.\u5B9E\u73B0;
72
+ }
73
+ };
74
+
75
+ // src/plugin/extend/web-socket.ts
76
+ var WebSocket\u63D2\u4EF6 = class extends \u63D2\u4EF6 {
77
+ constructor(\u4FE1\u606F\u63CF\u8FF0) {
78
+ super(
79
+ import_zod.z.object({
80
+ ws\u64CD\u4F5C: import_zod.z.object({
81
+ \u53D1\u9001ws\u4FE1\u606F: import_zod.z.function(import_zod.z.tuple([\u4FE1\u606F\u63CF\u8FF0]), import_zod.z.promise(import_zod.z.void())),
82
+ \u5173\u95EDws\u8FDE\u63A5: import_zod.z.function(import_zod.z.tuple([]), import_zod.z.promise(import_zod.z.void()))
83
+ }).or(import_zod.z.undefined())
84
+ }),
85
+ async (req, _res) => {
86
+ var wsId = req.headers["ws-client-id"];
87
+ var WebSocket\u7BA1\u7406\u80052 = await Global.getItem("WebSocket\u7BA1\u7406\u8005");
88
+ var ws\u53E5\u67C4 = null;
89
+ if (typeof wsId == "string")
90
+ ws\u53E5\u67C4 = await WebSocket\u7BA1\u7406\u80052.\u83B7\u5F97\u53E5\u67C4(wsId);
91
+ if (!ws\u53E5\u67C4)
92
+ return { ws\u64CD\u4F5C: void 0 };
93
+ var \u5B58\u5728\u7684ws\u53E5\u67C4 = ws\u53E5\u67C4;
94
+ return {
95
+ ws\u64CD\u4F5C: {
96
+ async \u53D1\u9001ws\u4FE1\u606F(\u4FE1\u606F) {
97
+ \u5B58\u5728\u7684ws\u53E5\u67C4.send(JSON.stringify(\u4FE1\u606F));
98
+ },
99
+ async \u5173\u95EDws\u8FDE\u63A5() {
100
+ \u5B58\u5728\u7684ws\u53E5\u67C4.close();
101
+ }
102
+ }
103
+ };
104
+ }
105
+ );
106
+ }
107
+ };
108
+ // Annotate the CommonJS export names for ESM import in node:
109
+ 0 && (module.exports = {
110
+ WebSocket\u63D2\u4EF6
111
+ });
@@ -0,0 +1,22 @@
1
+ import { z } from 'zod';
2
+ import { 插件 as __, 包装插件项 as _____, 插件项类型 as _____$1, 取Task插件类型 as _Task____ } from '../plug.cjs';
3
+ import 'express';
4
+ import '@lsby/ts-fp-data';
5
+
6
+ declare class WebSocket插件<信息 extends z.AnyZodObject> extends __<z.ZodObject<{
7
+ ws操作: z.ZodUnion<[
8
+ z.ZodObject<{
9
+ 发送ws信息: z.ZodFunction<z.ZodTuple<[信息], null>, z.ZodPromise<z.ZodVoid>>;
10
+ 关闭ws连接: z.ZodFunction<z.ZodTuple<[], null>, z.ZodPromise<z.ZodVoid>>;
11
+ }>,
12
+ z.ZodUndefined
13
+ ]>;
14
+ }>> {
15
+ constructor(信息描述: 信息);
16
+ }
17
+ type 任意WS插件 = WebSocket插件<any>;
18
+ type 任意WS插件项 = _____<任意WS插件>;
19
+ type 取WS插件泛型<A> = A extends WebSocket插件<infer x> ? x : never;
20
+ type 取第一个WS插件结果<Arr extends Array<_____$1>> = Arr extends [] ? {} : Arr extends [infer x, ...infer xs] ? x extends infer 插件项 ? xs extends Array<_____$1> ? 插件项 extends 任意WS插件项 ? z.infer<取WS插件泛型<_Task____<插件项>>> : 取第一个WS插件结果<xs> : {} : {} : {};
21
+
22
+ export { WebSocket插件, type 任意WS插件, type 任意WS插件项, type 取WS插件泛型, type 取第一个WS插件结果 };
@@ -14,7 +14,8 @@ type 任意插件 = 插件<any>;
14
14
  type 包装插件项<A> = Task<A>;
15
15
  type 插件项类型 = 包装插件项<插件<z.AnyZodObject>>;
16
16
  type 取Task插件内部类型<A> = A extends Task<插件<infer x>> ? x : never;
17
+ type 取Task插件类型<A> = A extends Task<infer x> ? x : never;
17
18
  type 取插件内部ts类型<A> = A extends 插件<infer x> ? z.infer<x> : never;
18
19
  type 合并插件结果<Arr extends Array<插件项类型>> = Arr extends [] ? {} : Arr extends [infer x, ...infer xs] ? x extends infer 插件项 ? xs extends Array<插件项类型> ? z.infer<取Task插件内部类型<插件项>> & 合并插件结果<xs> : {} : {} : {};
19
20
 
20
- export { type 任意插件, type 包装插件项, type 取Task插件内部类型, type 取插件内部ts类型, type 合并插件结果, 插件, type 插件项类型 };
21
+ export { type 任意插件, type 包装插件项, type 取Task插件内部类型, type 取Task插件类型, type 取插件内部ts类型, type 合并插件结果, 插件, type 插件项类型 };
@@ -32,9 +32,33 @@ module.exports = __toCommonJS(result_exports);
32
32
  // src/global/global.ts
33
33
  var import_ts_global = require("@lsby/ts-global");
34
34
  var import_ts_log = require("@lsby/ts-log");
35
+
36
+ // src/global/ws.ts
37
+ var WebSocket\u7BA1\u7406\u8005 = class {
38
+ constructor(\u8FDE\u63A5\u8868) {
39
+ this.\u8FDE\u63A5\u8868 = \u8FDE\u63A5\u8868;
40
+ }
41
+ async \u589E\u52A0\u8FDE\u63A5(\u8BF7\u6C42id, ws\u53E5\u67C4) {
42
+ this.\u8FDE\u63A5\u8868[\u8BF7\u6C42id] = ws\u53E5\u67C4;
43
+ }
44
+ async \u67E5\u8BE2\u8FDE\u63A5\u5B58\u5728(\u8BF7\u6C42id) {
45
+ return this.\u8FDE\u63A5\u8868[\u8BF7\u6C42id] == null ? false : true;
46
+ }
47
+ async \u83B7\u5F97\u53E5\u67C4(\u8BF7\u6C42id) {
48
+ return this.\u8FDE\u63A5\u8868[\u8BF7\u6C42id] || null;
49
+ }
50
+ async \u5220\u9664\u8FDE\u63A5(id) {
51
+ delete this.\u8FDE\u63A5\u8868[id];
52
+ }
53
+ };
54
+
55
+ // src/global/global.ts
35
56
  var Global = new import_ts_global.GlobalService([
36
57
  new import_ts_global.GlobalAsyncItem("log", async () => {
37
58
  return new import_ts_log.Log("@lsby:net-core");
59
+ }),
60
+ new import_ts_global.GlobalAsyncItem("WebSocket\u7BA1\u7406\u8005", async () => {
61
+ return new WebSocket\u7BA1\u7406\u8005({});
38
62
  })
39
63
  ]);
40
64
 
@@ -36,13 +36,38 @@ module.exports = __toCommonJS(server_exports);
36
36
  var import_node_os = require("os");
37
37
  var import_express = __toESM(require("express"), 1);
38
38
  var import_short_uuid = __toESM(require("short-uuid"), 1);
39
+ var import_ws2 = require("ws");
39
40
 
40
41
  // src/global/global.ts
41
42
  var import_ts_global = require("@lsby/ts-global");
42
43
  var import_ts_log = require("@lsby/ts-log");
44
+
45
+ // src/global/ws.ts
46
+ var WebSocket\u7BA1\u7406\u8005 = class {
47
+ constructor(\u8FDE\u63A5\u8868) {
48
+ this.\u8FDE\u63A5\u8868 = \u8FDE\u63A5\u8868;
49
+ }
50
+ async \u589E\u52A0\u8FDE\u63A5(\u8BF7\u6C42id, ws\u53E5\u67C4) {
51
+ this.\u8FDE\u63A5\u8868[\u8BF7\u6C42id] = ws\u53E5\u67C4;
52
+ }
53
+ async \u67E5\u8BE2\u8FDE\u63A5\u5B58\u5728(\u8BF7\u6C42id) {
54
+ return this.\u8FDE\u63A5\u8868[\u8BF7\u6C42id] == null ? false : true;
55
+ }
56
+ async \u83B7\u5F97\u53E5\u67C4(\u8BF7\u6C42id) {
57
+ return this.\u8FDE\u63A5\u8868[\u8BF7\u6C42id] || null;
58
+ }
59
+ async \u5220\u9664\u8FDE\u63A5(id) {
60
+ delete this.\u8FDE\u63A5\u8868[id];
61
+ }
62
+ };
63
+
64
+ // src/global/global.ts
43
65
  var Global = new import_ts_global.GlobalService([
44
66
  new import_ts_global.GlobalAsyncItem("log", async () => {
45
67
  return new import_ts_log.Log("@lsby:net-core");
68
+ }),
69
+ new import_ts_global.GlobalAsyncItem("WebSocket\u7BA1\u7406\u8005", async () => {
70
+ return new WebSocket\u7BA1\u7406\u8005({});
46
71
  })
47
72
  ]);
48
73
 
@@ -55,27 +80,27 @@ var \u670D\u52A1\u5668 = class {
55
80
  }
56
81
  log = Global.getItem("log");
57
82
  async run() {
58
- const app = (0, import_express.default)();
83
+ var app = (0, import_express.default)();
59
84
  app.use(async (req, res) => {
60
85
  var log = (await this.log).extend("\u8BF7\u6C42").extend((0, import_short_uuid.default)().new());
61
86
  try {
62
- const \u8BF7\u6C42\u8DEF\u5F84 = req.path;
63
- const \u8BF7\u6C42\u65B9\u6CD5 = req.method.toLowerCase();
87
+ var \u8BF7\u6C42\u8DEF\u5F84 = req.path;
88
+ var \u8BF7\u6C42\u65B9\u6CD5 = req.method.toLowerCase();
64
89
  await log.debug("\u6536\u5230\u8BF7\u6C42, \u8DEF\u5F84: %o, \u65B9\u6CD5: %o", \u8BF7\u6C42\u8DEF\u5F84, \u8BF7\u6C42\u65B9\u6CD5);
65
90
  await log.debug("\u5C1D\u8BD5\u5339\u914D\u63A5\u53E3...");
66
- const \u76EE\u6807\u63A5\u53E3 = this.\u63A5\u53E3\u4EEC.find((\u63A5\u53E3) => {
67
- const \u63A5\u53E3\u7C7B\u578B = \u63A5\u53E3.\u83B7\u5F97\u63A5\u53E3\u7C7B\u578B();
68
- return \u8BF7\u6C42\u8DEF\u5F84 == \u63A5\u53E3\u7C7B\u578B.\u83B7\u5F97\u8DEF\u5F84() && \u8BF7\u6C42\u65B9\u6CD5 == \u63A5\u53E3\u7C7B\u578B.\u83B7\u5F97\u65B9\u6CD5();
91
+ var \u76EE\u6807\u63A5\u53E3 = this.\u63A5\u53E3\u4EEC.find((\u63A5\u53E3) => {
92
+ var \u63A5\u53E3\u7C7B\u578B2 = \u63A5\u53E3.\u83B7\u5F97\u63A5\u53E3\u7C7B\u578B();
93
+ return \u8BF7\u6C42\u8DEF\u5F84 == \u63A5\u53E3\u7C7B\u578B2.\u83B7\u5F97\u8DEF\u5F84() && \u8BF7\u6C42\u65B9\u6CD5 == \u63A5\u53E3\u7C7B\u578B2.\u83B7\u5F97\u65B9\u6CD5();
69
94
  });
70
95
  if (\u76EE\u6807\u63A5\u53E3 != null) {
71
96
  await log.debug("\u547D\u4E2D\u63A5\u53E3");
72
- const \u63A5\u53E3\u7C7B\u578B = \u76EE\u6807\u63A5\u53E3.\u83B7\u5F97\u63A5\u53E3\u7C7B\u578B();
73
- const \u63A5\u53E3\u63D2\u4EF6 = \u63A5\u53E3\u7C7B\u578B.\u83B7\u5F97\u63D2\u4EF6\u4EEC();
97
+ var \u63A5\u53E3\u7C7B\u578B = \u76EE\u6807\u63A5\u53E3.\u83B7\u5F97\u63A5\u53E3\u7C7B\u578B();
98
+ var \u63A5\u53E3\u63D2\u4EF6 = \u63A5\u53E3\u7C7B\u578B.\u83B7\u5F97\u63D2\u4EF6\u4EEC();
74
99
  await log.debug("\u627E\u5230 %o \u4E2A \u63D2\u4EF6, \u51C6\u5907\u6267\u884C...", \u63A5\u53E3\u63D2\u4EF6.length);
75
- const \u63D2\u4EF6\u7ED3\u679C = (await Promise.all(\u63A5\u53E3\u63D2\u4EF6.map(async (\u63D2\u4EF6) => await (await \u63D2\u4EF6.run()).\u83B7\u5F97\u5B9E\u73B0()(req, res)))).reduce((s, a) => Object.assign(s, a), {});
100
+ var \u63D2\u4EF6\u7ED3\u679C = (await Promise.all(\u63A5\u53E3\u63D2\u4EF6.map(async (\u63D2\u4EF6) => await (await \u63D2\u4EF6.run()).\u83B7\u5F97\u5B9E\u73B0()(req, res)))).reduce((s, a) => Object.assign(s, a), {});
76
101
  await log.debug("\u63D2\u4EF6 \u6267\u884C\u5B8C\u6BD5");
77
102
  await log.debug("\u51C6\u5907\u6267\u884C\u63A5\u53E3\u903B\u8F91...");
78
- const \u63A5\u53E3\u7ED3\u679C = await \u76EE\u6807\u63A5\u53E3.\u63A5\u53E3\u5B9E\u73B0(\u63D2\u4EF6\u7ED3\u679C);
103
+ var \u63A5\u53E3\u7ED3\u679C = await \u76EE\u6807\u63A5\u53E3.\u63A5\u53E3\u5B9E\u73B0(\u63D2\u4EF6\u7ED3\u679C);
79
104
  await log.debug("\u63A5\u53E3\u903B\u8F91\u6267\u884C\u5B8C\u6BD5");
80
105
  await log.debug("\u51C6\u5907\u6267\u884C\u8FD4\u56DE\u903B\u8F91...");
81
106
  await \u63A5\u53E3\u7ED3\u679C.run(req, res);
@@ -102,12 +127,29 @@ var \u670D\u52A1\u5668 = class {
102
127
  res.send("\u670D\u52A1\u5668\u5185\u90E8\u9519\u8BEF");
103
128
  }
104
129
  });
105
- var server = null;
106
- await new Promise((res, _rej) => {
107
- server = app.listen(this.\u7AEF\u53E3, () => res());
130
+ var server = app.listen(this.\u7AEF\u53E3);
131
+ var wss = new import_ws2.WebSocketServer({ server });
132
+ wss.on("connection", async (ws, req) => {
133
+ var log = (await this.log).extend("WebSocket").extend((0, import_short_uuid.default)().new());
134
+ await log.debug(`WebSocket \u8BF7\u6C42\u8FDE\u63A5: ${req.url}`);
135
+ var WebSocket\u7BA1\u7406\u80052 = await Global.getItem("WebSocket\u7BA1\u7406\u8005");
136
+ var \u5BA2\u6237\u7AEFid = req.url?.split("?id=")[1];
137
+ if (!\u5BA2\u6237\u7AEFid)
138
+ return ws.close(4001, "\u7F3A\u5C11\u5BA2\u6237\u7AEF ID");
139
+ if (await WebSocket\u7BA1\u7406\u80052.\u67E5\u8BE2\u8FDE\u63A5\u5B58\u5728(\u5BA2\u6237\u7AEFid) == true)
140
+ return ws.close(4002, "\u5BA2\u6237\u7AEF ID \u5DF2\u5B58\u5728");
141
+ var \u5B58\u5728\u7684\u5BA2\u6237\u7AEFid = \u5BA2\u6237\u7AEFid;
142
+ await WebSocket\u7BA1\u7406\u80052.\u589E\u52A0\u8FDE\u63A5(\u5BA2\u6237\u7AEFid, ws);
143
+ await log.debug(`WebSocket \u8FDE\u63A5\u5DF2\u5EFA\u7ACB, \u5BA2\u6237\u7AEFid: ${\u5BA2\u6237\u7AEFid}`);
144
+ ws.on("close", async () => {
145
+ await log.debug(`WebSocket \u8FDE\u63A5\u5DF2\u5173\u95ED: ${\u5BA2\u6237\u7AEFid}`);
146
+ await WebSocket\u7BA1\u7406\u80052.\u5220\u9664\u8FDE\u63A5(\u5B58\u5728\u7684\u5BA2\u6237\u7AEFid);
147
+ });
148
+ ws.on("error", async (err) => {
149
+ await log.err(`WebSocket \u51FA\u73B0\u9519\u8BEF ${\u5BA2\u6237\u7AEFid}: %o`, err);
150
+ await WebSocket\u7BA1\u7406\u80052.\u5220\u9664\u8FDE\u63A5(\u5B58\u5728\u7684\u5BA2\u6237\u7AEFid);
151
+ });
108
152
  });
109
- if (server == null)
110
- throw new Error("\u542F\u52A8\u670D\u52A1\u5668\u5931\u8D25");
111
153
  return {
112
154
  ip: Object.values((0, import_node_os.networkInterfaces)()).flat().flatMap((address) => address !== void 0 ? [address] : []).map((wrappedAddress) => wrappedAddress.address).map((address) => `http://${address}:${this.\u7AEF\u53E3}`),
113
155
  server
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  附加代码
3
- } from "../../chunk-OMGVOLYE.js";
3
+ } from "../../chunk-KRQ6KUVY.js";
4
4
  export {
5
5
  \u9644\u52A0\u4EE3\u7801
6
6
  };
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  main
4
- } from "../../chunk-7RH7Z7VC.js";
5
- import "../../chunk-OMGVOLYE.js";
4
+ } from "../../chunk-3DVNMDUP.js";
5
+ import "../../chunk-KRQ6KUVY.js";
6
6
 
7
7
  // src/bin/gen-type/bin.ts
8
8
  import path from "node:path";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  main
3
- } from "../../chunk-7RH7Z7VC.js";
4
- import "../../chunk-OMGVOLYE.js";
3
+ } from "../../chunk-3DVNMDUP.js";
4
+ import "../../chunk-KRQ6KUVY.js";
5
5
  export {
6
6
  main
7
7
  };