@lsby/net-core 0.3.35 → 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 (49) 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 +109 -32
  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 +72 -32
  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-BEJF4KW3.js +97 -0
  28. package/dist/esm/chunk-EAVNASDB.js +22 -0
  29. package/dist/esm/{chunk-7OIWSU4D.js → chunk-FGAYTB2N.js} +3 -3
  30. package/dist/esm/{chunk-OMGVOLYE.js → chunk-KRQ6KUVY.js} +14 -0
  31. package/dist/esm/{chunk-ZFC2FWJW.js → chunk-QOCDUZSU.js} +1 -1
  32. package/dist/esm/{chunk-G7ZUXXCZ.js → chunk-W7UNHY6S.js} +1 -1
  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 +13 -8
  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
  49. package/dist/esm/chunk-K5ECRUNR.js +0 -81
@@ -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
  };
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  附加代码
3
- } from "./chunk-OMGVOLYE.js";
3
+ } from "./chunk-KRQ6KUVY.js";
4
4
 
5
5
  // src/bin/gen-type/index.ts
6
6
  import { randomUUID } from "node:crypto";
@@ -45,12 +45,12 @@ async function main(tsconfig\u8DEF\u5F84, \u76EE\u6807\u8DEF\u5F84, \u8F93\u51FA
45
45
  await log.debug(`\u7B5B\u9009\u51FA ${\u76F8\u5173\u6E90\u6587\u4EF6\u4EEC.length} \u4E2A\u76F8\u5173\u6E90\u6587\u4EF6`);
46
46
  var \u4F34\u968F\u7684\u865A\u62DF\u6587\u4EF6\u4EEC = \u76F8\u5173\u6E90\u6587\u4EF6\u4EEC.map((a) => {
47
47
  var \u4EE3\u7801 = [
48
- `import { \u63A5\u53E3\u7C7B\u578B, \u5408\u5E76JSON\u63D2\u4EF6\u7ED3\u679C } from '@lsby/net-core'`,
48
+ `import { \u63A5\u53E3\u7C7B\u578B, \u5408\u5E76JSON\u63D2\u4EF6\u7ED3\u679C, \u53D6\u7B2C\u4E00\u4E2AWS\u63D2\u4EF6\u7ED3\u679C } from '@lsby/net-core'`,
49
49
  `import { z } from 'zod'`,
50
50
  `import \u5BFC\u5165 from "./${a.fileName.split("/").at(-1)?.replaceAll(".ts", "")}"`,
51
51
  ``,
52
52
  `
53
- type \u8BA1\u7B97\u7ED3\u679C =
53
+ type JSON\u63A5\u53E3\u8BA1\u7B97\u7ED3\u679C =
54
54
  typeof \u5BFC\u5165 extends \u63A5\u53E3\u7C7B\u578B<infer Path, infer Method, infer PreApis, infer SuccessSchema, infer ErrorSchema>
55
55
  ? Path extends string
56
56
  ? {
@@ -62,6 +62,19 @@ async function main(tsconfig\u8DEF\u5F84, \u76EE\u6807\u8DEF\u5F84, \u8F93\u51FA
62
62
  }
63
63
  : never
64
64
  : never
65
+ type WS\u63A5\u53E3\u8BA1\u7B97\u7ED3\u679C =
66
+ typeof \u5BFC\u5165 extends \u63A5\u53E3\u7C7B\u578B<infer Path, infer Method, infer PreApis, infer SuccessSchema, infer ErrorSchema>
67
+ ? Path extends string
68
+ ? \u53D6\u7B2C\u4E00\u4E2AWS\u63D2\u4EF6\u7ED3\u679C<PreApis> extends infer R
69
+ ? {} extends R
70
+ ? never
71
+ : {
72
+ path: Path
73
+ data: \u53D6\u7B2C\u4E00\u4E2AWS\u63D2\u4EF6\u7ED3\u679C<PreApis>
74
+ }
75
+ : never
76
+ : never
77
+ : never
65
78
  `
66
79
  ];
67
80
  return ts.createSourceFile(
@@ -85,12 +98,22 @@ async function main(tsconfig\u8DEF\u5F84, \u76EE\u6807\u8DEF\u5F84, \u8F93\u51FA
85
98
  oldProgram: \u9879\u76EE
86
99
  });
87
100
  var \u7C7B\u578B\u68C0\u67E5\u5668 = \u65B0\u9879\u76EE.getTypeChecker();
88
- var \u68C0\u67E5\u7ED3\u679C = [];
101
+ var JSON\u7ED3\u679C = [];
102
+ var WS\u7ED3\u679C = [];
89
103
  for (var \u6E90\u6587\u4EF6 of \u4F34\u968F\u7684\u865A\u62DF\u6587\u4EF6\u4EEC) {
90
104
  ts.forEachChild(\u6E90\u6587\u4EF6, (node) => {
91
- if (ts.isTypeAliasDeclaration(node) && node.name.text === "\u8BA1\u7B97\u7ED3\u679C") {
105
+ if (ts.isTypeAliasDeclaration(node) && node.name.text === "JSON\u63A5\u53E3\u8BA1\u7B97\u7ED3\u679C") {
106
+ const type = \u7C7B\u578B\u68C0\u67E5\u5668.getTypeAtLocation(node);
107
+ JSON\u7ED3\u679C.push(
108
+ \u7C7B\u578B\u68C0\u67E5\u5668.typeToString(
109
+ type,
110
+ void 0,
111
+ ts.TypeFormatFlags.NoTruncation | ts.TypeFormatFlags.AllowUniqueESSymbolType | ts.TypeFormatFlags.UseAliasDefinedOutsideCurrentScope
112
+ )
113
+ );
114
+ } else if (ts.isTypeAliasDeclaration(node) && node.name.text === "WS\u63A5\u53E3\u8BA1\u7B97\u7ED3\u679C") {
92
115
  const type = \u7C7B\u578B\u68C0\u67E5\u5668.getTypeAtLocation(node);
93
- \u68C0\u67E5\u7ED3\u679C.push(
116
+ WS\u7ED3\u679C.push(
94
117
  \u7C7B\u578B\u68C0\u67E5\u5668.typeToString(
95
118
  type,
96
119
  void 0,
@@ -100,9 +123,15 @@ async function main(tsconfig\u8DEF\u5F84, \u76EE\u6807\u8DEF\u5F84, \u8F93\u51FA
100
123
  }
101
124
  });
102
125
  }
103
- var \u6700\u7EC8\u7ED3\u679C = Array.from(new Set(\u68C0\u67E5\u7ED3\u679C.filter((a) => a != "any" && a != "never" && a != "unknown")));
104
- await log.debug(`\u6700\u7EC8\u7B5B\u9009\u51FA ${\u6700\u7EC8\u7ED3\u679C.length} \u4E2A\u63A5\u53E3\u7C7B\u578B`);
105
- var \u6700\u7EC8\u4EE3\u7801 = [`export type InterfaceType = [${\u6700\u7EC8\u7ED3\u679C.join(",")}]`, \u9644\u52A0\u4EE3\u7801];
126
+ var \u6700\u7EC8\u7ED3\u679C_JSON = Array.from(new Set(JSON\u7ED3\u679C.filter((a) => a != "any" && a != "never" && a != "unknown")));
127
+ await log.debug(`\u6700\u7EC8\u7B5B\u9009\u51FA ${\u6700\u7EC8\u7ED3\u679C_JSON.length} \u4E2A\u63A5\u53E3\u7C7B\u578B`);
128
+ var \u6700\u7EC8\u7ED3\u679C_WS = Array.from(new Set(WS\u7ED3\u679C.filter((a) => a != "any" && a != "never" && a != "unknown")));
129
+ await log.debug(`\u6700\u7EC8\u7B5B\u9009\u51FA ${\u6700\u7EC8\u7ED3\u679C_WS.length} \u4E2Aws\u63A5\u53E3\u7C7B\u578B`);
130
+ var \u6700\u7EC8\u4EE3\u7801 = [
131
+ `export type InterfaceType = [${\u6700\u7EC8\u7ED3\u679C_JSON.join(",")}]`,
132
+ `export type InterfaceWsType = [${\u6700\u7EC8\u7ED3\u679C_WS.join(",")}]`,
133
+ \u9644\u52A0\u4EE3\u7801
134
+ ];
106
135
  await log.debug("\u6700\u7EC8\u4EE3\u7801\u751F\u6210\u5B8C\u6210");
107
136
  var \u8F93\u51FA\u6587\u4EF6\u5939 = path.dirname(\u8F93\u51FA\u6587\u4EF6\u8DEF\u5F84);
108
137
  if (!fs.existsSync(\u8F93\u51FA\u6587\u4EF6\u5939))
@@ -0,0 +1,45 @@
1
+ import {
2
+ Global
3
+ } from "./chunk-BC6IISWS.js";
4
+ import {
5
+ 插件
6
+ } from "./chunk-N4NY37XI.js";
7
+
8
+ // src/plugin/extend/web-socket.ts
9
+ import { z } from "zod";
10
+ var WebSocket\u63D2\u4EF6 = class extends \u63D2\u4EF6 {
11
+ constructor(\u4FE1\u606F\u63CF\u8FF0) {
12
+ super(
13
+ z.object({
14
+ ws\u64CD\u4F5C: z.object({
15
+ \u53D1\u9001ws\u4FE1\u606F: z.function(z.tuple([\u4FE1\u606F\u63CF\u8FF0]), z.promise(z.void())),
16
+ \u5173\u95EDws\u8FDE\u63A5: z.function(z.tuple([]), z.promise(z.void()))
17
+ }).or(z.undefined())
18
+ }),
19
+ async (req, _res) => {
20
+ var wsId = req.headers["ws-client-id"];
21
+ var WebSocket\u7BA1\u7406\u8005 = await Global.getItem("WebSocket\u7BA1\u7406\u8005");
22
+ var ws\u53E5\u67C4 = null;
23
+ if (typeof wsId == "string")
24
+ ws\u53E5\u67C4 = await WebSocket\u7BA1\u7406\u8005.\u83B7\u5F97\u53E5\u67C4(wsId);
25
+ if (!ws\u53E5\u67C4)
26
+ return { ws\u64CD\u4F5C: void 0 };
27
+ var \u5B58\u5728\u7684ws\u53E5\u67C4 = ws\u53E5\u67C4;
28
+ return {
29
+ ws\u64CD\u4F5C: {
30
+ async \u53D1\u9001ws\u4FE1\u606F(\u4FE1\u606F) {
31
+ \u5B58\u5728\u7684ws\u53E5\u67C4.send(JSON.stringify(\u4FE1\u606F));
32
+ },
33
+ async \u5173\u95EDws\u8FDE\u63A5() {
34
+ \u5B58\u5728\u7684ws\u53E5\u67C4.close();
35
+ }
36
+ }
37
+ };
38
+ }
39
+ );
40
+ }
41
+ };
42
+
43
+ export {
44
+ WebSocket插件
45
+ };
@@ -1,9 +1,16 @@
1
+ import {
2
+ WebSocket管理者
3
+ } from "./chunk-EAVNASDB.js";
4
+
1
5
  // src/global/global.ts
2
6
  import { GlobalAsyncItem, GlobalService } from "@lsby/ts-global";
3
7
  import { Log } from "@lsby/ts-log";
4
8
  var Global = new GlobalService([
5
9
  new GlobalAsyncItem("log", async () => {
6
10
  return new Log("@lsby:net-core");
11
+ }),
12
+ new GlobalAsyncItem("WebSocket\u7BA1\u7406\u8005", async () => {
13
+ return new WebSocket\u7BA1\u7406\u8005({});
7
14
  })
8
15
  ]);
9
16
 
@@ -0,0 +1,97 @@
1
+ import {
2
+ Global
3
+ } from "./chunk-BC6IISWS.js";
4
+
5
+ // src/server/server.ts
6
+ import { networkInterfaces } from "node:os";
7
+ import express from "express";
8
+ import short from "short-uuid";
9
+ import { WebSocketServer } from "ws";
10
+ var \u670D\u52A1\u5668 = class {
11
+ constructor(\u63A5\u53E3\u4EEC, \u7AEF\u53E3, \u9759\u6001\u8D44\u6E90\u8DEF\u5F84) {
12
+ this.\u63A5\u53E3\u4EEC = \u63A5\u53E3\u4EEC;
13
+ this.\u7AEF\u53E3 = \u7AEF\u53E3;
14
+ this.\u9759\u6001\u8D44\u6E90\u8DEF\u5F84 = \u9759\u6001\u8D44\u6E90\u8DEF\u5F84;
15
+ }
16
+ log = Global.getItem("log");
17
+ async run() {
18
+ var app = express();
19
+ app.use(async (req, res) => {
20
+ var log = (await this.log).extend("\u8BF7\u6C42").extend(short().new());
21
+ try {
22
+ var \u8BF7\u6C42\u8DEF\u5F84 = req.path;
23
+ var \u8BF7\u6C42\u65B9\u6CD5 = req.method.toLowerCase();
24
+ await log.debug("\u6536\u5230\u8BF7\u6C42, \u8DEF\u5F84: %o, \u65B9\u6CD5: %o", \u8BF7\u6C42\u8DEF\u5F84, \u8BF7\u6C42\u65B9\u6CD5);
25
+ await log.debug("\u5C1D\u8BD5\u5339\u914D\u63A5\u53E3...");
26
+ var \u76EE\u6807\u63A5\u53E3 = this.\u63A5\u53E3\u4EEC.find((\u63A5\u53E3) => {
27
+ var \u63A5\u53E3\u7C7B\u578B2 = \u63A5\u53E3.\u83B7\u5F97\u63A5\u53E3\u7C7B\u578B();
28
+ 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();
29
+ });
30
+ if (\u76EE\u6807\u63A5\u53E3 != null) {
31
+ await log.debug("\u547D\u4E2D\u63A5\u53E3");
32
+ var \u63A5\u53E3\u7C7B\u578B = \u76EE\u6807\u63A5\u53E3.\u83B7\u5F97\u63A5\u53E3\u7C7B\u578B();
33
+ var \u63A5\u53E3\u63D2\u4EF6 = \u63A5\u53E3\u7C7B\u578B.\u83B7\u5F97\u63D2\u4EF6\u4EEC();
34
+ await log.debug("\u627E\u5230 %o \u4E2A \u63D2\u4EF6, \u51C6\u5907\u6267\u884C...", \u63A5\u53E3\u63D2\u4EF6.length);
35
+ 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), {});
36
+ await log.debug("\u63D2\u4EF6 \u6267\u884C\u5B8C\u6BD5");
37
+ await log.debug("\u51C6\u5907\u6267\u884C\u63A5\u53E3\u903B\u8F91...");
38
+ var \u63A5\u53E3\u7ED3\u679C = await \u76EE\u6807\u63A5\u53E3.\u63A5\u53E3\u5B9E\u73B0(\u63D2\u4EF6\u7ED3\u679C);
39
+ await log.debug("\u63A5\u53E3\u903B\u8F91\u6267\u884C\u5B8C\u6BD5");
40
+ await log.debug("\u51C6\u5907\u6267\u884C\u8FD4\u56DE\u903B\u8F91...");
41
+ await \u63A5\u53E3\u7ED3\u679C.run(req, res);
42
+ await log.debug("\u8FD4\u56DE\u903B\u8F91\u6267\u884C\u5B8C\u6BD5");
43
+ return;
44
+ }
45
+ await log.debug("\u6CA1\u6709\u547D\u4E2D\u63A5\u53E3");
46
+ if (this.\u9759\u6001\u8D44\u6E90\u8DEF\u5F84 && req.method.toLowerCase() == "get") {
47
+ await log.debug("\u5C1D\u8BD5\u5339\u914D\u9759\u6001\u8D44\u6E90...");
48
+ express.static(this.\u9759\u6001\u8D44\u6E90\u8DEF\u5F84, {
49
+ setHeaders: async () => {
50
+ await log.debug("\u547D\u4E2D\u9759\u6001\u8D44\u6E90");
51
+ }
52
+ })(req, res, async () => {
53
+ await log.debug("\u6CA1\u6709\u547D\u4E2D\u9759\u6001\u8D44\u6E90");
54
+ await log.debug("\u6CA1\u6709\u547D\u4E2D\u4EFB\u4F55\u8D44\u6E90");
55
+ res.status(404);
56
+ res.end();
57
+ });
58
+ }
59
+ } catch (e) {
60
+ await log.err(e);
61
+ res.status(500);
62
+ res.send("\u670D\u52A1\u5668\u5185\u90E8\u9519\u8BEF");
63
+ }
64
+ });
65
+ var server = app.listen(this.\u7AEF\u53E3);
66
+ var wss = new WebSocketServer({ server });
67
+ wss.on("connection", async (ws, req) => {
68
+ var log = (await this.log).extend("WebSocket").extend(short().new());
69
+ await log.debug(`WebSocket \u8BF7\u6C42\u8FDE\u63A5: ${req.url}`);
70
+ var WebSocket\u7BA1\u7406\u8005 = await Global.getItem("WebSocket\u7BA1\u7406\u8005");
71
+ var \u5BA2\u6237\u7AEFid = req.url?.split("?id=")[1];
72
+ if (!\u5BA2\u6237\u7AEFid)
73
+ return ws.close(4001, "\u7F3A\u5C11\u5BA2\u6237\u7AEF ID");
74
+ if (await WebSocket\u7BA1\u7406\u8005.\u67E5\u8BE2\u8FDE\u63A5\u5B58\u5728(\u5BA2\u6237\u7AEFid) == true)
75
+ return ws.close(4002, "\u5BA2\u6237\u7AEF ID \u5DF2\u5B58\u5728");
76
+ var \u5B58\u5728\u7684\u5BA2\u6237\u7AEFid = \u5BA2\u6237\u7AEFid;
77
+ await WebSocket\u7BA1\u7406\u8005.\u589E\u52A0\u8FDE\u63A5(\u5BA2\u6237\u7AEFid, ws);
78
+ await log.debug(`WebSocket \u8FDE\u63A5\u5DF2\u5EFA\u7ACB, \u5BA2\u6237\u7AEFid: ${\u5BA2\u6237\u7AEFid}`);
79
+ ws.on("close", async () => {
80
+ await log.debug(`WebSocket \u8FDE\u63A5\u5DF2\u5173\u95ED: ${\u5BA2\u6237\u7AEFid}`);
81
+ await WebSocket\u7BA1\u7406\u8005.\u5220\u9664\u8FDE\u63A5(\u5B58\u5728\u7684\u5BA2\u6237\u7AEFid);
82
+ });
83
+ ws.on("error", async (err) => {
84
+ await log.err(`WebSocket \u51FA\u73B0\u9519\u8BEF ${\u5BA2\u6237\u7AEFid}: %o`, err);
85
+ await WebSocket\u7BA1\u7406\u8005.\u5220\u9664\u8FDE\u63A5(\u5B58\u5728\u7684\u5BA2\u6237\u7AEFid);
86
+ });
87
+ });
88
+ return {
89
+ ip: Object.values(networkInterfaces()).flat().flatMap((address) => address !== void 0 ? [address] : []).map((wrappedAddress) => wrappedAddress.address).map((address) => `http://${address}:${this.\u7AEF\u53E3}`),
90
+ server
91
+ };
92
+ }
93
+ };
94
+
95
+ export {
96
+ 服务器
97
+ };
@@ -0,0 +1,22 @@
1
+ // src/global/ws.ts
2
+ var WebSocket\u7BA1\u7406\u8005 = class {
3
+ constructor(\u8FDE\u63A5\u8868) {
4
+ this.\u8FDE\u63A5\u8868 = \u8FDE\u63A5\u8868;
5
+ }
6
+ async \u589E\u52A0\u8FDE\u63A5(\u8BF7\u6C42id, ws\u53E5\u67C4) {
7
+ this.\u8FDE\u63A5\u8868[\u8BF7\u6C42id] = ws\u53E5\u67C4;
8
+ }
9
+ async \u67E5\u8BE2\u8FDE\u63A5\u5B58\u5728(\u8BF7\u6C42id) {
10
+ return this.\u8FDE\u63A5\u8868[\u8BF7\u6C42id] == null ? false : true;
11
+ }
12
+ async \u83B7\u5F97\u53E5\u67C4(\u8BF7\u6C42id) {
13
+ return this.\u8FDE\u63A5\u8868[\u8BF7\u6C42id] || null;
14
+ }
15
+ async \u5220\u9664\u8FDE\u63A5(id) {
16
+ delete this.\u8FDE\u63A5\u8868[id];
17
+ }
18
+ };
19
+
20
+ export {
21
+ WebSocket管理者
22
+ };
@@ -1,9 +1,9 @@
1
+ import {
2
+ Global
3
+ } from "./chunk-BC6IISWS.js";
1
4
  import {
2
5
  插件
3
6
  } from "./chunk-N4NY37XI.js";
4
- import {
5
- Global
6
- } from "./chunk-AHCV3LQ7.js";
7
7
 
8
8
  // src/plugin/extend/json.ts
9
9
  import { format } from "node:util";
@@ -43,6 +43,17 @@ export type \u4ECE\u8DEF\u5F84\u83B7\u5F97\u53C2\u6570<Path, A = InterfaceType>
43
43
  : \u4ECE\u8DEF\u5F84\u83B7\u5F97\u53C2\u6570<Path, xs>
44
44
  : never
45
45
  : never
46
+ export type \u4ECE\u8DEF\u5F84\u83B7\u5F97WS\u53C2\u6570<Path, A = InterfaceWsType> = A extends []
47
+ ? never
48
+ : A extends [infer x, ...infer xs]
49
+ ? 'path' extends keyof x
50
+ ? x['path'] extends Path
51
+ ? 'data' extends keyof x
52
+ ? x['data']
53
+ : never
54
+ : \u4ECE\u8DEF\u5F84\u83B7\u5F97WS\u53C2\u6570<Path, xs>
55
+ : never
56
+ : never
46
57
  export type \u4ECE\u8DEF\u5F84\u83B7\u5F97\u65B9\u6CD5<Path, A = InterfaceType> = A extends []
47
58
  ? never
48
59
  : A extends [infer x, ...infer xs]
@@ -102,6 +113,9 @@ export type Get\u8BF7\u6C42\u540E\u7AEF\u51FD\u6570\u7C7B\u578B = <\u8DEF\u5F84
102
113
  export type Post\u8BF7\u6C42\u540E\u7AEF\u51FD\u6570\u7C7B\u578B = <\u8DEF\u5F84 extends \u5143\u7EC4\u8F6C\u8054\u5408<Post\u63A5\u53E3\u8DEF\u5F84\u4EEC>>(
103
114
  \u8DEF\u5F84: \u8DEF\u5F84,
104
115
  \u53C2\u6570: \u4ECE\u8DEF\u5F84\u83B7\u5F97\u53C2\u6570<\u8DEF\u5F84>,
116
+ ws\u4FE1\u606F\u56DE\u8C03?: (\u4FE1\u606F: \u4ECE\u8DEF\u5F84\u83B7\u5F97WS\u53C2\u6570<\u8DEF\u5F84>) => void,
117
+ ws\u5173\u95ED\u56DE\u8C03?: (\u4FE1\u606F: CloseEvent) => void,
118
+ ws\u9519\u8BEF\u56DE\u8C03?: (\u4FE1\u606F: Event) => void,
105
119
  ) => Promise<\u4ECE\u8DEF\u5F84\u83B7\u5F97\u6B63\u786E\u8FD4\u56DE<\u8DEF\u5F84> | \u4ECE\u8DEF\u5F84\u83B7\u5F97\u9519\u8BEF\u8FD4\u56DE<\u8DEF\u5F84>>
106
120
  `;
107
121
 
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  正确JSON结果,
3
3
  错误JSON结果
4
- } from "./chunk-IPDMEQ3O.js";
4
+ } from "./chunk-XU67JT6R.js";
5
5
  import {
6
6
  接口
7
7
  } from "./chunk-G4P3OAFL.js";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  正确JSON结果,
3
3
  错误JSON结果
4
- } from "./chunk-IPDMEQ3O.js";
4
+ } from "./chunk-XU67JT6R.js";
5
5
  import {
6
6
  接口
7
7
  } from "./chunk-G4P3OAFL.js";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  Global
3
- } from "./chunk-AHCV3LQ7.js";
3
+ } from "./chunk-BC6IISWS.js";
4
4
 
5
5
  // src/result/result.ts
6
6
  var \u7ED3\u679C = class {
@@ -1,6 +1,8 @@
1
1
  import { GlobalService, GlobalAsyncItem } from '@lsby/ts-global';
2
2
  import { Log } from '@lsby/ts-log';
3
+ import { WebSocket管理者 as WebSocket___ } from './ws.js';
4
+ import 'ws';
3
5
 
4
- declare var Global: GlobalService<[GlobalAsyncItem<"log", Log>]>;
6
+ declare var Global: GlobalService<[GlobalAsyncItem<"log", Log>, GlobalAsyncItem<"WebSocket管理者", WebSocket___>]>;
5
7
 
6
8
  export { Global };
@@ -1,6 +1,7 @@
1
1
  import {
2
2
  Global
3
- } from "../chunk-AHCV3LQ7.js";
3
+ } from "../chunk-BC6IISWS.js";
4
+ import "../chunk-EAVNASDB.js";
4
5
  export {
5
6
  Global
6
7
  };
@@ -0,0 +1,13 @@
1
+ import { WebSocket } from 'ws';
2
+
3
+ type 请求id = string;
4
+ declare class WebSocket管理者 {
5
+ private 连接表;
6
+ constructor(连接表: Record<请求id, WebSocket | null>);
7
+ 增加连接(请求id: 请求id, ws句柄: WebSocket): Promise<void>;
8
+ 查询连接存在(请求id: string): Promise<boolean>;
9
+ 获得句柄(请求id: 请求id): Promise<WebSocket | null>;
10
+ 删除连接(id: string): Promise<void>;
11
+ }
12
+
13
+ export { WebSocket管理者 };
@@ -0,0 +1,6 @@
1
+ import {
2
+ WebSocket管理者
3
+ } from "../chunk-EAVNASDB.js";
4
+ export {
5
+ WebSocket\u7BA1\u7406\u8005
6
+ };
@@ -8,7 +8,8 @@ export { 中文路径支持插件 } from './plugin/extend/chinese-path.js';
8
8
  export { 自定义数据插件 } from './plugin/extend/custom-data.js';
9
9
  export { JSON解析插件, 从接口类型获得JSON参数, 任意JSON解析插件, 任意JSON解析插件项, 合并JSON插件结果 } from './plugin/extend/json.js';
10
10
  export { 表单解析插件 } from './plugin/extend/urlencoded.js';
11
- export { 任意插件, 包装插件项,Task插件内部类型, 取插件内部ts类型, 合并插件结果, 插件, 插件项类型 } from './plugin/plug.js';
11
+ export { WebSocket插件, 任意WS插件, 任意WS插件项, WS插件泛型, 取第一个WS插件结果 } from './plugin/extend/web-socket.js';
12
+ export { 任意插件, 包装插件项, 取Task插件内部类型, 取Task插件类型, 取插件内部ts类型, 合并插件结果, 插件, 插件项类型 } from './plugin/plug.js';
12
13
  export { 正确JSON结果, 正确结果, 正确自定义结果, 结果, 错误JSON结果, 错误结果 } from './result/result.js';
13
14
  export { 服务器 } from './server/server.js';
14
15
  import '@lsby/ts-fp-data';
package/dist/esm/index.js CHANGED
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  JSON接口
3
- } from "./chunk-G7ZUXXCZ.js";
3
+ } from "./chunk-W7UNHY6S.js";
4
4
  import {
5
5
  JSON状态接口,
6
6
  JSON状态接口类型
7
- } from "./chunk-ZFC2FWJW.js";
7
+ } from "./chunk-QOCDUZSU.js";
8
8
  import {
9
9
  中文路径支持插件
10
10
  } from "./chunk-KW3M3VXP.js";
@@ -13,10 +13,16 @@ import {
13
13
  } from "./chunk-2MN4G2DG.js";
14
14
  import {
15
15
  JSON解析插件
16
- } from "./chunk-7OIWSU4D.js";
16
+ } from "./chunk-FGAYTB2N.js";
17
17
  import {
18
18
  表单解析插件
19
19
  } from "./chunk-KZPZVZ2B.js";
20
+ import {
21
+ WebSocket插件
22
+ } from "./chunk-56BD5FOG.js";
23
+ import {
24
+ 服务器
25
+ } from "./chunk-BEJF4KW3.js";
20
26
  import {
21
27
  正确JSON结果,
22
28
  正确结果,
@@ -24,10 +30,12 @@ import {
24
30
  结果,
25
31
  错误JSON结果,
26
32
  错误结果
27
- } from "./chunk-IPDMEQ3O.js";
33
+ } from "./chunk-XU67JT6R.js";
28
34
  import {
29
35
  业务行为
30
36
  } from "./chunk-B6PEMS6O.js";
37
+ import "./chunk-BC6IISWS.js";
38
+ import "./chunk-EAVNASDB.js";
31
39
  import {
32
40
  接口
33
41
  } from "./chunk-G4P3OAFL.js";
@@ -40,15 +48,12 @@ import {
40
48
  import {
41
49
  插件
42
50
  } from "./chunk-N4NY37XI.js";
43
- import {
44
- 服务器
45
- } from "./chunk-K5ECRUNR.js";
46
- import "./chunk-AHCV3LQ7.js";
47
51
  export {
48
52
  JSON\u63A5\u53E3,
49
53
  JSON\u72B6\u6001\u63A5\u53E3,
50
54
  JSON\u72B6\u6001\u63A5\u53E3\u7C7B\u578B,
51
55
  JSON\u89E3\u6790\u63D2\u4EF6,
56
+ WebSocket\u63D2\u4EF6,
52
57
  \u4E1A\u52A1\u884C\u4E3A,
53
58
  \u4E2D\u6587\u8DEF\u5F84\u652F\u6301\u63D2\u4EF6,
54
59
  \u63A5\u53E3,
@@ -1,9 +1,10 @@
1
1
  import {
2
2
  JSON接口
3
- } from "../../chunk-G7ZUXXCZ.js";
4
- import "../../chunk-IPDMEQ3O.js";
3
+ } from "../../chunk-W7UNHY6S.js";
4
+ import "../../chunk-XU67JT6R.js";
5
+ import "../../chunk-BC6IISWS.js";
6
+ import "../../chunk-EAVNASDB.js";
5
7
  import "../../chunk-G4P3OAFL.js";
6
- import "../../chunk-AHCV3LQ7.js";
7
8
  export {
8
9
  JSON\u63A5\u53E3
9
10
  };
@@ -1,11 +1,12 @@
1
1
  import {
2
2
  JSON状态接口,
3
3
  JSON状态接口类型
4
- } from "../../chunk-ZFC2FWJW.js";
5
- import "../../chunk-IPDMEQ3O.js";
4
+ } from "../../chunk-QOCDUZSU.js";
5
+ import "../../chunk-XU67JT6R.js";
6
+ import "../../chunk-BC6IISWS.js";
7
+ import "../../chunk-EAVNASDB.js";
6
8
  import "../../chunk-G4P3OAFL.js";
7
9
  import "../../chunk-SF5Z34AP.js";
8
- import "../../chunk-AHCV3LQ7.js";
9
10
  export {
10
11
  JSON\u72B6\u6001\u63A5\u53E3,
11
12
  JSON\u72B6\u6001\u63A5\u53E3\u7C7B\u578B
@@ -1,8 +1,9 @@
1
1
  import {
2
2
  JSON解析插件
3
- } from "../../chunk-7OIWSU4D.js";
3
+ } from "../../chunk-FGAYTB2N.js";
4
+ import "../../chunk-BC6IISWS.js";
5
+ import "../../chunk-EAVNASDB.js";
4
6
  import "../../chunk-N4NY37XI.js";
5
- import "../../chunk-AHCV3LQ7.js";
6
7
  export {
7
8
  JSON\u89E3\u6790\u63D2\u4EF6
8
9
  };
@@ -0,0 +1,22 @@
1
+ import { z } from 'zod';
2
+ import { 插件 as __, 包装插件项 as _____, 插件项类型 as _____$1, 取Task插件类型 as _Task____ } from '../plug.js';
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插件结果 };
@@ -0,0 +1,9 @@
1
+ import {
2
+ WebSocket插件
3
+ } from "../../chunk-56BD5FOG.js";
4
+ import "../../chunk-BC6IISWS.js";
5
+ import "../../chunk-EAVNASDB.js";
6
+ import "../../chunk-N4NY37XI.js";
7
+ export {
8
+ WebSocket\u63D2\u4EF6
9
+ };
@@ -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 插件项类型 };
@@ -5,8 +5,9 @@ import {
5
5
  结果,
6
6
  错误JSON结果,
7
7
  错误结果
8
- } from "../chunk-IPDMEQ3O.js";
9
- import "../chunk-AHCV3LQ7.js";
8
+ } from "../chunk-XU67JT6R.js";
9
+ import "../chunk-BC6IISWS.js";
10
+ import "../chunk-EAVNASDB.js";
10
11
  export {
11
12
  \u6B63\u786EJSON\u7ED3\u679C,
12
13
  \u6B63\u786E\u7ED3\u679C,
@@ -1,7 +1,8 @@
1
1
  import {
2
2
  服务器
3
- } from "../chunk-K5ECRUNR.js";
4
- import "../chunk-AHCV3LQ7.js";
3
+ } from "../chunk-BEJF4KW3.js";
4
+ import "../chunk-BC6IISWS.js";
5
+ import "../chunk-EAVNASDB.js";
5
6
  export {
6
7
  \u670D\u52A1\u5668
7
8
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lsby/net-core",
3
- "version": "0.3.35",
3
+ "version": "0.3.37",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  "require": "./dist/cjs/index.cjs",
@@ -36,6 +36,7 @@
36
36
  "lodash": "^4.17.21",
37
37
  "short-uuid": "^5.2.0",
38
38
  "vitest": "^2.0.2",
39
+ "ws": "^8.18.0",
39
40
  "zod": "^3.23.8"
40
41
  },
41
42
  "devDependencies": {
@@ -43,6 +44,7 @@
43
44
  "@lsby/eslint-config": "^0.2.8",
44
45
  "@types/lodash": "^4.17.7",
45
46
  "@types/node": "^20.12.10",
47
+ "@types/ws": "^8.5.13",
46
48
  "@vitest/coverage-v8": "^2.0.2",
47
49
  "bumpp": "^9.4.1",
48
50
  "prettier": "3.2.5",