24 lines
888 B
TypeScript
24 lines
888 B
TypeScript
import {ContainerBlueprint, Instantiable, isInstantiableOf} from '../di'
|
|
import {CommandLine} from './service'
|
|
import {Directive} from './Directive'
|
|
import {logIfDebugging} from '../util'
|
|
|
|
/**
|
|
* Register a class as a command-line Directive.
|
|
* The class must extend Directive.
|
|
* @constructor
|
|
*/
|
|
export const CLIDirective = (): ClassDecorator => {
|
|
return (target) => {
|
|
if ( isInstantiableOf(target, Directive) ) {
|
|
logIfDebugging('extollo.cli.decorators', 'Registering CLIDirective blueprint:', target)
|
|
ContainerBlueprint.getContainerBlueprint()
|
|
.onResolve<CommandLine>(CommandLine, (cli: CommandLine) => {
|
|
cli.registerDirective(target as Instantiable<Directive>)
|
|
})
|
|
} else {
|
|
logIfDebugging('extollo.cli.decorators', 'Skipping CLIDirective blueprint:', target)
|
|
}
|
|
}
|
|
}
|