Skip to content

Commit d0736ea

Browse files
committed
improvement: improve resource.middleware types
1 parent 136306c commit d0736ea

File tree

3 files changed

+32
-11
lines changed

3 files changed

+32
-11
lines changed

adonis-typings/route.ts

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -216,6 +216,15 @@ declare module '@ioc:Adonis/Core/Route' {
216216
toJSON(): RouteJSON
217217
}
218218

219+
export type ResourceRouteNames =
220+
| 'create'
221+
| 'index'
222+
| 'store'
223+
| 'show'
224+
| 'edit'
225+
| 'update'
226+
| 'destroy'
227+
219228
/**
220229
* Shape of route resource class
221230
*/
@@ -228,12 +237,12 @@ declare module '@ioc:Adonis/Core/Route' {
228237
/**
229238
* Register only given routes and remove others
230239
*/
231-
only(names: string[]): this
240+
only(names: ResourceRouteNames[]): this
232241

233242
/**
234243
* Register all routes, except the one's defined
235244
*/
236-
except(names: string[]): this
245+
except(names: ResourceRouteNames[]): this
237246

238247
/**
239248
* Register api only routes. The `create` and `edit` routes, which
@@ -244,7 +253,13 @@ declare module '@ioc:Adonis/Core/Route' {
244253
/**
245254
* Add middleware to routes inside the resource
246255
*/
247-
middleware(middleware: { [name: string]: MiddlewareHandler | MiddlewareHandler[] }): this
256+
middleware(
257+
middleware: {
258+
[P in ResourceRouteNames]?: MiddlewareHandler | MiddlewareHandler[]
259+
} & {
260+
'*'?: MiddlewareHandler | MiddlewareHandler[]
261+
}
262+
): this
248263

249264
/**
250265
* Define matcher for params inside the resource

npm-audit.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ <h5 class="card-title">
5555
<div class="card">
5656
<div class="card-body">
5757
<h5 class="card-title">
58-
July 23rd 2020, 7:09:43 am
58+
July 23rd 2020, 7:24:11 am
5959
</h5>
6060
<p class="card-text">Last updated</p>
6161
</div>

src/Router/Resource.ts

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import { Macroable } from 'macroable'
1414
import { lodash } from '@poppinss/utils'
1515

1616
import { MiddlewareHandler } from '@ioc:Adonis/Core/Middleware'
17-
import { RouteMatchers, RouteResourceContract } from '@ioc:Adonis/Core/Route'
17+
import { RouteMatchers, RouteResourceContract, ResourceRouteNames } from '@ioc:Adonis/Core/Route'
1818

1919
import { Route } from './Route'
2020

@@ -58,7 +58,7 @@ export class RouteResource extends Macroable implements RouteResourceContract {
5858
/**
5959
* Add a new route for the given pattern, methods and controller action
6060
*/
61-
private makeRoute(pattern: string, methods: string[], action: string) {
61+
private makeRoute(pattern: string, methods: string[], action: ResourceRouteNames) {
6262
const route = new Route(pattern, methods, `${this.controller}.${action}`, this.globalMatchers)
6363

6464
route.as(`${this.resourceName}.${action}`)
@@ -90,7 +90,7 @@ export class RouteResource extends Macroable implements RouteResourceContract {
9090
/**
9191
* Filter the routes based on their partial names
9292
*/
93-
private filter(names: string[], inverse: boolean) {
93+
private filter(names: ResourceRouteNames[], inverse: boolean) {
9494
return this.routes.filter((route) => {
9595
const match = names.find((name) => route.name.endsWith(name))
9696
return inverse ? !match : match
@@ -100,15 +100,15 @@ export class RouteResource extends Macroable implements RouteResourceContract {
100100
/**
101101
* Register only given routes and remove others
102102
*/
103-
public only(names: string[]): this {
103+
public only(names: ResourceRouteNames[]): this {
104104
this.filter(names, true).forEach((route) => (route.deleted = true))
105105
return this
106106
}
107107

108108
/**
109109
* Register all routes, except the one's defined
110110
*/
111-
public except(names: string[]): this {
111+
public except(names: ResourceRouteNames[]): this {
112112
this.filter(names, false).forEach((route) => (route.deleted = true))
113113
return this
114114
}
@@ -118,13 +118,19 @@ export class RouteResource extends Macroable implements RouteResourceContract {
118118
* are meant to show forms will not be registered
119119
*/
120120
public apiOnly(): this {
121-
return this.except(['.create', '.edit'])
121+
return this.except(['create', 'edit'])
122122
}
123123

124124
/**
125125
* Add middleware to routes inside the resource
126126
*/
127-
public middleware(middleware: { [name: string]: MiddlewareHandler | MiddlewareHandler[] }): this {
127+
public middleware(
128+
middleware: {
129+
[P in ResourceRouteNames]?: MiddlewareHandler | MiddlewareHandler[]
130+
} & {
131+
'*'?: MiddlewareHandler | MiddlewareHandler[]
132+
}
133+
): this {
128134
for (let name in middleware) {
129135
if (name === '*') {
130136
this.routes.forEach((one) => one.middleware(middleware[name]))

0 commit comments

Comments
 (0)