@mingzey/typedrpc 1.0.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.
Files changed (96) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +228 -0
  3. package/README.zh-CN.md +228 -0
  4. package/dist/api.d.ts +16 -0
  5. package/dist/api.d.ts.map +1 -0
  6. package/dist/api.js +52 -0
  7. package/dist/api.js.map +1 -0
  8. package/dist/client.d.ts +28 -0
  9. package/dist/client.d.ts.map +1 -0
  10. package/dist/client.js +50 -0
  11. package/dist/client.js.map +1 -0
  12. package/dist/connecitons/basic.d.ts +42 -0
  13. package/dist/connecitons/basic.d.ts.map +1 -0
  14. package/dist/connecitons/basic.js +9 -0
  15. package/dist/connecitons/basic.js.map +1 -0
  16. package/dist/connecitons/http.d.ts +38 -0
  17. package/dist/connecitons/http.d.ts.map +1 -0
  18. package/dist/connecitons/http.js +143 -0
  19. package/dist/connecitons/http.js.map +1 -0
  20. package/dist/connecitons/socket.d.ts +33 -0
  21. package/dist/connecitons/socket.d.ts.map +1 -0
  22. package/dist/connecitons/socket.js +210 -0
  23. package/dist/connecitons/socket.js.map +1 -0
  24. package/dist/connecitons/socketio.d.ts +32 -0
  25. package/dist/connecitons/socketio.d.ts.map +1 -0
  26. package/dist/connecitons/socketio.js +162 -0
  27. package/dist/connecitons/socketio.js.map +1 -0
  28. package/dist/connection.d.ts +5 -0
  29. package/dist/connection.d.ts.map +1 -0
  30. package/dist/connection.js +5 -0
  31. package/dist/connection.js.map +1 -0
  32. package/dist/context.d.ts +13 -0
  33. package/dist/context.d.ts.map +1 -0
  34. package/dist/context.js +2 -0
  35. package/dist/context.js.map +1 -0
  36. package/dist/core.d.ts +40 -0
  37. package/dist/core.d.ts.map +1 -0
  38. package/dist/core.js +97 -0
  39. package/dist/core.js.map +1 -0
  40. package/dist/define.d.ts +14 -0
  41. package/dist/define.d.ts.map +1 -0
  42. package/dist/define.js +40 -0
  43. package/dist/define.js.map +1 -0
  44. package/dist/handler.d.ts +30 -0
  45. package/dist/handler.d.ts.map +1 -0
  46. package/dist/handler.js +172 -0
  47. package/dist/handler.js.map +1 -0
  48. package/dist/index.d.ts +15 -0
  49. package/dist/index.d.ts.map +1 -0
  50. package/dist/index.js +14 -0
  51. package/dist/index.js.map +1 -0
  52. package/dist/packet.d.ts +36 -0
  53. package/dist/packet.d.ts.map +1 -0
  54. package/dist/packet.js +40 -0
  55. package/dist/packet.js.map +1 -0
  56. package/dist/server.d.ts +34 -0
  57. package/dist/server.d.ts.map +1 -0
  58. package/dist/server.js +51 -0
  59. package/dist/server.js.map +1 -0
  60. package/dist/test/TestCase.d.ts +6 -0
  61. package/dist/test/TestCase.d.ts.map +1 -0
  62. package/dist/test/TestCase.js +5 -0
  63. package/dist/test/TestCase.js.map +1 -0
  64. package/dist/test/authorization.d.ts +8 -0
  65. package/dist/test/authorization.d.ts.map +1 -0
  66. package/dist/test/authorization.js +169 -0
  67. package/dist/test/authorization.js.map +1 -0
  68. package/dist/test/basic.d.ts +7 -0
  69. package/dist/test/basic.d.ts.map +1 -0
  70. package/dist/test/basic.js +35 -0
  71. package/dist/test/basic.js.map +1 -0
  72. package/dist/test/context.d.ts +7 -0
  73. package/dist/test/context.d.ts.map +1 -0
  74. package/dist/test/context.js +55 -0
  75. package/dist/test/context.js.map +1 -0
  76. package/dist/test/expressmix.d.ts +7 -0
  77. package/dist/test/expressmix.d.ts.map +1 -0
  78. package/dist/test/expressmix.js +63 -0
  79. package/dist/test/expressmix.js.map +1 -0
  80. package/dist/test/full-duplex.d.ts +12 -0
  81. package/dist/test/full-duplex.d.ts.map +1 -0
  82. package/dist/test/full-duplex.js +77 -0
  83. package/dist/test/full-duplex.js.map +1 -0
  84. package/dist/test/socket.d.ts +8 -0
  85. package/dist/test/socket.d.ts.map +1 -0
  86. package/dist/test/socket.js +71 -0
  87. package/dist/test/socket.js.map +1 -0
  88. package/dist/test.d.ts +2 -0
  89. package/dist/test.d.ts.map +1 -0
  90. package/dist/test.js +33 -0
  91. package/dist/test.js.map +1 -0
  92. package/dist/utils.d.ts +40 -0
  93. package/dist/utils.d.ts.map +1 -0
  94. package/dist/utils.js +46 -0
  95. package/dist/utils.js.map +1 -0
  96. package/package.json +27 -0
