import {Directive} from './Directive.ts' import {CLIService} from "../service/CLI.service.ts"; import {Injectable} from "../../../di/src/decorator/Injection.ts"; @Injectable() export class UsageDirective extends Directive { public readonly keyword = 'help' public readonly help = 'Display usage information' constructor( protected readonly cli: CLIService, ) { super() } public async invoke() { console.log('') if ( this.cli.show_logo() ) { console.log(this.cli.get_logo()) console.log('') } console.log('Welcome to the Daton CLI. This tool can help you interact with your Daton application.\n') console.log('To get started, specify one of the directives below. You can always specify the --help option to get more information about a directive.') console.log('') const usages = this.cli.get_directives().map((directive: Directive): string[] => { return [directive.keyword, directive.help] }) const pad_length = usages.max(grp => grp[0].length) + 2 const padded_usages = usages.map(grp => { const keyword = grp[0] if ( keyword.length < pad_length ) { const pad = Array(pad_length - keyword.length).fill(' ').join('') return [`${pad}${keyword}`, grp[1]] } return grp }) padded_usages.each(grp => { console.log(`${grp[0]} : ${grp[1]}`) }) console.log('') } }