0.0.15 • Published 2 years ago

nestjs-eclih v0.0.15

Weekly downloads
164
License
MIT
Repository
github
Last release
2 years ago

Nestjs Elegant Command Line Interface Hammer

NPM Version NPM Downloads NPM License

nestjs-eclih aims to provide the tools to build powerful CLI with simple(only two) decorators. Nestjs provides the powerful dependency injection system. Commander provides the flexible and concrete CLI tools. nestjs-commander combines their advantanges together!

Commander.js

nestjs-eclih utilized commander.js as CLI driver. All grammers of command and option are excatly same.

Features

Full support of Commander.js

See examples/hello.ts

Partial Command Definition

See examples/provider-of-provider

Command of Command

See examples/provider-of-provider

Example

Create a typescript file hello.ts with following:

import { Module } from "@nestjs/common";
import { CommandProvider, Command, CommanderModule, bootstrapCli } from "nestjs-eclih";

@CommandProvider()
class HelloProvider {

    @Command({
      options: [
        { nameAndArgs: "-n, --name <name>" }
      ]
    })
    hello(options){
        console.log("hello", options.name);
    }
}

@Module({
    imports: [
        CommanderModule
    ],
    providers:[
        HelloProvider
    ]
})
export class AppModule {}


bootstrapCli(AppModule);

Now your first CLI is ready!

$ ts-node hello.ts --help
Usage: hello [options] [command]

Options:
  -h, --help      display help for command

Commands:
  hello [options]
  help [command]  display help for command

$ ts-node hello.ts hello -n husky
hello husky

See more examples in examples

Tutorial

@CommandProvider

@CommandProvider is a class decorator, it accepts null, a string or a CommandConfig A null/undefined (which means just @CommandProvider()) A string infers a CommandConfig and its nameAndArgs is class name.

Examples

@CommanderProvider()
class SomeClass {}

// So anything under this class will be the subcommand of command hello
@CommanderProvider({
  nameAndArgs: "hello",
  description: "hello's description",
  alias: "h"
})
class SomeClass {}

@Command

@Command is a class methold decorator, it accepts either a string or a CommandConfig A string infers a CommandConfig and its nameAndArgs is method name.

Examples

@CommanderProvider()
class SomeClass {

  @Command({
    // Omit nameAndArgs, since by default it is the method name
    options: [
      { nameAndArgs: "-n, --name <name>" }
    ]
  })
  hello(options){
      console.log("hello", options.name);
  }
}

CommandConfig

interface CommandConfig {
  nameAndArgs?: string;
  description?: string;
  options?: OptionConfig[];
  alias?: string;
  aliases?: string[];
}

OptionConfig

interface OptionConfig {
  nameAndArgs: string; 
  description?: string;
  mandatory?: boolean;
  default?: string;
  choices?: string[];
}
0.0.15

2 years ago

1.0.0

3 years ago

0.0.14

3 years ago

0.0.13

4 years ago

0.0.12

4 years ago

0.0.11

4 years ago

0.0.10

4 years ago

0.0.9

4 years ago

0.0.8

4 years ago

0.0.7

4 years ago

0.0.5

4 years ago

0.0.6

4 years ago

0.0.4

4 years ago

0.0.3

4 years ago

0.0.2

4 years ago

0.0.1

4 years ago