You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
34 lines
1.0 KiB
34 lines
1.0 KiB
3 years ago
|
import {Directive} from '../Directive'
|
||
|
import {Inject, Injectable} from '../../di'
|
||
|
import {Routing} from '../../service/Routing'
|
||
|
import Table = require('cli-table')
|
||
|
|
||
|
@Injectable()
|
||
|
export class RoutesDirective extends Directive {
|
||
|
@Inject()
|
||
|
protected readonly routing!: Routing
|
||
|
|
||
|
getDescription(): string {
|
||
|
return 'List routes registered in the application'
|
||
|
}
|
||
|
|
||
|
getKeywords(): string | string[] {
|
||
|
return ['routes']
|
||
|
}
|
||
|
|
||
|
async handle(): Promise<void> {
|
||
|
const maxRouteLength = this.routing.getCompiled().max(route => String(route).length)
|
||
|
const maxHandlerLength = this.routing.getCompiled().max(route => route.getDisplayableHandler().length)
|
||
|
const rows = this.routing.getCompiled().map<[string, string]>(route => [String(route), route.getDisplayableHandler()])
|
||
|
|
||
|
const table = new Table({
|
||
|
head: ['Route', 'Handler'],
|
||
|
colWidths: [maxRouteLength + 2, maxHandlerLength + 2],
|
||
|
})
|
||
|
|
||
|
table.push(...rows.toArray())
|
||
|
|
||
|
this.info('\n' + table)
|
||
|
}
|
||
|
}
|