Nonstop Progressive Marxism

    This package has been deprecated

    Author message:

    Not maintained anymore

    @fluent/console
    TypeScript icon, indicating that this package has built-in type declarations

    1.0.8 • Public • Published

    Console

    The command line interface is the basis for application execution. The console operates with commands. That's how the command looks:

    @Command('ping')
    export class PingCommand extends CommandHandler {
      constructor(readonly logger: Logger) {
        super();
      }
     
      async handle() {
        this.logger.information('pong');
      }
    }

    @Command(string) is required. This decorator sets the template and allows you to inject the services on the constructor.

    In order to add the command you need to register it in the application:

    @Main()
    export class Startup {
      configure(app: ApplicationBuilder) {
        app.addCommand(PingCommand);
      }
    }

    Template Definition

    The command template consists of three components: name, arguments and options. These components should be separated by a space.

    Name

    The name is required and must be unique:

    @Command('ping')

    Argument

    Arguments can be several or none.

    Here is an example of an required argument:

    @Command('ping {message}')

    The argument may also be optional and contain default value:

    @Command('ping {message?}')
     
    // and with default value
     
    @Command('ping {message=pong}')

    Option

    Options can be several or none as well. Option always will be optional and can be defined as string or boolean type.

    Here is an example of option:

    @Command('ping {--log}')

    Option can have multi-definition:

    @Command('ping {-l|--log}')

    If the option is not specified then the value will be false;

    That's how the option with value looks:

    @Command('ping {--message=}')
     
    // or with default value
     
    @Command('ping {--message=pong}')

    If the option is not specified then the value will be undefined;

    Option can receive array value:

    // ping --to=foo --to=bar
     
    @Command('ping {--to=*}')

    If the option is not specified then the value will be [];

    Command Handler

    the handler of the commands can receive parets through the decorators: @Argument() and @Option()

    @Command('ping {message=pong} {--log}')
    export class PingCommand extends CommandHandler {
      constructor(readonly logger: Logger) {
        super();
      }
     
      async handle(@Argument() message: string, @Option() log: boolean) {
        if (log) {
          this.logger.information(message);
        }
      }
    }

    In this case, the name of the argument and options are the name of the parameters. They can also be redefined:

    async handle(@Argument('message') msgstring, @Option('--log') logboolean) {
        if (log) {
          this.logger.information(message);
        }
      }

    Command Execution

    In order to execute the command you need to compile the code and enter:

    node main.js "command template"

    Example of PingCommand:

    node main.js ping pong --log

    Output will looks:

    information: pong

    Install

    npm i @fluent/console

    DownloadsWeekly Downloads

    16

    Version

    1.0.8

    License

    MIT

    Last publish

    Collaborators

    • eemeli
    • zbraniecki
    • tatumcreative
    • flod