@mingzey/typedrpc 1.0.2 → 1.1.1

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 (105) hide show
  1. package/README.md +3 -1
  2. package/dist/api.d.ts +2 -2
  3. package/dist/api.d.ts.map +1 -1
  4. package/dist/client.d.ts +2 -2
  5. package/dist/client.d.ts.map +1 -1
  6. package/dist/connection.d.ts +1 -1
  7. package/dist/connection.js +1 -1
  8. package/dist/{connecitons → connections}/basic.d.ts +1 -0
  9. package/dist/connections/basic.d.ts.map +1 -0
  10. package/dist/{connecitons → connections}/basic.js.map +1 -1
  11. package/dist/{connecitons → connections}/http.d.ts.map +1 -1
  12. package/dist/{connecitons → connections}/http.js.map +1 -1
  13. package/dist/{connecitons → connections}/socket.d.ts.map +1 -1
  14. package/dist/{connecitons → connections}/socket.js +10 -10
  15. package/dist/{connecitons → connections}/socket.js.map +1 -1
  16. package/dist/{connecitons → connections}/socketio.d.ts.map +1 -1
  17. package/dist/{connecitons → connections}/socketio.js +10 -10
  18. package/dist/{connecitons → connections}/socketio.js.map +1 -1
  19. package/dist/context.d.ts +1 -1
  20. package/dist/core.d.ts +5 -2
  21. package/dist/core.d.ts.map +1 -1
  22. package/dist/core.js +20 -13
  23. package/dist/core.js.map +1 -1
  24. package/dist/handler.d.ts +4 -7
  25. package/dist/handler.d.ts.map +1 -1
  26. package/dist/handler.js +1 -13
  27. package/dist/handler.js.map +1 -1
  28. package/dist/index.d.ts +11 -7
  29. package/dist/index.d.ts.map +1 -1
  30. package/dist/index.js +11 -7
  31. package/dist/index.js.map +1 -1
  32. package/dist/middleware/middleware.d.ts +7 -0
  33. package/dist/middleware/middleware.d.ts.map +1 -0
  34. package/dist/middleware/middleware.js +10 -0
  35. package/dist/middleware/middleware.js.map +1 -0
  36. package/dist/server.d.ts +7 -9
  37. package/dist/server.d.ts.map +1 -1
  38. package/dist/server.js +3 -1
  39. package/dist/server.js.map +1 -1
  40. package/package.json +29 -29
  41. package/dist/connecitons/basic.d.ts.map +0 -1
  42. package/dist/test/TestCase.d.ts +0 -6
  43. package/dist/test/TestCase.d.ts.map +0 -1
  44. package/dist/test/TestCase.js +0 -5
  45. package/dist/test/TestCase.js.map +0 -1
  46. package/dist/test/authorization.d.ts +0 -8
  47. package/dist/test/authorization.d.ts.map +0 -1
  48. package/dist/test/authorization.js +0 -169
  49. package/dist/test/authorization.js.map +0 -1
  50. package/dist/test/basic.d.ts +0 -7
  51. package/dist/test/basic.d.ts.map +0 -1
  52. package/dist/test/basic.js +0 -35
  53. package/dist/test/basic.js.map +0 -1
  54. package/dist/test/context.d.ts +0 -7
  55. package/dist/test/context.d.ts.map +0 -1
  56. package/dist/test/context.js +0 -55
  57. package/dist/test/context.js.map +0 -1
  58. package/dist/test/expressmix.d.ts +0 -7
  59. package/dist/test/expressmix.d.ts.map +0 -1
  60. package/dist/test/expressmix.js +0 -63
  61. package/dist/test/expressmix.js.map +0 -1
  62. package/dist/test/full-duplex.d.ts +0 -12
  63. package/dist/test/full-duplex.d.ts.map +0 -1
  64. package/dist/test/full-duplex.js +0 -77
  65. package/dist/test/full-duplex.js.map +0 -1
  66. package/dist/test/socket.d.ts +0 -8
  67. package/dist/test/socket.d.ts.map +0 -1
  68. package/dist/test/socket.js +0 -71
  69. package/dist/test/socket.js.map +0 -1
  70. package/dist/test/socketio.d.ts +0 -12
  71. package/dist/test/socketio.d.ts.map +0 -1
  72. package/dist/test/socketio.js +0 -77
  73. package/dist/test/socketio.js.map +0 -1
  74. package/dist/test.d.ts +0 -2
  75. package/dist/test.d.ts.map +0 -1
  76. package/dist/test.js +0 -33
  77. package/dist/test.js.map +0 -1
  78. package/src/api.ts +0 -72
  79. package/src/client.ts +0 -77
  80. package/src/connecitons/basic.ts +0 -49
  81. package/src/connecitons/http.ts +0 -184
  82. package/src/connecitons/socket.ts +0 -247
  83. package/src/connecitons/socketio.ts +0 -200
  84. package/src/connection.ts +0 -10
  85. package/src/context.ts +0 -18
  86. package/src/core.ts +0 -130
  87. package/src/define.ts +0 -63
  88. package/src/handler.ts +0 -202
  89. package/src/index.ts +0 -41
  90. package/src/packet.ts +0 -77
  91. package/src/server.ts +0 -82
  92. package/src/test/TestCase.ts +0 -6
  93. package/src/test/authorization.ts +0 -197
  94. package/src/test/basic.ts +0 -44
  95. package/src/test/context.ts +0 -64
  96. package/src/test/expressmix.ts +0 -81
  97. package/src/test/socket.ts +0 -90
  98. package/src/test/socketio.ts +0 -96
  99. package/src/test.ts +0 -35
  100. package/src/utils.ts +0 -95
  101. /package/dist/{connecitons → connections}/basic.js +0 -0
  102. /package/dist/{connecitons → connections}/http.d.ts +0 -0
  103. /package/dist/{connecitons → connections}/http.js +0 -0
  104. /package/dist/{connecitons → connections}/socket.d.ts +0 -0
  105. /package/dist/{connecitons → connections}/socketio.d.ts +0 -0
