| 852 | * @category middleware |
| 853 | */ |
| 854 | export class Middleware extends Context.Tag("@effect/platform/HttpApiBuilder/Middleware")< |
| 855 | Middleware, |
| 856 | { |
| 857 | readonly add: (middleware: HttpMiddleware.HttpMiddleware) => Effect.Effect<void> |
| 858 | readonly retrieve: Effect.Effect<HttpMiddleware.HttpMiddleware> |
| 859 | } |
| 860 | >() { |
| 861 | /** |
| 862 | * @since 1.0.0 |
| 863 | */ |
| 864 | static readonly layer = Layer.sync(Middleware, () => { |
| 865 | let middleware: HttpMiddleware.HttpMiddleware = identity |
| 866 | return Middleware.of({ |
| 867 | add: (f) => |
| 868 | Effect.sync(() => { |
| 869 | const prev = middleware |
| 870 | middleware = (app) => f(prev(app)) |
| 871 | }), |
| 872 | retrieve: Effect.sync(() => middleware) |
| 873 | }) |
| 874 | }) |
| 875 | } |
| 876 | |
| 877 | /** |
| 878 | * @since 1.0.0 |