| 20 | readonly [TypeId]: Multiplex.TypeId |
| 21 | |
| 22 | constructor( |
| 23 | readonly apps: ReadonlyArray< |
| 24 | readonly [ |
| 25 | predicate: (request: ServerRequest.HttpServerRequest) => Effect.Effect<boolean, E, R>, |
| 26 | app: App.Default<E, R> |
| 27 | ] |
| 28 | > |
| 29 | ) { |
| 30 | super() |
| 31 | this[TypeId] = TypeId |
| 32 | |
| 33 | let execute: (request: ServerRequest.HttpServerRequest) => App.Default<E | Error.RouteNotFound, R> = (request) => |
| 34 | Effect.fail(new Error.RouteNotFound({ request })) |
| 35 | |
| 36 | for (let i = apps.length - 1; i >= 0; i--) { |
| 37 | const [predicate, app] = apps[i] |
| 38 | const previous = execute |
| 39 | execute = (request) => |
| 40 | Effect.flatMap( |
| 41 | predicate(request), |
| 42 | (match) => match ? app : previous(request) |
| 43 | ) |
| 44 | } |
| 45 | |
| 46 | this.execute = Effect.flatMap(ServerRequest.HttpServerRequest, execute) |
| 47 | } |
| 48 | |
| 49 | execute: App.Default<E | Error.RouteNotFound, R> |
| 50 | |