diff --git a/package.json b/package.json index cfce3f2..87cb287 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@extollo/lib", - "version": "0.9.24", + "version": "0.9.25", "description": "The framework library that lifts up your code.", "main": "lib/index.js", "types": "lib/index.d.ts", diff --git a/src/http/routing/Middleware.ts b/src/http/routing/Middleware.ts index 0ad6ae2..8e4dcfe 100644 --- a/src/http/routing/Middleware.ts +++ b/src/http/routing/Middleware.ts @@ -2,7 +2,7 @@ import {Request} from '../lifecycle/Request' import {ResponseObject} from './Route' import {Container} from '../../di' import {CanonicalItemClass} from '../../support/CanonicalReceiver' -import {Awaitable, Either, Left, left, Right, right} from '../../util' +import {Awaitable, Either, ErrorWithContext, Left, left, Right, right} from '../../util' /** * Base class representing a middleware handler that can be applied to routes. @@ -37,12 +37,12 @@ export abstract class Middleware extends CanonicalItemClass { * A type of Middleware that produces a parameter that is passed to later handlers. * Can be used to do common look-ups, &c before routes. */ -export abstract class ParameterMiddleware extends Middleware { +export abstract class ParameterMiddleware extends Middleware { /** Look up the value. */ - public abstract handle(): Awaitable> + public abstract handle(...options: THandlerArgs): Awaitable> apply(): ResponseObject { - return this.handle() + throw new ErrorWithContext('Attempted to apply parameter-providing middleware directly. Try using `parameterMiddleware()` instead.') } /** Alias for an error response return. */ diff --git a/src/http/routing/Route.ts b/src/http/routing/Route.ts index 11d7dc2..a047eef 100644 --- a/src/http/routing/Route.ts +++ b/src/http/routing/Route.ts @@ -310,8 +310,9 @@ export class Route( - handler: ParameterProvidingMiddleware | Instantiable>, + public parameterMiddleware( + handler: ParameterProvidingMiddleware | Instantiable>, + ...handlerArgs: THandlerArgs ): Route> { const route = new Route>( this.method, @@ -321,7 +322,7 @@ export class Route req.make>(handler).handle()) + route.parameters.push(req => req.make>(handler).handle(...handlerArgs)) } route.parameters.push(handler as ParameterProvidingMiddleware)