import {Directive, OptionDefinition} from '../Directive' import {Inject, Injectable} from '../../di' import {Routing} from '../../service/Routing' import Table = require('cli-table') @Injectable() export class RouteDirective extends Directive { @Inject() protected readonly routing!: Routing getDescription(): string { return 'Get information about a specific route' } getKeywords(): string | string[] { return ['route'] } getOptions(): OptionDefinition[] { return [ '{route} | the path of the route', '--method -m {value} | the HTTP method of the route', ] } async handle(): Promise { const method: string | undefined = this.option('method') ?.toLowerCase() ?.trim() const route: string = this.option('route') .toLowerCase() .trim() /* this.routing.getCompiled() .filter(match => match.getRoute().trim() === route && (!method || match.getMethod() === method)) .tap(matches => { if ( !matches.length ) { this.error('No matching routes found. (Use `./ex routes` to list)') process.exitCode = 1 } }) .each(match => { const pre = match.getPreflight() .map<[string, string]>(ware => [ware.stage, this.handlerToString(ware.handler)]) const post = match.getMiddlewares() .where('stage', '=', 'post') .map<[string, string]>(ware => [ware.stage, this.handlerToString(ware.handler)]) const maxLen = match.getMiddlewares().max(ware => this.handlerToString(ware.handler).length) const table = new Table({ head: ['Stage', 'Handler'], colWidths: [10, Math.max(maxLen, match.getDisplayableHandler().length) + 2], }) table.push(...pre.toArray()) table.push(['handler', match.getDisplayableHandler()]) table.push(...post.toArray()) this.info(`\nRoute: ${match}\n\n${table}`) })*/ } }