diff --git a/package-lock.json b/package-lock.json index 644621e..be81955 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@athenna/http", - "version": "5.44.0", + "version": "5.45.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@athenna/http", - "version": "5.44.0", + "version": "5.45.0", "license": "MIT", "devDependencies": { "@athenna/artisan": "^5.11.0", diff --git a/package.json b/package.json index a5ffcac..a5c1d53 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@athenna/http", - "version": "5.44.0", + "version": "5.45.0", "description": "The Athenna Http server. Built on top of fastify.", "license": "MIT", "author": "João Lenon ", diff --git a/src/router/RouteResource.ts b/src/router/RouteResource.ts index 5980e6f..bed4de0 100644 --- a/src/router/RouteResource.ts +++ b/src/router/RouteResource.ts @@ -16,7 +16,7 @@ import type { import type { HTTPMethods } from 'fastify' import { Route } from '#src/router/Route' -import { Is, String, Macroable } from '@athenna/common' +import { Is, String, Macroable, Options } from '@athenna/common' export class RouteResource extends Macroable { /** @@ -70,9 +70,35 @@ export class RouteResource extends Macroable { */ public middleware( middleware: MiddlewareRouteType, - prepend?: boolean + options: { + only?: RouteResourceTypes[] + except?: RouteResourceTypes[] + prepend?: boolean + } = {} ): RouteResource { - this.routes.forEach(route => route.middleware(middleware, prepend)) + options = Options.create(options, { + only: [], + except: [], + prepend: false + }) + + if (options.only.length) { + this.filter(options.only).forEach(route => { + route.middleware(middleware, options.prepend) + }) + + return this + } + + if (options.except.length) { + this.filter(options.except, true).forEach(route => { + route.middleware(middleware, options.prepend) + }) + + return this + } + + this.routes.forEach(route => route.middleware(middleware, options.prepend)) return this } @@ -87,9 +113,35 @@ export class RouteResource extends Macroable { */ public interceptor( interceptor: InterceptorRouteType, - prepend?: boolean + options: { + only?: RouteResourceTypes[] + except?: RouteResourceTypes[] + prepend?: boolean + } = {} ): RouteResource { - this.routes.forEach(route => route.interceptor(interceptor, prepend)) + options = Options.create(options, { + only: [], + except: [], + prepend: false + }) + + if (options.only.length) { + this.filter(options.only).forEach(route => { + route.interceptor(interceptor, options.prepend) + }) + + return this + } + + if (options.except.length) { + this.filter(options.except, true).forEach(route => { + route.interceptor(interceptor, options.prepend) + }) + + return this + } + + this.routes.forEach(route => route.interceptor(interceptor, options.prepend)) return this } @@ -104,9 +156,35 @@ export class RouteResource extends Macroable { */ public terminator( terminator: TerminatorRouteType, - prepend?: boolean + options: { + only?: RouteResourceTypes[] + except?: RouteResourceTypes[] + prepend?: boolean + } = {} ): RouteResource { - this.routes.forEach(route => route.terminator(terminator, prepend)) + options = Options.create(options, { + only: [], + except: [], + prepend: false + }) + + if (options.only.length) { + this.filter(options.only).forEach(route => { + route.terminator(terminator, options.prepend) + }) + + return this + } + + if (options.except.length) { + this.filter(options.except, true).forEach(route => { + route.terminator(terminator, options.prepend) + }) + + return this + } + + this.routes.forEach(route => route.terminator(terminator, options.prepend)) return this }