From ee218117715740024f3242ca21e9d6dc9816c1c9 Mon Sep 17 00:00:00 2001 From: garrettmills Date: Tue, 5 Apr 2022 10:25:07 -0500 Subject: [PATCH] Add ability to pass arguments to parameter providing middleware --- package.json | 2 +- src/http/routing/Middleware.ts | 8 ++++---- src/http/routing/Route.ts | 7 ++++--- 3 files changed, 9 insertions(+), 8 deletions(-) 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)