| 488 | }) |
| 489 | |
| 490 | const getRpcClientMiddleware = (rpc: Rpc.AnyWithProps): (request: Request<Rpcs>) => Effect.Effect<Request<Rpcs>> => { |
| 491 | const middlewares: Array<RpcMiddleware.RpcMiddlewareClient> = [] |
| 492 | for (const tag of rpc.middlewares.values()) { |
| 493 | const middleware = context.unsafeMap.get(`${tag.key}/Client`) |
| 494 | if (!middleware) continue |
| 495 | middlewares.push(middleware) |
| 496 | } |
| 497 | return middlewares.length === 0 |
| 498 | ? Effect.succeed |
| 499 | : function(request) { |
| 500 | let i = 0 |
| 501 | return Effect.map( |
| 502 | Effect.whileLoop({ |
| 503 | while: () => i < middlewares.length, |
| 504 | body: () => |
| 505 | middlewares[i]({ |
| 506 | rpc, |
| 507 | request |
| 508 | }) as Effect.Effect<Request<Rpcs>>, |
| 509 | step(nextRequest) { |
| 510 | request = nextRequest |
| 511 | i++ |
| 512 | } |
| 513 | }), |
| 514 | () => request |
| 515 | ) |
| 516 | } |
| 517 | } |
| 518 | |
| 519 | const sendInterrupt = ( |
| 520 | requestId: RequestId, |