@lsby/net-core 0.13.9 → 0.14.0
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/cjs/global/model/hub.cjs +30 -26
- package/dist/cjs/global/model/hub.d.cts +9 -10
- package/dist/cjs/global/model/web-socket.cjs +19 -42
- package/dist/cjs/global/model/web-socket.d.cts +3 -5
- package/dist/cjs/global/web-socket.cjs +19 -42
- package/dist/cjs/help/help.cjs +19 -42
- package/dist/cjs/index.cjs +46 -52
- package/dist/cjs/index.d.cts +1 -1
- package/dist/cjs/interface/interface-logic.cjs +19 -42
- package/dist/cjs/plugin/form.cjs +2 -5
- package/dist/cjs/plugin/json.cjs +1 -1
- package/dist/cjs/plugin/urlencoded.cjs +1 -1
- package/dist/cjs/plugin/web-socket.cjs +33 -29
- package/dist/cjs/plugin/web-socket.d.cts +5 -2
- package/dist/cjs/server/server.cjs +19 -42
- package/dist/esm/{chunk-MVMDWJTB.js → chunk-2IOILFRG.js} +1 -1
- package/dist/esm/{chunk-AMKELJEU.js → chunk-33RHYEJH.js} +1 -1
- package/dist/esm/{chunk-7GT72IUT.js → chunk-CPJIGVXF.js} +7 -7
- package/dist/esm/{chunk-DDPOLAM4.js → chunk-LSQLFSN3.js} +2 -5
- package/dist/esm/{chunk-P23ZAK4I.js → chunk-NRXEIWM6.js} +1 -1
- package/dist/esm/{chunk-AB35ZHL3.js → chunk-SMLWKWSD.js} +1 -1
- package/dist/esm/{chunk-X22GXQPR.js → chunk-UK5TCQXV.js} +1 -1
- package/dist/esm/{chunk-TE6CG2FF.js → chunk-XPACPTVL.js} +1 -1
- package/dist/esm/chunk-YRLVAFRQ.js +63 -0
- package/dist/esm/{chunk-MRTIZDKN.js → chunk-ZFLDOR4T.js} +6 -17
- package/dist/esm/global/model/hub.d.ts +9 -10
- package/dist/esm/global/model/hub.js +3 -3
- package/dist/esm/global/model/web-socket.d.ts +3 -5
- package/dist/esm/global/model/web-socket.js +2 -2
- package/dist/esm/global/web-socket.js +3 -3
- package/dist/esm/help/help.js +4 -4
- package/dist/esm/index.d.ts +1 -1
- package/dist/esm/index.js +41 -36
- package/dist/esm/interface/interface-logic.js +5 -5
- package/dist/esm/plugin/form.js +1 -1
- package/dist/esm/plugin/json.js +1 -1
- package/dist/esm/plugin/urlencoded.js +1 -1
- package/dist/esm/plugin/web-socket.d.ts +5 -2
- package/dist/esm/plugin/web-socket.js +2 -2
- package/dist/esm/server/server.js +4 -4
- package/package.json +1 -1
- package/dist/esm/chunk-NTDDPUP7.js +0 -59
|
@@ -17,7 +17,7 @@ var JSON\u53C2\u6570\u89E3\u6790\u63D2\u4EF6 = class _JSON\u53C2\u6570\u89E3\u67
|
|
|
17
17
|
let log = \u9644\u52A0\u53C2\u6570.log.extend(_JSON\u53C2\u6570\u89E3\u6790\u63D2\u4EF6.name);
|
|
18
18
|
await new Promise(
|
|
19
19
|
(pRes, Prej) => express.json(opt)(req, res, (err) => {
|
|
20
|
-
if (err !== null) return Prej(`JSON \u89E3\u6790\u5931\u8D25: ${String(err)}`);
|
|
20
|
+
if (err !== null && err !== void 0) return Prej(`JSON \u89E3\u6790\u5931\u8D25: ${String(err)}`);
|
|
21
21
|
pRes(null);
|
|
22
22
|
})
|
|
23
23
|
);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
|
-
|
|
3
|
-
} from "./chunk-
|
|
2
|
+
集线器监听器宿主
|
|
3
|
+
} from "./chunk-YRLVAFRQ.js";
|
|
4
4
|
import {
|
|
5
5
|
插件
|
|
6
6
|
} from "./chunk-EGIJQJFI.js";
|
|
@@ -18,8 +18,8 @@ var WebSocket\u63D2\u4EF6 = class _WebSocket\u63D2\u4EF6 extends \u63D2\u4EF6 {
|
|
|
18
18
|
ws\u64CD\u4F5C: z.object({
|
|
19
19
|
\u53D1\u9001ws\u4FE1\u606F: z.function(z.tuple([\u540E\u63A8\u524D\u4FE1\u606F\u63CF\u8FF0]), z.promise(z.void())),
|
|
20
20
|
\u76D1\u542Cws\u4FE1\u606F: z.function(
|
|
21
|
-
z.tuple([z.function(z.tuple([\u524D\u63A8\u540E\u4FE1\u606F\u63CF\u8FF0]), z.promise(z.void()))]),
|
|
22
|
-
z.promise(z.
|
|
21
|
+
z.tuple([z.function(z.tuple([\u524D\u63A8\u540E\u4FE1\u606F\u63CF\u8FF0]), z.promise(z.void())), z.instanceof(\u96C6\u7EBF\u5668\u76D1\u542C\u5668\u5BBF\u4E3B)]),
|
|
22
|
+
z.promise(z.void())
|
|
23
23
|
),
|
|
24
24
|
\u5173\u95EDws\u8FDE\u63A5: z.function(z.tuple([]), z.promise(z.void())),
|
|
25
25
|
\u8BBE\u7F6E\u6E05\u7406\u51FD\u6570: z.function(z.tuple([z.function(z.tuple([]), z.promise(z.void()))]), z.promise(z.void()))
|
|
@@ -68,16 +68,16 @@ var WebSocket\u63D2\u4EF6 = class _WebSocket\u63D2\u4EF6 extends \u63D2\u4EF6 {
|
|
|
68
68
|
await log.debug("\u8BBE\u7F6E WebSocket \u6E05\u7406\u51FD\u6570", { wsId });
|
|
69
69
|
await WebSocket\u7BA1\u7406\u5668.\u8BBE\u7F6E\u6E05\u7406\u51FD\u6570(wsId, \u6E05\u7406\u51FD\u6570);
|
|
70
70
|
},
|
|
71
|
-
async \u76D1\u542Cws\u4FE1\u606F(\u56DE\u8C03\u51FD\u6570) {
|
|
71
|
+
async \u76D1\u542Cws\u4FE1\u606F(\u56DE\u8C03\u51FD\u6570, \u5BBF\u4E3B) {
|
|
72
72
|
if (ws\u53E5\u67C4 === null) {
|
|
73
73
|
ws\u53E5\u67C4 = await WebSocket\u7BA1\u7406\u5668.\u83B7\u5F97ws\u53E5\u67C4(wsId);
|
|
74
74
|
}
|
|
75
75
|
if (ws\u53E5\u67C4 === null) {
|
|
76
76
|
await log.error("\u672A\u80FD\u83B7\u53D6\u5230\u6709\u6548\u7684 WebSocket \u53E5\u67C4");
|
|
77
|
-
return
|
|
77
|
+
return;
|
|
78
78
|
}
|
|
79
79
|
await log.debug("\u6CE8\u518C WebSocket \u6D88\u606F\u76D1\u542C", { wsId });
|
|
80
|
-
|
|
80
|
+
WebSocket\u7BA1\u7406\u5668.\u8BBE\u7F6E\u6D88\u606F\u76D1\u542C(wsId, \u56DE\u8C03\u51FD\u6570, \u5BBF\u4E3B);
|
|
81
81
|
}
|
|
82
82
|
}
|
|
83
83
|
});
|
|
@@ -30,11 +30,8 @@ var Form\u53C2\u6570\u89E3\u6790\u63D2\u4EF6 = class _Form\u53C2\u6570\u89E3\u67
|
|
|
30
30
|
let multerMiddleware = upload.any();
|
|
31
31
|
await new Promise(
|
|
32
32
|
(pRes, Prej) => multerMiddleware(req, res, (err) => {
|
|
33
|
-
if (err
|
|
34
|
-
|
|
35
|
-
} else {
|
|
36
|
-
Prej(`Form \u89E3\u6790\u5931\u8D25: ${String(err)}`);
|
|
37
|
-
}
|
|
33
|
+
if (err !== null && err !== void 0) Prej(`Form \u89E3\u6790\u5931\u8D25: ${String(err)}`);
|
|
34
|
+
pRes(null);
|
|
38
35
|
})
|
|
39
36
|
);
|
|
40
37
|
await log.debug("\u51C6\u5907\u89E3\u6790 Form \u53C2\u6570\uFF1A%o", JSON.stringify(\u9012\u5F52\u622A\u65AD\u5B57\u7B26\u4E32(req.body)));
|
|
@@ -17,7 +17,7 @@ var UrlEncoded\u53C2\u6570\u89E3\u6790\u63D2\u4EF6 = class _UrlEncoded\u53C2\u65
|
|
|
17
17
|
let log = \u9644\u52A0\u53C2\u6570.log.extend(_UrlEncoded\u53C2\u6570\u89E3\u6790\u63D2\u4EF6.name);
|
|
18
18
|
await new Promise(
|
|
19
19
|
(pRes, Prej) => express.urlencoded({ extended: true, ...opt })(req, res, (err) => {
|
|
20
|
-
if (err !== null) return Prej(`UrlEncoded \u89E3\u6790\u5931\u8D25: ${String(err)}`);
|
|
20
|
+
if (err !== null && err !== void 0) return Prej(`UrlEncoded \u89E3\u6790\u5931\u8D25: ${String(err)}`);
|
|
21
21
|
pRes(null);
|
|
22
22
|
})
|
|
23
23
|
);
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
// src/global/model/hub.ts
|
|
2
|
+
var \u96C6\u7EBF\u5668\u76D1\u542C\u5668\u5BBF\u4E3B = class {
|
|
3
|
+
\u89E3\u9664\u56DE\u8C03 = null;
|
|
4
|
+
/** @internal */
|
|
5
|
+
\u7ED1\u5B9A\u56DE\u8C03(\u56DE\u8C03) {
|
|
6
|
+
if (this.\u89E3\u9664\u56DE\u8C03 !== null) {
|
|
7
|
+
throw new Error("\u6B64\u5BBF\u4E3B\u5DF2\u88AB\u7ED1\u5B9A\u5230\u4E00\u4E2A\u76D1\u542C\u5668\uFF0C\u4E0D\u53EF\u91CD\u590D\u7ED1\u5B9A");
|
|
8
|
+
}
|
|
9
|
+
this.\u89E3\u9664\u56DE\u8C03 = \u56DE\u8C03;
|
|
10
|
+
}
|
|
11
|
+
\u89E3\u7ED1() {
|
|
12
|
+
if (this.\u89E3\u9664\u56DE\u8C03 !== null) {
|
|
13
|
+
this.\u89E3\u9664\u56DE\u8C03();
|
|
14
|
+
this.\u89E3\u9664\u56DE\u8C03 = null;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
var \u96C6\u7EBF\u5668\u6A21\u578B = class _\u96C6\u7EBF\u5668\u6A21\u578B {
|
|
19
|
+
// 使用 WeakRef + FinalizationRegistry 防止"反向持有" this
|
|
20
|
+
static \u6E05\u7406\u6CE8\u518C\u5668 = new FinalizationRegistry(({ \u5B9E\u4F8B\u5F15\u7528, \u76D1\u542C\u5668 }) => {
|
|
21
|
+
let \u5B9E\u4F8B = \u5B9E\u4F8B\u5F15\u7528.deref();
|
|
22
|
+
if (\u5B9E\u4F8B === void 0) return;
|
|
23
|
+
\u5B9E\u4F8B.\u76D1\u542C\u5668\u96C6\u5408.delete(\u76D1\u542C\u5668);
|
|
24
|
+
});
|
|
25
|
+
\u76D1\u542C\u5668\u96C6\u5408 = /* @__PURE__ */ new Set();
|
|
26
|
+
\u9519\u8BEF\u5904\u7406\u5668 = null;
|
|
27
|
+
/**
|
|
28
|
+
* 设置广播错误时的处理器。
|
|
29
|
+
*/
|
|
30
|
+
\u8BBE\u7F6E\u9519\u8BEF\u5904\u7406\u5668(\u5904\u7406\u5668) {
|
|
31
|
+
this.\u9519\u8BEF\u5904\u7406\u5668 = \u5904\u7406\u5668;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* 注册监听器。
|
|
35
|
+
* 必须提供一个 `集线器监听器宿主` 实例。若宿主对象不被持有并被回收,监听器会在未来自动回收。
|
|
36
|
+
*/
|
|
37
|
+
\u6DFB\u52A0\u76D1\u542C\u5668(\u76D1\u542C\u5668, \u5BBF\u4E3B) {
|
|
38
|
+
let \u5B9E\u4F8B\u5F31\u5F15\u7528 = new WeakRef(this);
|
|
39
|
+
\u5BBF\u4E3B.\u7ED1\u5B9A\u56DE\u8C03(() => {
|
|
40
|
+
let \u5B9E\u4F8B = \u5B9E\u4F8B\u5F31\u5F15\u7528.deref();
|
|
41
|
+
if (\u5B9E\u4F8B !== void 0) {
|
|
42
|
+
\u5B9E\u4F8B.\u76D1\u542C\u5668\u96C6\u5408.delete(\u76D1\u542C\u5668);
|
|
43
|
+
}
|
|
44
|
+
_\u96C6\u7EBF\u5668\u6A21\u578B.\u6E05\u7406\u6CE8\u518C\u5668.unregister(\u5BBF\u4E3B);
|
|
45
|
+
});
|
|
46
|
+
this.\u76D1\u542C\u5668\u96C6\u5408.add(\u76D1\u542C\u5668);
|
|
47
|
+
_\u96C6\u7EBF\u5668\u6A21\u578B.\u6E05\u7406\u6CE8\u518C\u5668.register(\u5BBF\u4E3B, { \u5B9E\u4F8B\u5F15\u7528: \u5B9E\u4F8B\u5F31\u5F15\u7528, \u76D1\u542C\u5668 }, \u5BBF\u4E3B);
|
|
48
|
+
}
|
|
49
|
+
async \u5E7F\u64AD(\u6570\u636E) {
|
|
50
|
+
let snapshot = [...this.\u76D1\u542C\u5668\u96C6\u5408];
|
|
51
|
+
let \u7ED3\u679C = await Promise.allSettled(snapshot.map((l) => l(\u6570\u636E)));
|
|
52
|
+
for (let [\u7D22\u5F15, \u7ED3\u679C\u9879] of \u7ED3\u679C.entries()) {
|
|
53
|
+
if (\u7ED3\u679C\u9879.status === "rejected" && this.\u9519\u8BEF\u5904\u7406\u5668 !== null) {
|
|
54
|
+
await Promise.resolve(this.\u9519\u8BEF\u5904\u7406\u5668(\u6570\u636E, \u7D22\u5F15, \u7ED3\u679C\u9879.reason));
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
export {
|
|
61
|
+
集线器监听器宿主,
|
|
62
|
+
集线器模型
|
|
63
|
+
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
集线器模型
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-YRLVAFRQ.js";
|
|
4
4
|
import {
|
|
5
5
|
全局日志单例
|
|
6
6
|
} from "./chunk-F5IAX56T.js";
|
|
@@ -10,8 +10,6 @@ var WebSocket\u7BA1\u7406\u5668 = class {
|
|
|
10
10
|
log = \u5168\u5C40\u65E5\u5FD7\u5355\u4F8B.extend("WebSocket\u7BA1\u7406\u5668");
|
|
11
11
|
\u8FDE\u63A5\u8868 = {};
|
|
12
12
|
\u6D88\u606F\u76D1\u542C\u8868 = {};
|
|
13
|
-
\u8FDE\u63A5\u6E05\u7406\u6A21\u578B = new \u96C6\u7EBF\u5668\u6A21\u578B();
|
|
14
|
-
\u8FDE\u63A5\u6301\u6709\u8005\u8868 = {};
|
|
15
13
|
\u6E05\u7406\u51FD\u6570\u8868 = {};
|
|
16
14
|
\u589E\u52A0\u8FDE\u63A5(id, ws\u53E5\u67C4) {
|
|
17
15
|
if (id in this.\u8FDE\u63A5\u8868) this.\u5220\u9664\u8FDE\u63A5(id);
|
|
@@ -24,15 +22,11 @@ var WebSocket\u7BA1\u7406\u5668 = class {
|
|
|
24
22
|
this.\u6D88\u606F\u76D1\u542C\u8868[id] = \u6A21\u578B;
|
|
25
23
|
}
|
|
26
24
|
this.\u6CE8\u518Conmessage(id, ws\u53E5\u67C4);
|
|
27
|
-
let \u6301\u6709\u8005 = this.\u8FDE\u63A5\u6E05\u7406\u6A21\u578B.\u6DFB\u52A0\u76D1\u542C\u5668(async () => {
|
|
28
|
-
if (id in this.\u8FDE\u63A5\u8868) this.\u5220\u9664\u8FDE\u63A5(id);
|
|
29
|
-
});
|
|
30
|
-
this.\u8FDE\u63A5\u6301\u6709\u8005\u8868[id] = \u6301\u6709\u8005;
|
|
31
|
-
return \u6301\u6709\u8005;
|
|
32
25
|
}
|
|
33
26
|
\u5220\u9664\u8FDE\u63A5(id) {
|
|
34
27
|
let ws = this.\u8FDE\u63A5\u8868[id];
|
|
35
|
-
if (ws
|
|
28
|
+
if (ws === void 0) return;
|
|
29
|
+
if (ws !== null) {
|
|
36
30
|
ws.onmessage = null;
|
|
37
31
|
ws.once("error", (err) => void this.log.error(`WebSocket \u5F02\u6B65\u9519\u8BEF, id: ${id}, \u9519\u8BEF: ${err}`));
|
|
38
32
|
ws.once(
|
|
@@ -50,11 +44,6 @@ var WebSocket\u7BA1\u7406\u5668 = class {
|
|
|
50
44
|
delete this.\u8FDE\u63A5\u8868[id];
|
|
51
45
|
delete this.\u6E05\u7406\u51FD\u6570\u8868[id];
|
|
52
46
|
delete this.\u6D88\u606F\u76D1\u542C\u8868[id];
|
|
53
|
-
let \u6301\u6709\u8005 = this.\u8FDE\u63A5\u6301\u6709\u8005\u8868[id];
|
|
54
|
-
if (\u6301\u6709\u8005 !== void 0) {
|
|
55
|
-
this.\u8FDE\u63A5\u6E05\u7406\u6A21\u578B.\u79FB\u9664\u76D1\u542C\u5668(\u6301\u6709\u8005);
|
|
56
|
-
delete this.\u8FDE\u63A5\u6301\u6709\u8005\u8868[id];
|
|
57
|
-
}
|
|
58
47
|
}
|
|
59
48
|
\u6CE8\u518Conmessage(id, ws\u53E5\u67C4) {
|
|
60
49
|
ws\u53E5\u67C4.onmessage = async (event) => {
|
|
@@ -76,10 +65,10 @@ var WebSocket\u7BA1\u7406\u5668 = class {
|
|
|
76
65
|
async \u8BBE\u7F6E\u6E05\u7406\u51FD\u6570(id, \u6E05\u7406\u51FD\u6570) {
|
|
77
66
|
if (id in this.\u8FDE\u63A5\u8868) this.\u6E05\u7406\u51FD\u6570\u8868[id] = \u6E05\u7406\u51FD\u6570;
|
|
78
67
|
}
|
|
79
|
-
\u8BBE\u7F6E\u6D88\u606F\u76D1\u542C(id, \u56DE\u8C03\u51FD\u6570) {
|
|
68
|
+
\u8BBE\u7F6E\u6D88\u606F\u76D1\u542C(id, \u56DE\u8C03\u51FD\u6570, \u5BBF\u4E3B) {
|
|
80
69
|
let \u6A21\u578B = this.\u6D88\u606F\u76D1\u542C\u8868[id];
|
|
81
|
-
if (\u6A21\u578B === void 0) return
|
|
82
|
-
|
|
70
|
+
if (\u6A21\u578B === void 0) return;
|
|
71
|
+
\u6A21\u578B.\u6DFB\u52A0\u76D1\u542C\u5668(\u56DE\u8C03\u51FD\u6570, \u5BBF\u4E3B);
|
|
83
72
|
}
|
|
84
73
|
};
|
|
85
74
|
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
type 集线器监听器<T> = (数据: T) => Promise<void>;
|
|
2
2
|
type 广播错误处理<T> = (数据: T, 索引: number, 错误: unknown) => Promise<void> | void;
|
|
3
|
-
declare class
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
declare class 集线器监听器宿主 {
|
|
4
|
+
private 解除回调;
|
|
5
|
+
/** @internal */
|
|
6
|
+
绑定回调(回调: () => void): void;
|
|
7
|
+
解绑(): void;
|
|
6
8
|
}
|
|
7
9
|
declare class 集线器模型<T> {
|
|
8
10
|
private static 清理注册器;
|
|
9
|
-
private
|
|
10
|
-
private 持有者映射;
|
|
11
|
+
private 监听器集合;
|
|
11
12
|
private 错误处理器;
|
|
12
13
|
/**
|
|
13
14
|
* 设置广播错误时的处理器。
|
|
@@ -15,12 +16,10 @@ declare class 集线器模型<T> {
|
|
|
15
16
|
设置错误处理器(处理器: 广播错误处理<T>): void;
|
|
16
17
|
/**
|
|
17
18
|
* 注册监听器。
|
|
18
|
-
*
|
|
19
|
-
* ⚠️ 自动清理是非确定性的,不能依赖它实现实时释放。
|
|
19
|
+
* 必须提供一个 `集线器监听器宿主` 实例。若宿主对象不被持有并被回收,监听器会在未来自动回收。
|
|
20
20
|
*/
|
|
21
|
-
添加监听器(监听器: 集线器监听器<T
|
|
22
|
-
移除监听器(持有者: 集线器监听器持有者<T>): void;
|
|
21
|
+
添加监听器(监听器: 集线器监听器<T>, 宿主: 集线器监听器宿主): void;
|
|
23
22
|
广播(数据: T): Promise<void>;
|
|
24
23
|
}
|
|
25
24
|
|
|
26
|
-
export { type 广播错误处理, 集线器模型, type 集线器监听器,
|
|
25
|
+
export { type 广播错误处理, 集线器模型, type 集线器监听器, 集线器监听器宿主 };
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import {
|
|
2
2
|
集线器模型,
|
|
3
|
-
|
|
4
|
-
} from "../../chunk-
|
|
3
|
+
集线器监听器宿主
|
|
4
|
+
} from "../../chunk-YRLVAFRQ.js";
|
|
5
5
|
export {
|
|
6
6
|
\u96C6\u7EBF\u5668\u6A21\u578B,
|
|
7
|
-
\u96C6\u7EBF\u5668\u76D1\u542C\u5668\
|
|
7
|
+
\u96C6\u7EBF\u5668\u76D1\u542C\u5668\u5BBF\u4E3B
|
|
8
8
|
};
|
|
@@ -1,21 +1,19 @@
|
|
|
1
1
|
import { WebSocket } from 'ws';
|
|
2
|
-
import {
|
|
2
|
+
import { 集线器监听器宿主 as ________ } from './hub.js';
|
|
3
3
|
|
|
4
4
|
type id = string;
|
|
5
5
|
declare class WebSocket管理器 {
|
|
6
6
|
private log;
|
|
7
7
|
private 连接表;
|
|
8
8
|
private 消息监听表;
|
|
9
|
-
private 连接清理模型;
|
|
10
|
-
private 连接持有者表;
|
|
11
9
|
private 清理函数表;
|
|
12
|
-
增加连接(id: id, ws句柄: WebSocket):
|
|
10
|
+
增加连接(id: id, ws句柄: WebSocket): void;
|
|
13
11
|
删除连接(id: string): void;
|
|
14
12
|
private 注册onmessage;
|
|
15
13
|
查询连接存在(id: string): boolean;
|
|
16
14
|
获得ws句柄(id: id): Promise<WebSocket | null>;
|
|
17
15
|
设置清理函数(id: string, 清理函数: () => Promise<void>): Promise<void>;
|
|
18
|
-
设置消息监听(id: string, 回调函数: (数据: any) => Promise<void
|
|
16
|
+
设置消息监听(id: string, 回调函数: (数据: any) => Promise<void>, 宿主: ________): void;
|
|
19
17
|
}
|
|
20
18
|
|
|
21
19
|
export { WebSocket管理器 };
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import {
|
|
2
2
|
全局WebSocket管理器单例
|
|
3
|
-
} from "../chunk-
|
|
4
|
-
import "../chunk-
|
|
5
|
-
import "../chunk-
|
|
3
|
+
} from "../chunk-NRXEIWM6.js";
|
|
4
|
+
import "../chunk-ZFLDOR4T.js";
|
|
5
|
+
import "../chunk-YRLVAFRQ.js";
|
|
6
6
|
import "../chunk-F5IAX56T.js";
|
|
7
7
|
export {
|
|
8
8
|
\u5168\u5C40WebSocket\u7BA1\u7406\u5668\u5355\u4F8B
|
package/dist/esm/help/help.js
CHANGED
|
@@ -3,10 +3,10 @@ import {
|
|
|
3
3
|
构造元组,
|
|
4
4
|
构造对象,
|
|
5
5
|
默认请求附加参数
|
|
6
|
-
} from "../chunk-
|
|
7
|
-
import "../chunk-
|
|
8
|
-
import "../chunk-
|
|
9
|
-
import "../chunk-
|
|
6
|
+
} from "../chunk-2IOILFRG.js";
|
|
7
|
+
import "../chunk-NRXEIWM6.js";
|
|
8
|
+
import "../chunk-ZFLDOR4T.js";
|
|
9
|
+
import "../chunk-YRLVAFRQ.js";
|
|
10
10
|
import "../chunk-F5IAX56T.js";
|
|
11
11
|
export {
|
|
12
12
|
\u666E\u901A\u5BF9\u8C61\u6DF1\u5408\u5E76,
|
package/dist/esm/index.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export { 严格递归合并对象, 普通对象深合并, 构造元组, 构造对象, 默认请求附加参数 } from './help/help.js';
|
|
2
|
+
export { 广播错误处理, 集线器模型, 集线器监听器, 集线器监听器宿主 } from './global/model/hub.js';
|
|
2
3
|
export { 任意接口, 接口, 接口方法类型, 接口路径类型, 获得接口方法类型, 获得接口路径类型, 获得接口返回器类型, 获得接口逻辑类型 } from './interface/interface-base.js';
|
|
3
4
|
export { 任意接口逻辑, 接口逻辑, 接口逻辑Base, 接口逻辑正确类型, 接口逻辑错误类型, 接口逻辑附加参数类型, 清理函数类型, 获得接口逻辑上游接口类型, 获得接口逻辑插件类型, 获得接口逻辑最后接口类型, 获得接口逻辑正确类型, 获得接口逻辑错误类型, 获得接口逻辑附加参数类型, 计算接口逻辑参数, 计算接口逻辑正确结果, 计算接口逻辑错误结果 } from './interface/interface-logic.js';
|
|
4
5
|
export { 任意插件, 取插件正确ts类型, 取插件错误ts类型, 合并插件正确结果, 插件 } from './interface/interface-plugin.js';
|
|
@@ -27,7 +28,6 @@ import 'express';
|
|
|
27
28
|
import './help/interior.js';
|
|
28
29
|
import 'zod';
|
|
29
30
|
import 'multer';
|
|
30
|
-
import './global/model/hub.js';
|
|
31
31
|
import 'node:stream';
|
|
32
32
|
import 'node:http';
|
|
33
33
|
import '@lsby/ts-log';
|
package/dist/esm/index.js
CHANGED
|
@@ -1,39 +1,23 @@
|
|
|
1
1
|
import {
|
|
2
|
-
|
|
3
|
-
} from "./chunk-
|
|
4
|
-
import {
|
|
5
|
-
EXPORT_TYPE
|
|
6
|
-
} from "./chunk-HT7VG4BT.js";
|
|
2
|
+
虚拟文件返回器
|
|
3
|
+
} from "./chunk-WXTNTK3M.js";
|
|
7
4
|
import "./chunk-XPFEAXE4.js";
|
|
8
5
|
import "./chunk-BWFSM5FK.js";
|
|
9
6
|
import {
|
|
10
|
-
|
|
11
|
-
} from "./chunk-
|
|
12
|
-
import {
|
|
13
|
-
自定义插件
|
|
14
|
-
} from "./chunk-7OU27OBO.js";
|
|
15
|
-
import {
|
|
16
|
-
Form参数解析插件
|
|
17
|
-
} from "./chunk-DDPOLAM4.js";
|
|
18
|
-
import {
|
|
19
|
-
JSON参数解析插件
|
|
20
|
-
} from "./chunk-AMKELJEU.js";
|
|
21
|
-
import {
|
|
22
|
-
调试请求头插件
|
|
23
|
-
} from "./chunk-RWSXMQQI.js";
|
|
24
|
-
import {
|
|
25
|
-
路径解析插件
|
|
26
|
-
} from "./chunk-JLNRCPJD.js";
|
|
7
|
+
服务器
|
|
8
|
+
} from "./chunk-SMLWKWSD.js";
|
|
27
9
|
import {
|
|
28
10
|
Query参数解析插件
|
|
29
11
|
} from "./chunk-RVEKW2PT.js";
|
|
30
12
|
import {
|
|
31
13
|
UrlEncoded参数解析插件
|
|
32
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-UK5TCQXV.js";
|
|
33
15
|
import {
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
16
|
+
WebSocket插件
|
|
17
|
+
} from "./chunk-CPJIGVXF.js";
|
|
18
|
+
import {
|
|
19
|
+
EXPORT_TYPE
|
|
20
|
+
} from "./chunk-HT7VG4BT.js";
|
|
37
21
|
import {
|
|
38
22
|
常用接口返回器
|
|
39
23
|
} from "./chunk-AOZ3QFOM.js";
|
|
@@ -46,15 +30,31 @@ import {
|
|
|
46
30
|
import {
|
|
47
31
|
静态文件返回器
|
|
48
32
|
} from "./chunk-RWEYJ3T7.js";
|
|
49
|
-
import {
|
|
50
|
-
虚拟文件返回器
|
|
51
|
-
} from "./chunk-WXTNTK3M.js";
|
|
52
33
|
import {
|
|
53
34
|
接口返回器
|
|
54
35
|
} from "./chunk-FP6Q65NN.js";
|
|
55
36
|
import {
|
|
56
|
-
|
|
57
|
-
|
|
37
|
+
接口测试,
|
|
38
|
+
接口逻辑测试
|
|
39
|
+
} from "./chunk-GGNRLQAM.js";
|
|
40
|
+
import {
|
|
41
|
+
自定义数据插件
|
|
42
|
+
} from "./chunk-HINGVOU6.js";
|
|
43
|
+
import {
|
|
44
|
+
自定义插件
|
|
45
|
+
} from "./chunk-7OU27OBO.js";
|
|
46
|
+
import {
|
|
47
|
+
Form参数解析插件
|
|
48
|
+
} from "./chunk-LSQLFSN3.js";
|
|
49
|
+
import {
|
|
50
|
+
JSON参数解析插件
|
|
51
|
+
} from "./chunk-33RHYEJH.js";
|
|
52
|
+
import {
|
|
53
|
+
调试请求头插件
|
|
54
|
+
} from "./chunk-RWSXMQQI.js";
|
|
55
|
+
import {
|
|
56
|
+
路径解析插件
|
|
57
|
+
} from "./chunk-JLNRCPJD.js";
|
|
58
58
|
import "./chunk-2CGBESLT.js";
|
|
59
59
|
import {
|
|
60
60
|
接口
|
|
@@ -62,16 +62,19 @@ import {
|
|
|
62
62
|
import {
|
|
63
63
|
接口逻辑,
|
|
64
64
|
接口逻辑Base
|
|
65
|
-
} from "./chunk-
|
|
65
|
+
} from "./chunk-XPACPTVL.js";
|
|
66
66
|
import {
|
|
67
67
|
普通对象深合并,
|
|
68
68
|
构造元组,
|
|
69
69
|
构造对象,
|
|
70
70
|
默认请求附加参数
|
|
71
|
-
} from "./chunk-
|
|
72
|
-
import "./chunk-
|
|
73
|
-
import "./chunk-
|
|
74
|
-
import
|
|
71
|
+
} from "./chunk-2IOILFRG.js";
|
|
72
|
+
import "./chunk-NRXEIWM6.js";
|
|
73
|
+
import "./chunk-ZFLDOR4T.js";
|
|
74
|
+
import {
|
|
75
|
+
集线器模型,
|
|
76
|
+
集线器监听器宿主
|
|
77
|
+
} from "./chunk-YRLVAFRQ.js";
|
|
75
78
|
import "./chunk-F5IAX56T.js";
|
|
76
79
|
import {
|
|
77
80
|
插件
|
|
@@ -102,6 +105,8 @@ export {
|
|
|
102
105
|
\u865A\u62DF\u6587\u4EF6\u8FD4\u56DE\u5668,
|
|
103
106
|
\u8C03\u8BD5\u8BF7\u6C42\u5934\u63D2\u4EF6,
|
|
104
107
|
\u8DEF\u5F84\u89E3\u6790\u63D2\u4EF6,
|
|
108
|
+
\u96C6\u7EBF\u5668\u6A21\u578B,
|
|
109
|
+
\u96C6\u7EBF\u5668\u76D1\u542C\u5668\u5BBF\u4E3B,
|
|
105
110
|
\u9759\u6001\u6587\u4EF6\u8FD4\u56DE\u5668,
|
|
106
111
|
\u9ED8\u8BA4\u8BF7\u6C42\u9644\u52A0\u53C2\u6570
|
|
107
112
|
};
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import {
|
|
2
2
|
接口逻辑,
|
|
3
3
|
接口逻辑Base
|
|
4
|
-
} from "../chunk-
|
|
5
|
-
import "../chunk-
|
|
6
|
-
import "../chunk-
|
|
7
|
-
import "../chunk-
|
|
8
|
-
import "../chunk-
|
|
4
|
+
} from "../chunk-XPACPTVL.js";
|
|
5
|
+
import "../chunk-2IOILFRG.js";
|
|
6
|
+
import "../chunk-NRXEIWM6.js";
|
|
7
|
+
import "../chunk-ZFLDOR4T.js";
|
|
8
|
+
import "../chunk-YRLVAFRQ.js";
|
|
9
9
|
import "../chunk-F5IAX56T.js";
|
|
10
10
|
export {
|
|
11
11
|
\u63A5\u53E3\u903B\u8F91,
|
package/dist/esm/plugin/form.js
CHANGED
package/dist/esm/plugin/json.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
-
import {
|
|
2
|
+
import { 集线器监听器宿主 as ________ } from '../global/model/hub.js';
|
|
3
3
|
import { 插件 as __, 任意插件 as ____ } from '../interface/interface-plugin.js';
|
|
4
4
|
import '@lsby/ts-fp-data';
|
|
5
5
|
import 'express';
|
|
@@ -13,7 +13,10 @@ declare class WebSocket插件<后推前信息 extends z.AnyZodObject | z.ZodNeve
|
|
|
13
13
|
ws操作: z.ZodUnion<[
|
|
14
14
|
z.ZodObject<{
|
|
15
15
|
发送ws信息: z.ZodFunction<z.ZodTuple<[后推前信息], null>, z.ZodPromise<z.ZodVoid>>;
|
|
16
|
-
监听ws信息: z.ZodFunction<z.ZodTuple<[
|
|
16
|
+
监听ws信息: z.ZodFunction<z.ZodTuple<[
|
|
17
|
+
z.ZodFunction<z.ZodTuple<[前推后信息], null>, z.ZodPromise<z.ZodVoid>>,
|
|
18
|
+
z.ZodType<________>
|
|
19
|
+
], null>, z.ZodPromise<z.ZodVoid>>;
|
|
17
20
|
关闭ws连接: z.ZodFunction<z.ZodTuple<[], null>, z.ZodPromise<z.ZodVoid>>;
|
|
18
21
|
设置清理函数: z.ZodFunction<z.ZodTuple<[z.ZodFunction<z.ZodTuple<[], null>, z.ZodPromise<z.ZodVoid>>], null>, z.ZodPromise<z.ZodVoid>>;
|
|
19
22
|
}>,
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
服务器
|
|
3
|
-
} from "../chunk-
|
|
4
|
-
import "../chunk-
|
|
5
|
-
import "../chunk-
|
|
6
|
-
import "../chunk-
|
|
3
|
+
} from "../chunk-SMLWKWSD.js";
|
|
4
|
+
import "../chunk-NRXEIWM6.js";
|
|
5
|
+
import "../chunk-ZFLDOR4T.js";
|
|
6
|
+
import "../chunk-YRLVAFRQ.js";
|
|
7
7
|
import "../chunk-F5IAX56T.js";
|
|
8
8
|
export {
|
|
9
9
|
\u670D\u52A1\u5668
|
package/package.json
CHANGED
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
// src/global/model/hub.ts
|
|
2
|
-
var \u96C6\u7EBF\u5668\u76D1\u542C\u5668\u6301\u6709\u8005 = class {
|
|
3
|
-
constructor(\u76D1\u542C\u5668) {
|
|
4
|
-
this.\u76D1\u542C\u5668 = \u76D1\u542C\u5668;
|
|
5
|
-
}
|
|
6
|
-
};
|
|
7
|
-
var \u96C6\u7EBF\u5668\u6A21\u578B = class _\u96C6\u7EBF\u5668\u6A21\u578B {
|
|
8
|
-
// 使用 WeakRef + FinalizationRegistry 防止"反向持有" this
|
|
9
|
-
static \u6E05\u7406\u6CE8\u518C\u5668 = new FinalizationRegistry(({ \u5B9E\u4F8B\u5F15\u7528, \u76D1\u542C\u5668 }) => {
|
|
10
|
-
let \u5B9E\u4F8B = \u5B9E\u4F8B\u5F15\u7528.deref();
|
|
11
|
-
if (\u5B9E\u4F8B === void 0) return;
|
|
12
|
-
let \u7D22\u5F15 = \u5B9E\u4F8B.\u76D1\u542C\u5668\u5217\u8868.indexOf(\u76D1\u542C\u5668);
|
|
13
|
-
if (\u7D22\u5F15 !== -1) \u5B9E\u4F8B.\u76D1\u542C\u5668\u5217\u8868.splice(\u7D22\u5F15, 1);
|
|
14
|
-
});
|
|
15
|
-
\u76D1\u542C\u5668\u5217\u8868 = [];
|
|
16
|
-
\u6301\u6709\u8005\u6620\u5C04 = /* @__PURE__ */ new WeakMap();
|
|
17
|
-
\u9519\u8BEF\u5904\u7406\u5668 = null;
|
|
18
|
-
/**
|
|
19
|
-
* 设置广播错误时的处理器。
|
|
20
|
-
*/
|
|
21
|
-
\u8BBE\u7F6E\u9519\u8BEF\u5904\u7406\u5668(\u5904\u7406\u5668) {
|
|
22
|
-
this.\u9519\u8BEF\u5904\u7406\u5668 = \u5904\u7406\u5668;
|
|
23
|
-
}
|
|
24
|
-
/**
|
|
25
|
-
* 注册监听器。
|
|
26
|
-
* 若外部不再持有返回的 `监听器持有者`,监听器会在未来某个时间自动移除。
|
|
27
|
-
* ⚠️ 自动清理是非确定性的,不能依赖它实现实时释放。
|
|
28
|
-
*/
|
|
29
|
-
\u6DFB\u52A0\u76D1\u542C\u5668(\u76D1\u542C\u5668) {
|
|
30
|
-
this.\u76D1\u542C\u5668\u5217\u8868.push(\u76D1\u542C\u5668);
|
|
31
|
-
let \u6301\u6709\u8005 = new \u96C6\u7EBF\u5668\u76D1\u542C\u5668\u6301\u6709\u8005(\u76D1\u542C\u5668);
|
|
32
|
-
this.\u6301\u6709\u8005\u6620\u5C04.set(\u6301\u6709\u8005, \u76D1\u542C\u5668);
|
|
33
|
-
let \u5B9E\u4F8B\u5F31\u5F15\u7528 = new WeakRef(this);
|
|
34
|
-
_\u96C6\u7EBF\u5668\u6A21\u578B.\u6E05\u7406\u6CE8\u518C\u5668.register(\u6301\u6709\u8005, { \u5B9E\u4F8B\u5F15\u7528: \u5B9E\u4F8B\u5F31\u5F15\u7528, \u76D1\u542C\u5668 }, \u6301\u6709\u8005);
|
|
35
|
-
return \u6301\u6709\u8005;
|
|
36
|
-
}
|
|
37
|
-
\u79FB\u9664\u76D1\u542C\u5668(\u6301\u6709\u8005) {
|
|
38
|
-
let \u76D1\u542C\u5668 = this.\u6301\u6709\u8005\u6620\u5C04.get(\u6301\u6709\u8005);
|
|
39
|
-
if (\u76D1\u542C\u5668 === void 0) return;
|
|
40
|
-
let \u7D22\u5F15 = this.\u76D1\u542C\u5668\u5217\u8868.indexOf(\u76D1\u542C\u5668);
|
|
41
|
-
if (\u7D22\u5F15 !== -1) this.\u76D1\u542C\u5668\u5217\u8868.splice(\u7D22\u5F15, 1);
|
|
42
|
-
_\u96C6\u7EBF\u5668\u6A21\u578B.\u6E05\u7406\u6CE8\u518C\u5668.unregister(\u6301\u6709\u8005);
|
|
43
|
-
this.\u6301\u6709\u8005\u6620\u5C04.delete(\u6301\u6709\u8005);
|
|
44
|
-
}
|
|
45
|
-
async \u5E7F\u64AD(\u6570\u636E) {
|
|
46
|
-
let snapshot = [...this.\u76D1\u542C\u5668\u5217\u8868];
|
|
47
|
-
let \u7ED3\u679C = await Promise.allSettled(snapshot.map((l) => l(\u6570\u636E)));
|
|
48
|
-
for (let [\u7D22\u5F15, \u7ED3\u679C\u9879] of \u7ED3\u679C.entries()) {
|
|
49
|
-
if (\u7ED3\u679C\u9879.status === "rejected" && this.\u9519\u8BEF\u5904\u7406\u5668 !== null) {
|
|
50
|
-
await Promise.resolve(this.\u9519\u8BEF\u5904\u7406\u5668(\u6570\u636E, \u7D22\u5F15, \u7ED3\u679C\u9879.reason));
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
};
|
|
55
|
-
|
|
56
|
-
export {
|
|
57
|
-
集线器监听器持有者,
|
|
58
|
-
集线器模型
|
|
59
|
-
};
|