deno.land / x / lightrpc@1.0.0 / src / server.ts

نووسراو ببینە
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
type RpcRequest = { methodName: string; params: unknown[];};
function isRpcRequest(obj: unknown): obj is RpcRequest { return (typeof obj === "object" && obj !== null && "methodName" in obj && "params" in obj);}
async function doProcess< T extends { [key: string]: (...args: unknown[]) => unknown },>( funcs: T, request: Request,) { const reqJson = await request.json();
if (!isRpcRequest(reqJson)) throw new Error(); if (!Object.keys(funcs).find((k) => k === reqJson.methodName)) { throw new Error(); }
return await funcs[reqJson.methodName].apply(null, reqJson.params);}
async function makeResponse(result: unknown): Promise<Response> { return await Response.json( { result, }, );}
export async function serverFunc< T extends { [key: string]: (...args: any[]) => unknown },>( funcs: T, request: Request, opts?: { middleware: ( request: Request, next: () => Promise<Response>, ) => Promise<Response>; },): Promise<Response> { if (opts?.middleware) { return await opts.middleware(request.clone(), async () => { return makeResponse(await doProcess(funcs, request.clone())); }); }
return makeResponse(await doProcess(funcs, request.clone()));}
lightrpc

Version Info

Tagged at
a year ago