@@ -8,92 +8,55 @@ A strictly typed json-rpc(2.0) implementation, zero dependency, minimal abstract
88
99> Specification < https://www.jsonrpc.org/specification >
1010
11- ``` ts
12- const methodSet = {
13- upper : (str : string ) => str .toUpperCase (),
14- lower : (str : string ) => str .toLowerCase (),
15- plus : ([a , b ]: [number , number ]) => a + b ,
16- minus : ([a , b ]: [number , number ]) => a - b ,
17- }
18-
19- // initialize all methods with the constructor
20- const server = new JSONRPCServer (methodSet )
21-
22- // or add methods manually
23- const server = new JSONRPCServer <typeof methodSet >()
24- server .setMethod (' upper' , methodSet .upper )
25- server .setMethod (' lower' , methodSet .lower )
26- server .setMethod (' plus' , methodSet .plus )
27- server .setMethod (' minus' , methodSet .minus )
28-
29- // (optional) provide a generic parameter to enable ts check
30- const client = new JSONRPCClient <typeof methodSet >((json ) =>
31- server .process (json )
32- )
33-
34- // request, Notification and batch are always async
35- assertEquals (await client .request (' upper' , ' hello' ), ' HELLO' )
36-
37- assertEquals (
38- await client .batch (
39- client .createRequest (' upper' , ' nihao' ),
40- // Notification does not have response, even when response errors
41- client .createNotification (' upper' ),
42- client .createRequest (' upper' , ' shijie' ),
43- client .createRequest (' plus' , [1 , 1 ]),
44- ),
45- [
46- {
47- status: ' fulfilled' ,
48- value: ' NIHAO' ,
49- },
50- {
51- status: ' fulfilled' ,
52- value: ' SHIJIE' ,
53- },
54- {
55- status: ' fulfilled' ,
56- value: 2 ,
57- },
58- ],
59- )
60- ```
61-
6211Example to use the client
6312
6413``` ts
65- const client = new JSONRPCClient (( json ) =>
14+ const requestForResponse = ( json : string ) =>
6615 fetch (' http://localhost:6800/jsonrpc' , {
6716 method: ' POST' ,
6817 body: json ,
6918 }).then ((res ) => res .text ())
70- )
7119
72- const aria2cMethods = await client .request (' system.listMethods' )
20+ const client = new JSONRPCClient <{
21+ ' aria2.addUri' : (
22+ urls : string [],
23+ options ? : object ,
24+ position ? : number ,
25+ ) => string
26+ ' aria2.remove' : (gid : string ) => string
27+ ' system.listMethods' : () => string []
28+ }>(requestForResponse )
29+
30+ const resultGid: string = await client .request (' aria2.addUri' , [
31+ [' https://example.net/index.html' ],
32+ {},
33+ 0 ,
34+ ])
7335```
7436
7537Example to use the server
7638
7739``` ts
78- const server = new JSONRPCServer ()
40+ const server = new JSONRPCServer ({
41+ upper : (str : string ) => str .toUpperCase (),
42+ lower : (str : string ) => str .toLowerCase (),
43+ plus : ([a , b ]: [number , number ]) => a + b ,
44+ minus : ([a , b ]: [number , number ]) => a - b ,
45+ })
7946
47+ // or:
8048server .setMethod (' trim' , (str : string ) => str .trim ())
8149server .setMethod (' trimStart' , (str : string ) => str .trimStart ())
8250server .setMethod (' trimEnd' , (str : string ) => str .trimEnd ())
8351
8452const httpServer = Deno .serve (
8553 async (request ) => {
86- const url = new URL (request .url )
87- if (url .pathname === ' /jsonrpc' ) {
88- return new Response (
89- // server.process() accept string and returns Promise<string>
90- await server .process (await request .text ()),
91- {
92- headers: { ' content-type' : ' application/json' },
93- },
94- )
95- }
96- return new Response (' 404' , { status: 404 })
54+ // server.handleRequest() accept string and returns Promise<string>
55+ const jsonString = await server .handleRequest (await request .text ())
56+
57+ return new Response (jsonString , {
58+ headers: { ' content-type' : ' application/json' },
59+ })
9760 },
9861)
9962```
0 commit comments