MCPcopy
hub / github.com/Effect-TS/effect / applyMiddleware

Function applyMiddleware

packages/rpc/src/RpcServer.ts:423–464  ·  view source on GitHub ↗
(
  rpc: Rpc.AnyWithProps,
  context: Context.Context<never>,
  clientId: number,
  payload: A,
  headers: Headers.Headers,
  handler: Effect.Effect<A, E, R>
)

Source from the content-addressed store, hash-verified

421})
422
423const applyMiddleware = <A, E, R>(
424 rpc: Rpc.AnyWithProps,
425 context: Context.Context<never>,
426 clientId: number,
427 payload: A,
428 headers: Headers.Headers,
429 handler: Effect.Effect<A, E, R>
430) => {
431 if (rpc.middlewares.size === 0) {
432 return handler
433 }
434
435 const options = {
436 rpc,
437 payload,
438 headers,
439 clientId
440 }
441
442 for (const tag of rpc.middlewares) {
443 if (tag.wrap) {
444 const middleware = Context.unsafeGet(context, tag)
445 handler = middleware({ ...options, next: handler as any })
446 } else if (tag.optional) {
447 const middleware = Context.unsafeGet(context, tag) as RpcMiddleware<any, any>
448 const previous = handler
449 handler = Effect.matchEffect(middleware(options), {
450 onFailure: () => previous,
451 onSuccess: tag.provides !== undefined
452 ? (value) => Effect.provideService(previous, tag.provides as any, value)
453 : (_) => previous
454 })
455 } else {
456 const middleware = Context.unsafeGet(context, tag) as RpcMiddleware<any, any>
457 handler = tag.provides !== undefined
458 ? Effect.provideServiceEffect(handler, tag.provides as any, middleware(options))
459 : Effect.zipRight(middleware(options), handler)
460 }
461 }
462
463 return handler
464}
465
466/**
467 * @since 1.0.0

Callers 1

handleRequestFunction · 0.70

Calls 2

unsafeGetMethod · 0.80
middlewareFunction · 0.70

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…