@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.
- package/dist/bin/gen-type/addition.cjs +14 -0
- package/dist/bin/gen-type/bin.cjs +51 -8
- package/dist/bin/gen-type/index.cjs +51 -8
- package/dist/cjs/bin/gen-type/addition.cjs +14 -0
- package/dist/cjs/bin/gen-type/bin.cjs +51 -8
- package/dist/cjs/bin/gen-type/index.cjs +51 -8
- package/dist/cjs/global/global.cjs +24 -0
- package/dist/cjs/global/global.d.cts +3 -1
- package/dist/cjs/global/ws.cjs +46 -0
- package/dist/cjs/global/ws.d.cts +13 -0
- package/dist/cjs/index.cjs +109 -32
- package/dist/cjs/index.d.cts +2 -1
- package/dist/cjs/interface/extend/json-base.cjs +24 -0
- package/dist/cjs/interface/extend/json-wrap.cjs +24 -0
- package/dist/cjs/plugin/extend/json.cjs +24 -0
- package/dist/cjs/plugin/extend/web-socket.cjs +111 -0
- package/dist/cjs/plugin/extend/web-socket.d.cts +22 -0
- package/dist/cjs/plugin/plug.d.cts +2 -1
- package/dist/cjs/result/result.cjs +24 -0
- package/dist/cjs/server/server.cjs +72 -32
- package/dist/esm/bin/gen-type/addition.js +1 -1
- package/dist/esm/bin/gen-type/bin.js +2 -2
- package/dist/esm/bin/gen-type/index.js +2 -2
- package/dist/esm/{chunk-7RH7Z7VC.js → chunk-3DVNMDUP.js} +38 -9
- package/dist/esm/chunk-56BD5FOG.js +45 -0
- package/dist/esm/{chunk-AHCV3LQ7.js → chunk-BC6IISWS.js} +7 -0
- package/dist/esm/chunk-BEJF4KW3.js +97 -0
- package/dist/esm/chunk-EAVNASDB.js +22 -0
- package/dist/esm/{chunk-7OIWSU4D.js → chunk-FGAYTB2N.js} +3 -3
- package/dist/esm/{chunk-OMGVOLYE.js → chunk-KRQ6KUVY.js} +14 -0
- package/dist/esm/{chunk-ZFC2FWJW.js → chunk-QOCDUZSU.js} +1 -1
- package/dist/esm/{chunk-G7ZUXXCZ.js → chunk-W7UNHY6S.js} +1 -1
- package/dist/esm/{chunk-IPDMEQ3O.js → chunk-XU67JT6R.js} +1 -1
- package/dist/esm/global/global.d.ts +3 -1
- package/dist/esm/global/global.js +2 -1
- package/dist/esm/global/ws.d.ts +13 -0
- package/dist/esm/global/ws.js +6 -0
- package/dist/esm/index.d.ts +2 -1
- package/dist/esm/index.js +13 -8
- package/dist/esm/interface/extend/json-base.js +4 -3
- package/dist/esm/interface/extend/json-wrap.js +4 -3
- package/dist/esm/plugin/extend/json.js +3 -2
- package/dist/esm/plugin/extend/web-socket.d.ts +22 -0
- package/dist/esm/plugin/extend/web-socket.js +9 -0
- package/dist/esm/plugin/plug.d.ts +2 -1
- package/dist/esm/result/result.js +3 -2
- package/dist/esm/server/server.js +3 -2
- package/package.json +3 -1
- package/dist/esm/chunk-K5ECRUNR.js +0 -81
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
附加代码
|
|
3
|
-
} from "./chunk-
|
|
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 \
|
|
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
|
-
\
|
|
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\
|
|
104
|
-
await log.debug(`\u6700\u7EC8\u7B5B\u9009\u51FA ${\u6700\u7EC8\u7ED3\
|
|
105
|
-
var \u6700\u7EC8\
|
|
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
|
+
};
|
|
@@ -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,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 };
|
|
@@ -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管理者 };
|
package/dist/esm/index.d.ts
CHANGED
|
@@ -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 {
|
|
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-
|
|
3
|
+
} from "./chunk-W7UNHY6S.js";
|
|
4
4
|
import {
|
|
5
5
|
JSON状态接口,
|
|
6
6
|
JSON状态接口类型
|
|
7
|
-
} from "./chunk-
|
|
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-
|
|
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-
|
|
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-
|
|
4
|
-
import "../../chunk-
|
|
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-
|
|
5
|
-
import "../../chunk-
|
|
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-
|
|
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插件结果 };
|
|
@@ -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-
|
|
9
|
-
import "../chunk-
|
|
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,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lsby/net-core",
|
|
3
|
-
"version": "0.3.
|
|
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",
|