@lsby/net-core 0.3.36 → 0.3.38
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 +121 -19
- package/dist/cjs/index.d.cts +2 -1
- package/dist/cjs/interface/extend/json-base.cjs +49 -2
- package/dist/cjs/interface/extend/json-wrap.cjs +49 -2
- package/dist/cjs/plugin/extend/json.cjs +49 -2
- 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 +49 -2
- package/dist/cjs/server/server.cjs +57 -15
- package/dist/cjs/tools/tools.cjs +52 -0
- package/dist/cjs/tools/tools.d.cts +4 -0
- 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-AMBUPXY3.js → chunk-54IJ3ZGJ.js} +8 -5
- package/dist/esm/chunk-AUPZZGG7.js +45 -0
- package/dist/esm/{chunk-AHCV3LQ7.js → chunk-BC6IISWS.js} +7 -0
- package/dist/esm/{chunk-XM66T73O.js → chunk-BEJF4KW3.js} +34 -16
- package/dist/esm/chunk-EAVNASDB.js +22 -0
- package/dist/esm/chunk-ES4NZ4EM.js +27 -0
- package/dist/esm/{chunk-PVTF4VYK.js → chunk-HOFWZLG5.js} +1 -1
- package/dist/esm/{chunk-B55VVACL.js → chunk-KNZTLDS7.js} +1 -1
- package/dist/esm/{chunk-OMGVOLYE.js → chunk-KRQ6KUVY.js} +14 -0
- package/dist/esm/{chunk-IPDMEQ3O.js → chunk-PKE7OYIU.js} +6 -3
- 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 +15 -9
- package/dist/esm/interface/extend/json-base.js +5 -3
- package/dist/esm/interface/extend/json-wrap.js +5 -3
- package/dist/esm/plugin/extend/json.js +4 -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 +4 -2
- package/dist/esm/server/server.js +3 -2
- package/dist/esm/tools/tools.d.ts +4 -0
- package/dist/esm/tools/tools.js +8 -0
- package/package.json +3 -1
|
@@ -32,12 +32,59 @@ 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
|
|
|
65
|
+
// src/tools/tools.ts
|
|
66
|
+
function \u622A\u65AD\u5B57\u7B26\u4E32(\u5185\u5BB9) {
|
|
67
|
+
var \u6700\u5927\u65E5\u5FD7\u957F\u5EA6 = 1e3;
|
|
68
|
+
if (\u5185\u5BB9.length > \u6700\u5927\u65E5\u5FD7\u957F\u5EA6)
|
|
69
|
+
return \u5185\u5BB9.slice(0, \u6700\u5927\u65E5\u5FD7\u957F\u5EA6) + "...";
|
|
70
|
+
return \u5185\u5BB9;
|
|
71
|
+
}
|
|
72
|
+
function \u9012\u5F52\u622A\u65AD\u5B57\u7B26\u4E32(\u6570\u636E) {
|
|
73
|
+
if (typeof \u6570\u636E === "string")
|
|
74
|
+
return \u622A\u65AD\u5B57\u7B26\u4E32(\u6570\u636E);
|
|
75
|
+
if (Array.isArray(\u6570\u636E))
|
|
76
|
+
return \u6570\u636E.map((\u9879) => \u9012\u5F52\u622A\u65AD\u5B57\u7B26\u4E32(\u9879));
|
|
77
|
+
if (typeof \u6570\u636E === "object" && \u6570\u636E !== null) {
|
|
78
|
+
const \u65B0\u6570\u636E = {};
|
|
79
|
+
for (const key in \u6570\u636E) {
|
|
80
|
+
if (\u6570\u636E.hasOwnProperty(key))
|
|
81
|
+
\u65B0\u6570\u636E[key] = \u9012\u5F52\u622A\u65AD\u5B57\u7B26\u4E32(\u6570\u636E[key]);
|
|
82
|
+
}
|
|
83
|
+
return \u65B0\u6570\u636E;
|
|
84
|
+
}
|
|
85
|
+
return \u6570\u636E;
|
|
86
|
+
}
|
|
87
|
+
|
|
41
88
|
// src/result/result.ts
|
|
42
89
|
var \u7ED3\u679C = class {
|
|
43
90
|
};
|
|
@@ -52,7 +99,7 @@ var \u6B63\u786EJSON\u7ED3\u679C = class extends \u6B63\u786E\u7ED3\u679C {
|
|
|
52
99
|
log = Global.getItem("log");
|
|
53
100
|
async run(req, res) {
|
|
54
101
|
var log = (await this.log).extend("\u6B63\u786EJSON\u7ED3\u679C");
|
|
55
|
-
await log.debug("\u8FD4\u56DE\u6570\u636E: %o", this.data);
|
|
102
|
+
await log.debug("\u8FD4\u56DE\u6570\u636E: %o", \u9012\u5F52\u622A\u65AD\u5B57\u7B26\u4E32(this.data));
|
|
56
103
|
res.send(this.data);
|
|
57
104
|
}
|
|
58
105
|
};
|
|
@@ -76,7 +123,7 @@ var \u9519\u8BEFJSON\u7ED3\u679C = class extends \u9519\u8BEF\u7ED3\u679C {
|
|
|
76
123
|
log = Global.getItem("log");
|
|
77
124
|
async run(req, res) {
|
|
78
125
|
var log = (await this.log).extend("\u9519\u8BEFJSON\u7ED3\u679C");
|
|
79
|
-
await log.debug("\u8FD4\u56DE\u6570\u636E: %o", this.data);
|
|
126
|
+
await log.debug("\u8FD4\u56DE\u6570\u636E: %o", \u9012\u5F52\u622A\u65AD\u5B57\u7B26\u4E32(this.data));
|
|
80
127
|
res.send(this.data);
|
|
81
128
|
}
|
|
82
129
|
};
|
|
@@ -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
|
-
|
|
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
|
-
|
|
63
|
-
|
|
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
|
-
|
|
67
|
-
|
|
68
|
-
return \u8BF7\u6C42\u8DEF\u5F84 == \u63A5\u53E3\u7C7B\
|
|
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
|
-
|
|
73
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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 =
|
|
106
|
-
|
|
107
|
-
|
|
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
|
|
@@ -0,0 +1,52 @@
|
|
|
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/tools/tools.ts
|
|
21
|
+
var tools_exports = {};
|
|
22
|
+
__export(tools_exports, {
|
|
23
|
+
\u622A\u65AD\u5B57\u7B26\u4E32: () => \u622A\u65AD\u5B57\u7B26\u4E32,
|
|
24
|
+
\u9012\u5F52\u622A\u65AD\u5B57\u7B26\u4E32: () => \u9012\u5F52\u622A\u65AD\u5B57\u7B26\u4E32
|
|
25
|
+
});
|
|
26
|
+
module.exports = __toCommonJS(tools_exports);
|
|
27
|
+
function \u622A\u65AD\u5B57\u7B26\u4E32(\u5185\u5BB9) {
|
|
28
|
+
var \u6700\u5927\u65E5\u5FD7\u957F\u5EA6 = 1e3;
|
|
29
|
+
if (\u5185\u5BB9.length > \u6700\u5927\u65E5\u5FD7\u957F\u5EA6)
|
|
30
|
+
return \u5185\u5BB9.slice(0, \u6700\u5927\u65E5\u5FD7\u957F\u5EA6) + "...";
|
|
31
|
+
return \u5185\u5BB9;
|
|
32
|
+
}
|
|
33
|
+
function \u9012\u5F52\u622A\u65AD\u5B57\u7B26\u4E32(\u6570\u636E) {
|
|
34
|
+
if (typeof \u6570\u636E === "string")
|
|
35
|
+
return \u622A\u65AD\u5B57\u7B26\u4E32(\u6570\u636E);
|
|
36
|
+
if (Array.isArray(\u6570\u636E))
|
|
37
|
+
return \u6570\u636E.map((\u9879) => \u9012\u5F52\u622A\u65AD\u5B57\u7B26\u4E32(\u9879));
|
|
38
|
+
if (typeof \u6570\u636E === "object" && \u6570\u636E !== null) {
|
|
39
|
+
const \u65B0\u6570\u636E = {};
|
|
40
|
+
for (const key in \u6570\u636E) {
|
|
41
|
+
if (\u6570\u636E.hasOwnProperty(key))
|
|
42
|
+
\u65B0\u6570\u636E[key] = \u9012\u5F52\u622A\u65AD\u5B57\u7B26\u4E32(\u6570\u636E[key]);
|
|
43
|
+
}
|
|
44
|
+
return \u65B0\u6570\u636E;
|
|
45
|
+
}
|
|
46
|
+
return \u6570\u636E;
|
|
47
|
+
}
|
|
48
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
49
|
+
0 && (module.exports = {
|
|
50
|
+
\u622A\u65AD\u5B57\u7B26\u4E32,
|
|
51
|
+
\u9012\u5F52\u622A\u65AD\u5B57\u7B26\u4E32
|
|
52
|
+
});
|
|
@@ -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))
|
|
@@ -1,9 +1,12 @@
|
|
|
1
|
-
import {
|
|
2
|
-
Global
|
|
3
|
-
} from "./chunk-AHCV3LQ7.js";
|
|
4
1
|
import {
|
|
5
2
|
插件
|
|
6
3
|
} from "./chunk-N4NY37XI.js";
|
|
4
|
+
import {
|
|
5
|
+
递归截断字符串
|
|
6
|
+
} from "./chunk-ES4NZ4EM.js";
|
|
7
|
+
import {
|
|
8
|
+
Global
|
|
9
|
+
} from "./chunk-BC6IISWS.js";
|
|
7
10
|
|
|
8
11
|
// src/plugin/extend/json.ts
|
|
9
12
|
import { format } from "node:util";
|
|
@@ -18,13 +21,13 @@ var JSON\u89E3\u6790\u63D2\u4EF6 = class extends \u63D2\u4EF6 {
|
|
|
18
21
|
pRes(null);
|
|
19
22
|
})
|
|
20
23
|
);
|
|
21
|
-
await log.debug("\u51C6\u5907\u89E3\u6790 JSON\uFF1A%o", req.body);
|
|
24
|
+
await log.debug("\u51C6\u5907\u89E3\u6790 JSON\uFF1A%o", \u9012\u5F52\u622A\u65AD\u5B57\u7B26\u4E32(req.body));
|
|
22
25
|
const parseResult = t.safeParse(req.body);
|
|
23
26
|
if (!parseResult.success) {
|
|
24
27
|
await log.err("\u89E3\u6790 JSON \u5931\u8D25\uFF1A%o", parseResult.error);
|
|
25
28
|
throw new Error(format("\u89E3\u6790 JSON \u5931\u8D25: %O", parseResult.error));
|
|
26
29
|
}
|
|
27
|
-
await log.debug("\u6210\u529F\u89E3\u6790 JSON
|
|
30
|
+
await log.debug("\u6210\u529F\u89E3\u6790 JSON");
|
|
28
31
|
return parseResult.data;
|
|
29
32
|
});
|
|
30
33
|
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import {
|
|
2
|
+
插件
|
|
3
|
+
} from "./chunk-N4NY37XI.js";
|
|
4
|
+
import {
|
|
5
|
+
Global
|
|
6
|
+
} from "./chunk-BC6IISWS.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
|
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import {
|
|
2
2
|
Global
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-BC6IISWS.js";
|
|
4
4
|
|
|
5
5
|
// src/server/server.ts
|
|
6
6
|
import { networkInterfaces } from "node:os";
|
|
7
7
|
import express from "express";
|
|
8
8
|
import short from "short-uuid";
|
|
9
|
+
import { WebSocketServer } from "ws";
|
|
9
10
|
var \u670D\u52A1\u5668 = class {
|
|
10
11
|
constructor(\u63A5\u53E3\u4EEC, \u7AEF\u53E3, \u9759\u6001\u8D44\u6E90\u8DEF\u5F84) {
|
|
11
12
|
this.\u63A5\u53E3\u4EEC = \u63A5\u53E3\u4EEC;
|
|
@@ -14,27 +15,27 @@ var \u670D\u52A1\u5668 = class {
|
|
|
14
15
|
}
|
|
15
16
|
log = Global.getItem("log");
|
|
16
17
|
async run() {
|
|
17
|
-
|
|
18
|
+
var app = express();
|
|
18
19
|
app.use(async (req, res) => {
|
|
19
20
|
var log = (await this.log).extend("\u8BF7\u6C42").extend(short().new());
|
|
20
21
|
try {
|
|
21
|
-
|
|
22
|
-
|
|
22
|
+
var \u8BF7\u6C42\u8DEF\u5F84 = req.path;
|
|
23
|
+
var \u8BF7\u6C42\u65B9\u6CD5 = req.method.toLowerCase();
|
|
23
24
|
await log.debug("\u6536\u5230\u8BF7\u6C42, \u8DEF\u5F84: %o, \u65B9\u6CD5: %o", \u8BF7\u6C42\u8DEF\u5F84, \u8BF7\u6C42\u65B9\u6CD5);
|
|
24
25
|
await log.debug("\u5C1D\u8BD5\u5339\u914D\u63A5\u53E3...");
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
return \u8BF7\u6C42\u8DEF\u5F84 == \u63A5\u53E3\u7C7B\
|
|
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();
|
|
28
29
|
});
|
|
29
30
|
if (\u76EE\u6807\u63A5\u53E3 != null) {
|
|
30
31
|
await log.debug("\u547D\u4E2D\u63A5\u53E3");
|
|
31
|
-
|
|
32
|
-
|
|
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();
|
|
33
34
|
await log.debug("\u627E\u5230 %o \u4E2A \u63D2\u4EF6, \u51C6\u5907\u6267\u884C...", \u63A5\u53E3\u63D2\u4EF6.length);
|
|
34
|
-
|
|
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), {});
|
|
35
36
|
await log.debug("\u63D2\u4EF6 \u6267\u884C\u5B8C\u6BD5");
|
|
36
37
|
await log.debug("\u51C6\u5907\u6267\u884C\u63A5\u53E3\u903B\u8F91...");
|
|
37
|
-
|
|
38
|
+
var \u63A5\u53E3\u7ED3\u679C = await \u76EE\u6807\u63A5\u53E3.\u63A5\u53E3\u5B9E\u73B0(\u63D2\u4EF6\u7ED3\u679C);
|
|
38
39
|
await log.debug("\u63A5\u53E3\u903B\u8F91\u6267\u884C\u5B8C\u6BD5");
|
|
39
40
|
await log.debug("\u51C6\u5907\u6267\u884C\u8FD4\u56DE\u903B\u8F91...");
|
|
40
41
|
await \u63A5\u53E3\u7ED3\u679C.run(req, res);
|
|
@@ -61,12 +62,29 @@ var \u670D\u52A1\u5668 = class {
|
|
|
61
62
|
res.send("\u670D\u52A1\u5668\u5185\u90E8\u9519\u8BEF");
|
|
62
63
|
}
|
|
63
64
|
});
|
|
64
|
-
var server =
|
|
65
|
-
|
|
66
|
-
|
|
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
|
+
});
|
|
67
87
|
});
|
|
68
|
-
if (server == null)
|
|
69
|
-
throw new Error("\u542F\u52A8\u670D\u52A1\u5668\u5931\u8D25");
|
|
70
88
|
return {
|
|
71
89
|
ip: Object.values(networkInterfaces()).flat().flatMap((address) => address !== void 0 ? [address] : []).map((wrappedAddress) => wrappedAddress.address).map((address) => `http://${address}:${this.\u7AEF\u53E3}`),
|
|
72
90
|
server
|
|
@@ -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
|
+
};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
// src/tools/tools.ts
|
|
2
|
+
function \u622A\u65AD\u5B57\u7B26\u4E32(\u5185\u5BB9) {
|
|
3
|
+
var \u6700\u5927\u65E5\u5FD7\u957F\u5EA6 = 1e3;
|
|
4
|
+
if (\u5185\u5BB9.length > \u6700\u5927\u65E5\u5FD7\u957F\u5EA6)
|
|
5
|
+
return \u5185\u5BB9.slice(0, \u6700\u5927\u65E5\u5FD7\u957F\u5EA6) + "...";
|
|
6
|
+
return \u5185\u5BB9;
|
|
7
|
+
}
|
|
8
|
+
function \u9012\u5F52\u622A\u65AD\u5B57\u7B26\u4E32(\u6570\u636E) {
|
|
9
|
+
if (typeof \u6570\u636E === "string")
|
|
10
|
+
return \u622A\u65AD\u5B57\u7B26\u4E32(\u6570\u636E);
|
|
11
|
+
if (Array.isArray(\u6570\u636E))
|
|
12
|
+
return \u6570\u636E.map((\u9879) => \u9012\u5F52\u622A\u65AD\u5B57\u7B26\u4E32(\u9879));
|
|
13
|
+
if (typeof \u6570\u636E === "object" && \u6570\u636E !== null) {
|
|
14
|
+
const \u65B0\u6570\u636E = {};
|
|
15
|
+
for (const key in \u6570\u636E) {
|
|
16
|
+
if (\u6570\u636E.hasOwnProperty(key))
|
|
17
|
+
\u65B0\u6570\u636E[key] = \u9012\u5F52\u622A\u65AD\u5B57\u7B26\u4E32(\u6570\u636E[key]);
|
|
18
|
+
}
|
|
19
|
+
return \u65B0\u6570\u636E;
|
|
20
|
+
}
|
|
21
|
+
return \u6570\u636E;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export {
|
|
25
|
+
截断字符串,
|
|
26
|
+
递归截断字符串
|
|
27
|
+
};
|
|
@@ -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
|
|