@@ -0,0 +1,162 @@
1
+ import { IdMaker, TypedEmitter } from "../utils.js";
2
+ import { TypeRPCConnection, TypeRPCConnectionProvider } from "./basic.js";
3
+ class TypeRPCConnectionSocketIO extends TypeRPCConnection {
4
+ socket;
5
+ msgEmitter = new TypedEmitter();
6
+ currentId = 1;
7
+ requests = new Map();
8
+ constructor(socket) {
9
+ super();
10
+ this.socket = socket;
11
+ // 处理外部请求
12
+ this.msgEmitter.on('receive', (data) => {
13
+ // console.log(`[${this.socket.id}][R]:${data}`);
14
+ const recivePlayload = JSON.parse(data);
15
+ if (recivePlayload.type == 'request'
16
+ && recivePlayload.id) {
17
+ this.emitter.emit('request', {
18
+ data: recivePlayload.data,
19
+ response: (data) => {
20
+ const sendPlayout = {
21
+ type: 'response',
22
+ id: recivePlayload.id,
23
+ data: data,
24
+ };
25
+ this.socket.send(JSON.stringify(sendPlayout));
26
+ }
27
+ });
28
+ }
29
+ else if (recivePlayload.type == 'response'
30
+ && recivePlayload.id) {
31
+ this.requests.get(recivePlayload.id)?.resolve(recivePlayload.data);
32
+ }
33
+ });
34
+ }
35
+ async request(data) {
36
+ const requestId = `${this.currentId++}`;
37
+ const payload = {
38
+ type: 'request',
39
+ id: requestId,
40
+ data: data,
41
+ };
42
+ const requestPromise = new Promise((resolve) => {
43
+ this.requests.set(requestId, {
44
+ resolve: resolve
45
+ });
46
+ // 发送数据
47
+ // console.log(`[${this.socket.id}][T]:${JSON.stringify(payload)}`);
48
+ this.socket.send(JSON.stringify(payload));
49
+ }).finally(() => {
50
+ this.requests.delete(requestId);
51
+ });
52
+ return await requestPromise;
53
+ }
54
+ getId() {
55
+ return this.socket.id;
56
+ }
57
+ close() {
58
+ return this.socket.close();
59
+ }
60
+ isClosed() {
61
+ return this.socket.isClosed();
62
+ }
63
+ }
64
+ class TypeRPCConnectionProviderSocketIO extends TypeRPCConnectionProvider {
65
+ io = null;
66
+ async listen(config) {
67
+ const httpModule = await import("http").catch(() => null);
68
+ if (!httpModule) {
69
+ throw new Error("http module not found");
70
+ }
71
+ const socketIOServerModule = await import("socket.io").catch(() => null);
72
+ if (!socketIOServerModule) {
73
+ throw new Error("socket.io module not found");
74
+ }
75
+ const server = httpModule.createServer();
76
+ const io = new socketIOServerModule.Server(server, {
77
+ cors: {
78
+ origin: "*",
79
+ methods: ["GET", "POST"],
80
+ },
81
+ });
82
+ io.on('connection', (socket) => {
83
+ const connection = new TypeRPCConnectionSocketIO({
84
+ id: socket.id,
85
+ send: (data) => {
86
+ socket.emit('message', data);
87
+ },
88
+ close: () => {
89
+ socket.disconnect();
90
+ return true;
91
+ },
92
+ isClosed: () => {
93
+ return socket.disconnected;
94
+ },
95
+ });
96
+ this.emitter.emit('connection', connection); // 告知TypeRPCHandler有新连接
97
+ socket.on('message', (data) => {
98
+ connection.msgEmitter.emit('receive', data);
99
+ });
100
+ socket.on('close', () => {
101
+ connection.close();
102
+ });
103
+ });
104
+ this.io = io;
105
+ return new Promise((resolve) => {
106
+ server.listen(config.port, config.hostname, () => {
107
+ resolve(true);
108
+ });
109
+ });
110
+ }
111
+ async close() {
112
+ return new Promise((resolve, reject) => {
113
+ if (!this.io) {
114
+ return resolve(true);
115
+ }
116
+ this.io.sockets.sockets.forEach((socket) => {
117
+ socket.disconnect();
118
+ });
119
+ this.io.close((err) => {
120
+ if (err) {
121
+ reject(err);
122
+ }
123
+ resolve(true);
124
+ });
125
+ this.io = null;
126
+ });
127
+ }
128
+ async connect(target) {
129
+ const SocketIOClientModule = await import("socket.io-client").catch(() => null);
130
+ if (!SocketIOClientModule) {
131
+ throw new Error("socket.io-client module not found");
132
+ }
133
+ return new Promise((resolve, reject) => {
134
+ const socket = SocketIOClientModule.io(`ws://${target}`);
135
+ const connection = new TypeRPCConnectionSocketIO({
136
+ id: socket.id || IdMaker.makeId(),
137
+ send: (data) => {
138
+ socket.emit('message', data);
139
+ },
140
+ close: () => {
141
+ socket.disconnect();
142
+ return true;
143
+ },
144
+ isClosed: () => {
145
+ return socket.disconnected;
146
+ },
147
+ });
148
+ this.emitter.emit('connection', connection); // 告知TypeRPCHandler有新连接
149
+ socket.on('connect', () => {
150
+ resolve(connection);
151
+ });
152
+ socket.on('message', (data) => {
153
+ connection.msgEmitter.emit('receive', data);
154
+ });
155
+ socket.on('close', () => {
156
+ connection.close();
157
+ });
158
+ });
159
+ }
160
+ }
161
+ export { TypeRPCConnectionSocketIO, TypeRPCConnectionProviderSocketIO, };
162
+ //# sourceMappingURL=socketio.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"socketio.js","sourceRoot":"","sources":["../../src/connecitons/socketio.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAY1E,MAAM,yBAA0B,SAAQ,iBAAiB;IASjC;IARb,UAAU,GAAG,IAAI,YAAY,EAAkC,CAAC;IAE/D,SAAS,GAAG,CAAC,CAAC;IAEd,QAAQ,GAEX,IAAI,GAAG,EAAE,CAAC;IAEf,YAAoB,MAKnB;QACG,KAAK,EAAE,CAAC;QANQ,WAAM,GAAN,MAAM,CAKzB;QAGG,SAAS;QACT,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,SAAS,EAAC,CAAC,IAAI,EAAE,EAAE;YAClC,iDAAiD;YACjD,MAAM,cAAc,GAAoC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACzE,IAAG,cAAc,CAAC,IAAI,IAAI,SAAS;mBAChC,cAAc,CAAC,EAAE,EACnB,CAAC;gBACE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAC;oBACxB,IAAI,EAAC,cAAc,CAAC,IAAI;oBACxB,QAAQ,EAAC,CAAC,IAAI,EAAE,EAAE;wBACd,MAAM,WAAW,GAAoC;4BACjD,IAAI,EAAC,UAAU;4BACf,EAAE,EAAC,cAAc,CAAC,EAAE;4BACpB,IAAI,EAAC,IAAI;yBACZ,CAAA;wBACD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC;oBAClD,CAAC;iBACJ,CAAC,CAAA;YACN,CAAC;iBAAK,IAAG,cAAc,CAAC,IAAI,IAAI,UAAU;mBACvC,cAAc,CAAC,EAAE,EACnB,CAAC;gBACE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;YACvE,CAAC;QACL,CAAC,CAAC,CAAA;IACN,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,IAAY;QACtB,MAAM,SAAS,GAAG,GAAG,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC;QACxC,MAAM,OAAO,GAAoC;YAC7C,IAAI,EAAC,SAAS;YACd,EAAE,EAAC,SAAS;YACZ,IAAI,EAAC,IAAI;SACZ,CAAA;QAED,MAAM,cAAc,GAAG,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,EAAE;YACnD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAC;gBACxB,OAAO,EAAC,OAAO;aAClB,CAAC,CAAA;YAEF,OAAO;YACP,oEAAoE;YACpE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE;YACZ,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACpC,CAAC,CAAC,CAAA;QACF,OAAO,MAAM,cAAc,CAAC;IAChC,CAAC;IAED,KAAK;QACD,OAAO,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;IAC1B,CAAC;IACD,KAAK;QACD,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IAC/B,CAAC;IAED,QAAQ;QACJ,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;IAClC,CAAC;CAEJ;AAED,MAAM,iCAAkC,SAAQ,yBAAyB;IAE7D,EAAE,GAAqC,IAAI,CAAC;IAEpD,KAAK,CAAC,MAAM,CAAC,MAA4C;QACrD,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QAC1D,IAAG,CAAC,UAAU,EAAC,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAC7C,CAAC;QACD,MAAM,oBAAoB,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QACzE,IAAG,CAAC,oBAAoB,EAAC,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAClD,CAAC;QAED,MAAM,MAAM,GAAG,UAAU,CAAC,YAAY,EAAE,CAAC;QAGzC,MAAM,EAAE,GAAG,IAAI,oBAAoB,CAAC,MAAM,CAAC,MAAM,EAAC;YAC9C,IAAI,EAAC;gBACD,MAAM,EAAC,GAAG;gBACV,OAAO,EAAC,CAAC,KAAK,EAAC,MAAM,CAAC;aACzB;SACJ,CAAC,CAAC;QACH,EAAE,CAAC,EAAE,CAAC,YAAY,EAAC,CAAC,MAAM,EAAE,EAAE;YAC1B,MAAM,UAAU,GAAG,IAAI,yBAAyB,CAAC;gBAC7C,EAAE,EAAC,MAAM,CAAC,EAAE;gBACZ,IAAI,EAAC,CAAC,IAAI,EAAE,EAAE;oBACV,MAAM,CAAC,IAAI,CAAC,SAAS,EAAC,IAAI,CAAC,CAAC;gBAChC,CAAC;gBACD,KAAK,EAAC,GAAG,EAAE;oBACP,MAAM,CAAC,UAAU,EAAE,CAAC;oBACpB,OAAO,IAAI,CAAC;gBAChB,CAAC;gBACD,QAAQ,EAAC,GAAG,EAAE;oBACV,OAAO,MAAM,CAAC,YAAY,CAAC;gBAC/B,CAAC;aACJ,CAAC,CAAC;YACH,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,EAAC,UAAU,CAAC,CAAC,CAAA,uBAAuB;YAClE,MAAM,CAAC,EAAE,CAAC,SAAS,EAAC,CAAC,IAAI,EAAE,EAAE;gBACzB,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAC,IAAI,CAAC,CAAC;YAC/C,CAAC,CAAC,CAAA;YACF,MAAM,CAAC,EAAE,CAAC,OAAO,EAAC,GAAG,EAAE;gBACnB,UAAU,CAAC,KAAK,EAAE,CAAC;YACvB,CAAC,CAAC,CAAA;QACN,CAAC,CAAC,CAAA;QACF,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,OAAO,IAAI,OAAO,CAAU,CAAC,OAAO,EAAE,EAAE;YACpC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAC,MAAM,CAAC,QAAQ,EAAC,GAAG,EAAE;gBAC3C,OAAO,CAAC,IAAI,CAAC,CAAC;YAClB,CAAC,CAAC,CAAA;QACN,CAAC,CAAC,CAAA;IACN,CAAC;IACD,KAAK,CAAC,KAAK;QACP,OAAO,IAAI,OAAO,CAAU,CAAC,OAAO,EAAC,MAAM,EAAE,EAAE;YAC3C,IAAG,CAAC,IAAI,CAAC,EAAE,EAAC,CAAC;gBACT,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC;YACzB,CAAC;YACD,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;gBACvC,MAAM,CAAC,UAAU,EAAE,CAAC;YACxB,CAAC,CAAC,CAAA;YACF,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;gBAClB,IAAG,GAAG,EAAC,CAAC;oBACJ,MAAM,CAAC,GAAG,CAAC,CAAC;gBAChB,CAAC;gBACD,OAAO,CAAC,IAAI,CAAC,CAAC;YAClB,CAAC,CAAC,CAAA;YACF,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC;QACnB,CAAC,CAAC,CAAA;IACN,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,MAAc;QACxB,MAAM,oBAAoB,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QAChF,IAAG,CAAC,oBAAoB,EAAC,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACzD,CAAC;QACD,OAAO,IAAI,OAAO,CAAoB,CAAC,OAAO,EAAC,MAAM,EAAE,EAAE;YACrD,MAAM,MAAM,GAAG,oBAAoB,CAAC,EAAE,CAAC,QAAQ,MAAM,EAAE,CAAC,CAAC;YACzD,MAAM,UAAU,GAAG,IAAI,yBAAyB,CAAC;gBAC7C,EAAE,EAAC,MAAM,CAAC,EAAE,IAAI,OAAO,CAAC,MAAM,EAAE;gBAChC,IAAI,EAAC,CAAC,IAAI,EAAE,EAAE;oBACV,MAAM,CAAC,IAAI,CAAC,SAAS,EAAC,IAAI,CAAC,CAAC;gBAChC,CAAC;gBACD,KAAK,EAAC,GAAG,EAAE;oBACP,MAAM,CAAC,UAAU,EAAE,CAAC;oBACpB,OAAO,IAAI,CAAC;gBAChB,CAAC;gBACD,QAAQ,EAAC,GAAG,EAAE;oBACV,OAAO,MAAM,CAAC,YAAY,CAAC;gBAC/B,CAAC;aACJ,CAAC,CAAC;YACH,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,EAAC,UAAU,CAAC,CAAC,CAAA,uBAAuB;YAClE,MAAM,CAAC,EAAE,CAAC,SAAS,EAAC,GAAG,EAAE;gBACrB,OAAO,CAAC,UAAU,CAAC,CAAA;YACvB,CAAC,CAAC,CAAA;YACF,MAAM,CAAC,EAAE,CAAC,SAAS,EAAC,CAAC,IAAI,EAAE,EAAE;gBACzB,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAC,IAAI,CAAC,CAAC;YAC/C,CAAC,CAAC,CAAA;YACF,MAAM,CAAC,EAAE,CAAC,OAAO,EAAC,GAAG,EAAE;gBACnB,UAAU,CAAC,KAAK,EAAE,CAAC;YACvB,CAAC,CAAC,CAAA;QACN,CAAC,CAAC,CAAA;IACN,CAAC;CAEJ;AAED,OAAO,EACH,yBAAyB,EACzB,iCAAiC,GACpC,CAAA"}
@@ -0,0 +1,5 @@
1
+ import { TypeRPCConnectionHTTP, TypeRPCConnectionProviderHTTP } from "./connecitons/http.js";
2
+ declare const TypeRPCConnectionDefault: typeof TypeRPCConnectionHTTP;
3
+ declare const TypeRPCConnectionProviderDefault: typeof TypeRPCConnectionProviderHTTP;
4
+ export { TypeRPCConnectionDefault, TypeRPCConnectionProviderDefault, };
5
+ //# sourceMappingURL=connection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../src/connection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,6BAA6B,EAAE,MAAM,uBAAuB,CAAC;AAG7F,QAAA,MAAM,wBAAwB,8BAAwB,CAAC;AACvD,QAAA,MAAM,gCAAgC,sCAAgC,CAAC;AAEvE,OAAO,EACH,wBAAwB,EACxB,gCAAgC,GACnC,CAAA"}
@@ -0,0 +1,5 @@
1
+ import { TypeRPCConnectionHTTP, TypeRPCConnectionProviderHTTP } from "./connecitons/http.js";
2
+ const TypeRPCConnectionDefault = TypeRPCConnectionHTTP;
3
+ const TypeRPCConnectionProviderDefault = TypeRPCConnectionProviderHTTP;
4
+ export { TypeRPCConnectionDefault, TypeRPCConnectionProviderDefault, };
5
+ //# sourceMappingURL=connection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection.js","sourceRoot":"","sources":["../src/connection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,6BAA6B,EAAE,MAAM,uBAAuB,CAAC;AAG7F,MAAM,wBAAwB,GAAG,qBAAqB,CAAC;AACvD,MAAM,gCAAgC,GAAG,6BAA6B,CAAC;AAEvE,OAAO,EACH,wBAAwB,EACxB,gCAAgC,GACnC,CAAA"}
@@ -0,0 +1,13 @@
1
+ import type { TypeRPCConnection } from "./connecitons/basic.js";
2
+ import type { TypeRPCPacket } from "./packet.js";
3
+ type TypeRPCContext = {
4
+ connection: TypeRPCConnection;
5
+ inbound?: TypeRPCPacket;
6
+ outbound?: TypeRPCPacket;
7
+ };
8
+ export declare const TypeRPCContextSymbol: unique symbol;
9
+ interface TypeRPCContextAware {
10
+ [TypeRPCContextSymbol]: TypeRPCContext | null;
11
+ }
12
+ export type { TypeRPCContextAware, TypeRPCContext, };
13
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAEhD,KAAK,cAAc,GAAG;IAClB,UAAU,EAAC,iBAAiB,CAAC;IAC7B,OAAO,CAAC,EAAC,aAAa,CAAC;IACvB,QAAQ,CAAC,EAAC,aAAa,CAAC;CAC3B,CAAA;AAED,eAAO,MAAM,oBAAoB,eAA2B,CAAC;AAC7D,UAAU,mBAAmB;IACzB,CAAC,oBAAoB,CAAC,EAAC,cAAc,GAAG,IAAI,CAAC;CAChD;AAED,YAAY,EACR,mBAAmB,EACnB,cAAc,GACjB,CAAA"}
@@ -0,0 +1,2 @@
1
+ export const TypeRPCContextSymbol = Symbol("TypeRPCContext");
2
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AASA,MAAM,CAAC,MAAM,oBAAoB,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC"}
package/dist/core.d.ts ADDED
@@ -0,0 +1,40 @@
1
+ import type { TypeRPCConnection, TypeRPCConnectionProvider } from "./connecitons/basic.js";
2
+ import { TypeRPCHandler } from "./handler.js";
3
+ import { type TypeRPCRequestPacket, type TypeRPCResponsePacket } from "./packet.js";
4
+ import { TypedEmitter } from "./utils.js";
5
+ type TypeRPCCoreConfig = {
6
+ connection?: {
7
+ provider: TypeRPCConnectionProvider;
8
+ };
9
+ };
10
+ type TypeRPCCoreEvents = {
11
+ connection: (connection: TypeRPCConnection) => void;
12
+ };
13
+ declare class TypeRPCCore {
14
+ emitter: TypedEmitter<TypeRPCCoreEvents>;
15
+ private config;
16
+ handler: TypeRPCHandler;
17
+ constructor(config: TypeRPCCoreConfig);
18
+ private init;
19
+ get hook(): (serviceName: string, methodName: string, config: {
20
+ handler: (...args: any[]) => any;
21
+ bind?: any;
22
+ }) => void;
23
+ request(config: {
24
+ connection: TypeRPCConnection;
25
+ serviceName: string;
26
+ methodName: string;
27
+ args: any[];
28
+ }): Promise<{
29
+ request: TypeRPCRequestPacket;
30
+ response: TypeRPCResponsePacket;
31
+ }>;
32
+ listen(config: {
33
+ port: number;
34
+ hostname?: string;
35
+ }): Promise<boolean>;
36
+ close(): Promise<boolean>;
37
+ connect(target: string): Promise<TypeRPCConnection>;
38
+ }
39
+ export { TypeRPCCore };
40
+ //# sourceMappingURL=core.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAA;AAE1F,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAC7C,OAAO,EAAwB,KAAK,oBAAoB,EAAE,KAAK,qBAAqB,EAAE,MAAM,aAAa,CAAA;AACzG,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAEzC,KAAK,iBAAiB,GAAG;IACrB,UAAU,CAAC,EAAC;QACR,QAAQ,EAAC,yBAAyB,CAAC;KACtC,CAAA;CACJ,CAAA;AAED,KAAK,iBAAiB,GAAG;IACrB,UAAU,EAAC,CAAC,UAAU,EAAC,iBAAiB,KAAG,IAAI,CAAC;CACnD,CAAA;AAED,cAAM,WAAW;IAEN,OAAO,kCAAyC;IACvD,OAAO,CAAC,MAAM,CAAmB;IAC1B,OAAO,EAAC,cAAc,CAAC;gBAElB,MAAM,EAAC,iBAAiB;IAWpC,OAAO,CAAC,IAAI;IA4BZ,IAAI,IAAI;kBAoE0iE,GAAG;YAA+B,CAAC;eAlEplE;IAEY,OAAO,CAAC,MAAM,EAAC;QACxB,UAAU,EAAC,iBAAiB,CAAC;QAC7B,WAAW,EAAC,MAAM,CAAC;QACnB,UAAU,EAAC,MAAM,CAAC;QAClB,IAAI,EAAC,GAAG,EAAE,CAAC;KACd,GAAE,OAAO,CAAC;QACP,OAAO,EAAC,oBAAoB,CAAC;QAC7B,QAAQ,EAAC,qBAAqB,CAAC;KAClC,CAAC;IAwBW,MAAM,CAAC,MAAM,EAAC;QACvB,IAAI,EAAC,MAAM,CAAC;QACZ,QAAQ,CAAC,EAAC,MAAM,CAAC;KACpB,GAAE,OAAO,CAAC,OAAO,CAAC;IAQN,KAAK,IAAG,OAAO,CAAC,OAAO,CAAC;IAQxB,OAAO,CAAC,MAAM,EAAE,MAAM,GAAE,OAAO,CAAC,iBAAiB,CAAC;CASlE;AAED,OAAO,EACH,WAAW,EACd,CAAA"}
package/dist/core.js ADDED
@@ -0,0 +1,97 @@
1
+ import { TypeRPCConnectionProviderDefault } from "./connection.js";
2
+ import { TypeRPCHandler } from "./handler.js";
3
+ import { TypeRPCPacketFactory } from "./packet.js";
4
+ import { TypedEmitter } from "./utils.js";
5
+ class TypeRPCCore {
6
+ emitter = new TypedEmitter();
7
+ config;
8
+ handler;
9
+ constructor(config) {
10
+ const defaultConfig = {
11
+ connection: {
12
+ provider: new TypeRPCConnectionProviderDefault(),
13
+ }
14
+ };
15
+ this.config = { ...defaultConfig, ...config };
16
+ this.handler = new TypeRPCHandler();
17
+ this.init();
18
+ }
19
+ init() {
20
+ const provider = this.config.connection?.provider;
21
+ if (provider) {
22
+ provider.emitter.on('connection', (connection) => {
23
+ this.emitter.emit('connection', connection);
24
+ });
25
+ }
26
+ this.emitter.on('connection', (connection) => {
27
+ // 提供对向请求处理
28
+ connection.emitter.on('request', (context) => {
29
+ try {
30
+ const requestPacket = JSON.parse(context.data);
31
+ if (!TypeRPCPacketFactory.isRequestPacket(requestPacket)) {
32
+ return;
33
+ }
34
+ this.handler.handle(connection, requestPacket, (responsePacket) => {
35
+ if (!responsePacket) {
36
+ return;
37
+ }
38
+ context.response(JSON.stringify(responsePacket));
39
+ });
40
+ }
41
+ catch (e) {
42
+ console.error(e);
43
+ }
44
+ });
45
+ });
46
+ }
47
+ get hook() {
48
+ return this.handler.hook.bind(this.handler);
49
+ }
50
+ async request(config) {
51
+ const requestPacket = TypeRPCPacketFactory.createRequestPacket({
52
+ serviceName: config.serviceName,
53
+ methodName: config.methodName,
54
+ args: config.args,
55
+ });
56
+ const responsePacket = await this.handler.request(config.connection, requestPacket).catch((e) => {
57
+ return TypeRPCPacketFactory.createResponsePacket({
58
+ requestId: requestPacket.id,
59
+ error: e
60
+ });
61
+ });
62
+ if (!TypeRPCPacketFactory.isResponsePacket(responsePacket)) {
63
+ throw new Error(`Invalid response packet:\n${JSON.stringify(responsePacket)}`);
64
+ }
65
+ if (responsePacket.requestId != requestPacket.id) {
66
+ throw new Error(`Invalid response packet:request id not match\n${JSON.stringify(requestPacket)}\n${JSON.stringify(responsePacket)}`);
67
+ }
68
+ return {
69
+ request: requestPacket,
70
+ response: responsePacket,
71
+ };
72
+ }
73
+ async listen(config) {
74
+ const provider = this.config.connection?.provider;
75
+ if (!provider) {
76
+ throw new Error("Connection provider not found");
77
+ }
78
+ return provider.listen(config);
79
+ }
80
+ async close() {
81
+ const provider = this.config.connection?.provider;
82
+ if (!provider) {
83
+ throw new Error("Connection provider not found");
84
+ }
85
+ return provider.close();
86
+ }
87
+ async connect(target) {
88
+ const provider = this.config.connection?.provider;
89
+ if (!provider) {
90
+ throw new Error("Connection provider not found");
91
+ }
92
+ const connection = await provider.connect(target);
93
+ return connection;
94
+ }
95
+ }
96
+ export { TypeRPCCore };
97
+ //# sourceMappingURL=core.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.js","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ type TypeRPCAPIDefineType = Record<string, Record<string, any>>;
2
+ declare class TypeRPCAPIDefine<T extends TypeRPCAPIDefineType> {
3
+ static TypeRPCService: symbol;
4
+ static TypeRPCMethod: symbol;
5
+ static TypeRPCMethodList: symbol;
6
+ constructor(config?: TypeRPCAPIDefineType);
7
+ static method(): (target: any, propertyKey: string, descriptor: PropertyDescriptor) => void;
8
+ static isService(target: any): boolean;
9
+ static isMethod(method: any): boolean;
10
+ static getMethodList(service: any): string[];
11
+ }
12
+ export type { TypeRPCAPIDefineType, };
13
+ export { TypeRPCAPIDefine, };
14
+ //# sourceMappingURL=define.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"define.d.ts","sourceRoot":"","sources":["../src/define.ts"],"names":[],"mappings":"AACA,KAAK,oBAAoB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAA;AAQ/D,cAAM,gBAAgB,CAAC,CAAC,SAAS,oBAAoB;IAEjD,MAAM,CAAC,cAAc,SAA4B;IACjD,MAAM,CAAC,aAAa,SAA2B;IAC/C,MAAM,CAAC,iBAAiB,SAA+B;gBAE3C,MAAM,CAAC,EAAC,oBAAoB;IAIxC,MAAM,CAAC,MAAM,KACQ,QAAO,GAAG,EAAE,aAAY,MAAM,EAAE,YAAW,kBAAkB;IAYlF,MAAM,CAAC,SAAS,CAAC,MAAM,EAAC,GAAG;IAI3B,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAC,GAAG;IAW1B,MAAM,CAAC,aAAa,CAAC,OAAO,EAAC,GAAG,GAAE,MAAM,EAAE;CAM7C;AAGD,YAAY,EACR,oBAAoB,GACvB,CAAA;AAED,OAAO,EACH,gBAAgB,GACnB,CAAA"}
package/dist/define.js ADDED
@@ -0,0 +1,40 @@
1
+ class TypeRPCAPIDefine {
2
+ static TypeRPCService = Symbol('TypeRPCService');
3
+ static TypeRPCMethod = Symbol('TypeRPCMethod');
4
+ static TypeRPCMethodList = Symbol('TypeRPCMethodList');
5
+ constructor(config) {
6
+ }
7
+ static method() {
8
+ return function (target, propertyKey, descriptor) {
9
+ descriptor.value[TypeRPCAPIDefine.TypeRPCMethod] = true;
10
+ if (!target[TypeRPCAPIDefine.TypeRPCService]) {
11
+ target[TypeRPCAPIDefine.TypeRPCService] = true;
12
+ }
13
+ if (!target[TypeRPCAPIDefine.TypeRPCMethodList]) {
14
+ target[TypeRPCAPIDefine.TypeRPCMethodList] = new Set();
15
+ }
16
+ target[TypeRPCAPIDefine.TypeRPCMethodList].add(propertyKey);
17
+ };
18
+ }
19
+ static isService(target) {
20
+ return target[TypeRPCAPIDefine.TypeRPCService] === true;
21
+ }
22
+ static isMethod(method) {
23
+ // 判断是否是方法
24
+ if (typeof method !== 'function') {
25
+ return false;
26
+ }
27
+ if (method[TypeRPCAPIDefine.TypeRPCMethod] != true) {
28
+ return false;
29
+ }
30
+ return true;
31
+ }
32
+ static getMethodList(service) {
33
+ if (!TypeRPCAPIDefine.isService(service)) {
34
+ return [];
35
+ }
36
+ return Array.from(service[TypeRPCAPIDefine.TypeRPCMethodList]);
37
+ }
38
+ }
39
+ export { TypeRPCAPIDefine, };
40
+ //# sourceMappingURL=define.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"define.js","sourceRoot":"","sources":["../src/define.ts"],"names":[],"mappings":"AASA,MAAM,gBAAgB;IAElB,MAAM,CAAC,cAAc,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;IACjD,MAAM,CAAC,aAAa,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC;IAC/C,MAAM,CAAC,iBAAiB,GAAG,MAAM,CAAC,mBAAmB,CAAC,CAAC;IAEvD,YAAY,MAA4B;IAExC,CAAC;IAED,MAAM,CAAC,MAAM;QACT,OAAQ,UAAS,MAAU,EAAE,WAAkB,EAAE,UAA6B;YAC1E,UAAU,CAAC,KAAK,CAAC,gBAAgB,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC;YACxD,IAAG,CAAC,MAAM,CAAC,gBAAgB,CAAC,cAAc,CAAC,EAAC,CAAC;gBACzC,MAAM,CAAC,gBAAgB,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC;YACnD,CAAC;YACD,IAAG,CAAC,MAAM,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,EAAC,CAAC;gBAC5C,MAAM,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,GAAG,IAAI,GAAG,EAAU,CAAC;YACnE,CAAC;YACD,MAAM,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAChE,CAAC,CAAA;IACL,CAAC;IAED,MAAM,CAAC,SAAS,CAAC,MAAU;QACvB,OAAO,MAAM,CAAC,gBAAgB,CAAC,cAAc,CAAC,KAAK,IAAI,CAAC;IAC5D,CAAC;IAED,MAAM,CAAC,QAAQ,CAAC,MAAU;QACtB,UAAU;QACV,IAAG,OAAO,MAAM,KAAK,UAAU,EAAC,CAAC;YAC7B,OAAO,KAAK,CAAC;QACjB,CAAC;QACD,IAAG,MAAM,CAAC,gBAAgB,CAAC,aAAa,CAAC,IAAI,IAAI,EAAC,CAAC;YAC/C,OAAO,KAAK,CAAC;QACjB,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,MAAM,CAAC,aAAa,CAAC,OAAW;QAC5B,IAAG,CAAC,gBAAgB,CAAC,SAAS,CAAC,OAAO,CAAC,EAAC,CAAC;YACrC,OAAO,EAAE,CAAC;QACd,CAAC;QACD,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,CAAC,CAAC;IACnE,CAAC;;AAQL,OAAO,EACH,gBAAgB,GACnB,CAAA"}
@@ -0,0 +1,30 @@
1
+ import type { TypeRPCConnection } from "./connecitons/basic.js";
2
+ import { type TypeRPCContext } from "./context.js";
3
+ import { type TypeRPCPacket, type TypeRPCRequestPacket, type TypeRPCResponsePacket } from "./packet.js";
4
+ import { TypedEmitter } from "./utils.js";
5
+ declare class TypeRPCHandlerMiddleware {
6
+ inbound(context: TypeRPCContext): Promise<TypeRPCContext>;
7
+ outbound(context: TypeRPCContext): Promise<TypeRPCContext>;
8
+ }
9
+ type TypeRPCHandlerEvents = {};
10
+ /**
11
+ * 处理所有TypeRPC数据包,管理入站出站
12
+ */
13
+ declare class TypeRPCHandler {
14
+ emitter: TypedEmitter<TypeRPCHandlerEvents>;
15
+ private middlewares;
16
+ private hooks;
17
+ constructor();
18
+ use(middleware: TypeRPCHandlerMiddleware): this;
19
+ private middlewareProcesser;
20
+ outbound(context: TypeRPCContext): Promise<TypeRPCContext>;
21
+ inbound(context: TypeRPCContext): Promise<TypeRPCContext>;
22
+ request(connection: TypeRPCConnection, request: TypeRPCRequestPacket): Promise<TypeRPCPacket>;
23
+ handle(connection: TypeRPCConnection, request: TypeRPCRequestPacket, response: (packet: TypeRPCResponsePacket) => void): Promise<null | undefined>;
24
+ hook(serviceName: string, methodName: string, config: {
25
+ handler: (...args: any[]) => any;
26
+ bind?: any;
27
+ }): void;
28
+ }
29
+ export { TypeRPCHandler, TypeRPCHandlerMiddleware };
30
+ //# sourceMappingURL=handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../src/handler.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAwB,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AACzE,OAAO,EAAwB,KAAK,aAAa,EAAE,KAAK,oBAAoB,EAAE,KAAK,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAC9H,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAQ1C,cAAM,wBAAwB;IACpB,OAAO,CAAC,OAAO,EAAC,cAAc,GAAE,OAAO,CAAC,cAAc,CAAC;IAGvD,QAAQ,CAAC,OAAO,EAAC,cAAc,GAAE,OAAO,CAAC,cAAc,CAAC;CAGjE;AAED,KAAK,oBAAoB,GAAG,EAE3B,CAAA;AACD;;GAEG;AACH,cAAM,cAAc;IAET,OAAO,qCAA4C;IAE1D,OAAO,CAAC,WAAW,CAAiC;IAEpD,OAAO,CAAC,KAAK,CAGJ;;IAwDF,GAAG,CAAC,UAAU,EAAC,wBAAwB;YAKhC,mBAAmB;IAqBpB,QAAQ,CAAC,OAAO,EAAC,cAAc,GAAE,OAAO,CAAC,cAAc,CAAC;IAOxD,OAAO,CAAC,OAAO,EAAC,cAAc,GAAE,OAAO,CAAC,cAAc,CAAC;IAOvD,OAAO,CAAC,UAAU,EAAC,iBAAiB,EAAC,OAAO,EAAC,oBAAoB,GAAE,OAAO,CAAC,aAAa,CAAC;IAiCzF,MAAM,CAAC,UAAU,EAAC,iBAAiB,EAAC,OAAO,EAAC,oBAAoB,EAAC,QAAQ,EAAC,CAAC,MAAM,EAAC,qBAAqB,KAAK,IAAI;IAiB7H,IAAI,CAAC,WAAW,EAAC,MAAM,EAAC,UAAU,EAAC,MAAM,EAAC,MAAM,EAAC;QAC7C,OAAO,EAAC,CAAC,GAAG,IAAI,EAAC,GAAG,EAAE,KAAG,GAAG,CAAC;QAC7B,IAAI,CAAC,EAAC,GAAG,CAAC;KACb;CAWJ;AAED,OAAO,EACH,cAAc,EACd,wBAAwB,EAC3B,CAAA"}
@@ -0,0 +1,172 @@
1
+ import { TypeRPCContextSymbol } from "./context.js";
2
+ import { TypeRPCPacketFactory } from "./packet.js";
3
+ import { TypedEmitter } from "./utils.js";
4
+ // interface TypeRPCHandlerMiddleware{
5
+ // inbound?:(context:TypeRPCContext) => Promise<TypeRPCContext>;
6
+ // outbound?:(context:TypeRPCContext) => Promise<TypeRPCContext>;
7
+ // }
8
+ class TypeRPCHandlerMiddleware {
9
+ async inbound(context) {
10
+ return context;
11
+ }
12
+ async outbound(context) {
13
+ return context;
14
+ }
15
+ }
16
+ /**
17
+ * 处理所有TypeRPC数据包,管理入站出站
18
+ */
19
+ class TypeRPCHandler {
20
+ emitter = new TypedEmitter();
21
+ middlewares = [];
22
+ hooks = {};
23
+ constructor() {
24
+ this.use({
25
+ inbound: async (context) => {
26
+ // Fallback 托底返回错误
27
+ if (context.inbound && !context.outbound) {
28
+ context.outbound = TypeRPCPacketFactory.createResponsePacket({
29
+ requestId: context.inbound.id,
30
+ error: "service not available or not found",
31
+ });
32
+ }
33
+ return context;
34
+ },
35
+ outbound: async (context) => {
36
+ return context;
37
+ },
38
+ });
39
+ this.use({
40
+ inbound: async (context) => {
41
+ if (!context.inbound
42
+ || !TypeRPCPacketFactory.isRequestPacket(context.inbound)) {
43
+ return context;
44
+ }
45
+ // 如果已经有出站包,直接返回
46
+ if (context.outbound) {
47
+ return context;
48
+ }
49
+ const serviceName = context.inbound.serviceName;
50
+ const methodName = context.inbound.methodName;
51
+ const args = context.inbound.args;
52
+ const hook = this.hooks[serviceName]?.[methodName];
53
+ if (!hook) {
54
+ return context;
55
+ }
56
+ const result = await hook.handler.call(new Proxy(hook.bind || {}, {
57
+ get(target, prop) {
58
+ if (prop === TypeRPCContextSymbol) {
59
+ return context;
60
+ }
61
+ return Reflect.get(target, prop);
62
+ }
63
+ }), ...args);
64
+ const response = TypeRPCPacketFactory.createResponsePacket({
65
+ requestId: context.inbound.id,
66
+ result: result,
67
+ });
68
+ context.outbound = response;
69
+ return context;
70
+ },
71
+ outbound: async (context) => {
72
+ return context;
73
+ },
74
+ });
75
+ }
76
+ use(middleware) {
77
+ this.middlewares.push(middleware);
78
+ return this;
79
+ }
80
+ async middlewareProcesser(context, index, direction) {
81
+ const middleware = this.middlewares[index];
82
+ if (!middleware) {
83
+ return context;
84
+ }
85
+ // 执行中间件
86
+ if (direction == 'inbound') {
87
+ if (middleware.inbound) {
88
+ context = await middleware.inbound(context);
89
+ }
90
+ index--;
91
+ }
92
+ if (direction == 'outbound') {
93
+ if (middleware.outbound) {
94
+ context = await middleware.outbound(context);
95
+ }
96
+ index++;
97
+ }
98
+ return this.middlewareProcesser(context, index, direction);
99
+ }
100
+ async outbound(context) {
101
+ if (this.middlewares.length <= 0) {
102
+ return context;
103
+ }
104
+ return this.middlewareProcesser(context, 0, 'outbound');
105
+ }
106
+ async inbound(context) {
107
+ if (this.middlewares.length <= 0) {
108
+ return context;
109
+ }
110
+ return this.middlewareProcesser(context, this.middlewares.length - 1, 'inbound');
111
+ }
112
+ async request(connection, request) {
113
+ let context = {
114
+ connection: connection,
115
+ outbound: request,
116
+ };
117
+ context = await this.outbound(context);
118
+ if (!context.outbound) {
119
+ throw new Error("Request failed: outbound is empty");
120
+ }
121
+ const res = await connection.request(JSON.stringify(context.outbound));
122
+ if (!res) {
123
+ throw new Error("Response is empty");
124
+ }
125
+ let responseObject = null;
126
+ try {
127
+ responseObject = JSON.parse(res);
128
+ }
129
+ catch (e) {
130
+ throw new Error("Response is not a valid JSON string:" + res);
131
+ }
132
+ if (!TypeRPCPacketFactory.isPacket(responseObject)) {
133
+ throw new Error("Response is not a TypeRPCPacket");
134
+ }
135
+ if (!TypeRPCPacketFactory.isResponsePacket(responseObject)) {
136
+ throw new Error("Response is not a TypeRPCResponsePacket");
137
+ }
138
+ context.inbound = responseObject;
139
+ context = await this.inbound(context);
140
+ if (!context.inbound) {
141
+ throw new Error("Request failed: inbound is empty");
142
+ }
143
+ return context.inbound;
144
+ }
145
+ async handle(connection, request, response) {
146
+ let context = {
147
+ connection: connection,
148
+ inbound: request,
149
+ };
150
+ context = await this.inbound(context);
151
+ if (!context.outbound) {
152
+ return null;
153
+ }
154
+ context = await this.outbound(context);
155
+ if (!context.outbound
156
+ || !TypeRPCPacketFactory.isResponsePacket(context.outbound)) {
157
+ return null;
158
+ }
159
+ response(context.outbound);
160
+ }
161
+ hook(serviceName, methodName, config) {
162
+ if (!this.hooks[serviceName]) {
163
+ this.hooks[serviceName] = {};
164
+ }
165
+ this.hooks[serviceName][methodName] = {
166
+ handler: config.handler,
167
+ bind: config.bind,
168
+ };
169
+ }
170
+ }
171
+ export { TypeRPCHandler, TypeRPCHandlerMiddleware };
172
+ //# sourceMappingURL=handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handler.js","sourceRoot":"","sources":["../src/handler.ts"],"names":[],"mappings":"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"}