@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 @@
1
+ {"version":3,"file":"expressmix.js","sourceRoot":"","sources":["../../src/test/expressmix.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,gCAAgC,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC/G,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,MAAM,eAAe,GAAG,IAAI,gBAAgB,EAIxC,CAAC;AAEL,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;AACvC;;;;KAIK;AACL,MAAM,QAAQ,GAAG,IAAI,gCAAgC,CAAC;IAClD,MAAM,EAAC,UAAU;CACpB,CAAC,CAAA;AAEF,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC;IAC7B,KAAK,EAAC,eAAe;IACrB,UAAU,EAAC;QACP,QAAQ,EAAC,QAAQ;KACpB;CACJ,CAAC,CAAA;AACF,MAAM,CAAC,IAAI,CAAC,MAAM,EAAC,KAAK,EAAC;IACrB,OAAO,EAAC,CAAC,CAAC,EAAC,CAAC,EAAC,EAAE,CAAA,CAAC,GAAC,CAAC;CACrB,CAAC,CAAA;AAGF,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;AACtB,GAAG,CAAC,GAAG,CAAC,OAAO,EAAC,CAAC,GAAG,EAAC,GAAG,EAAE,EAAE;IACxB,GAAG,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;AAC3B,CAAC,CAAC,CAAA;AACF;;;GAGG;AACH,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;AAIjB,MAAM,MAAM,GAAG,IAAI,aAAa,CAAC;IAC7B,MAAM,EAAC,eAAe;CACzB,CAAC,CAAA;AAEF,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,QAAQ;IAChD,IAAI;QACA,OAAO,YAAY,CAAC;IACxB,CAAC;IACD,KAAK,CAAC,GAAG;QACL,MAAM,MAAM,CAAC,MAAM,CAAC;YAChB,IAAI,EAAC,IAAI;SACZ,CAAC,CAAC;QACH,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAC,GAAG,CAAC,CAAC,CAAC;QAEtD,QAAQ;QACR,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;QAC1D,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAC,CAAC,CAAC,CAAC;QAClE,IAAG,MAAM,KAAK,CAAC,EAAC,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACtD,CAAC;QAED,YAAY;QACZ,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAC3D,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnC,IAAG,IAAI,KAAK,aAAa,EAAC,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAC;QACtE,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,KAAK,CAAC,OAAO;QAChB,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;CAEJ"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * 测试全双工通信实现双向调用
3
+ * TypeRPC的默认实现是基于http的,全双工必须实现自定义的Provider
4
+ * 这里使用socket.io作为Provider的底层通讯
5
+ */
6
+ import { TestCase } from "./TestCase.js";
7
+ export default class TestFullDuplex extends TestCase {
8
+ name(): string;
9
+ run(): Promise<boolean>;
10
+ finally(): Promise<void>;
11
+ }
12
+ //# sourceMappingURL=full-duplex.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"full-duplex.d.ts","sourceRoot":"","sources":["../../src/test/full-duplex.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AA+CzC,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,QAAQ;IAChD,IAAI,IAAI,MAAM;IAGR,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC;IAmChB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAGxC"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * 测试全双工通信实现双向调用
3
+ * TypeRPC的默认实现是基于http的,全双工必须实现自定义的Provider
4
+ * 这里使用socket.io作为Provider的底层通讯
5
+ */
6
+ import { TestCase } from "./TestCase.js";
7
+ import { TypeRPCAPIDefine, TypeRPCConnectionProviderSocketIO } from "../index.js";
8
+ import { TypeRPCServer } from "../index.js";
9
+ import { TypeRPCClient } from "../index.js";
10
+ const ServerAPIDefine = new TypeRPCAPIDefine;
11
+ const ClientAPIDefine = new TypeRPCAPIDefine;
12
+ const server = new TypeRPCServer({
13
+ local: ServerAPIDefine,
14
+ remote: ClientAPIDefine,
15
+ connection: {
16
+ provider: new TypeRPCConnectionProviderSocketIO(),
17
+ }
18
+ });
19
+ server.hook('math', 'add', {
20
+ handler: (a, b) => {
21
+ return a + b;
22
+ }
23
+ });
24
+ const client = new TypeRPCClient({
25
+ local: ClientAPIDefine,
26
+ remote: ServerAPIDefine,
27
+ connection: {
28
+ provider: new TypeRPCConnectionProviderSocketIO(),
29
+ }
30
+ });
31
+ client.hook('status', 'time', {
32
+ handler: () => {
33
+ return Date.now();
34
+ }
35
+ });
36
+ export default class TestFullDuplex extends TestCase {
37
+ name() {
38
+ return "TestFullDuplex";
39
+ }
40
+ async run() {
41
+ let requestToServer;
42
+ let requestToClient;
43
+ requestToClient = new Promise((resolve) => {
44
+ server.emitter.on('connection', async (connectionToClient) => {
45
+ const apiToClient = server.getAPI(connectionToClient);
46
+ const result = await apiToClient.status.time.call();
47
+ if (result != null) {
48
+ resolve(true);
49
+ }
50
+ else {
51
+ resolve(false);
52
+ }
53
+ });
54
+ });
55
+ await server.listen({
56
+ port: 3698,
57
+ });
58
+ requestToServer = new Promise(async (resolve) => {
59
+ const connectionToServer = await client.connect("localhost:3698");
60
+ const apiToServer = client.getAPI(connectionToServer);
61
+ const result = await apiToServer.math.add.call(1, 2);
62
+ if (result == 3) {
63
+ resolve(true);
64
+ }
65
+ else {
66
+ resolve(false);
67
+ }
68
+ });
69
+ const resultToClient = await requestToClient;
70
+ const resultToServer = await requestToServer;
71
+ return resultToClient && resultToServer;
72
+ }
73
+ async finally() {
74
+ await server.close();
75
+ }
76
+ }
77
+ //# sourceMappingURL=full-duplex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"full-duplex.js","sourceRoot":"","sources":["../../src/test/full-duplex.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { TestCase } from "./TestCase.js";
2
+ declare class TestSocket extends TestCase {
3
+ name(): string;
4
+ run(): Promise<boolean>;
5
+ finally(): Promise<void>;
6
+ }
7
+ export default TestSocket;
8
+ //# sourceMappingURL=socket.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"socket.d.ts","sourceRoot":"","sources":["../../src/test/socket.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AA4CzC,cAAM,UAAW,SAAQ,QAAQ;IAC7B,IAAI,IAAI,MAAM;IAGR,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC;IAmChB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAIxC;AAED,eAAe,UAAU,CAAC"}
@@ -0,0 +1,71 @@
1
+ import { TestCase } from "./TestCase.js";
2
+ import { TypeRPCAPIDefine, TypeRPCClient, TypeRPCConnectionProviderSocket, TypeRPCServer } from "../index.js";
3
+ const ServerAPIDefine = new TypeRPCAPIDefine;
4
+ const ClientAPIDefine = new TypeRPCAPIDefine;
5
+ const server = new TypeRPCServer({
6
+ local: ServerAPIDefine,
7
+ remote: ClientAPIDefine,
8
+ connection: {
9
+ provider: new TypeRPCConnectionProviderSocket(),
10
+ }
11
+ });
12
+ server.hook('math', 'add', {
13
+ handler: (a, b) => {
14
+ return a + b;
15
+ }
16
+ });
17
+ const client = new TypeRPCClient({
18
+ local: ClientAPIDefine,
19
+ remote: ServerAPIDefine,
20
+ connection: {
21
+ provider: new TypeRPCConnectionProviderSocket(),
22
+ }
23
+ });
24
+ client.hook('status', 'time', {
25
+ handler: () => {
26
+ return Date.now();
27
+ }
28
+ });
29
+ class TestSocket extends TestCase {
30
+ name() {
31
+ return 'TestSocket';
32
+ }
33
+ async run() {
34
+ let requestToServer;
35
+ let requestToClient;
36
+ requestToClient = new Promise((resolve) => {
37
+ server.emitter.on('connection', async (connectionToClient) => {
38
+ const apiToClient = server.getAPI(connectionToClient);
39
+ const result = await apiToClient.status.time.call();
40
+ if (result != null) {
41
+ resolve(true);
42
+ }
43
+ else {
44
+ resolve(false);
45
+ }
46
+ });
47
+ });
48
+ await server.listen({
49
+ port: 3698,
50
+ });
51
+ requestToServer = new Promise(async (resolve) => {
52
+ const connectionToServer = await client.connect("localhost:3698");
53
+ const apiToServer = client.getAPI(connectionToServer);
54
+ const result = await apiToServer.math.add.call(1, 2);
55
+ if (result == 3) {
56
+ resolve(true);
57
+ }
58
+ else {
59
+ resolve(false);
60
+ }
61
+ });
62
+ const resultToClient = await requestToClient;
63
+ const resultToServer = await requestToServer;
64
+ return resultToClient && resultToServer;
65
+ }
66
+ async finally() {
67
+ await server.close();
68
+ }
69
+ }
70
+ export default TestSocket;
71
+ //# sourceMappingURL=socket.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"socket.js","sourceRoot":"","sources":["../../src/test/socket.ts"],"names":[],"mappings":"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"}
package/dist/test.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../src/test.ts"],"names":[],"mappings":""}
package/dist/test.js ADDED
@@ -0,0 +1,33 @@
1
+ const testList = [
2
+ import('./test/basic.js'),
3
+ import('./test/context.js'),
4
+ import('./test/full-duplex.js'),
5
+ import('./test/authorization.js'),
6
+ import('./test/expressmix.js'),
7
+ import('./test/socket.js'),
8
+ ];
9
+ async function main() {
10
+ for (let i of testList) {
11
+ let exp = await i;
12
+ let test = new (exp.default)();
13
+ let result = await test.run().catch((e) => {
14
+ console.log(`Test:${test.name()} failed. ${e}`);
15
+ throw e;
16
+ });
17
+ await test.finally();
18
+ if (result) {
19
+ console.log(`\x1b[32m[PASS]\x1b[0m ${test.name()}`);
20
+ }
21
+ else {
22
+ console.log(`\x1b[31m[FAIL]\x1b[0m ${test.name()}`);
23
+ }
24
+ }
25
+ }
26
+ main().then(() => {
27
+ console.log('TypeRPC test finished.');
28
+ }).catch((e) => {
29
+ console.log(`TypeRPC test failed. ${e}`);
30
+ throw e;
31
+ });
32
+ export {};
33
+ //# sourceMappingURL=test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.js","sourceRoot":"","sources":["../src/test.ts"],"names":[],"mappings":"AAEA,MAAM,QAAQ,GAAG;IACb,MAAM,CAAC,iBAAiB,CAAC;IACzB,MAAM,CAAC,mBAAmB,CAAC;IAC3B,MAAM,CAAC,uBAAuB,CAAC;IAC/B,MAAM,CAAC,yBAAyB,CAAC;IACjC,MAAM,CAAC,sBAAsB,CAAC;IAC9B,MAAM,CAAC,kBAAkB,CAAC;CAC7B,CAAA;AAED,KAAK,UAAU,IAAI;IACf,KAAI,IAAI,CAAC,IAAI,QAAQ,EAAC,CAAC;QACnB,IAAI,GAAG,GAAG,MAAM,CAAC,CAAC;QAClB,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAc,CAAC;QAC3C,IAAI,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;YACtC,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,EAAE,CAAC,CAAC;YAChD,MAAM,CAAC,CAAC;QACZ,CAAC,CAAC,CAAA;QACF,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QACrB,IAAG,MAAM,EAAC,CAAC;YACP,OAAO,CAAC,GAAG,CAAC,yBAAyB,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACxD,CAAC;aAAI,CAAC;YACF,OAAO,CAAC,GAAG,CAAC,yBAAyB,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACxD,CAAC;IAEL,CAAC;AACL,CAAC;AAED,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;IACb,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;AAC1C,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;IACX,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,EAAE,CAAC,CAAC;IACzC,MAAM,CAAC,CAAC;AACZ,CAAC,CAAC,CAAA"}
@@ -0,0 +1,40 @@
1
+ import type { TypeRPCAPIDefine } from "./define.js";
2
+ import type { TypeRPCRequestPacket, TypeRPCResponsePacket } from "./packet.js";
3
+ export type FunctionTypeToPromiseFunctionType<T extends (...args: any[]) => any> = T extends (...args: infer P) => Promise<infer R> ? (...args: P) => Promise<R | undefined> : T extends (...args: infer P) => infer R ? (...args: P) => Promise<R | undefined> : never;
4
+ export type TypeRPCDefineToTypeRPCAPI<T extends TypeRPCAPIDefine<any>> = T extends TypeRPCAPIDefine<infer U> ? {
5
+ [S in keyof U]: {
6
+ [M in keyof U[S]]: {
7
+ /** 调用该方法 */
8
+ call: FunctionTypeToPromiseFunctionType<U[S][M]>;
9
+ /** 获取方法id */
10
+ request: (config: {
11
+ args: Parameters<U[S][M]>;
12
+ callback?: (result: ReturnType<U[S][M]>, req: TypeRPCRequestPacket, res: TypeRPCResponsePacket) => void;
13
+ error?: (error: any, req: TypeRPCRequestPacket, res: TypeRPCResponsePacket) => void;
14
+ }) => string;
15
+ id: string;
16
+ /** 获取方法路径 */
17
+ path: string;
18
+ };
19
+ };
20
+ } : never;
21
+ export type TypeRPCDefineServiceName<T extends TypeRPCAPIDefine<any>> = T extends TypeRPCAPIDefine<infer U> ? keyof U & string : never;
22
+ export type TypeRPCDefineMethodName<T extends TypeRPCAPIDefine<any>, S extends TypeRPCDefineServiceName<T>> = T extends TypeRPCAPIDefine<infer U> ? keyof U[S] & string : never;
23
+ export type TypeRPCDefineMethodBody<T extends TypeRPCAPIDefine<any>, S extends TypeRPCDefineServiceName<T>, M extends TypeRPCDefineMethodName<T, S>> = T extends TypeRPCAPIDefine<infer U> ? U[S][M] : never;
24
+ export type TypeRPCDefineServiceInstance<T extends TypeRPCAPIDefine<any>, S extends TypeRPCDefineServiceName<T>> = T extends TypeRPCAPIDefine<infer U> ? U[S] : never;
25
+ export type TypedEmitterEvents = {
26
+ [key: string]: (...args: any[]) => void;
27
+ };
28
+ export declare class TypedEmitter<T extends TypedEmitterEvents> {
29
+ private record;
30
+ on<K extends keyof T>(event: K, callback: T[K]): () => void;
31
+ off<K extends keyof T>(event: K, callback: T[K]): void;
32
+ emit<K extends keyof T>(event: K, ...args: Parameters<T[K]>): void;
33
+ once<K extends keyof T>(event: K, callback: T[K]): void;
34
+ }
35
+ export declare class IdMaker {
36
+ static instance: IdMaker;
37
+ static makeId(): string;
38
+ makeId(): string;
39
+ }
40
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
package/dist/utils.js ADDED
@@ -0,0 +1,46 @@
1
+ export class TypedEmitter {
2
+ record = new Map();
3
+ on(event, callback) {
4
+ if (!this.record.has(event)) {
5
+ this.record.set(event, new Set());
6
+ }
7
+ this.record.get(event).add(callback);
8
+ return () => {
9
+ this.off(event, callback);
10
+ };
11
+ }
12
+ off(event, callback) {
13
+ if (!this.record.has(event)) {
14
+ return;
15
+ }
16
+ this.record.get(event).delete(callback);
17
+ }
18
+ emit(event, ...args) {
19
+ if (!this.record.has(event)) {
20
+ return;
21
+ }
22
+ for (const callback of this.record.get(event)) {
23
+ callback(...args);
24
+ }
25
+ }
26
+ once(event, callback) {
27
+ const wrapper = (...args) => {
28
+ callback(...args);
29
+ this.off(event, wrapper);
30
+ };
31
+ this.on(event, wrapper);
32
+ }
33
+ }
34
+ export class IdMaker {
35
+ static instance = new IdMaker();
36
+ static makeId() {
37
+ return IdMaker.instance.makeId();
38
+ }
39
+ makeId() {
40
+ // 生成12位随机字符串
41
+ const suffix = Math.random().toString(36).substring(2, 10);
42
+ const timestamp = Date.now().toString(36);
43
+ return `${timestamp}${suffix}`;
44
+ }
45
+ }
46
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAyCA,MAAM,OAAO,YAAY;IAEb,MAAM,GAAgC,IAAI,GAAG,EAAE,CAAC;IAExD,EAAE,CAAoB,KAAO,EAAC,QAAa;QACvC,IAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAC,CAAC;YACxB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAC,IAAI,GAAG,EAAE,CAAC,CAAC;QACrC,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACtC,OAAO,GAAG,EAAE;YACR,IAAI,CAAC,GAAG,CAAC,KAAK,EAAC,QAAQ,CAAC,CAAC;QAC7B,CAAC,CAAA;IACL,CAAC;IAED,GAAG,CAAoB,KAAO,EAAC,QAAa;QACxC,IAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAC,CAAC;YACxB,OAAO;QACX,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC7C,CAAC;IAED,IAAI,CAAoB,KAAO,EAAC,GAAG,IAAqB;QACpD,IAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAC,CAAC;YACxB,OAAO;QACX,CAAC;QACD,KAAI,MAAM,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAE,EAAC,CAAC;YAC3C,QAAQ,CAAC,GAAG,IAAI,CAAC,CAAC;QACtB,CAAC;IACL,CAAC;IAED,IAAI,CAAoB,KAAO,EAAC,QAAa;QACzC,MAAM,OAAO,GAAG,CAAC,GAAG,IAAqB,EAAE,EAAE;YACzC,QAAQ,CAAC,GAAG,IAAI,CAAC,CAAC;YAClB,IAAI,CAAC,GAAG,CAAC,KAAK,EAAC,OAAe,CAAC,CAAC;QACpC,CAAC,CAAA;QACD,IAAI,CAAC,EAAE,CAAC,KAAK,EAAC,OAAe,CAAC,CAAC;IACnC,CAAC;CACJ;AAED,MAAM,OAAO,OAAO;IAET,MAAM,CAAC,QAAQ,GAAG,IAAI,OAAO,EAAE,CAAC;IAEvC,MAAM,CAAC,MAAM;QACT,OAAO,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;IACrC,CAAC;IAEM,MAAM;QACT,aAAa;QACb,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAC,EAAE,CAAC,CAAC;QAC1D,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAC1C,OAAO,GAAG,SAAS,GAAG,MAAM,EAAE,CAAC;IACnC,CAAC"}
package/package.json ADDED
@@ -0,0 +1,27 @@
1
+ {
2
+ "name": "@mingzey/typedrpc",
3
+ "version": "1.0.0",
4
+ "description": "TypeScript-based RPC framework with support for multiple connection types including HTTP, Socket, and SocketIO or custom",
5
+ "author": "MingZeY <1552904342@qq.com>",
6
+ "keywords": [
7
+ "rpc","typescript"
8
+ ],
9
+ "license":"MIT",
10
+ "files": [
11
+ "dist/**/*"
12
+ ],
13
+ "main": "dist/index.js",
14
+ "type": "module",
15
+ "types": "dist/index.d.ts",
16
+ "scripts": {
17
+ "test": "tsx src/test.ts",
18
+ "build": "tsc"
19
+ },
20
+ "devDependencies": {
21
+ "@types/express": "^5.0.6",
22
+ "express": "^5.2.1",
23
+ "socket.io": "^4.8.3",
24
+ "socket.io-client": "^4.8.3",
25
+ "tsx": "^4.21.0"
26
+ }
27
+ }