package/src/core.ts DELETED
@@ -1,130 +0,0 @@
1
- import type { TypedRPCConnection, TypedRPCConnectionProvider } from "./connecitons/basic.js"
2
- import { TypedRPCConnectionProviderDefault } from "./connection.js"
3
- import { TypedRPCHandler } from "./handler.js"
4
- import { TypedRPCPacketFactory, type TypedRPCRequestPacket, type TypedRPCResponsePacket } from "./packet.js"
5
- import { TypedEmitter } from "./utils.js"
6
-
7
- type TypedRPCCoreConfig = {
8
- connection?:{
9
- provider:TypedRPCConnectionProvider,
10
- }
11
- }
12
-
13
- type TypedRPCCoreEvents = {
14
- connection:(connection:TypedRPCConnection)=>void,
15
- }
16
-
17
- class TypedRPCCore{
18
-
19
- public emitter = new TypedEmitter<TypedRPCCoreEvents>();
20
- private config:TypedRPCCoreConfig;
21
- public handler:TypedRPCHandler;
22
-
23
- constructor(config:TypedRPCCoreConfig){
24
- const defaultConfig:TypedRPCCoreConfig = {
25
- connection:{
26
- provider:new TypedRPCConnectionProviderDefault(),
27
- }
28
- }
29
- this.config = {...defaultConfig,...config};
30
- this.handler = new TypedRPCHandler();
31
- this.init();
32
- }
33
-
34
- private init(){
35
- const provider = this.config.connection?.provider;
36
- if(provider){
37
- provider.emitter.on('connection',(connection) => {
38
- this.emitter.emit('connection',connection);
39
- })
40
- }
41
- this.emitter.on('connection',(connection) => {
42
- // 提供对向请求处理
43
- connection.emitter.on('request',(context) => {
44
- try{
45
- const requestPacket = JSON.parse(context.data);
46
- if(!TypedRPCPacketFactory.isRequestPacket(requestPacket)){
47
- return;
48
- }
49
- this.handler.handle(connection,requestPacket,(responsePacket) => {
50
- if(!responsePacket){
51
- return;
52
- }
53
- context.response(JSON.stringify(responsePacket));
54
- });
55
- }catch(e){
56
- console.error(e);
57
- }
58
- })
59
- })
60
- }
61
-
62
- get hook(){
63
- return this.handler.hook.bind(this.handler);
64
- }
65
-
66
- public async request(config:{
67
- connection:TypedRPCConnection,
68
- serviceName:string,
69
- methodName:string,
70
- args:any[],
71
- }):Promise<{
72
- request:TypedRPCRequestPacket,
73
- response:TypedRPCResponsePacket,
74
- }>{
75
- const requestPacket = TypedRPCPacketFactory.createRequestPacket({
76
- serviceName:config.serviceName,
77
- methodName:config.methodName,
78
- args:config.args,
79
- })
80
- const responsePacket = await this.handler.request(config.connection,requestPacket).catch((e) => {
81
- return TypedRPCPacketFactory.createResponsePacket({
82
- requestId:requestPacket.id,
83
- error:e
84
- })
85
- });
86
- if(!TypedRPCPacketFactory.isResponsePacket(responsePacket)){
87
- throw new Error(`Invalid response packet:\n${JSON.stringify(responsePacket)}`);
88
- }
89
- if(responsePacket.requestId != requestPacket.id){
90
- throw new Error(`Invalid response packet:request id not match\n${JSON.stringify(requestPacket)}\n${JSON.stringify(responsePacket)}`);
91
- }
92
- return {
93
- request:requestPacket,
94
- response:responsePacket,
95
- }
96
- }
97
-
98
- public async listen(config:{
99
- port:number,
100
- hostname?:string,
101
- }):Promise<boolean>{
102
- const provider = this.config.connection?.provider;
103
- if(!provider){
104
- throw new Error("Connection provider not found");
105
- }
106
- return provider.listen(config);
107
- }
108
-
109
- public async close():Promise<boolean>{
110
- const provider = this.config.connection?.provider;
111
- if(!provider){
112
- throw new Error("Connection provider not found");
113
- }
114
- return provider.close();
115
- }
116
-
117
- public async connect(target: string):Promise<TypedRPCConnection>{
118
- const provider = this.config.connection?.provider;
119
- if(!provider){
120
- throw new Error("Connection provider not found");
121
- }
122
- const connection = await provider.connect(target);
123
- return connection;
124
- }
125
-
126
- }
127
-
128
- export {
129
- TypedRPCCore
130
- }
package/src/define.ts DELETED
@@ -1,63 +0,0 @@
1
-
2
- type TypedRPCAPIDefineType = Record<string, Record<string, any>>
3
-
4
- type TypedRPCDefineConfig = {
5
-
6
-
7
-
8
- }
9
-
10
- class TypedRPCAPIDefine<T extends TypedRPCAPIDefineType> {
11
-
12
- static TypedRPCService = Symbol('TypedRPCService');
13
- static TypedRPCMethod = Symbol('TypedRPCMethod');
14
- static TypedRPCMethodList = Symbol('TypedRPCMethodList');
15
-
16
- constructor(config?:TypedRPCAPIDefineType){
17
-
18
- }
19
-
20
- static method(){
21
- return function(target:any, propertyKey:string, descriptor:PropertyDescriptor){
22
- descriptor.value[TypedRPCAPIDefine.TypedRPCMethod] = true;
23
- if(!target[TypedRPCAPIDefine.TypedRPCService]){
24
- target[TypedRPCAPIDefine.TypedRPCService] = true;
25
- }
26
- if(!target[TypedRPCAPIDefine.TypedRPCMethodList]){
27
- target[TypedRPCAPIDefine.TypedRPCMethodList] = new Set<string>();
28
- }
29
- target[TypedRPCAPIDefine.TypedRPCMethodList].add(propertyKey);
30
- }
31
- }
32
-
33
- static isService(target:any){
34
- return target[TypedRPCAPIDefine.TypedRPCService] === true;
35
- }
36
-
37
- static isMethod(method:any){
38
- // 判断是否是方法
39
- if(typeof method !== 'function'){
40
- return false;
41
- }
42
- if(method[TypedRPCAPIDefine.TypedRPCMethod] != true){
43
- return false;
44
- }
45
- return true;
46
- }
47
-
48
- static getMethodList(service:any):string[]{
49
- if(!TypedRPCAPIDefine.isService(service)){
50
- return [];
51
- }
52
- return Array.from(service[TypedRPCAPIDefine.TypedRPCMethodList]);
53
- }
54
- }
55
-
56
-
57
- export type {
58
- TypedRPCAPIDefineType,
59
- }
60
-
61
- export {
62
- TypedRPCAPIDefine,
63
- }
package/src/handler.ts DELETED
@@ -1,202 +0,0 @@
1
-
2
- import type { TypedRPCConnection } from "./connecitons/basic.js";
3
- import { TypedRPCContextSymbol, type TypedRPCContext } from "./context.js";
4
- import { TypedRPCPacketFactory, type TypedRPCPacket, type TypedRPCRequestPacket, type TypedRPCResponsePacket } from "./packet.js";
5
- import { TypedEmitter } from "./utils.js";
6
-
7
-
8
- // interface TypedRPCHandlerMiddleware{
9
- // inbound?:(context:TypedRPCContext) => Promise<TypedRPCContext>;
10
- // outbound?:(context:TypedRPCContext) => Promise<TypedRPCContext>;
11
- // }
12
-
13
- class TypedRPCHandlerMiddleware{
14
- async inbound(context:TypedRPCContext):Promise<TypedRPCContext>{
15
- return context;
16
- }
17
- async outbound(context:TypedRPCContext):Promise<TypedRPCContext>{
18
- return context;
19
- }
20
- }
21
-
22
- type TypedRPCHandlerEvents = {
23
-
24
- }
25
- /**
26
- * 处理所有TypedRPC数据包,管理入站出站
27
- */
28
- class TypedRPCHandler{
29
-
30
- public emitter = new TypedEmitter<TypedRPCHandlerEvents>();
31
-
32
- private middlewares:TypedRPCHandlerMiddleware[] = [];
33
-
34
- private hooks:Record<string,Record<string,{
35
- handler:(...args:any[])=>any,
36
- bind:any,
37
- }>> = {};
38
-
39
- constructor(){
40
- this.use({
41
- inbound:async (context) => {
42
- // Fallback 托底返回错误
43
- if(context.inbound && !context.outbound){
44
- context.outbound = TypedRPCPacketFactory.createResponsePacket({
45
- requestId:context.inbound.id,
46
- error:"service not available or not found",
47
- })
48
- }
49
- return context;
50
- },
51
- outbound:async (context) => {
52
- return context;
53
- },
54
- })
55
- this.use({
56
- inbound:async (context) => {
57
- if(!context.inbound
58
- || !TypedRPCPacketFactory.isRequestPacket(context.inbound)){
59
- return context;
60
- }
61
- // 如果已经有出站包,直接返回
62
- if(context.outbound){
63
- return context;
64
- }
65
- const serviceName = context.inbound.serviceName;
66
- const methodName = context.inbound.methodName;
67
- const args = context.inbound.args;
68
- const hook = this.hooks[serviceName]?.[methodName];
69
- if(!hook){
70
- return context;
71
- }
72
- const result = await hook.handler.call(new Proxy(hook.bind || {},{
73
- get(target,prop){
74
- if(prop === TypedRPCContextSymbol){
75
- return context;
76
- }
77
- return Reflect.get(target,prop);
78
- }
79
- }),...args);
80
- const response = TypedRPCPacketFactory.createResponsePacket({
81
- requestId:context.inbound.id,
82
- result:result,
83
- });
84
- context.outbound = response;
85
- return context;
86
- },
87
- outbound:async (context) => {
88
- return context;
89
- },
90
- })
91
- }
92
-
93
- public use(middleware:TypedRPCHandlerMiddleware){
94
- this.middlewares.push(middleware);
95
- return this;
96
- }
97
-
98
- private async middlewareProcesser(context:TypedRPCContext,index:number,direction:'inbound'|'outbound'):Promise<TypedRPCContext>{
99
- const middleware = this.middlewares[index];
100
- if(!middleware){
101
- return context;
102
- }
103
- // 执行中间件
104
- if(direction == 'inbound'){
105
- if(middleware.inbound){
106
- context = await middleware.inbound(context);
107
- }
108
- index--;
109
- }
110
- if(direction == 'outbound'){
111
- if(middleware.outbound){
112
- context = await middleware.outbound(context);
113
- }
114
- index++;
115
- }
116
- return this.middlewareProcesser(context,index,direction);
117
- }
118
-
119
- public async outbound(context:TypedRPCContext):Promise<TypedRPCContext>{
120
- if(this.middlewares.length <= 0){
121
- return context;
122
- }
123
- return this.middlewareProcesser(context,0,'outbound');
124
- }
125
-
126
- public async inbound(context:TypedRPCContext):Promise<TypedRPCContext>{
127
- if(this.middlewares.length <= 0){
128
- return context;
129
- }
130
- return this.middlewareProcesser(context,this.middlewares.length - 1,'inbound');
131
- }
132
-
133
- public async request(connection:TypedRPCConnection,request:TypedRPCRequestPacket):Promise<TypedRPCPacket>{
134
- let context:TypedRPCContext = {
135
- connection:connection,
136
- outbound:request,
137
- }
138
- context = await this.outbound(context);
139
- if(!context.outbound){
140
- throw new Error("Request failed: outbound is empty");
141
- }
142
- const res = await connection.request(JSON.stringify(context.outbound));
143
- if(!res){
144
- throw new Error("Response is empty");
145
- }
146
- let responseObject:any | null = null;
147
- try{
148
- responseObject = JSON.parse(res);
149
- }catch(e){
150
- throw new Error("Response is not a valid JSON string:"+res);
151
- }
152
- if(!TypedRPCPacketFactory.isPacket(responseObject)){
153
- throw new Error("Response is not a TypedRPCPacket");
154
- }
155
- if(!TypedRPCPacketFactory.isResponsePacket(responseObject)){
156
- throw new Error("Response is not a TypedRPCResponsePacket");
157
- }
158
- context.inbound = responseObject;
159
- context = await this.inbound(context);
160
- if(!context.inbound){
161
- throw new Error("Request failed: inbound is empty");
162
- }
163
- return context.inbound;
164
- }
165
-
166
- public async handle(connection:TypedRPCConnection,request:TypedRPCRequestPacket,response:(packet:TypedRPCResponsePacket) => void){
167
- let context:TypedRPCContext = {
168
- connection:connection,
169
- inbound:request,
170
- }
171
- context = await this.inbound(context);
172
- if(!context.outbound){
173
- return null
174
- }
175
- context = await this.outbound(context);
176
- if(!context.outbound
177
- || !TypedRPCPacketFactory.isResponsePacket(context.outbound)){
178
- return null;
179
- }
180
- response(context.outbound);
181
- }
182
-
183
- hook(serviceName:string,methodName:string,config:{
184
- handler:(...args:any[])=>any,
185
- bind?:any,
186
- }){
187
- if(!this.hooks[serviceName]){
188
- this.hooks[serviceName] = {};
189
- }
190
- this.hooks[serviceName]![methodName] = {
191
- handler:config.handler,
192
- bind:config.bind,
193
- };
194
- }
195
-
196
-
197
- }
198
-
199
- export {
200
- TypedRPCHandler,
201
- TypedRPCHandlerMiddleware
202
- }
package/src/index.ts DELETED
@@ -1,41 +0,0 @@
1
- import { TypedRPCClient } from './client.js';
2
- import { TypedRPCServer } from './server.js';
3
- import { TypedRPCAPIDefine } from './define.js';
4
- import { TypedRPCConnectionDefault, TypedRPCConnectionProviderDefault } from './connection.js';
5
- import { TypedRPCHandlerMiddleware } from './handler.js';
6
- import { TypedRPCPacketFactory } from './packet.js';
7
- import { TypedRPCContextSymbol, type TypedRPCContext, type TypedRPCContextAware } from './context.js';
8
- import { TypedRPCConnection, TypedRPCConnectionProvider } from './connecitons/basic.js';
9
- import { TypedRPCConnectionHTTP, TypedRPCConnectionProviderHTTP } from './connecitons/http.js';
10
- import { TypedRPCConnectionProviderSocket, TypedRPCConnectionSocket } from './connecitons/socket.js';
11
- import { TypedRPCConnectionSocketIO } from './connecitons/socketio.js';
12
- import { TypedRPCConnectionProviderSocketIO } from './connecitons/socketio.js';
13
-
14
- export type {
15
- TypedRPCContext,
16
- TypedRPCContextAware,
17
- }
18
-
19
- export {
20
- TypedRPCClient,
21
- TypedRPCServer,
22
- TypedRPCAPIDefine,
23
-
24
- TypedRPCConnection,
25
- TypedRPCConnectionProvider,
26
-
27
- TypedRPCConnectionDefault,
28
- TypedRPCConnectionProviderDefault,
29
- TypedRPCConnectionHTTP,
30
- TypedRPCConnectionProviderHTTP,
31
- TypedRPCConnectionSocket,
32
- TypedRPCConnectionProviderSocket,
33
- TypedRPCConnectionSocketIO,
34
- TypedRPCConnectionProviderSocketIO,
35
-
36
-
37
- TypedRPCHandlerMiddleware,
38
- TypedRPCPacketFactory,
39
-
40
- TypedRPCContextSymbol,
41
- }
package/src/packet.ts DELETED
@@ -1,77 +0,0 @@
1
- import { IdMaker } from "./utils.js";
2
-
3
- export interface TypedRPCPacket {
4
- id:string;
5
- type:string;
6
- meta?:{[key:string]:any};// 元数据,用于传递一些额外的信息
7
- }
8
-
9
- export interface TypedRPCRequestPacket extends TypedRPCPacket {
10
- type:'request';
11
- serviceName:string;
12
- methodName:string;
13
- args:any[];
14
- }
15
-
16
- export interface TypedRPCResponsePacket extends TypedRPCPacket {
17
- type:'response';
18
- requestId:string;
19
- result?:any;
20
- error?:any;
21
- }
22
-
23
-
24
-
25
- export class TypedRPCPacketFactory {
26
-
27
- static createID():string{
28
- return IdMaker.makeId();
29
- }
30
-
31
- static createRequestPacket(data:{
32
- serviceName:string,
33
- methodName:string,
34
- args:any[]
35
- }):TypedRPCRequestPacket{
36
- return {
37
- id:TypedRPCPacketFactory.createID(),
38
- type:'request',
39
- serviceName:data.serviceName,
40
- methodName:data.methodName,
41
- args:data.args,
42
- }
43
- }
44
-
45
- static createResponsePacket(data:{
46
- requestId:string,
47
- result?:any,
48
- error?:any,
49
- }):TypedRPCResponsePacket{
50
- return {
51
- id:TypedRPCPacketFactory.createID(),
52
- type:'response',
53
- requestId:data.requestId,
54
- result:data.result,
55
- error:data.error,
56
- }
57
- }
58
-
59
- static isPacket(data:any):data is TypedRPCPacket{
60
- return data && typeof data === 'object' && 'id' in data && 'type' in data;
61
- }
62
-
63
- static isRequestPacket(data:any):data is TypedRPCRequestPacket{
64
- if(!TypedRPCPacketFactory.isPacket(data)){
65
- return false;
66
- }
67
- return data.type === 'request';
68
- }
69
-
70
- static isResponsePacket(data:any):data is TypedRPCResponsePacket{
71
- if(!TypedRPCPacketFactory.isPacket(data)){
72
- return false;
73
- }
74
- return data.type === 'response';
75
- }
76
- }
77
-
package/src/server.ts DELETED
@@ -1,82 +0,0 @@
1
-
2
- import { TypedRPCAPI } from "./api.js";
3
- import type { TypedRPCConnection, TypedRPCConnectionProvider } from "./connecitons/basic.js";
4
- import { TypedRPCCore } from "./core.js";
5
- import { TypedRPCAPIDefine } from "./define.js";
6
- import { TypedEmitter, type TypedRPCDefineMethodBody, type TypedRPCDefineMethodName, type TypedRPCDefineServiceInstance, type TypedRPCDefineServiceName, type TypedRPCDefineToTypedRPCAPI } from "./utils.js";
7
-
8
- type TypedRPCServerConfig<T extends TypedRPCAPIDefine<any>,R extends TypedRPCAPIDefine<any>> = {
9
- local?:T,
10
- remote?:R,
11
- connection?:{
12
- provider:TypedRPCConnectionProvider,
13
- }
14
- }
15
-
16
- type TypedRPCServerEvents = {
17
- connection:(connection:TypedRPCConnection)=>void,
18
- }
19
-
20
- class TypedRPCServer<T extends TypedRPCAPIDefine<any>,R extends TypedRPCAPIDefine<any>> {
21
-
22
- public emitter = new TypedEmitter<TypedRPCServerEvents>();
23
- private config:TypedRPCServerConfig<T,R>;
24
- public core:TypedRPCCore;
25
-
26
- constructor(config?:TypedRPCServerConfig<T,R>){
27
- const defaultConfig:TypedRPCServerConfig<T,R> = {
28
-
29
- }
30
- this.config = {...defaultConfig,...config};
31
- this.core = new TypedRPCCore(this.config);
32
- this.core.emitter.on('connection',(connection) => {
33
- this.emitter.emit('connection',connection);
34
- })
35
- }
36
-
37
- hook<S extends TypedRPCDefineServiceName<T>,M extends TypedRPCDefineMethodName<T,S>>(serviceName:S,methodName:M,config:{
38
- handler:TypedRPCDefineMethodBody<T,S,M>,
39
- bind?:any,
40
- }){
41
- return this.core.hook(serviceName,methodName,config);
42
- }
43
-
44
- hookService<S extends TypedRPCDefineServiceName<T>>(serviceName:S,instance:TypedRPCDefineServiceInstance<T,S>){
45
- const methodList = TypedRPCAPIDefine.getMethodList(instance);
46
- for(let methodName of methodList){
47
- this.hook(serviceName,methodName as TypedRPCDefineMethodName<T,S>,{
48
- handler:instance[methodName],
49
- bind:instance,
50
- })
51
- }
52
- }
53
-
54
- get use(){
55
- return this.core.handler.use.bind(this.core.handler);
56
- }
57
-
58
- get listen(){
59
- return this.core.listen.bind(this.core);
60
- }
61
-
62
- get close(){
63
- return this.core.close.bind(this.core);
64
- }
65
-
66
- getAPI(connection:TypedRPCConnection):TypedRPCDefineToTypedRPCAPI<R>{
67
- const api = new TypedRPCAPI<R>();
68
- return api.interface(async (context) => {
69
- return await this.core.request({
70
- connection,
71
- serviceName:context.serviceName,
72
- methodName:context.methodName,
73
- args:context.args,
74
- })
75
- })
76
- }
77
-
78
- }
79
-
80
- export {
81
- TypedRPCServer,
82
- }
@@ -1,6 +0,0 @@
1
- export abstract class TestCase{
2
- abstract name():string;
3
- abstract run():Promise<boolean>;
4
- public async finally():Promise<void>{};
5
- }
6
-