( middleware: MiddlewareMap, handler: A )
| 706 | } |
| 707 | |
| 708 | const applyMiddleware = <A extends Effect.Effect<any, any, any>>( |
| 709 | middleware: MiddlewareMap, |
| 710 | handler: A |
| 711 | ) => { |
| 712 | for (const entry of middleware.values()) { |
| 713 | const effect = HttpApiMiddleware.SecurityTypeId in entry.tag ? makeSecurityMiddleware(entry as any) : entry.effect |
| 714 | if (entry.tag.optional) { |
| 715 | const previous = handler |
| 716 | handler = Effect.matchEffect(effect, { |
| 717 | onFailure: () => previous, |
| 718 | onSuccess: entry.tag.provides !== undefined |
| 719 | ? (value) => Effect.provideService(previous, entry.tag.provides as any, value) |
| 720 | : (_) => previous |
| 721 | }) as any |
| 722 | } else { |
| 723 | handler = entry.tag.provides !== undefined |
| 724 | ? Effect.provideServiceEffect(handler, entry.tag.provides as any, effect) as any |
| 725 | : Effect.zipRight(effect, handler) as any |
| 726 | } |
| 727 | } |
| 728 | return handler |
| 729 | } |
| 730 | |
| 731 | const securityMiddlewareCache = globalValue<WeakMap<any, Effect.Effect<any, any, any>>>( |
| 732 | "securityMiddlewareCache", |
no test coverage detected